Moi je comprends pas qu'on puisse galérer en Java .
Moi je comprends pas qu'on puisse galérer en Java .
La plaisanterie c'est comique rire à gorge déployée :nativité:
Je vais bientôt partir en stage et j'aimerais bien me renseigner un peu sur le contenu du stage avant.
C'est pourquoi je cherche des bouquins sur Java et le Cloud Computing. Et je voudrais bien des conseils .
Sur le Java je n'ai pas trouvé grand chose à part éventuellement http://www.amazon.fr/Programmer-en-J...7845315&sr=8-3 mais j'ai peur que ça soit trop bas niveau. En anglais je n'ai rien trouvé de super sexy. Je précise que je maitrise déjà pas mal d'autres langages de prog (dont le C++) donc je ne cherche pas un livre qui parte de zéro.
Sur le cloud computing j'ai trouvé ça http://www.amazon.co.uk/Cloud-Comput...ref=pd_sim_b_1 et ça http://www.amazon.co.uk/Cloud-Comput...7857937&sr=8-9. Si vous connaissez un bon bouquin en lien avec Cloud Computing by IBM ça m'intéresse vu que je vais chez eux.
Merci .
Je me méfie des bouquins, j'avais acheté une paire de livre pour le C#. Et en fait, à part des hello wolrd et des 2 + 2 tu trouves pas grand choses. Pourtant mon projet n'était pas de super haut niveau. C'était du scan de film de poney sur les machine d'un réseau en multithread.
Le multithread était a peine abordé, et le listage des machines d'un reseau ainsi que leur partage administratif, encore moins.
Alors je te conseillerais Thinking in java 4th Edition, un peu près 1000 pages en anglais qui font assez bien le tour du truc.
A propos de Sublime Text 2, j'ai fini par me faire un truc pour indenter le code automatiquement.
C'est très vite fait, mais en supposant que l'on a uncrustify d'installé (ou sinon on peu adapter avec n'importe quel outil d'indentation automatique), dans Tools→New Plugin:
Sauvegardé sous uncrustify.pyCode:import sublime, sublime_plugin import subprocess, binascii, os class UncrustifyCommand(sublime_plugin.TextCommand): def run(self, edit): if self.view.file_name() is not None and not self.view.is_dirty(): uncrustify_command = ['uncrustify', '-c', '%s/.uncrustifyrc' % os.getenv('HOME'), '-f', self.view.file_name()] uncrustify_process = subprocess.Popen(uncrustify_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (new_contents, error_output) = uncrustify_process.communicate() whole_region = sublime.Region(0, self.view.size()) old_contents = self.view.substr(whole_region) if old_contents != new_contents: self.view.replace(edit, whole_region, new_contents) def is_enabled(self): return True
Ensuite dans Preferences→Key Bindings - User:
Et un fichier .uncrustifyrc dans le HOME contenant les règles d'indentation.Code:[ { "keys": ["ctrl+shift+f"], "command": "uncrustify" } ]
Et roulez jeunesse, ctrl+shift+f avec un fichier ouvert (qui ne doit pas avoir de modifications et avoir été sauvegardé), et ça indente tout seul. Bon, je pourrais ajouter au moins une vérification sur le type de fichier parce là ça indente n'importe quoi, ou la possibilité d'indenter des fragments de code, mais j'ai la flemme et ça fait déjà une grosse partie de ce que je voulais.
Le plus chiant c'était bien de configurer uncrustify comme il faut...
Dernière modification par rOut ; 31/01/2012 à 10h47.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Oh. Eme. Dji.
http://www.opengl.org/registry/specs/NV/DX_interop2.txt
Une extension de nVidia pour l'interopérabilité entre DirectX et OpenGL
Ça sert strictement à rien mais c'est classeCode:Example: Render to Direct3D 11 backbuffer with openGL. // create D3D11 device, context and swap chain. ID3D11Device *device; ID3D11DeviceContext *devCtx; IDXGISwapChain *swapChain; DXGI_SWAP_CHAIN_DESC scd; <set appropriate swap chain parameters in scd> hr = D3D11CreateDeviceAndSwapChain(NULL, // pAdapter D3D_DRIVER_TYPE_HARDWARE, // DriverType NULL, // Software 0, // Flags (Do not set D3D11_CREATE_DEVICE_SINGLETHREADED) NULL, // pFeatureLevels 0, // FeatureLevels D3D11_SDK_VERSION, // SDKVersion &scd, // pSwapChainDesc &swapChain, // ppSwapChain &device, // ppDevice NULL, // pFeatureLevel &devCtx); // ppImmediateContext // Fetch the swapchain backbuffer ID3D11Texture2D *dxColorbuffer; swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID *)&dxColorbuffer); // Create depth stencil texture ID3D11Texture2D *dxDepthBuffer; D3D11_TEXTURE2D_DESC depthDesc; depthDesc.Usage = D3D11_USAGE_DEFAULT; <set other depthDesc parameters appropriately> // Create Views ID3D11RenderTargetView *colorBufferView; D3D11_RENDER_TARGET_VIEW_DESC rtd; <set rtd parameters appropriately> device->CreateRenderTargetView(dxColorbuffer, &rtd, &colorBufferView); ID3D11DepthStencilView *depthBufferView; D3D11_DEPTH_STENCIL_VIEW_DESC dsd; <set dsd parameters appropriately> device->CreateDepthStencilView(dxDepthBuffer, &dsd, &depthBufferView); // Attach back buffer and depth texture to redertarget for the device. devCtx->OMSetRenderTargets(1, &colorBufferView, depthBufferView); // Register D3D11 device with GL HANDLE gl_handleD3D; gl_handleD3D = wglDXOpenDeviceNV(device); // register the Direct3D color and depth/stencil buffers as // renderbuffers in opengl GLuint gl_names[2]; HANDLE gl_handles[2]; glGenRenderbuffers(2, gl_names); gl_handles[0] = wglDXRegisterObjectNV(gl_handleD3D, dxColorBuffer, gl_names[0], GL_RENDERBUFFER, WGL_ACCESS_READ_WRITE_NV); gl_handles[1] = wglDXRegisterObjectNV(gl_handleD3D, dxDepthBuffer, gl_names[1], GL_RENDERBUFFER, WGL_ACCESS_READ_WRITE_NV); // attach the Direct3D buffers to an FBO glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, gl_names[0]); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, gl_names[1]); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, gl_names[1]); while (!done) { <direct3d renders to the render targets> // lock the render targets for GL access wglDXLockObjectsNVX(handleD3D, 2, gl_handles); <opengl renders to the render targets> // unlock the render targets wglDXUnlockObjectsNVX(handleD3D, 2, gl_handles); <direct3d renders to the render targets and presents the results on the screen> }
Rust fanboy
Il parait que celui ci est une référence (pour mes profs) : Effective Java http://www.amazon.fr/Effective-Java-...8123583&sr=8-2
moi.org
Je vois de plus en plus de projets qui utilisent Git
Ça a quoi de différent exactement par rapport à subversion ou mercurial ?
Rust fanboy
C'est mieux.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Je suis passé à Git aussi il y a peu, et je dois avouer qu'à mon niveau d'utilisation ça n'apporte absolument rien de plus que subversion.
Je l'ai fait juste parce qu'il est mieux intégré à Xcode.
Maintenant j'imagine que si Git est tant acclamé c'est qu'il apporte quelque chose pour des projets d'une certaine taille.
...et ne parlons même pas de ceux (dont je fais partie), qui en sont restés à CVS.
Rust fanboy
Par rapport à mercurial je n'en sais rien, je ne l'ai jamais utilisé, mais je pense que c'est le même principe.
Par rapport à SVN, énormément de fonctionnalités et de souplesse et un changement total dans la manière de travailler. Un point tout con par exemple, tout se fait offline et ne nécessite pas d'avoir le serveur distant. Y compris le checkout d'une branche distante que l'on n'avait pas encore checkouté. Git garde un snapshot des repo distants qu'il met à jour à chaque git fetch, mais en dehors de ça (et des git push), aucune communication ne se fait avec le serveur.
Ensuite, les merge de branches, le rebasing, et la manipulation des commits de manière atomique est franchement méga-puissante.
La possibilité de réécriture de l'historique aussi, et la correction d'un ou plusieurs commits passés.
Et c'est une infime partie des fonctionalités, mais chaque jour je me rend un peu plus compte à quel point Git est utile, flexible et puissant.
Dernière modification par rOut ; 06/02/2012 à 11h33.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
L'intérêt de git et de mercurial, ce sont des gestionnaires de versions décentralisés.
Donc tu n'as pas besoin d'être relié au réseau pour commiter, et ca gêre bien mieux les merges. En gros chacun bosse dans son coin, commite son boulot, et quand il veut il peut "pusher" sur un serveur; c'est beaucoup plus souple. Si jamais un fichier a été modifié, il est assez intelligent
A mon gout, c'est utile pour les "gros" projets, ou si vous etes plusieurs a bosser en meme temps sur les memes fichiers, sinon ca a pas toujours un intérêt.
Mais après, une fois que tu es habitué à git ou mercurial, tu as du a re-passer sur un "vieil" outil centralisé.
edit: tout d'accord avec r0ut. A l'inverse que je connais peu git, mais assez bien Mercurial.
Dernière modification par snipx ; 06/02/2012 à 11h34.
the universal language, this is music
Sinon l'autre intérêt, c'est github. Et c'est un gros intérêt.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Pour le coup j'ai essayé d'utiliser Mercurial pour un petit projet, et ça me fait un peu chier de devoir "commit deux fois", une fois offline et une fois online
Ça m'est déjà arrivé plusieurs fois d'être quelque part avec mon portable, de vouloir bosser un peu sur le projet, et là je remarque que j'ai oublié de push les modifs que j'ai faite avec mon ordi fixe
Dernière modification par Tomaka17 ; 06/02/2012 à 11h52.
Rust fanboy
Et puis Git te permet de créer des branches de test indépendantes.
EN gros, tu peux créer ne nouvelle branche, y tester ce qui est nécessaire, et si ça ne convient pas, discard la branche en deux lignes de commande. TU peux donc te permettre de tester des fonctionalités qui foutent un bordel monstrueux dnas le code sans devoir faire un revert ou quoi que ce soit, c'est assez pratique.
TIens, d'ailleurs, une organisation assez bien foutu avec Git: Git Flow.
Dernière modification par GrandFather ; 06/02/2012 à 16h21.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Ben, sérieux, je ne nie pas que Git soit largement supérieur sur le plan des fonctionnalités à CVS, mais ce dernier suffit amplement pour pas mal de besoins dont les miens (et ceux de mon service de développement). Personne chez nous ne développe chez lui donc on se tamponne des possibilités offline de Git, le client CVS est intégré à Eclipse out-of-the-box, il faut 5 minutes pour paramétrer un serveur CVS avec xinetd, nos cycles de développement sont compatibles avec le système de Trunk/branch de CVS... Pourquoi j'irai m'emmerder ?
Déjà parce que tes modifications ne sont pas commitées de manière cohérente. Chaque fichier a son historique, et un ensemble de modifications impactant 12 fichiers différents correspond à 12 commits distincts sur chaque fichier. Au moins dans SVN on était passés à des modifications cohérentes commitées ensemble, et des modifications non liées commitées séparément, c'était déjà un grand pas en avant.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Alors c'est peut-être dû à notre façon de travailler, qu'on est une petite équipe, au fait qu'on ne travaille pas sur de très grosses applications, ou encore qu'il s'agit d'applications Web MVC dont le fort découplage entre fichiers rend assez peu probable les revert massifs, je ne sais pas trop, mais en tout cas ça ne nous a jamais posé problème.
Dernière modification par GrandFather ; 06/02/2012 à 16h45.
Tiens ça a l'air intéressant, mais j'ai encore jamais fait de branchages exotiques comme ça
Tu peux merger n'importe quelle branche avec n'importe quelle autre ?
Par exemple si je merge une branche "feature" avec une branche "hotfix" (ça n'a aucun sens, c'est juste pour l'hypothèse) il l'accepte ?
Rust fanboy
Tout dépend des outils que tu utilises je pense. Git par défaut s'en branle, une branche est une branche et un merge n'a pas d'oeil. Après les mecs ont développé un wrapper autour de git pour faciliter le suivi de ce workflow : https://github.com/nvie/gitflow, avec des commandes dédiées et je pense que ça t'évite de pouvoir faire ce genre de choses.
---------- Post added at 18h50 ---------- Previous post was at 18h42 ----------
Sinon, Git ne se limite pas à un modèle de workflow, mais permet d'imaginer celui que tu veux. Y compris en gérant plusieurs niveaux de repositories: http://progit.org/book/ch5-1.html
Ou encore comme backend pour gérer le packaging de projets third-party, comme le font les mainteneurs Debian, avec git-buildpackage par exemple http://honk.sigxcpu.org/projects/git...-html/gbp.html
D'autres ont fait des wiki avec Git comme backend (je pense que GitHub gère ça comme ça). Même des gestionnaires de repository git, configurés via un repository git ou sont commités les changements dans la conf : https://github.com/sitaramc/gitolite.
Etc... C'est un véritable couteau suisse extrêmement puissant, pas que pour le développement.
Dernière modification par rOut ; 06/02/2012 à 18h51.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
C'est vraiment bizarre
J'ai fait un commit de ma branchee "master", puis j'ai créé une branche "develop" à partir de ce commit
Ensuite j'ai push la branche "develop" uniquement (et pas la master), et le commit en question n'apparaissait pas sur github
Comment est-il possible que le serveur ne soit pas au courant d'un commit qui sert de base à une branche ?
Rust fanboy
Bin il est surement là ou alors tu n'as pas créé develop à partir de ce commit.
"Dieu est mort" · "Si le téléchargement c’est du vol, Linux c’est de la prostitution."
Entre Git et Mercurial, j'pense que la plus grosse différence est que Git est poussée par Linus Torvald, qui, étant ce qu'il est, pousse le truc à mort pour Unix (donc linux & mac) et se branle joyeusement de Windows. Autrement dit, en dehors d'un Cygwin ou d'un truc intégré à l'IDE (donc via un genre de cygwin), point de salut.