Archive for category Софтуер
rsync: cannot delete non-empty directory
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()
Потрябва ми удобството на тези две хубави функции, 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 за наличие на пинг
Съвсем скоро (да кажем, преди 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
Pygments е Python-пакет, който ви дава удобен интерфейс (под формата на библиотека или на command-line инструмент) да оцветявате парчета код (всъщност не само код), като изходът може да бъде в HTML, RTF, LaTeX и други формати. Вижте страничката с примери. Дори Brainf*ck не успява да избяга.
FreeBSD 7.0-RELEASE
Обявена е вече стабилната версия 7.0 на FreeBSD, подходяща за production use. Някои от новостите:
- Много голям процент подобрение на производителността при многоядрените/многопроцесорни системи
- Експериментална поддръжка на файловата система ZFS
- Нов метод за заделяне на памет в User-space – jemalloc
- freebsd-update и много, много други.
Citations
“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
Интересна идея има в ето този текст — описан е един интересен подход към силно алгоритмичен и оптимизационен проблем — реализацията на алгоритъма за бързо умножение. Главният герой описва как колегите му са подходили към този проблем, нахвърляйки се върху 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
Поредната култова грешка от страна на 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
Никога не ползвайте 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
Един от примерите за много добре именована JavaScript грешка, която този чудесен браузър на Microsoft – Internet Explorer – продуцира: “System error: -1072896658″.
Оказва се, че при работа с XMLHttpRequest, когато responce-ът е с непознат encoding, при опит за достъп до responce-текста бива продуцирана въпросната грешка. Интересното е, че encoding “utf8″ не върши работа – трябва да бъде “UTF-8“.
Изключително благодаря на автора на този пост.