Googleforge
Google Code Hosting. Lihtne issue tracker + subversion. Loodetavasti meeldiv vaheldus pidevalt perses olevale Sourceforgele.
Hmmm - Newsforge räägib samal teemal, sealt paistab vägagi selgelt see välja, et nad üritavad igati vältida SourceForgele varvastele astumist. Huvitav miks? :P Konkurents on alati edasiviiv jõud.
Timestamp converter Firefoxile
Mitte väga ammu tagasi oli mul pidevalt tarvis timestampe inimloetavaks kuupäevaks konvertida. Nüüd on keegi hea inimene selleks kohe Firefoxi extensioni kirjutanud. Ehk on kellegil kasu sellest :)
Timestamp converter
MySQL ainult lasteaedadele
Nii. Tabelis on identifikaator ja saldo. Ma tahan ühe päringuga saada 10 suurima saldo kogusumma. Lihtne ju.
mysql> select sum(saldo) from kirjed where id in (select id from kirjed where saldo > 0 order by saldo desc limit 10);
Ja mida teeb selle peale MySQL?
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
Versiooniks siis 4.1.18. Mis kuradi moodi sellist piiratud SQL serverit üldse kasutada on võimalik? Lihtne subselect ja seegi ei tööta :(
Andmebaasidest
Digg-i kaudu sattusin developer.com artiklile http://www.developer.com/db/article.php/10920_3589351_1.
Ma tahaks sealt 2 asja välja tuua:
I’ve seen a lot of teams go down the rat hole of database independence, writing layers to translate all of their SQL statements to some lowest common denominator dialect that every conceivable database will support, and at the same time giving up on advanced features available in any particular database. The notion seems to be that some client in the future might want to switch to Oracle or DB2 or FoxPro or whatever, so it’s best to be prepared now. On the contrary: when you’re starting out with a new product, pick your storage engine and write to it. If your product is good, people will install the database you specify, and you won’t be wasting untold man-hours supporting “just in case” scenarios that you’ll probably never need.
See on mind igasugu abstraktsioonikihtide juures kõige rohkem häirinud siiani - nii mõnigi aastate ja aastakümnete jooksul arendatud, projekteeritud ja optimeeritud andmebaasiserver on implementeerinud tõsiselt häid võimalusi ja abstraktsioonikiht ei lase sul neid kasutada - pead kõiki toetatavate baaside minimaalse ühisosaga leppima.
Ja teine.
Stored procedures and triggers are a wonderful thing. When you’ve got multiple clients accessing a database, they can be a great way to make sure consistent data processing takes place. But they can also turn into an ugly black box in which application logic hides, unknown to Web and thick client developers, generally unseen and unreviewed. Too often database code isn’t subject to the same standards of design, test, and code review that we demand for the rest of our applications. When you’re tempted to put code in the database, take a moment to ask yourself whether it really belongs there.
. Siin on kah point sees, liiga palju loogikat ei tasu andmebaasifunktsioonidesse panna.
Enne kindlat kuupäeva tehtud failide kustutamine
Tahan kustutada kõik *.prt laiendiga failid, mis on tehtud enne 1. jaanuari 2006.
- $ touch -t 01010000 uusaasta // 01.01.2006 00:00
- $ ls -ld uusaasta // veendu, et faili loomise kuupäev on see mida vaja
- $ find . -name “*.prt” -not -cnewer uusaasta
Iva selles et find ei tunnista täpset kuupäeva argumendina, küll aga oskab ta arvestada mõne teise faili loomise kuupäeva võrdluses - ülalnimetatud käsud seda teevadki.
CLDR
Common Locale Data Repository - iga olemasoleva locale kohta on ära kirjeldatud kuude ja nädalapäevade lühikesed ja pikad nimed, kuupäeva ja kellaaja formaadid, numbriformaadid jms. Kõik kenasti XML-iks vormistatud. Võtke ja kasutage ise leiutamise asemel :)
Ekraani pildistamine
Kunagi kirjutasin ekraanilaskude tegemisest KDE-s. Vahepeal olen aga oma tööarvutiga tagasi Windowsi jõudnud ja vahel on vaja siin ka ekraanipilte teha. Leidsin selleks väga hea vabavara utiliidi, nimega Cropper. Teeb täpselt ühte asja ja teeb seda hästi. Proovi ka.
Failide massiline ümbernimetamine
Kui sul on ühes kataloogis n faili, mis oleks vaja kõik korraga ümber nimetada, siis saab seda teha nii (sisestatud käsud on boldis)
duke@debian:~/kala$ ls -d *
fail1 fail2 fail3
duke@debian:~/kala$ ls -d * | sed ’s/\(.*\)$/mv “&” “\1.jpg”/’ prooviks
mv “fail1″ “fail1.jpg”
mv “fail2″ “fail2.jpg”
mv “fail3″ “fail3.jpg”
duke@debian:~/kala$ ls -d * | sed ’s/\(.*\)$/mv “&” “\1.jpg”/’ | sh
duke@debian:~/kala$ ls -d *
fail1.jpg fail2.jpg fail3.jpg
Olemas. Tõsi, see näide käis failide laiendi andmise kohta. Kui on vaja ümber nimetada, siis on käsurida natuke teistsugune.
duke@debian:~/kala$ ls -d *.bas | sed ’s/\(.*\).bas$/mv “&” “\1.exe”/’ | sh
Programmeerija 11 vabandust
Enimkasutatud vabandused juhuks kui programm/funktsioon/vms ei tööta või töötab valesti.
11. ‘Veider…’
10. ‘See pole kunagi varem midagi sellist teinud’
9. ‘Eile töötas’
8. ‘Sul on vale/vana versioon’
7. ‘Aga minul/minu arvutis töötab’
6. ‘Keegi on mu koodi muutnud’
5. ‘Oled sa kindel et su arvutis viirust pole?’
4. ‘Mina ei tea midagi, mine tüüta teda, tema tegi selle’
3. ‘Ma tegelen sellega’. (Aga tegelikult?)
2. ‘Aga miks sa nii tegid?’
1. ‘Krt küll, ma ju tegin selle korda juba’
Mailman: liikme aadressi vahetamine
Kui sul on vaja n+1 listis korraga üks aadress ära vahetada, siis loe edasi.
Kõigepealt salvesta järgnev kood faili changeaddr.py
from Mailman.Errors import NotAMemberError
def changeaddr(mlist, addr, newaddr):
try:
mlist.changeMemberAddress(addr,newaddr);
mlist.Save()
except NotAMemberError:
print 'Address ',addr,' not found'
Nüüd otsi üles, kus kataloogis asub “withlist” nimeline utiliit. Debianis on see /usr/lib/mailman/bin (/usr/sbin all on symlink sinna) ja kopeeri changeaddr.py samasse kohta (või tee link).
Edasi:
$ withlist -a -l -r changeaddr vana@example.com uus@example.com
Saad hunniku teksti edenemise kohta ja aadressid ongi vahetatud.





Recent Comments