Fixing double-encoded UTF-8 data in MySQL
Double-encoded UTF-8 texts (not to mention triple-, quadruple- and so on) are a fairly common problem when dealing with MySQL. This may be due to the fact that the default character set of the connection to the server is Latin-1, but that is not relevant once the data is already corrupt.
Here is how to fix it, in two simple steps, using the mysqldump and mysql commands:
mysqldump -h DB_HOST -u DB_USER -p DB_PASSWORD --opt --quote-names \
--skip-set-charset --default-character-set=latin1 DB_NAME > DB_NAME-dump.sql
mysql -h DB_HOST -u DB_USER -p DB_PASSWORD \
--default-character-set=utf8 DB_NAME < DB_NAME-dump.sql
Of course, you should first replace DB_HOST, DB_USER, DB_PASSWORD and DB_NAME with values, corresponding to your database setup.
jQuery :hidden/:visible and animation oddities
Beware that in some cases your jQuery animations (e.g. fadeIn(), fadeOut() and others) may not run, because jQuery may think that the DOM node, on which you request the animation, is not visible.
When and how can this be a problem?
In most cases, of course, the DOM node will indeed be invisible and this will not be an issue.
There are, however, some exceptional cases. Suppose you have an absolutely positioned container, with no explicit width and height, which in turn has absolutely positioned child elements. If you, for example, set the opacity of the container to 50%, its absolutely positioned children will also become 50% opaque. If you set the CSS display to none, its children will again be hidden.
However, the container is technically invisible.
That’s because the container’s browser reported outerWidth and outerHeight are both zero, which, for jQuery, means that the element is invisible — see [1] — that’s the way the :hidden and :visible selectors work in jQuery 1.3.2 and newer.
Here comes the problem: if you run any animations on the container — for example fadeOut() — it will be optimized by jQuery and will not execute, due to the fact that jQuery sees the element as not visible (which is correct and the clever thing to do in most cases).
The solution is quite simple — you may just set an (even random) nonzero width or height to the container. As its children are absolutely positioned, it should not affect anything, but your animations will run.
[1] http://docs.jquery.com/Release:jQuery_1.3.2#:visible.2F:hidden_Overhauled
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, която да прави каквото се очаква :) Може да бъде заменена и с нещо друго, разбира се. Чувствайте се свободни да ползвате това парче “код” както искате.
Виртуално отношение
Много интересна идея за изразяване на отношение към нашите любими управляващи може да се види, като потърсите в Google за “провал”. На първо място излиза сайтът на българското правителство. Честито! Тук (а и на доста други места) може да прочетете повече за инициативата.
Ето това е на първо място за мен: корупция
Операции с множества на ниво shell
Наскоро ми се наложи да правя такива магии, основно разлики между множества от числа. Бърз и ефективен начин това да стане, е да използвате вече налични във вашата операционна система* команди/програмки от типа на grep, sort, uniq, comm — кой с каквото разполага и каквото предпочита. В ето този сайт [1] може да видите как можете да прилагате основните операции с множества чрез горепосочените команди, при това по доста интересни начини. Има по няколко варианта за всяка операция и човек разполага с възможност за избор, което винаги е хубаво.
[1] http://www.catonmat.net/blog/set-operations-in-unix-shell/
_______
* Говорим си само за истинските операционни системи.
Обновихме се
Вече се задвижваме от чисто-новия Wordpress 2.7 “Колтрейн” — трябва да отбележа, че административния интерфейс изглежда доста добре. WordPress винаги са били един пример за добре движен open-source проект за мен. Ако ползвате други услуги, например Blogger :) можете да се замислите за прехвърляне :)
booklamp.org – технологията
Един много интересен проект — booklamp.org, имащ за цел да ви предложи книги, които бихте харесали, базирайки се на книгите, които до момента сте чели и са ви харесали. Видеото с разяснения на концепцията и за това как точно се взимат решения, е много интересно и го препоръчвам.
Pygments
Posted by wireman in Craftsmanship on March 3rd, 2008
Pygments е Python-пакет, който ви дава удобен интерфейс (под формата на библиотека или на command-line инструмент) да оцветявате парчета код (всъщност не само код), като изходът може да бъде в HTML, RTF, LaTeX и други формати. Вижте страничката с примери. Дори Brainf*ck не успява да избяга.