Les joies du code : clin d’oeil pour tout le monde !
Intégralement pris ici dans les joies du code :
Intégralement pris ici dans les joies du code :
Pour ceux que ça rend complètement dingue, comme moi, de :
ceci :
Vous avez une seule envie : jeter votre ordinateur par la fenêtre.
Ah oui, pour la note : Linux ne fait jamais ça.
Allez dans le menu Démarrer et choisissez «Exécuter».
Puis tapez «gpedit.msc
».
Comme ceci :
Là, un programme s’ouvre avec deux choix, choisissez : «Stratégie Ordinateur local».
De là, il y a des dossiers à gauche.
Allez dans :
Comme ceci :
Double cliquez sur «Pas de redémarrage automatique avec des utilisateurs connectés pour les installations planifiées de mises à jour».
Comme ceci :
Choisissez «Activer»
Comme ceci :
Oui, pour moi cette dernière étape est une étape complète, car c’est la libération !
Pour information, je cite la description :
Spécifie que pour terminer une installation planifiée, le service Mises à jour automatiques va attendre le prochain démarrage de l’ordinateur par un utilisateur connecté au lieu de provoquer un démarrage automatique.
Si le statut est configuré à Activé, le service Mises à jour automatiques ne va pas redémarrer un ordinateur automatiquement pendant une installation planifiée si un utilisateur est connecté à l’ordinateur. Il invitera simplement l’utilisateur à redémarrer l’ordinateur.
N’oubliez pas qu’un redémarrage de l’ordinateur est nécessaire pour que les mises à jour soient effectives.
Si le statut est configuré à Désactivé ou Non configuré, le service Mises à jour automatiques va avertir l’utilisateur que l’ordinateur va redémarrer dans 5 minutes pour terminer l’installation.
Remarque : cette stratégie s’applique uniquement lorsque le service Mises à jour automatiques est configuré pour effectuer des installations planifiées de mises à jour. Si la stratégie « Configuration du service Mises à jour automatiques » est désactivée, cette stratégie n’a aucun effet.
Cet article est apparu sur la page principale de Joel on Software le mardi 19 février 2008.
La semaine dernière Microsoft a publié le format des fichiers binaires d’Office. Ces formats apparaissent à première vue à la limite de l’insulte. Rien que le format de fichier pour Excel 97-2003 est un fichier PDF de 349 pages ! Attendez, ce n’est pas tout ! Il y a, dans ce document, quelques commentaires intéréssants :
Chaque collection de tableaux Excel (workbook) est stocké dans un fichier qui est une « compilation d’objets ».
Oui, vous voyez, les fichiers Excel 97-2003 sont des « compositions » de documents OLE, qui sont principalement plusieurs fichiers réunis en un seul. C’est tellement compliqué qu’il vous faut lire au minimum 9 pages de spécifications pour réussir à comprendre ça. Et ces « specs » ressemblent plus à des structures en C (« struct« ) que ce à quoi on s’attend normalement quand on lit des spécifications. C’est en réalité un système complet hiérarchique de fichiers.
Si vous avez commencé à lire ces documents avec l’espoir de passer le week-end à écrire rapidos un code qui importe des documents Word dans votre système de blog, ou qui crée des tableaux Internet qui contiennent vos données de comptes bancaires, formattés comme les feuilles Excel de votre suivi personnel, la complexité et la longueur des spécifications vous ont très certainement guéri de ce violent désir. Et vraisemblablement très rapidement. D’ailleurs un développeur normal concluerait que les formats binaires des applications Office :
Vous auriez tort sur tous les points. En creusant un peu, je vais vous montrer comment ces formats de fichier sont devenus incroyablement compliqués, pourquoi cela ne reflète pas l’idée qu’on imagine de la « mauvaise programmation made in Microsoft », et ce que vous pouvez faire pour contourner ces problèmes.
La première chose à intégrer est que les formats binaires ont été conçus avec des objectifs complètements différents de ce qu’on imagine aujourd’hui (HTML). Voici ces objectifs, vous allez ainsi mieux comprendre pourquoi les spécifications sont aussi longues :
Les spécifications du format de fichier Excel sont remarquablement obscures sur cet enregistrement. Elles précisent juste que l’enregistrement 1904 indique « si le système de date 1904 est utilisé ». Ah. Super. Un exemple classique de spécification complètement inutilisable. si vous être un développeur qui travaille sur le format Excel, et que vous lisez ça dans les spécifications, vous pourriez tout à fait en conclure que Microsoft essaie de cacher quelque chose. En effet, vous n’avez pas assez d’information. Il vous faut plus de connaissances pour comprendre tout cela, mais je suis gentil et je vais vous l’expliquer. Il y a deux types de feuillets Excel : ceux qui se basent sur la date de base qui est le 1/1/1900 (avec un bogue d’années bissextiles volontairement crée afin d’être compatible avec Lotus 1-2-3, mais c’est trop ennuyeux pour en parler ici), et ceux dont la date de base est le 1/1/1904. Excel supporte ces deux types de dates parce que la première version d’Excel pour Mac se servait de la date de base du système d’exploitation (c’était le plus facile), mais Excel pour Windows devait impérativement pouvoir importer les fichiers Lotus 1-2-3, qui se servaient de la date de base au 1/1/1900. Déjà rien que ça devrait vous faire pleurer de consternation. Tout au long de cet histoire affligeante, pas un seul développeur n’a pensé à faire quelque chose de correct, mais bon voilà : vous avez la chose ici, et il vous faut faire avec.Vous trouverez vraiment ces deux types de fichiers, 1900 et 1904, un peu partout, selon que le fichier soit originaire de Windows ou de Mac. Les convertir de manière silencieuse peut éventuellement générer des problème d’intégrité des données, donc Excel ne changera jamais le type pour vous. Si vous voulez parcourir des fichiers Excel il faut faudra savoir gérer les deux. Ce n’est pas juste une simple question de charger ce petit bit à partir du fichier. Cela veut dire aussi que vous allez devoir réécrire entièrement tout l’affichage des dates avec un paramètre supplémentaire pour pouvoir prendre en compte ces deux types de date de base (epochs). Comptez au minimum plusieurs jours.
Bien évidemment, lorsque vous travaillerez sur votre clone Excel, vous découvrirez plein de petits détails subtils sur la gestion des dates. A votre avis, quand est-ce qu’Excel fait la conversion de nombres en dates ? Comment fonctionne le formatage ? Pourquoi est-ce que « 31/1 » est interprété comme le 31 janvier de l’année en cours, alors que « 1/50 » est considéré comme le premier janvier de l’année 1950 ? Toute ces petites choses très subtiles qui concernent les comportements ne peuvent pas être complètement documentées à moins d’écrire un document pratiquement aussi long qui le code source d’Excel lui-même.Et c’est juste le premier enregistrement BIFF, alors qu’il y en a plusieurs centaines que vous devrez gérer. Et pour ne rien vous cacher : celui-ci est l’un des plus simples. La plupart des BIFF feront pleurer de rage un développeur expérimenté.
Une seule conclusion s’impose : c’est très gentil à Microsoft de fournir officiellement un document décrivant le format de leurs fichiers Office, mais ça ne va pas pour autant vous rendre la vie super facile si vous décidez d’écrire quelque chose qui importera ou sauvera sous le format Office. Ces applications sont affreusement complexes et subtiles, pleines de possibilités et vous ne pouvez pas simplement implémenter 20 % des fonctions les plus populaire et espérer que 80 % de votre clientèle sera satisfaire. La spécification du format binaire vous aidera à gagner quelques minutes, tout au plus quelques jours, et vous évitera de faire du reverse engineering. Rien de plus.
OK, je vous ai promis quelques solutions de contournement. La bonne nouvelle c’est que pour la plupart des applications qui veulent lire ou écrire au format Office ne font pas un bon choix. Il y a deux alternatives qu’il vous faut immédiatement étudier : soit laisser Office faire ce travail, soit écrire dans un format plus facile (ce qui ne veut pas dire moins puissant).
Laissez Office faire le boulot pour vous. Word et Excel ont des modèles objet extrêmement complets, disponibles via l’automation COM, qui vous donne la possibilité de faire tout par programmation. Dans plein de cas il est beaucoup plus pertinent de réutiliser le code dans Office plutôt que d’essayer de le ré-implémenter. Voici quelques exemples.
Ce type d’approche pourrait fonctionner si vous avez pour objectif de faire dans vos applications des appels simples et communs à des objets Office. Par exemple :
Dans tous les cas, il y a des façons de dire aux objets Office qu’il ne sont pas en dans une applications interactive, et qu’ils ne doivent pas s’occuper de rafraîchir l’écran et qu’ils ne doivent en aucun cas essayer d’ouvrir une boite de dialogue. Au fait, si vous choisissez cette solution, il y a quelques petites astuces et particularités qu’il faut bien avoir en tête, qui ne sont pas officiellement supportées par Microsoft. Parcourez la base de connaissance de Microsoft sur le sujet avant d’aller plus loin.
Utilisez un format de fichier plus simple pour écrire des fichiers. Si vous devez générer des documents Office par la programmation, il y a presque toujours une façon plus facile et plus pratique que le format binaire Office, que vous pouvez utilisez, et que Word et Excel ouvriront tout de même sans problème, le tout sans rien perdre de vos objectifs.
Pour conclure, à moins que vous ne vouliez créer un concurrent d’Office qui peut lire et écrire tous les fichiers Office parfaitement, auquel cas vous aurez des centaines d’années de travail devant vous, il y a de fortes chances que, quel que soit le problème que vous vouliez résoudre, le plus gros de votre travail soit de lire et d’écrire des fichiers Office.
Ecole des Mines de Gardanne : après cette journée passée de cours voici, à la demande de plusieurs élèves, les cours
N’hésitez pas à lire tout le tutorial et prendre les exemples, ils sont pas mal :
Je partage mon fichier de configuration de vim, si vous avez des suggestions, n’hésitez pas :
set nocompatible set nocompatible filetype plugin on syntax enable set ignorecase set paste set ruler set modeline set showcmd set nowrap set textwidth=0 set wrapmargin=0 let g:leave_my_textwidth_alone=1 set expandtab set autoindent set smartindent set softtabstop=4 set tabstop=4 " Dans un fichier php, lorsqu'on tape {<CR> alors " il fait l'indentation automatique set shiftwidth=4 set number colorscheme desert colorscheme torte colorscheme zellner set vb t_vb= set backup set backupdir=~/.vim/backup set directory=~/.vim/tmp set fileencodings=utf-8,ucs-bom,default,latin1 set scrolloff=5 set scrolloff=15 set undolevels=1000 nmap ;bw :. w! ~/.vimxfer<CR> nmap ;br :r ~/.vimxfer<CR> nmap ;ba :. w! >>~/.vimxfer<CR> " Pour la macro gset, après j'utilise F3 : " ça sert à transformer les trucs du genre : " - @return string le nom ajouté ... " par : " - @return string Nom ajouté ... map <F3> ^3w/ [a-zA-Z]<CR><RIGHT>v/\( \\|'\)<CR>xvU " Macro qui réindente le bloc courant d'une seule tab à droite : map <F4> Vi{9<lt>Vi{> " Tell vim to remember certain things when we exit " '10 : marks will be remembered for up to 10 previously edited files " "100 : will save up to 100 lines for each register " :20 : up to 20 lines of command-line history will be remembered " % : saves and restores the buffer list " n... : where to save the viminfo files set viminfo='10,\"100,:20,%,n~/.viminfo " when we reload, tell vim to restore the cursor to the saved position augroup JumpCursorOnEdit au! autocmd BufReadPost * \ if expand("<afile>:p:h") !=? $TEMP | \ if line("'\"") > 1 && line("'\"") <= line("$") | \ let JumpCursorOnEdit_foo = line("'\"") | \ let b:doopenfold = 1 | \ if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) | \ let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 | \ let b:doopenfold = 2 | \ endif | \ exe JumpCursorOnEdit_foo | \ endif | \ endif " Need to postpone using "zv" until after reading the modelines. autocmd BufWinEnter * \ if exists("b:doopenfold") | \ exe "normal zv" | \ if(b:doopenfold > 1) | \ exe "+".1 | \ endif | \ unlet b:doopenfold | \ endif augroup END set backspace=2 inoremap <silent> <Bar> <Bar><Esc>:call <SID>align()<CR>a function! s:align() let p = '^\s*|\s.*\s|\s*$' if exists(':Tabularize') && getline('.') =~# '^\s*|' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p) let column = strlen(substitute(getline('.')[0:col('.')],'[^|]','','g')) let position = strlen(matchstr(getline('.')[0:col('.')],'.*|\s*\zs.*')) Tabularize/|/l1 normal! 0 call search(repeat('[^|]*|',column).'\s\{-\}'.repeat('.',position),'ce',line('.')) endif endfunction autocmd BufNewFile * silent! 0r ~/.vim/templates/%:e.tpl autocmd BufNewFile *.php call search('w', '', line("w$")) autocmd BufNewFile,BufRead *.vhost.conf set filetype=apache autocmd BufNewFile,BufRead *.json set filetype=yaml let g:snips_author='Olivier Pons' let g:snips_author_email='olivier.pons@gmail.com' " ---------------------------------------- " Smarty syntax highlighter / Rappel il est dans ~/.vim/syntax " Pris ici http://www.vim.org/scripts/script.php?script_id=1798 : autocmd BufRead,BufNewFile *.tpl set filetype=smarty " ---------------------------------------- " Truc de Stackoverflow : si ouverture d'un fichier htm(l) alors " verifier s'il y a {* *} ou {(alphanum) $xx (alphanum)} " et si c'est le cas appliquer la syntaxe Smarty (au dessus) autocmd BufNewFile,BufRead *.htm call s:CheckForSmarty() autocmd BufNewFile,BufRead *.html call s:CheckForSmarty() function! s:CheckForSmarty() for n in range(1, line('$')) "if n > 100 " return "endif let line = getline(n) if line =~ '{.*$\k\+}' || line =~ '{\*.*\*}' set filetype=smarty return endif endfor endfunction " (!) Ultra important sinon *tous* les mappings sont désactivés : set nopaste " Code will highlight trailing whitespace in red: highlight WhitespaceEOL ctermbg=red guibg=red match WhitespaceEOL /\s\+$/ "highlight OverLength ctermbg=red ctermfg=white guibg=#592929 "match OverLength /\%>80v.\+/ set textwidth=80 set colorcolumn=+1 highlight ColorColumn ctermbg=8 highlight Folded term=standout ctermfg=216 guifg=1 guibg=2 ctermbg=8 " Raccourci : F7 = ouvrir le fichier sous le curseur, F8 = ouvrir en vsplit : :nnoremap <F8> :vertical wincmd f<CR> :nnoremap <F7> :wincmd f<CR>
sudo apt-get install ia32-libs sudo dpkg -i --force-all hl5380dnlpr-2.0.3-1.i386.deb sudo dpkg -i --force-all cupswrapperHL5380DN-2.0.4-1.i386.deb olivier@olivier-desktop ~/Bureau # dpkg -l | grep Brother ii cupswrapperhl5380dn 2.0.4-1 Brother HL5380DN CUPS wrapper driver ii hl5380dnlpr 2.0.3-1 Brother HL-5380DN LPR driver
Aller ici:
http://localhost:631/printers
Cliquer sur « Modify Printer » and set following parameters.
- "LPD/LPR Host or Printer" or "AppSocket/HP JetDirect" for Device - lpd://(Your printer's IP address)/binary_p1 for Device URI - Brother for Make/Manufacturer Selection - Your printer's name for Model/Driver Selection
Dans mon cas :
Description : HL5380DN Emplacement : 192.168.1.138 URI du périphérique : lpd://192.168.1.138/binary_p1
Après m’être fait mute pendant les 28 matches à venir parce que j’ai répété un peu trop souvent des paroles de «Knife Party – Internet Friends» (véridique, je vous laisse voir et je vous dirais ce que j’ai dit si vous laissez un message)…
J’ai enfin la preuve que je maîtrise Lux, en comparaison directe avec neuf autre personnes qui avaient… aussi Lux…
😉
J’ai eu l’information ici : http://cygwin.com/cygwin-ug-net/using-utils.html#mount
Faire un mount permanent :
Editer le fichier /etc/fstab
Y ajouter le lien vers le répertoire qui a des espaces :
"C:/mon projet/mon sous projet" /monprojetmonsousprojet ntfs binary,posix=0,user,noumount,auto
Lancer un nouveau shell pour que le "mount" soit fait automatiquement
Voici une petite compilation de sites que j’ai apprécié, il y a plus ou moins longtemps :
Voici ce qu’on peut faire quand on commence à maitriser WordPress :
http://www.studio-output.com/
Utiliser à la main uglifyjs :
http://marijnhaverbeke.nl/uglifyjs