Archive for category Craftsmanship
rsync: cannot delete non-empty directory
Posted by wireman in Craftsmanship on October 19th, 2009
A p (modifier) indicates that an (include/exclude/...) rule is perishable, meaning that it is ignored in directories that are being deleted. (из man rsync)
Има няколко причини, поради които rsync може да ви върне следната грешка:
cannot delete non-empty directory: some_dir_name
- Ако сте използвали
-bили--backup. Тогаваrsyncне трие нищо отdestination. За да модифицирате това поведение, вижте описанието на--backupвman rsync. - Ако ползвате
--excludeправила. Тези правила “предпазват” файлове вdestinationот изтриване, от което следва, че папка, изтрита вsourceняма да може да бъде изтрита вdestination, ако съдържа “предпазени” от правилата файлове, дори да сте задали--delete --force. Решението е да дефиниратеexclude-правилото като perishable.Например, ако синхронизирате директориите
sourceиdestination, които са подsubversion-контрол сrsync, можете да ползвате следната команда:rsync -rv --delete --force --filter 'exclude,p .svn' 'source' 'destination'
В случя избягваме синхронизирането на системните за
subversionдиректории.svn, като въпреки това твърдим, че правилото, “защитаващо”.svn-директориите от прехвърляне, не важи в директории, които подлежат на изтриване (т.е. правилото е perishable).
За повече информация, вижте секцията FILTER RULES и потърсете вътре за “perishable” в man rsync.
PHP-функции any() и all()
Posted by wireman in Craftsmanship, General on August 13th, 2009
Потрябва ми удобството на тези две хубави функции, all() и any(), каквито например ги има в Пайтън. Въпреки богатата база от функции в PHP, бързото ми търсене не показа нищо подобно, което да е вградено, затова:
function all() {
$args = func_get_args();
if (count($args) == 1 && is_array($args[0])) {
return call_user_func_array(__FUNCTION__, $args[0]);
}
foreach ($args as $value) {
if (!$value) {
return false;
}
}
return count($args) > 0;
}
Функцията any() е почти аналогична. Ако ви интересува и нейната пълна реализация, както и нещо като unit-тест, вижте пълния текст на този пост.
Чакалене на IP/host за наличие на пинг
Posted by wireman in Craftsmanship, General on August 12th, 2009
Съвсем скоро (да кажем, преди 10 минути) ми се наложи да чакам да се появи пинг към дадено IP. За целта си написах shell-скриптчето, показано по-долу, което да ми “каже” нещо, в момента, в който се появи ping към съответното IP. Някой може да го намери за полезно:
dimitardimitrov@Midori:~$ cat monitor-host.sh #!/bin/bash if [ "$#" -lt 1 ] then echo "Usage: $0 host.to.monitor" exit 1 fi host="$1" while true do ping -c 1 $host if [ "$?" -eq "0" ] then say The host is now online! I repeat: "The host is now online!". exit fi sleep 1 done
За да работи, е необходимо да имате команда say, която да прави каквото се очаква :) Може да бъде заменена и с нещо друго, разбира се. Чувствайте се свободни да ползвате това парче “код” както искате.
Pygments
Posted by wireman in Craftsmanship on March 3rd, 2008
Pygments е Python-пакет, който ви дава удобен интерфейс (под формата на библиотека или на command-line инструмент) да оцветявате парчета код (всъщност не само код), като изходът може да бъде в HTML, RTF, LaTeX и други формати. Вижте страничката с примери. Дори Brainf*ck не успява да избяга.
FreeBSD 7.0-RELEASE
Posted by wireman in Craftsmanship on March 1st, 2008
Обявена е вече стабилната версия 7.0 на FreeBSD, подходяща за production use. Някои от новостите:
- Много голям процент подобрение на производителността при многоядрените/многопроцесорни системи
- Експериментална поддръжка на файловата система ZFS
- Нов метод за заделяне на памет в User-space – jemalloc
- freebsd-update и много, много други.
Citations
Posted by wireman in Craftsmanship on February 4th, 2008
“A language that doesn’t affect the way you think about programming, is not worth knowing.” [1]
“Real efficiency comes from elegant solutions, not optimized programs.” [2]
“Синтактична сол” [3] (текстът е интересен)
Референции:
[1] http://www.cs.yale.edu/quotes.html
[2] http://www.cs.indiana.edu/~jsobel/c455-c511.updated.txt
[3] http://en.wikipedia.org/wiki/Syntactic_sugar
Scheme Versus C
Posted by wireman in Craftsmanship on February 4th, 2008
Интересна идея има в ето този текст — описан е един интересен подход към силно алгоритмичен и оптимизационен проблем — реализацията на алгоритъма за бързо умножение. Главният герой описва как колегите му са подходили към този проблем, нахвърляйки се върху C и дори направо Assembler, докато той решил да подходи по-различно и започнал на Scheme. Ползата, която е получил от високото алгоритмично ниво на писане на Scheme, е била в начина на мислене и идеите, до които го е довело това. В крайна сметка, алгоритъмът, който той е реализирал много по-бързо и лесно на Scheme и впоследствие превел на C, му е донесъл желаният резултат на едно от най-бързите решения, постигнат за много по-малко време. По неговите собствени думи, “That was the amazing part: I had PRODUCED a program that I could not have WRITTEN, and would not have wanted to write directly”.
Референция: http://www.cs.indiana.edu/~jsobel/c455-c511.updated.txt.
Internet Explorer … Operation Aborted
Posted by wireman in Craftsmanship on January 16th, 2008
Поредната култова грешка от страна на Microsoft Internet Explorer (версия 7):
Internet Explorer cannot open the Internet site URL
Operation aborted
Оказва се, че за тази грешка причината е някое парче JavaScript код, което се опитва да “залепи” елемент към BODY обекта, без самият скрипт да е пряк наследник на този BODY обект. Най-бързото решение е да издирите този скрипт и да му добавите атрибута: defer="defer", например така:
<script type=”text/javascript” defer=”defer”>
…
</script>
Има и други решения, които можете да намерите лесно из Google.
Успех на всички с debug-ването в IE.
mv, както и rm и cp
Posted by wireman in Craftsmanship on December 14th, 2007
Никога не ползвайте mv * ../* на UNIX/Linux система, ако не искате да преместите всички файлове от текущия каталог, както и тези от родителския каталог, в директория от родителския каталог! Shell-ът, който използвате (/bin/sh, /bin/bash, …) ще замести * с всички файлове и каталози от текущия каталог, а ../* с всички файлове и каталози от родителския каталог, като при това положение mv ще премести целия този списък в последния си аргумент, който трябва да бъде съществуващ каталог (вероятността това да е изпълнено не е малка.)
За повече информация: man mv и man sh…
Послеслов: Забравих да спомена, винаги, ама ВИНАГИ се пазете от сянката си, че няма да усетите как сами ще си навредите тъй, както никой друг не би могъл да ви навреди – слагайте синоними от този род в стартовия си, профилиращ shell-а, скрипт (~/.bash_profile за bash, ~/.cshrc за csh и т.н.):
alias rm rm -i alias cp cp -i alias mv mv -i
system error: -1072896658
Posted by wireman in Craftsmanship on November 19th, 2007
Един от примерите за много добре именована JavaScript грешка, която този чудесен браузър на Microsoft – Internet Explorer – продуцира: “System error: -1072896658″.
Оказва се, че при работа с XMLHttpRequest, когато responce-ът е с непознат encoding, при опит за достъп до responce-текста бива продуцирана въпросната грешка. Интересното е, че encoding “utf8″ не върши работа – трябва да бъде “UTF-8“.
Изключително благодаря на автора на този пост.