Hmmm, se pare ca emacs nu este în stare să introducă caractere româneşţi pe Windows (deşi chestia just works pe Ubuntu).
Aşa că:
;; sau romanian-prefix
M-x set-input-method romanian-alt-prefix
M-x list-input-methods pentru descrierea acestor "minunate" moduri de introducere a "ă" "ş" "Ţ" etc.
M-x set-coding-system utf-8
asta ca să nu scrie bălării în fişiere.
lucrurile merg bine cu un ntemacs dat jos de pe
http://ntemacs.sourceforge.net/
Sunday, November 18, 2007
Sunday, October 21, 2007
Ferestre transparente, compiz etc.
Am descoperit cu stupoare că doar Compiz reuşeşte să rezolve satisfăcator o mică problemă de gestiunea ferestrelor, şi anume gruparea acestora.
De exemplu, Emacs+speedbar sunt două ferestre. Când fac switch către emacs îmi apare doar emacs, speedbar rămâne undeva în fundal. În compiz (pe Gutsy Gibbon aka Ubuntu 7.10) pot să folosesc ccsm pentru a configura gruparea de ferestre.
Astfel, cu Super-S (Super este mapat în Gnome pe alt stânga) pot să încep să selectez ferestre. După ce am selectat tot, le grupez cu Super-G. Dacă dau Super-S pe un grup deja format mi le selectează pe toate.
Extraordinar de util şi pentru Gimp (care are by default două ferestre, şi fiecare poză suplimentară implică prezenţa unei noi ferestre).
Oare de ce nu există aşa ceva pentru metacity/kwin? Sau, dacă există, de ce nu e documentată chestia?
Încă ceva: cu ccsm se poate activa ring-switcher-ul (pentru schimbat între aplicaţii cu Super-Tab) care este ceva mai capabil decât switcher-ul normal care porneşte la Alt-Tab (pot selecta lucrurile cu mouse-ul, de exemplu.
Începe să nu-mi mai pară rău după timpul consumat cu upgradarea la Ubuntu 7.10. Aaah, şi s-a dat şi drumul la căldura :))
De exemplu, Emacs+speedbar sunt două ferestre. Când fac switch către emacs îmi apare doar emacs, speedbar rămâne undeva în fundal. În compiz (pe Gutsy Gibbon aka Ubuntu 7.10) pot să folosesc ccsm pentru a configura gruparea de ferestre.
Astfel, cu Super-S (Super este mapat în Gnome pe alt stânga) pot să încep să selectez ferestre. După ce am selectat tot, le grupez cu Super-G. Dacă dau Super-S pe un grup deja format mi le selectează pe toate.
Extraordinar de util şi pentru Gimp (care are by default două ferestre, şi fiecare poză suplimentară implică prezenţa unei noi ferestre).
Oare de ce nu există aşa ceva pentru metacity/kwin? Sau, dacă există, de ce nu e documentată chestia?
Încă ceva: cu ccsm se poate activa ring-switcher-ul (pentru schimbat între aplicaţii cu Super-Tab) care este ceva mai capabil decât switcher-ul normal care porneşte la Alt-Tab (pot selecta lucrurile cu mouse-ul, de exemplu.
Începe să nu-mi mai pară rău după timpul consumat cu upgradarea la Ubuntu 7.10. Aaah, şi s-a dat şi drumul la căldura :))
Friday, October 19, 2007
Ubgradeuri
Ieri a ieşit Ubuntu 7.10 cu compizării incluse automat. Adică mi-au buşit Alt-Tab, dar mi-au dat zoom gen Win-scroll wheel şi variaţia opacităţii cu Alt-scroll wheel.
Dacă tot m-am apucat de upgrade-uri, am zis să trec şi la Emacs (acum ca suportă caractere româneşti implicit). Ce mă atrage este indentarea mult mai inteligentă decât la alte editoare. Asta în primul rând şi asta e bine.
Ce e rău: ma atrag şi customizările în Emacs Lisp. Mă atrag atât de tare, încât am reimplementat M-/ ca C-x p cu o grămadă de cod şi mult timp pierdut. Deoarece codul respectiv va fi scos din .emacs, îl pun aici ca să fie (să nu zic că am pierdut timpul aiurea). Da, am învăţat o grămadă despre Emacs Lisp făcând acest exerciţiu inutil.
Da, aştia de la blogspot or să facă praf formatarea. Asta este.
Dacă tot m-am apucat de upgrade-uri, am zis să trec şi la Emacs (acum ca suportă caractere româneşti implicit). Ce mă atrage este indentarea mult mai inteligentă decât la alte editoare. Asta în primul rând şi asta e bine.
Ce e rău: ma atrag şi customizările în Emacs Lisp. Mă atrag atât de tare, încât am reimplementat M-/ ca C-x p cu o grămadă de cod şi mult timp pierdut. Deoarece codul respectiv va fi scos din .emacs, îl pun aici ca să fie (să nu zic că am pierdut timpul aiurea). Da, am învăţat o grămadă despre Emacs Lisp făcând acest exerciţiu inutil.
Da, aştia de la blogspot or să facă praf formatarea. Asta este.
(defun forward-uword ()
"like forward-word, but underscores are considered part of the word"
(interactive)
(if (not (forward-word))
nil
(cond ((looking-at "_+\\w") (forward-uword))
((looking-at "_+") (search-forward-regexp "_+"))
(t t))))
(defun repeat-search-backward-regexp (regexp)
(while (looking-back regexp)
(search-backward-regexp regexp)))
(defun backward-uword ()
"like forward-word, but underscores are considered part of the word"
(interactive)
(if (not (backward-word))
nil
(cond ((looking-back "\\w_+") (backward-uword))
((looking-back "_+") (repeat-search-backward-regexp "_+"))
(t t))))
(defun current-uword ()
"returns the current word with underscores as a string"
(interactive)
(let ((end (point))
(beg (save-excursion
(backward-uword)
(point))))
(buffer-substring-no-properties beg end)))
(defun list-words ()
"list the words in the buffer in a hash table, except the word at point"
(interactive)
(let ((words '())
(wstart 0)
(wend 0))
(save-excursion
(goto-char (point-min))
(while (forward-uword)
(setq wend (point))
(backward-uword)
(setq wstart (point))
(forward-uword)
(setq words (cons (buffer-substring-no-properties wstart wend)
words))))
(let ((result (makehash 'equal))
(curword (current-uword)))
(mapcar (lambda (w) (if (not (string= w curword))
(puthash w nil result)))
words)
(message curword)
result)))
(defun words-complete-symbol ()
"Perform completion on words from current buffer (ripped and
transformed lisp-complete-symbol"
(interactive)
(let ((window (get-buffer-window "*Completions*" 0)))
(if (and (eq last-command this-command)
window (window-live-p window) (window-buffer window)
(buffer-name (window-buffer window)))
;; If this command was repeated, and
;; there's a fresh completion window with a live buffer,
;; and this command is repeated, scroll that window.
(with-current-buffer (window-buffer window)
(if (pos-visible-in-window-p (point-max) window)
(set-window-start window (point-min))
(save-selected-window
(select-window window)
(scroll-up))))
;; Do completion.
(let* ((end (point))
(beg (save-excursion
(backward-uword)
(point)))
(pattern (current-uword))
(words (list-words))
(completion (try-completion pattern words)))
(cond ((eq completion t))
((null completion)
(message "Can't find completion for \"%s\"" pattern)
(ding))
((not (string= pattern completion))
(delete-region beg end)
(insert completion)
;; Don't leave around a completions buffer that's out of date.
(let ((win (get-buffer-window "*Completions*" 0)))
(if win (with-selected-window win (bury-buffer)))))
(t
(let ((minibuf-is-in-use
(eq (minibuffer-window) (selected-window))))
(unless minibuf-is-in-use
(message "Making completion list..."))
(let ((list (all-completions pattern words)))
(setq list (sort list 'string<)) (let (new) (while list (setq new (cons (if (fboundp (intern (car list))) (list (car list) "")
(car list))
new))
(setq list (cdr list)))
(setq list (nreverse new)))
(if (> (length list) 1)
(with-output-to-temp-buffer "*Completions*"
(display-completion-list list pattern))
;; Don't leave around a completions buffer that's
;; out of date.
(let ((win (get-buffer-window "*Completions*" 0)))
(if win (with-selected-window win (bury-buffer))))))
(unless minibuf-is-in-use
(message "Making completion list...%s" "done")))))))))
(global-set-key "\C-xp" 'words-complete-symbol)
Sunday, September 30, 2007
Unelte de testare Open Source
Am găsit zilele astea un site foarte interesant, http://www.opensourcetesting.org/ .
Sunt adunate linkuri către o gramadă de unelte de testare; deocamdată foarte util mi s-a părut data generator.
Sunt adunate linkuri către o gramadă de unelte de testare; deocamdată foarte util mi s-a părut data generator.
Thursday, September 20, 2007
Friday, September 7, 2007
Tuesday, August 28, 2007
Pagini web slinoase şi Greasemonkey
Nu ştiu de la ce vine denumirea de Greasemonkey, dar sigur e o extensie utilă pentru corectat situri mizere.
Cea mai comuna porcărie pe care o fac site-urile cu mult text este să lase coloane foarte late, care sunt greu de citit şi inestetice. Având de citit nişte documentaţie PL/SQL fără formatare am ajuns la exasperare şi am instalat Greasemonkey sperând să găsesc şi un script care să ingusteze paginile, eventual la apăsarea unei taste. Sau măcar un exemplu care să mă lumineze cum să fac aşa ceva.
Căutând pe userscripts.org am găsit "highlight paragraph" care este foarte mişto, şi aduce şi o idee în plus: colorarea în galben a paragrafului curent pentru a facilita citirea. Sper să nu pierd prea mult timp citind bloguri stupide ca să testez chestia asta. Am mai găsit şi "justify text by default" care ar putea fi ajustat să şi îngusteze paragrafele.
Până una alta am instalat "highlight paragraph" şi l-am modificat să-mi şi ingusteze paragraful curent, şi sunt relativ mulţumit de rezultat. Probabil că un pic de studiu ar trebui să mă ajute să produc un script Greasemonkey care să îngusteze tot body-ul la apăsarea unei taste.
Cea mai comuna porcărie pe care o fac site-urile cu mult text este să lase coloane foarte late, care sunt greu de citit şi inestetice. Având de citit nişte documentaţie PL/SQL fără formatare am ajuns la exasperare şi am instalat Greasemonkey sperând să găsesc şi un script care să ingusteze paginile, eventual la apăsarea unei taste. Sau măcar un exemplu care să mă lumineze cum să fac aşa ceva.
Căutând pe userscripts.org am găsit "highlight paragraph" care este foarte mişto, şi aduce şi o idee în plus: colorarea în galben a paragrafului curent pentru a facilita citirea. Sper să nu pierd prea mult timp citind bloguri stupide ca să testez chestia asta. Am mai găsit şi "justify text by default" care ar putea fi ajustat să şi îngusteze paragrafele.
Până una alta am instalat "highlight paragraph" şi l-am modificat să-mi şi ingusteze paragraful curent, şi sunt relativ mulţumit de rezultat. Probabil că un pic de studiu ar trebui să mă ajute să produc un script Greasemonkey care să îngusteze tot body-ul la apăsarea unei taste.
Tuesday, July 10, 2007
WMon nou
Dacă tot am înfipt lucrarea de licenţă în secretariatul catedrei şi am scapat aproape de grija respectivă, am o nouă problemă: Civ4 foloseşte două procesoare sau doar unu?
Ca să rezolv această dilemă am extins wmon cu un grafic mic pentru istoria utilizării resurselor monitorizate (nu pot să afişez şi wmon si Civ4 în acelaşi timp).
Ca să rezolv această dilemă am extins wmon cu un grafic mic pentru istoria utilizării resurselor monitorizate (nu pot să afişez şi wmon si Civ4 în acelaşi timp).
Friday, June 29, 2007
Scala
Probabil sunt absolut inconştient. Deşi nu am timp, m-am apucat să învăţ Scala. Un limbaj foarte expresiv (este cel mai recent rezultat al preocupărilor lui Martin Odersky de a combina stilurile OO şi funcţional) care, fiind construit peste JVM şi complet interfaţabil cu Java (clasele Scala sunt utilizabile direct din Java şi invers) are şi o platformă stabilă şi biblioteci extrem de multe la dispoziţie.
Synpl ar trebui să fie scris în Java ca să poată fi integrat cu un plugin în JDeveloper (şi după aia în SqlDeveloper). Dar ... ce-ar fi să-l scriu în Scala? Deocamdată învăţ şi evaluez limbajul.
Pentru javişti (şi probabil şi pentru dotnetişti), o comparaţie interesantă.
Synpl ar trebui să fie scris în Java ca să poată fi integrat cu un plugin în JDeveloper (şi după aia în SqlDeveloper). Dar ... ce-ar fi să-l scriu în Scala? Deocamdată învăţ şi evaluez limbajul.
Pentru javişti (şi probabil şi pentru dotnetişti), o comparaţie interesantă.
Wednesday, June 27, 2007
WMon !
Clar am muult prea mult timp liber... sau aşa mi se pare.
Am terminat o primă versiune (foarte simplă şi probabil plină de buguri) a unui monitor de procesor şi memorie.
În sfârşit pot să văd şi pe Windows, oricând, cum sunt utilizate cele două nuclee din procesor. Concluzia? Sunt destul de utilizate, e bună ideea cu multicore. E adevărat, am testat wmon cu un nucleu dezactivat şi pentru browsing şi sarcini simple nu simt că-mi lipseşte juma' de CPU :)
Am terminat o primă versiune (foarte simplă şi probabil plină de buguri) a unui monitor de procesor şi memorie.
În sfârşit pot să văd şi pe Windows, oricând, cum sunt utilizate cele două nuclee din procesor. Concluzia? Sunt destul de utilizate, e bună ideea cu multicore. E adevărat, am testat wmon cu un nucleu dezactivat şi pentru browsing şi sarcini simple nu simt că-mi lipseşte juma' de CPU :)
Sunday, June 24, 2007
Monitorizare CPU dual core în Windows
De nevoie mi-am luat Core 2 Duo. Merge super.
Dar nu am pe Windows o unealtă de monitorizare ca lumea aşa cum este Gkrellm pe Linux. Pot să mă uit la Task Manager minimizat, dar nu văd utilizarea împărţită pe procesoare.
De ce mă interesează? Pe dual core sporul de performanţă este datorat utilizării ambelor core-uri (evident). Ca să le utilizeze, un program trebuie să fie multi-threaded. Vreau şi eu să-mi dau seama care sunt într-adevăr multi-threaded şi care nu. Pentru asta îmi trebuie o metodă de a vizualiza încărcarea fiecărui core.
Aşa că m-am apucat să caut un utilitar şi gratis şi bun de Windows care să-mi rezolve problema. N-am găsit.
Deci... hai să scriu eu. După ceva săpături, am dat de următoarele API-uri de monitorizare.
Pentru C/C++ folosind Win32 SDK:
Acu să găsesc şi timp să scriu mica aplicaţie... :(
Dar nu am pe Windows o unealtă de monitorizare ca lumea aşa cum este Gkrellm pe Linux. Pot să mă uit la Task Manager minimizat, dar nu văd utilizarea împărţită pe procesoare.
De ce mă interesează? Pe dual core sporul de performanţă este datorat utilizării ambelor core-uri (evident). Ca să le utilizeze, un program trebuie să fie multi-threaded. Vreau şi eu să-mi dau seama care sunt într-adevăr multi-threaded şi care nu. Pentru asta îmi trebuie o metodă de a vizualiza încărcarea fiecărui core.
Aşa că m-am apucat să caut un utilitar şi gratis şi bun de Windows care să-mi rezolve problema. N-am găsit.
Deci... hai să scriu eu. După ceva săpături, am dat de următoarele API-uri de monitorizare.
Pentru C/C++ folosind Win32 SDK:
- NtQuerySystemInformation este o funcţie nedocumentată, care se poate folosi pentru multe lucruri, inclusiv pentru a obţine (per core/procesor) informaţii despre timpul folosit pentru diverse sarcini. Prelucrând această informaţie se poate determina încărcarea procesorului. Problema aceste funcţii este că este nedocumentată, ar putea să dispară în Vista, iar alternativa sugerată la monitorizarea timpilor (GetSystemTimes) nu ia în considerare fiecare procesor (prezintă un singur rezultat mediat pentru toate procesoarele).
- PDH, adică Performance Data Helper, este un API cu care se pot monitoriza multe lucruri pe windows. Cică e mai portabil, am reuşit şi să-l utilizez destul de uşor (în esenţă se deschide o interogare, se adaugă contoare la interogare - de exemplu, utilizarea procesorului X, se execută interogarea, se citesc valorile, se închide interogarea; dacă se doreşte monitorizare se repetă paşii de execuţie şi citire pe perioada cerută). Singura problemă este specificarea contoarelor - adică nu e chiar banal-banal. Nu găsesc link ca lumea în MSDN, căutaţi după PDH şi Performance Data Helper.
- O pagină interesantă în care mai sunt şi alte variante.
Acu să găsesc şi timp să scriu mica aplicaţie... :(
Tuesday, June 19, 2007
Discuţie interesantă despre "obfuscarea" byte-codului
Discuţia asta mi s-a părut foarte interesantă. Mă gândeam să folosesc obfuscare pentru synpl, dar până la urmă m-am hotărât să renunţ - vezi argumentele neamţului din discuţie.
Mă rog, problema este că în cazul synpl ideea este una foarte banală - oricine ar putea să se apuce. Deh, şi soluţia este una destul de banală. Totuşi cred că mă voi opri undeva la mijloc - fără obfuscare, dar şi fără cod public :D
Mă rog, problema este că în cazul synpl ideea este una foarte banală - oricine ar putea să se apuce. Deh, şi soluţia este una destul de banală. Totuşi cred că mă voi opri undeva la mijloc - fără obfuscare, dar şi fără cod public :D
Wednesday, June 6, 2007
Emacs "modern"
Aflai dintr-un comentariu pe reddit.com ca exista si variante civilizate de emacs (care ştiu Unicode şi au şi antialiasing).
Aşa că... http://www.emacswiki.org/cgi-bin/wiki/XftGnuEmacs
Aşa că... http://www.emacswiki.org/cgi-bin/wiki/XftGnuEmacs
Wednesday, May 16, 2007
Extensie Firefox pentru TEXTAREA
Multe lucruri se editeaza azi intr-un TEXTAREA. Şi când e vorba de progrămele sau fragmente de progrămele faptul ca a) indentarea nu funcţionează, b) nu există syntax highlighting c) etc. este relativ iritant.
Se poate rezolva oarecum... Pentru Firefox exista o extensie, numită "It's All Text". care ataşează fiecărui TEXTAREA un buton. Care apăsat rulează un editor ales de user pentru textul de modificat/creat.
Se poate rezolva oarecum... Pentru Firefox exista o extensie, numită "It's All Text". care ataşează fiecărui TEXTAREA un buton. Care apăsat rulează un editor ales de user pentru textul de modificat/creat.
Wednesday, May 2, 2007
diff vizual pentru unix
Am găsit pe Debian Package of the Day un program foarte util pentru vizualizarea modificărilor/diff-urilor. Este vorba de meld.
Ştie să lucreze cu Subversion, ceea ce este foarte util deoarece nu am reuşit să găsesc o unealtă GUI reuşită pentru svn pe linux. Evident, partea care lipsea şi care nu poate fi compensată de cli este vizualizarea diff-urilor - acum nu mai lipseşte :p
Meld se foloseşte ca diff: "meld fisier_vechi fisier_nou" sau, daca este vorba de un fisier dintr-un working copy de subversion, pur si simplu ca "meld fisier".
Ştie să lucreze cu Subversion, ceea ce este foarte util deoarece nu am reuşit să găsesc o unealtă GUI reuşită pentru svn pe linux. Evident, partea care lipsea şi care nu poate fi compensată de cli este vizualizarea diff-urilor - acum nu mai lipseşte :p
Meld se foloseşte ca diff: "meld fisier_vechi fisier_nou" sau, daca este vorba de un fisier dintr-un working copy de subversion, pur si simplu ca "meld fisier".
Thursday, April 19, 2007
Liste de taskuri
Nu-mi plac notitele post-it. Am nevoie de o modalitate de a organiza listele de sarcini care trebuie rezolvate până la o anumită dată.
Am dat de tadalist.com. Care pare să rezolve elegant problema.
Am dat de tadalist.com. Care pare să rezolve elegant problema.
Friday, March 30, 2007
Wednesday, March 28, 2007
Django şi Vim
Am dat de o pagină foarte interesantă,
http://code.djangoproject.com/wiki/UsingVimWithDjango
pe care sunt descrise nişte scripturi Vim care ajută la lucrul cu Django.
Cele mai interesant chestii mi s-au părut XMLedit şi fişierele de syntax highlighting pentru template-uri Django.
http://code.djangoproject.com/wiki/UsingVimWithDjango
pe care sunt descrise nişte scripturi Vim care ajută la lucrul cu Django.
Cele mai interesant chestii mi s-au părut XMLedit şi fişierele de syntax highlighting pentru template-uri Django.
Tuesday, March 20, 2007
Metaprogramming în Python - pentru incepători
Căutând o modalitate de a specifica repede structuri în Python am căutat pe net o modalitate de a crea automat clasele cu structuri (genul de clasă care arată cam aşa):
Din nou cunoştinţele de Lisp s-au dovedit foarte folositoare (deşi indirect). Căutând pe Google "python defstruct" (defstruct este macro-ul Lisp care creează codul pentru astfel de structuri) am dat de:
http://mail.python.org/pipermail/python-list/2001-October/109140.html
unde un suflet milostiv a publicat un exemplu simplu şi util de metaprogramare în Python.
am modificat puţin codul şi am obţinut:
cu exemplul de utilizare:
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return "(%f, %f)" % (self.x, self.y)
Din nou cunoştinţele de Lisp s-au dovedit foarte folositoare (deşi indirect). Căutând pe Google "python defstruct" (defstruct este macro-ul Lisp care creează codul pentru astfel de structuri) am dat de:
http://mail.python.org/pipermail/python-list/2001-October/109140.html
unde un suflet milostiv a publicat un exemplu simplu şi util de metaprogramare în Python.
am modificat puţin codul şi am obţinut:
def defstruct(name, *fields):
class Struct(object):
def __init__(self, *contents):
if len(contents) != len(self.structfields):
raise TypeError, (
"wrong number of arguments: expected %d %s, got %d" %
(len(self.structfields),
repr(self.structfields),
len(contents)))
for fieldnum in range(len(contents)):
setattr(self,
self.structfields[fieldnum],
contents[fieldnum])
def __repr__(self):
args = ", ".join([str(getattr(self, f)) for f in fields])
return "%s(%s)" % (name, args)
Struct.structfields = fields
return Struct
cu exemplul de utilizare:
if __name__ == "__main__":
Point = defstruct('Point', 'x', 'y')
p1 = Point(1, 20)
p2 = Point(-4, 34)
print p1
print p2
Friday, March 16, 2007
SSH fără parolă de fiecare dată
E agasant să introduc parola de SSH de fiecare dată când mă leg la un server.
Se poate autentificare fără parolă? Normal că se poate. Iaca instrucţiuni:
Se poate autentificare fără parolă? Normal că se poate. Iaca instrucţiuni:
- http://www.csua.berkeley.edu/~ranga/notes/ssh_nopass.html (Cu menţiunea că ssh-keygen ar trebui invocat cu opţiunea -t)
- http://www.astro.caltech.edu/~mbonati/WIRC/manual/DATARED/setting_up_no-password_ssh.html
Monday, March 12, 2007
Detalii Django
Un amănunt care nu e foarte bine documentat în Django: cum să adaug validări custom pentru situl de admin generat automat:
Folosesc pentru *Field argumentul validator_list din constructor. Există validatori predefiniţi în django.core.validators, precum şi documentaţie - se referă la formele vechi, dar nu cred că va dispărea acest mic detaliu aşa uşor.
Am aflat că se poate folosi validator_list aici dintr-o discuţie google groups.
Exemplu de utilizare:
Folosesc pentru *Field argumentul validator_list din constructor. Există validatori predefiniţi în django.core.validators, precum şi documentaţie - se referă la formele vechi, dar nu cred că va dispărea acest mic detaliu aşa uşor.
Am aflat că se poate folosi validator_list aici dintr-o discuţie google groups.
Exemplu de utilizare:
from django.db import models
from django.core.validators import isUpperCase
# Create your models here.
# adresa hotelului sau amploiatului
class Address(models.Model):
country = models.CharField(maxlength = 150,
validator_list = [isUpperCase])
town = models.CharField(maxlength = 150)
street = models.CharField(maxlength = 150)
number = models.CharField(maxlength = 50)
def __str__(self):
return "%s, %s (%s, %s)" % \
(self.street, self.number, self.town, self.country)
class Meta:
verbose_name_plural = "Adresses"
class Admin:
pass
How To Design a Good API & Why It Matters
http://www.infoq.com/presentations/effective-api-design
Prezentare foarte mişto a lui Joshua Bloch (ex-Sun, acum la Google) despre cum se "gândeşte" un API.
Tema este mai larg-aplicabilă decât pare la prima vedere, pentru că de fapt de fiecare dată când scriem metodele publice ale unei clase proiectăm un API. De fiecare dată când scriem un grup de clase care se vor folosi împreună proiectăm un API.
"Effective Java", tot a lui Joshua Bloch, este scrisă din aceeaşi perspectivă. Aceeaşi carte.
Prezentare foarte mişto a lui Joshua Bloch (ex-Sun, acum la Google) despre cum se "gândeşte" un API.
Tema este mai larg-aplicabilă decât pare la prima vedere, pentru că de fapt de fiecare dată când scriem metodele publice ale unei clase proiectăm un API. De fiecare dată când scriem un grup de clase care se vor folosi împreună proiectăm un API.
"Effective Java", tot a lui Joshua Bloch, este scrisă din aceeaşi perspectivă. Aceeaşi carte.
Saturday, March 10, 2007
Atenţie, pare să dea dependenţă
http://www.rfshq.com/forum/games/virus2.swf
Un joculeţ Flash foarte simpatic - şi foarte simplu. Uimitor câte idei simple nu au fost puse în practică - şi mie tot nu prea îmi vine niciuna :)
Un joculeţ Flash foarte simpatic - şi foarte simplu. Uimitor câte idei simple nu au fost puse în practică - şi mie tot nu prea îmi vine niciuna :)
Thursday, March 8, 2007
Komodo Edit
Am dat pe programming.reddit.com de un articol mişto despre komodo edit - cred că-l voi folosi pentru aplicaţiile Django. Ştie completare de cod pentru Python ceea ce este interesant, dacă nu chiar super :)
Are şi variantă de Linux, şi o emulare pentru keybindings-urile din vi - nu mi se mai întâmplă ca în Visual Studio sa-mi apara un şir lung de "j"-uri în editor şi să nu ştiu de ce...
Are şi variantă de Linux, şi o emulare pentru keybindings-urile din vi - nu mi se mai întâmplă ca în Visual Studio sa-mi apara un şir lung de "j"-uri în editor şi să nu ştiu de ce...
Wednesday, March 7, 2007
Cum se poate transforma Caps-Lock într-o a treia tasta Control?
http://winadmin.forret.com/registry/wanocaps/
http://winadmin.forret.com/registry/wanocaps/
Ce instalez peste un XP proaspăt
Lucruri deocamdată valabile oriunde:
Şi pentru şcoală, deci temporar:
- Vim
- Antivir
- Zone Alarm
- uTorrent
- Launchy
- Billy (eventual şi alte chestii de la sheepfriends.com)
- Firefox
- Tortoise SVN
- Total Commander
- Irfanview
- OpenOffice
- Putty
Şi pentru şcoală, deci temporar:
- Visual Studio .NET (MSDNAA)
- Oracle (Blearh)
Subscribe to:
Posts (Atom)