В жизни каждого дизайнера хоть раз в наступает момент, когда в голову лезут странные мысли о легальном программном обеспечении. Учитывая, что рабочее место дизайнера, использующего связку Windows + Adobe Photoshop + Corel Draw нынче стоит никак не меньше, чем 900 долларов (это с учетом самых волшебных скидок на украинские версии или что-то еще более странное), мысль немедля переходит в рациональную плоскость: «А что, если не платить? А что, если собраться с силами и перейти, наконец, на бесплатный софт?»
Spark
Одновременное использование нескольких операционых систем при помощи colinux, Virtual PC и утилиты Desktops
5 min
4.5KПреамбула:
Последнее время, мне приходится писать немного кода, и есть необходимость тестировать результаты его работы под разными платформами. Естественно я использую виртуальные машины.
Так как, кроме меня, моим ноутбуком пользуется еще и жена то основная ОС на нем winxp. Мне в принципе все равно с чем работать поэтому пусть будет windows…
Раньше, когда у меня в качестве оконного менеджера использовался IceWM, мне нравилось то что я могу использовать несколько «рабочих столов», для запуска различных тематических приложений в отдельно отведенном для них месте. Под windows такая возможность тоже есть, но те утилиты которые я пробовал, имели те или иные недостатки, поэтому рано или поздно мне приходилось от них отказываться… В конце концов я остановился на Desktops (от sysinternals) она тоже не лишена недостатков, но стабильность ее работы и небольшой размер перевесили все «минусы».
Цель:
Чего мы пытаемся добиться:
- запустить на каждом из «рабочих столов» по отдельной операционной системе
- сделать переключение между ними максимально удобным и быстрым
+37
Плюсы и минусы лицензий открытого ПО
5 min
35KСвободное программное обеспечение — широкий спектр программных решений, в которых права пользователя («свободы») на неограниченные установку, запуск, а также свободное использование, изучение, распространение и изменение (совершенствование) программ защищены юридически авторскими правами при помощи свободных лицензий.
Характеристики лицензий:
1. Apache Software License
2. Лицензия BSD
3. GNU General Public License
4. Лицензии MIT
5. Mozilla Public License
6. Консорциум Всемирной паутины
Характеристики лицензий:
1. Apache Software License
2. Лицензия BSD
3. GNU General Public License
4. Лицензии MIT
5. Mozilla Public License
6. Консорциум Всемирной паутины
+63
TOP-10 Flash-игр
2 min
5.9KСегодня уже можно :)
1. Robokill. Вы управляете роботом, который перемещается по локациям и убивает противников. В процессе игры Вы зарабатываете деньги и можете усовершенствовать своего робота, покупая ему новое оружие, боеприпасы и т.д. Всего 10 затягивающих миссий.
Оф. сайт (триальная версия): www.rocksolidarcade.com/games/robokill Полная версия: robokill.hotbox.ru
+51
FineReader Online
1 min
5.6KНеужели, чтобы распознать всего одну страничку нужно лезть на торренты идти в магазин и покупать целый FineReader? Правильный ответ – НЕТ, потому что теперь можно купить половинку FineReader’а недавно специально для таких случаев был запущен в открытое бета-тестирование новый онлайн-сервис от ABBYY!
Мы рады представить вам FineReader Online (beta). Теперь те, кому нужно просто распознать парочку страниц, могут зарегистрироваться на нашем сервисе и сделать это совершенно бесплатно. На данный момент после регистрации вам доступно 50 страниц в день.
Мы рады представить вам FineReader Online (beta). Теперь те, кому нужно просто распознать парочку страниц, могут зарегистрироваться на нашем сервисе и сделать это совершенно бесплатно. На данный момент после регистрации вам доступно 50 страниц в день.
+104
Linux 32bit и 4 гб RAM
1 min
1.7KВчера столкнулся с проблемой, после того, как доставил дополнительную 2гб планку оперативки к своей имеющейся 2гб. Система видела всего 3.2 гбайт, хотя bios определял все 4гб
Решение данной проблемы описывалась на Хабре для Win-систем.
Для linux же решение все намного проще:
При включенном режиме PAE иногда могут отвалится драйвера, в многих случаях именно на видеокарту. У многих перестает работать suspend. У некоторых ядро вообще вываливается в kernel panic(и такое было, хотя я не думаю что тут причина именно в PAE). В общем тут уже вам выбирать — не спать ночами, но иметь поддержку всех 4 гб оперативной памяти, или же просто напросто наплевать на те 800 мб.
Более детально о том, что такое PAE, можно почитать на вики
Решение данной проблемы описывалась на Хабре для Win-систем.
Для linux же решение все намного проще:
- Если вы используете Ubuntu Desktop(не знаю, как в других дистрибутивах), просто установите серверное ядро(там по умолчанию включена поддержка PAE)
sudo apt-get install linux-server linux-headers-server
- Или же второй вариант — собрать ядро самому. Во время конфигурирования(к примеру, с помощью «make menuconfig») во вкладке High Memory Support выбираем 64GB(тем самым активируем PAE бит). Весь процесс расписывать не буду, так как в сети и так много мануалов по сборке ядра.
При включенном режиме PAE иногда могут отвалится драйвера, в многих случаях именно на видеокарту. У многих перестает работать suspend. У некоторых ядро вообще вываливается в kernel panic(и такое было, хотя я не думаю что тут причина именно в PAE). В общем тут уже вам выбирать — не спать ночами, но иметь поддержку всех 4 гб оперативной памяти, или же просто напросто наплевать на те 800 мб.
Более детально о том, что такое PAE, можно почитать на вики
+4
Memcached, PHP, Ketama. Если нет, но очень хочется.
7 min
1.4KХочется.
Кетаму в PHP, да еще чтобы хоть из чего доступ был.
Это я про не PHP. В смысле про доступ. Ну и из PHP тоже.
Ну ладно, приступим.
Что имеем.
Инет, Google …
… все :(
Аааа, чуть не забыл. Самое главное. Потолок, чтобы было куда тупо уставиться.
Итак гуглим.
В PHP кетама нет. А где есть то.
Гы, на last.fm.
www.lastfm.ru/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
Вот только после 10 апреля 2007 версию 0.1.1 никто не обновлял, да и набор функционала какой-то куцый. На danga. com вон уже gets’ы, cas’ы и т.п. дребедени полно. Мож оно и можно, да вот только разбираться влом.
Гуглим дальше …
tangent.org
Что имеем.
Memcached Functions for MySQL
libmemcached 0.23
WOW!!!!
Clients using the library:
Ruby: github.com/fauna/memcached/tree/master
Perl: code.google.com/p/perl-libmemcached
Python: code.google.com/p/python-libmemcached
PHP: (In Japanese) labs.gree.jp/Top/OpenSource/libmemcached.html
Идем туда где PHP.
КАРАУЛ!!! Шалашики.
Блин и версия 0.1.0. Зато свежая, от 18.09.2008. Короче глюки в ней еще не исправлены, потому что никто их поискать не успел.
… все.
Больше нету ничего.
Ну что, будем пробовать.
Наверное с шалашиков лучше не начинать.
Хоть у меня по буржуйски весь словарный запас это: hi, yes, no, problem, thank и все.
… ну не все конечно, есть еще fuck, но он мне не поможет.
По японски он всяко короче.
Ставлю libmemcached и Memcached Functions for MySQL на сервер БД. На вебсервер libmemcached.
Поднимаю четырех демонов memcached. Одного на вебсервере, трех на сервере БД. Почему? А фиг его знает, так получилось.
Инсталлирую функции.
Хм, список впечатляет
memc_add
memc_add_by_key
memc_servers_set
memc_server_count
memc_set
memc_set_by_key
memc_cas
memc_cas_by_key
memc_get
memc_get_by_key
memc_delete
memc_delete_by_key
memc_append
memc_append_by_key
memc_prepend
memc_prepend_by_key
memc_increment
memc_decrement
memc_replace
memc_replace_by_key
memc_servers_behavior_set
memc_udf_version
memc_list_behaviors
memc_stats
memc_stat_get_keys
memc_stat_get_value
Не понял. Если есть cas? Где gets? На кой мне сдался cas без gets’а!!!
Ладно, мы им это припомним. Наверное.
Определяем сервера
Пихаем в кэш десяток ключей
Берем их из кэша
Вроде нормально, отдает то, что положили.
Теперь валим одного демона memcached. Как и следовало ожидать – два ключа накрылись. Снова ложим в кэш 10 этих же ключей.
Фиг вам. Те же пропавшие два, так и не объявились. Кетамой и не пахнет. Ну ничего, readme почитать мне не западло.
В Memcached Functions for MySQL ничего умного не нашел. Пойдем на tangent.org.
Блин, как все запущено.
Ага вот оно про оно кажется
docs.tangent.org/libmemcached/memcached_behavior.html
Согласно translate.ru behavior это поведение.
По дефолту MEMCACHED_BEHAVIOR_DISTRIBUTION стоит MEMCACHED_DISTRIBUTION_MODULA, а нам надо MEMCACHED_DISTRIBUTION_CONSISTENT, и MEMCACHED_BEHAVIOR_HASH чтоб было MEMCACHED_HASH_KETAMA.
И делает это memcached_behavior_set(). В MySQL это надо полагать memc_servers_behavior_set.
Бррр, стоп. А это что такое в доке memcached_behavior.pod
=item MEMCACHED_BEHAVIOR_DISTRIBUTION
Using this you can enable different means of distributing values to servers.
The default method is MEMCACHED_DISTRIBUTION_MODULA. You can enable
consistent hashing by setting MEMCACHED_DISTRIBUTION_CONSISTENT.
Consistent hashing delivers better distribution and allows servers to be
added to the cluster with minimal cache losses. Currently
MEMCACHED_DISTRIBUTION_CONSISTENT is an alias for the value
MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA.
=item MEMCACHED_BEHAVIOR_KETAMA
Sets the default distribution to MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA
and the hash to MEMCACHED_HASH_MD5.
Что-то каша в голове начинается.
Ага, наверное понял, надо сделать MEMCACHED_BEHAVIOR_KETAMA …
Как это?
Пошли дальше читать. Похоже тупо надо все подряд. Еще по буржуйски понимать быыыы.
Похоже это оно
For simple on or off options you just need to pass in a value of 1.
Значит надо MEMCACHED_BEHAVIOR_KETAMA set 1.
Ну что попробуем.
Мдааа. Кирдык фулльный.
Лечится только рестартом MySQL сервера …
Ну ладно. Напишем разработчикам
forums.mysql.com/read.php?150,231325,231325#msg-231325
Быстро … отписался
forums.mysql.com/read.php?150,231325,231359#msg-231359
А если так
forums.mysql.com/read.php?150,231325,231442#msg-231442
То-то же.
Это похоже надолго.
Придется тупо смотреть в потолок. Может там что есть?
Точно. Есть. Только вот мысли какие-то не умные, а грязные.
Если откуда то берется не то, что мне нужно. Значит где то это туда положили. Нужно всего-то найти это где то и положить туда то, что мне нужно.
Ой блин. Лезть в исходники. А они на сях. А я про С только название знаю. В смысле, что язык так называется.
Ну да ладно. Делать нечего, будем искать знакомые слова.
В MySQL библиотеке наверное не стоит, она так, прокладка. Лезем в саму libmemcached.
Ага вот оно. В memcached.c. строка 29
ptr->distribution= MEMCACHED_DISTRIBUTION_MODULA;
целых два знакомых слова.
И конструкция название имеет многообещающее: memcached_st *memcached_create(memcached_st *ptr).
Теперь попытаемся понять кто такой memcached_st.
Наверное понятно. Согласно libmemcached.pod, если translate.ru мне все правильно объяснил, это то самое место, где лежит не то что мне надо.
Сходим еще раз на на tangent.org. Конфы там нет, но есть майлин глист lists.tangent.org/mailman/listinfo/libmemcached. Там не так много чего. Тупо поищем знакомые слова.
Что то есть.
lists.tangent.org/pipermail/libmemcached/2008-September/000434.html
Если правильно понял, надо MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT’у сделать set сколько-нибудь. Там пишут 10, я попробую 3.
lists.tangent.org/pipermail/libmemcached/2008-August/000429.html
ну и мы так же сделаем.
Итак. Попытаемся подправить исходники. В смысле положить то что надо.
Вместо ptr->distribution= MEMCACHED_DISTRIBUTION_MODULA;
Напишем ptr->distribution= MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA;
Надо же. Мои первые в жизни 0,5 строки на C.
Вместо ptr->retry_timeout= 0;
Напишем ptr->retry_timeout= 60;
Ыыыыыыыыы. Вместо чего написать про MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT?
Опять тупо смотрим в потолок.
А че смотреть то. Искать про SERVER_FAILURE_LIMIT в исходниках.
Есть. В memcached_behavior.c. Стр.166, называется ptr->server_failure_limit.
Добавим по аналогии с остальным
ptr->server_failure_limit= 3;
Может прокатит. В принципе если что – сервер раком ляжет. Дык так же его и поставим.
Вот что получилось
Все. Перекомпилим либу и вперед. Приступаем к онани… ну вы поняли, к итерациям.
Определяем сервера
Пихаем в кэш десяток ключей
Берем их из кэша
Вроде нормально, отдает то, что положили.
Валим одного демона memcached.
Не понял. Какого черта. Почему они ВСЕ живые? Это я про данные которые в кэш положил.
Ладно. Валим второго.
Ну мы так не договаривались. Они ВСЕ живые.
Ну а если третьего.
Блин, все живые.
Ну нас так просто не возьмешь. Против лома нет приема. Валим последнего четвертого демона memcached.
То то же. Живых не осталось.
Начинаем убивать, поднимать, сохранять в, доставать из …
… короче итерациями заниматься.
НЕ МОГУ УБИТЬ!!!
Мда. Работает. Даже больше того.
Ну нет. Нас так просто не возьмешь.
Все УБИЛ!!!
Оставил живой одну ноду. По тихому поднял вторую. Не устраивая никаких обращений к memcached, свалил первую.
Все, не пережила. Знай наших, кого хочешь раком положим.
Уфф. О чем это я.
Вообще то про PHP.
Ну что, пойдем в шалашики labs.gree.jp/Top/OpenSource/libmemcached.html
Так, слава богу хоть исходники не в шалаше
github.com/kajidai/php-libmemcached/tree/master
Привинчиваем.
labs.gree.jp/Top/OpenSource/libmemcached/Document.html
Пробуем
Работает сволочь…
Вместе с MySQL работает.
Корректно данные отрабатывают в паре.
Валим, поднимаем, пишем, читаем – все корректно.
Да кстати. На вебсервере подпиленную libmemcached привинтил.
А что по функционалу мы тут имеем?
Не плохо
memcached_ctor
memcached_server_add
memcached_add
memcached_add_by_key
memcached_append
memcached_append_by_key
memcached_behavior_get
memcached_behavior_set
memcached_cas
memcached_cas_by_key
memcached_delete
memcached_delete_by_key
memcached_get
memcached_get_by_key
memcached_set
memcached_set_by_key
memcached_increment
memcached_decrement
memcached_prepend
memcached_prepend_by_key
memcached_replace
memcached_replace_by_key
memcached_server_list
memcached_mget
memcached_fetch
memcached_server_list_append
memcached_server_push
gets’а тоже нету.
А как с глюками …
А фиг его знает.
Узнать бы. Ну в самом деле не писать же автору на моем русском английском в Японию. Ответит ведь мне на своем японском английском.
Так и война ведь начнется.
Ладно, полезем в исходники. Я ведь на С уже целых 2,5 строки в сумме в своей жизни написал.
Блин, как то все просто …
Аааа, въехал. Он же просто по zend’у обертку для трансляции вызовов написал. Блин и накосячить то наверное особо здесь негде.
Ну что.
Подведем итоги.
Во первых. Я написал свои первые 2,5 строки на С.
Во вторых. У меня теперь кетама в PHP есть.
В третьих. Хрен этот кэш так просто свалишь.
В четвертых. Похрену из чего, нормальный доступ к данным в memcached, хоть из С, хоть из Perl, хоть из PHP c MySQL. Один ложит, пофигу откуда и кто другой корректно читает.
PS. Снимаю шляпу перед Brian Aker brian.krow.net
Кетаму в PHP, да еще чтобы хоть из чего доступ был.
Это я про не PHP. В смысле про доступ. Ну и из PHP тоже.
Ну ладно, приступим.
Что имеем.
Инет, Google …
… все :(
Аааа, чуть не забыл. Самое главное. Потолок, чтобы было куда тупо уставиться.
Итак гуглим.
В PHP кетама нет. А где есть то.
Гы, на last.fm.
www.lastfm.ru/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
Вот только после 10 апреля 2007 версию 0.1.1 никто не обновлял, да и набор функционала какой-то куцый. На danga. com вон уже gets’ы, cas’ы и т.п. дребедени полно. Мож оно и можно, да вот только разбираться влом.
Гуглим дальше …
tangent.org
Что имеем.
Memcached Functions for MySQL
libmemcached 0.23
WOW!!!!
Clients using the library:
Ruby: github.com/fauna/memcached/tree/master
Perl: code.google.com/p/perl-libmemcached
Python: code.google.com/p/python-libmemcached
PHP: (In Japanese) labs.gree.jp/Top/OpenSource/libmemcached.html
Идем туда где PHP.
КАРАУЛ!!! Шалашики.
Блин и версия 0.1.0. Зато свежая, от 18.09.2008. Короче глюки в ней еще не исправлены, потому что никто их поискать не успел.
… все.
Больше нету ничего.
Ну что, будем пробовать.
Наверное с шалашиков лучше не начинать.
Хоть у меня по буржуйски весь словарный запас это: hi, yes, no, problem, thank и все.
… ну не все конечно, есть еще fuck, но он мне не поможет.
По японски он всяко короче.
Ставлю libmemcached и Memcached Functions for MySQL на сервер БД. На вебсервер libmemcached.
Поднимаю четырех демонов memcached. Одного на вебсервере, трех на сервере БД. Почему? А фиг его знает, так получилось.
Инсталлирую функции.
Хм, список впечатляет
memc_add
memc_add_by_key
memc_servers_set
memc_server_count
memc_set
memc_set_by_key
memc_cas
memc_cas_by_key
memc_get
memc_get_by_key
memc_delete
memc_delete_by_key
memc_append
memc_append_by_key
memc_prepend
memc_prepend_by_key
memc_increment
memc_decrement
memc_replace
memc_replace_by_key
memc_servers_behavior_set
memc_udf_version
memc_list_behaviors
memc_stats
memc_stat_get_keys
memc_stat_get_value
Не понял. Если есть cas? Где gets? На кой мне сдался cas без gets’а!!!
Ладно, мы им это припомним. Наверное.
Определяем сервера
SELECT memc_servers_set(‘192.168.0.10:11211, 192.168.0.11:11211, 192.168.0.11:11212, 192.168.0.11:11213);
Пихаем в кэш десяток ключей
SELECT memc_set(‘key1’, ‘val1’);
…
SELECT memc_set(‘key10’, ‘val10’);
Берем их из кэша
SELECT memc_get(‘key1’);
…
SELECT memc_get(‘key10’);
Вроде нормально, отдает то, что положили.
Теперь валим одного демона memcached. Как и следовало ожидать – два ключа накрылись. Снова ложим в кэш 10 этих же ключей.
Фиг вам. Те же пропавшие два, так и не объявились. Кетамой и не пахнет. Ну ничего, readme почитать мне не западло.
В Memcached Functions for MySQL ничего умного не нашел. Пойдем на tangent.org.
Блин, как все запущено.
Ага вот оно про оно кажется
docs.tangent.org/libmemcached/memcached_behavior.html
Согласно translate.ru behavior это поведение.
По дефолту MEMCACHED_BEHAVIOR_DISTRIBUTION стоит MEMCACHED_DISTRIBUTION_MODULA, а нам надо MEMCACHED_DISTRIBUTION_CONSISTENT, и MEMCACHED_BEHAVIOR_HASH чтоб было MEMCACHED_HASH_KETAMA.
И делает это memcached_behavior_set(). В MySQL это надо полагать memc_servers_behavior_set.
Бррр, стоп. А это что такое в доке memcached_behavior.pod
=item MEMCACHED_BEHAVIOR_DISTRIBUTION
Using this you can enable different means of distributing values to servers.
The default method is MEMCACHED_DISTRIBUTION_MODULA. You can enable
consistent hashing by setting MEMCACHED_DISTRIBUTION_CONSISTENT.
Consistent hashing delivers better distribution and allows servers to be
added to the cluster with minimal cache losses. Currently
MEMCACHED_DISTRIBUTION_CONSISTENT is an alias for the value
MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA.
=item MEMCACHED_BEHAVIOR_KETAMA
Sets the default distribution to MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA
and the hash to MEMCACHED_HASH_MD5.
Что-то каша в голове начинается.
Ага, наверное понял, надо сделать MEMCACHED_BEHAVIOR_KETAMA …
Как это?
Пошли дальше читать. Похоже тупо надо все подряд. Еще по буржуйски понимать быыыы.
Похоже это оно
For simple on or off options you just need to pass in a value of 1.
Значит надо MEMCACHED_BEHAVIOR_KETAMA set 1.
Ну что попробуем.
SELECT memc_servers_behavior_set (‘MEMCACHED_BEHAVIOR_KETAMA’, 1);
Мдааа. Кирдык фулльный.
mysql>SELECT memc_servers_behavior_set('MEMCACHED_BEHAVIOR_KETAMA', 1);
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>
Лечится только рестартом MySQL сервера …
Ну ладно. Напишем разработчикам
forums.mysql.com/read.php?150,231325,231325#msg-231325
Быстро … отписался
forums.mysql.com/read.php?150,231325,231359#msg-231359
А если так
forums.mysql.com/read.php?150,231325,231442#msg-231442
То-то же.
Это похоже надолго.
Придется тупо смотреть в потолок. Может там что есть?
Точно. Есть. Только вот мысли какие-то не умные, а грязные.
Если откуда то берется не то, что мне нужно. Значит где то это туда положили. Нужно всего-то найти это где то и положить туда то, что мне нужно.
Ой блин. Лезть в исходники. А они на сях. А я про С только название знаю. В смысле, что язык так называется.
Ну да ладно. Делать нечего, будем искать знакомые слова.
В MySQL библиотеке наверное не стоит, она так, прокладка. Лезем в саму libmemcached.
Ага вот оно. В memcached.c. строка 29
ptr->distribution= MEMCACHED_DISTRIBUTION_MODULA;
целых два знакомых слова.
И конструкция название имеет многообещающее: memcached_st *memcached_create(memcached_st *ptr).
Теперь попытаемся понять кто такой memcached_st.
Наверное понятно. Согласно libmemcached.pod, если translate.ru мне все правильно объяснил, это то самое место, где лежит не то что мне надо.
Сходим еще раз на на tangent.org. Конфы там нет, но есть майлин глист lists.tangent.org/mailman/listinfo/libmemcached. Там не так много чего. Тупо поищем знакомые слова.
Что то есть.
lists.tangent.org/pipermail/libmemcached/2008-September/000434.html
Если правильно понял, надо MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT’у сделать set сколько-нибудь. Там пишут 10, я попробую 3.
lists.tangent.org/pipermail/libmemcached/2008-August/000429.html
ну и мы так же сделаем.
Итак. Попытаемся подправить исходники. В смысле положить то что надо.
Вместо ptr->distribution= MEMCACHED_DISTRIBUTION_MODULA;
Напишем ptr->distribution= MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA;
Надо же. Мои первые в жизни 0,5 строки на C.
Вместо ptr->retry_timeout= 0;
Напишем ptr->retry_timeout= 60;
Ыыыыыыыыы. Вместо чего написать про MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT?
Опять тупо смотрим в потолок.
А че смотреть то. Искать про SERVER_FAILURE_LIMIT в исходниках.
Есть. В memcached_behavior.c. Стр.166, называется ptr->server_failure_limit.
Добавим по аналогии с остальным
ptr->server_failure_limit= 3;
Может прокатит. В принципе если что – сервер раком ляжет. Дык так же его и поставим.
Вот что получилось
memcached_st *memcached_create(memcached_st *ptr)
{
memcached_result_st *result_ptr;
if (ptr == NULL)
{
ptr= (memcached_st *)malloc(sizeof(memcached_st));
if (!ptr)
return NULL; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */
memset(ptr, 0, sizeof(memcached_st));
ptr->is_allocated= MEMCACHED_ALLOCATED;
}
else
{
memset(ptr, 0, sizeof(memcached_st));
}
result_ptr= memcached_result_create(ptr, &ptr->result);
WATCHPOINT_ASSERT(result_ptr);
ptr->poll_timeout= MEMCACHED_DEFAULT_TIMEOUT;
ptr->connect_timeout= MEMCACHED_DEFAULT_TIMEOUT;
ptr->retry_timeout= 60;
ptr->distribution= MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA;
ptr->server_failure_limit= 3;
return ptr;
}
Все. Перекомпилим либу и вперед. Приступаем к онани… ну вы поняли, к итерациям.
Определяем сервера
SELECT memc_servers_set(‘192.168.0.10:11211, 192.168.0.11:11211, 192.168.0.11:11212, 192.168.0.11:11213);
Пихаем в кэш десяток ключей
SELECT memc_set(‘key1’, ‘val1’);
…
SELECT memc_set(‘key10’, ‘val10’);
Берем их из кэша
SELECT memc_get(‘key1’);
…
SELECT memc_get(‘key10’);
Вроде нормально, отдает то, что положили.
Валим одного демона memcached.
Не понял. Какого черта. Почему они ВСЕ живые? Это я про данные которые в кэш положил.
Ладно. Валим второго.
Ну мы так не договаривались. Они ВСЕ живые.
Ну а если третьего.
Блин, все живые.
Ну нас так просто не возьмешь. Против лома нет приема. Валим последнего четвертого демона memcached.
То то же. Живых не осталось.
Начинаем убивать, поднимать, сохранять в, доставать из …
… короче итерациями заниматься.
НЕ МОГУ УБИТЬ!!!
Мда. Работает. Даже больше того.
Ну нет. Нас так просто не возьмешь.
Все УБИЛ!!!
Оставил живой одну ноду. По тихому поднял вторую. Не устраивая никаких обращений к memcached, свалил первую.
Все, не пережила. Знай наших, кого хочешь раком положим.
Уфф. О чем это я.
Вообще то про PHP.
Ну что, пойдем в шалашики labs.gree.jp/Top/OpenSource/libmemcached.html
Так, слава богу хоть исходники не в шалаше
github.com/kajidai/php-libmemcached/tree/master
Привинчиваем.
labs.gree.jp/Top/OpenSource/libmemcached/Document.html
Пробуем
<?php
$memcached = new Memcached();
$memcached->addserver('192.168.0.10', 11211);
$memcached->addserver('192.168.0.11', 11211);
$memcached->addserver('192.168.0.11', 11212);
$memcached->addserver('192.168.0.11', 11213);
$memcached->set('key1', 'val1');
$ret = $memcached->get('key1');
Echo $ret. “<br>”;
…
Работает сволочь…
Вместе с MySQL работает.
Корректно данные отрабатывают в паре.
Валим, поднимаем, пишем, читаем – все корректно.
Да кстати. На вебсервере подпиленную libmemcached привинтил.
А что по функционалу мы тут имеем?
Не плохо
memcached_ctor
memcached_server_add
memcached_add
memcached_add_by_key
memcached_append
memcached_append_by_key
memcached_behavior_get
memcached_behavior_set
memcached_cas
memcached_cas_by_key
memcached_delete
memcached_delete_by_key
memcached_get
memcached_get_by_key
memcached_set
memcached_set_by_key
memcached_increment
memcached_decrement
memcached_prepend
memcached_prepend_by_key
memcached_replace
memcached_replace_by_key
memcached_server_list
memcached_mget
memcached_fetch
memcached_server_list_append
memcached_server_push
gets’а тоже нету.
А как с глюками …
А фиг его знает.
Узнать бы. Ну в самом деле не писать же автору на моем русском английском в Японию. Ответит ведь мне на своем японском английском.
Так и война ведь начнется.
Ладно, полезем в исходники. Я ведь на С уже целых 2,5 строки в сумме в своей жизни написал.
Блин, как то все просто …
Аааа, въехал. Он же просто по zend’у обертку для трансляции вызовов написал. Блин и накосячить то наверное особо здесь негде.
Ну что.
Подведем итоги.
Во первых. Я написал свои первые 2,5 строки на С.
Во вторых. У меня теперь кетама в PHP есть.
В третьих. Хрен этот кэш так просто свалишь.
В четвертых. Похрену из чего, нормальный доступ к данным в memcached, хоть из С, хоть из Perl, хоть из PHP c MySQL. Один ложит, пофигу откуда и кто другой корректно читает.
PS. Снимаю шляпу перед Brian Aker brian.krow.net
-71
Определение пола по истории навигации
1 min
2.7KИспользуя тот факт, что браузеры обычно по-разному отображают и обрабатывают посещённые и не посещённые ссылки, умные люди давно придумали, как можно автоматически отследить историю веб-навигации посетителя.
Сперва мы выводим на страницу ссылки на популярные ресурсы (в скрытом фрейме, например). Далее, два варианта:
1) Написать скрипт, который пробегает по ссылкам и определяет их цвет через getComputedStyle, как описывает Jeremiah Grossman. На этот счёт даже есть готовый скрипт.
У этого способа есть небольшой недостаток: требуется включённый JavaScript.
2) Тот же J. Grossman предложил усовершенствованный вариант с использованием CSS. Определяем свой стиль, в котором у посещённых ссылок будет фоном стоять картинка: у каждой — своя. В этом случае браузер выполнит всю работу за нас. Потом достаточно посмотреть в логах, какие картинки были загружены.
Почему это может быть полезно (вредно): если человек посещал некоторый URL, то, с большой вероятностью, у него есть аккаунт на соответствующем ресурсе. Это может пригодиться, например, если вы используете в целевом ресурсе какую-то дырку.
Теперь, почему я про это вспомнил, и почему такой заголовок поста. Один остроумный товарищ при помощи первой технологии решил определять пол посетителя. Его теория в том, что определённые сайты посещаются по половому признаку, так что можно вычислить вероятность того, что вы такого-то пола. Я вот, например, на 68% мужчина.
Сперва мы выводим на страницу ссылки на популярные ресурсы (в скрытом фрейме, например). Далее, два варианта:
1) Написать скрипт, который пробегает по ссылкам и определяет их цвет через getComputedStyle, как описывает Jeremiah Grossman. На этот счёт даже есть готовый скрипт.
У этого способа есть небольшой недостаток: требуется включённый JavaScript.
2) Тот же J. Grossman предложил усовершенствованный вариант с использованием CSS. Определяем свой стиль, в котором у посещённых ссылок будет фоном стоять картинка: у каждой — своя. В этом случае браузер выполнит всю работу за нас. Потом достаточно посмотреть в логах, какие картинки были загружены.
Почему это может быть полезно (вредно): если человек посещал некоторый URL, то, с большой вероятностью, у него есть аккаунт на соответствующем ресурсе. Это может пригодиться, например, если вы используете в целевом ресурсе какую-то дырку.
Теперь, почему я про это вспомнил, и почему такой заголовок поста. Один остроумный товарищ при помощи первой технологии решил определять пол посетителя. Его теория в том, что определённые сайты посещаются по половому признаку, так что можно вычислить вероятность того, что вы такого-то пола. Я вот, например, на 68% мужчина.
+19
Я хочу работать в Google! Телефонное интервью (часть 1)
4 min
31KПривет Хабр! Давно не писал. Да это и понятно. Защита диссертации, получение PhD, а сейчас ещё и активный поиск работы — всё это занимает очень много драгоценного времени. Но разговор сегодня пойдёт не о том. Хотелось бы поделиться с Вами, уважаемые хабралюди, ресурсами и описанием процесса подготовки к телефонному техническому интервью с Гуглом, первый технический этап которого я уже прошёл, и теперь готовлюсь ко второму, который будет в пятницу.
+157
Выбор дней рождения на MySQL + мелочи
4 min
5.6KДали задание: выбрать из базы пользователей, у которых на днях день рождения, — для вывода на главной странице сайта.
Используем PHP (ZF) & MySQL.
Поле в нашей БД имеет тип “date”, что уже хорошо. Задание простое, начал писать, …
Быстрее, думаю, погуглить, зачем велосипед изобретать, явно уже решалось сотни раз.
Посмотрел первый запрос, — неправильно он работает, второй – тоже…
Нашел правильный, но он оказался таким монстроподобным.
Удивлению не было предела – некоторые из этих «велосипедов» изобретены в текущем году!
Используем PHP (ZF) & MySQL.
Поле в нашей БД имеет тип “date”, что уже хорошо. Задание простое, начал писать, …
Быстрее, думаю, погуглить, зачем велосипед изобретать, явно уже решалось сотни раз.
Посмотрел первый запрос, — неправильно он работает, второй – тоже…
Нашел правильный, но он оказался таким монстроподобным.
Удивлению не было предела – некоторые из этих «велосипедов» изобретены в текущем году!
0
Скрипты в UltraEdit32 v.14
4 min
2KЕсть программисты которые пользуются таким инструментом как UltraEdit32.
Ни в коем случае не рекламирую этот продукт, просто решил поделится информацией о некоторых его возможностях.
В данной статье рассмотрены возможности по написанию скриптов для UltraEdit v.14.
+4
Как стать «ранней пташкой» (Часть II)
4 min
2.3KЧестно говоря, когда я выложил первую часть статьи Стива Павлины «Как стать «ранней пташкой»», я не расчитывал, что так много людей заинтересуются этой темой. Поэтому я решил продолжить и опубликовать продолжение статьи. Также я понял, что сложно осилить большой кусок текста сразу, поэтому вторую часть я подсократил и выделил важные моменты жирным шрифтом. Полную версию перевода статьи можно почитать в замечательном блоге Сергея Бирюкова — большое ему спасибо за перевод! Итак, приступим...
Сначала вернёмся к вопросу отхода ко сну только в случае желания спать… Чтобы делать это правильно, нужна некоторая осведомлённость и здравый смысл.
Если ты занимаешься перед сном энергичной деятельностью, это может отогнать сонливость на некоторый срок. В колледже я обычно играл в покер до рассвета, после чего мы часто шли завтракать. Я могу не спать дольше, чем предусмотрено моим обычным графиком, если я работаю, отдыхаю с друзьями или занимаюсь какой-нибудь другой активной деятельностью.
Но это не то, что я имел в виду, когда говорил про сонливость. Я упоминал тест, когда не удаётся прочитать больше нескольких страниц без потери внимания. Это не значит, что нужно ждать, пока не упадёшь от истощения.
+9
Как стать «ранней пташкой»
9 min
4.6KЭто одна из моих любимых статей Стива Павлины о саморазвитии. Несмотря на широкую популярность статьи, найти ее на Хабре мне не удалось, решил поделиться с Вами.
Хорошо вставать до рассвета,
такая привычка способствует здоровью,
богатству и мудрости.
Аристотель
«Жаворонками» рождаются или становятся? В моём случае совершенно точно имело место становление. Когда мне было чуть больше двадцати, я редко ложился спать раньше полуночи и почти всегда вставал поздно. Обычно я не начинал свои дела до конца обеда.
Но через некоторое время я уже не мог не замечать явную зависимость между успехами и ранним подъёмом, даже в моей личной жизни. В те редкие случаи, когда я вставал рано, моя производительность почти всегда была выше, и не только утром, но и в течение всего дня. Кроме того, я был в прекрасном расположении духа. Будучи человеком, который активно добивается своих целей, я решил выработать привычку рано вставать. Я просто поставил будильник на 5 утра…
+47
Как готовить презентации. Мини-курс для программиста
5 min
18KУ меня, как и у многих других программистов, есть слабость: я очень люблю различные планерки, на которых обсуждаются новые проекты и идеи. Все презентации в моем представлении делятся на 3 вида: муторное чтение цифр успеваемости начальника транспортного цеха, демонстрации системы из рук и презентация идей и решений при помощи построителя презентаций. Если с демонстрацией системы из рук программисты знакомы по сдаче лабораторных в университетах, а монотонно читающие тексты «коты баюны», постепенно вымирают как класс, то с презентациями у нашего брата явный напряг. Менеджеры еще прошли либо просмотрели курсы «молодого построителя презентаций», то молодежь ограничилась книгами типа «Уроки ПоверПоинта за 24 часа» или хуже того, один раз увидели и самотыком изучили сей продукт буржуазной экономики. Поэтому, просмотр их презентаций вызывает приступ тошноты, не говоря уже о том, что их часто перебивают, вызывая на «живое» общение. Ориентироваться в их презентациях невозможно и зачастую бессмысленно. А ведь для того чтобы создавать красивые презентации нужно немного. Попробую составить список «наставлений для программистов», что делать нельзя и что нужно.
+60
PenSpinning — спорт для программистов!
1 min
4.2KЧто такое PenSpinning? Это, можно сказать, эдакий вид спорта. На русский правильнее всего переводится «манипулирование ручкой». Сам он появился относительно недавно и распространен в России мало, хотя в азиатских странах развит очень неплохо.
Наверное, каждый, сидев в свое время на лекции, начинал специально или непроизвольно крутить ручку в пальцах — вот это и есть пенспиннинг. Все дело не в том, что и где крутить, а в том, как :) Само по себе это занятие помогает не только скоротать время, но и доставляет массу удовольствия, кроме того, при должной тренировке со стороны это выглядит очень даже круто! В России уже существует несколько сообществ пенспиннеров, и на их умение действительно стоит посмотреть. Кстати, по количеству вариантов моддинга ручек этот «вид спорта» дает сто очков вперед любому другому, например, стритрейсингу!
Ну и, для разогрева, пример!
Сайт российского сообщества пенспиннеров
UPD: все о Penspinning на торрентах:
torrents.ru/forum/viewtopic.php?t=984359
torrents.ru/forum/viewtopic.php?t=1687450
Спасибо юзернейму TimTowdy!
UPD2: Отличная подборка обучающего видео онлайн
+96
iPod без iTunes? Это реально!
2 min
32Kвсем привет.
имеется: айпод одного из последних поколений, а также желание работать с ним из-под *nix систем. т.к. я использую FreeBSD, то в этой заметке буду опираться на неё.
имеется: айпод одного из последних поколений, а также желание работать с ним из-под *nix систем. т.к. я использую FreeBSD, то в этой заметке буду опираться на неё.
+39
Как я нечаянно обошел защиту PDF-файла
1 min
809У меня есть десять лабораторных работ, каждая из которых представлена отдельным PDF-файлом. Работать с этим материалом удобнее, когда он распечатан на бумаге. Поэтому я объединил документы в один, пересортировал страницы и разместил их по две на лист для печати брошюрой. Распечатал.
А недавно звонит сокурсник Тарас и спрашивает как же я распечатал эти работы. «Брошюркой (:» — отвечаю я, недоумевая. Оказалось, что все они были защищены от распечатки, модификации, частичного копирования и так далее.
Рецепт прост: воспользуйтесь pdf2ps(1) (из пакета Ghostscript) или pdftops(1) (из poppler) для конвертации PDF-документа в PostScript-документ. Разница между ними, кажется, в том, что первый преобразовывает текст в кривые, а второй оставляет его как есть. Я не вникал в детали. При необходимости можно также сделать конвертирование обратно при помощи ps2pdf(1) или pstopdf(1).
А еще есть pdftotext(1), который просто извлекает текст.
NB: это кросс-публикация с моего блога.
А недавно звонит сокурсник Тарас и спрашивает как же я распечатал эти работы. «Брошюркой (:» — отвечаю я, недоумевая. Оказалось, что все они были защищены от распечатки, модификации, частичного копирования и так далее.
Рецепт прост: воспользуйтесь pdf2ps(1) (из пакета Ghostscript) или pdftops(1) (из poppler) для конвертации PDF-документа в PostScript-документ. Разница между ними, кажется, в том, что первый преобразовывает текст в кривые, а второй оставляет его как есть. Я не вникал в детали. При необходимости можно также сделать конвертирование обратно при помощи ps2pdf(1) или pstopdf(1).
А еще есть pdftotext(1), который просто извлекает текст.
NB: это кросс-публикация с моего блога.
+34
DrWeb для Ubuntu
2 min
3.8KДруг Вадик ака key подбросил идею, которую он реализовал, а я следом за ним. Может кому тоже понравится. Идея кратко в том, чтобы подкинуть ключ drweb32.key от бесплатного продукта Dr.Web LiveCD к «Антивирус Dr.Web для Linux».
+11
CakePHP и хитрая pagination
1 min
789У меня в CakePHP самое больное место — pagination. Особенно когда дело касается хитростей. Банальный ->find('all') работает всегда (ну почти всегда) хорошо и замечательно, а вот pagination…
Соответственно в таблице валюты есть коэффициенты USD coeff = 1, для валюты Euro coeff=1.34.
Сортировать выдачу (paginate) по цене, с учётом валюты. Т.е. дом за 100 000 евро дороже, чем дом за 110 000 долларов (при курсе 1 к 1.34)
Да, именно в двойных скобках. Тогда запрос будет правильным с положенным LEFT JOIN к Currency и правильной сортировкой по вычисляемому полю.
Да, тестировал с MySQL, ибо с другими базами работать не довелось. Надеюсь кому-нить это поможет :)
Дано:
- Есть табличка объектов недвижимости (Immovable) с указанной ценой (Immovable.price) и типом валюты (Immovable.currency_id)
- Есть табличка валюты (Currency) с полями: id, name, coeff (коэффициент)
Соответственно в таблице валюты есть коэффициенты USD coeff = 1, для валюты Euro coeff=1.34.
Задача:
Сортировать выдачу (paginate) по цене, с учётом валюты. Т.е. дом за 100 000 евро дороже, чем дом за 110 000 долларов (при курсе 1 к 1.34)
Решение
$this->paginate = array('order' => array('Count' => 'ASC'),
'fields' => array('*','((`Immovable`.`price`*`Currency`.`coeff`)) as Count'));
Да, именно в двойных скобках. Тогда запрос будет правильным с положенным LEFT JOIN к Currency и правильной сортировкой по вычисляемому полю.
Да, тестировал с MySQL, ибо с другими базами работать не довелось. Надеюсь кому-нить это поможет :)
+1
Моделирование зрения
2 min
677По многочисленным просьбам, связанным с предыдущим постом на тему того, как глаза воспринимают картинку, решил попытаться рассказать о том, как можно производить моделирование технологии eye tracking. За одним получился довольно крупный текст о зрении и восприятии плоских изображений, который я разбил на 6 частей.
Часть первая. Экскурсия в глаз
Чтобы понять то, как человек воспринимает изображение, начать придётся с органа зрения – с глаза. Важным для дальнейшего понимания моментом помимо анатомического строения глаза является ограничения разрешающей способности глаза, которые я тут и опишу. Если это всё вам известно – то можно только бегло просмотреть выделенные куски текста и сразу переходить ко второй части.
Часть вторая. Восприятие
В этом посте рассказывается об некоторых особенностях восприятия человека происходящих ещё на уровне сетчатки глаза (до анализа картинки в мозгу). Полужирным выделены моменты непосредственно связанные с темой моделирования.
Часть третья. Геометрия зрения
Эта часть важна для понимания принципов моделирования eye tracking, а за одним рассказывается кое-какие интересные вещи про угол и чёткость зрения.
Часть четвёртая. Eye tracking
Эта часть рассказывает о том, что такое, собственно, eye tracking, и какие психологические и биологические механизмы лежат за этим определением.
Часть пятая. Как поймать взгляд
Продолжая рассказ, начатый в четвёртой части о саккадах и их моделировании необходимо рассказать о таких феноменах, как ловушки для взгляда и зоны неразличимости. Так же тут рассказывается немножко о том, как привлечь внимание или наоборот отвлечь от каких-оо регионов картинки.
Часть шестая. Моделирование eye tracking
Рассказ непосредственно о принципах и алгоритмах моделирования eye tracking.
Моделирование зрения
Часть первая. Экскурсия в глаз
Чтобы понять то, как человек воспринимает изображение, начать придётся с органа зрения – с глаза. Важным для дальнейшего понимания моментом помимо анатомического строения глаза является ограничения разрешающей способности глаза, которые я тут и опишу. Если это всё вам известно – то можно только бегло просмотреть выделенные куски текста и сразу переходить ко второй части.
Часть вторая. Восприятие
В этом посте рассказывается об некоторых особенностях восприятия человека происходящих ещё на уровне сетчатки глаза (до анализа картинки в мозгу). Полужирным выделены моменты непосредственно связанные с темой моделирования.
Часть третья. Геометрия зрения
Эта часть важна для понимания принципов моделирования eye tracking, а за одним рассказывается кое-какие интересные вещи про угол и чёткость зрения.
Часть четвёртая. Eye tracking
Эта часть рассказывает о том, что такое, собственно, eye tracking, и какие психологические и биологические механизмы лежат за этим определением.
Часть пятая. Как поймать взгляд
Продолжая рассказ, начатый в четвёртой части о саккадах и их моделировании необходимо рассказать о таких феноменах, как ловушки для взгляда и зоны неразличимости. Так же тут рассказывается немножко о том, как привлечь внимание или наоборот отвлечь от каких-оо регионов картинки.
Часть шестая. Моделирование eye tracking
Рассказ непосредственно о принципах и алгоритмах моделирования eye tracking.
+14
Information
- Rating
- Does not participate
- Location
- Amsterdam, Noord-Holland, Нидерланды
- Date of birth
- Registered
- Activity
Specialization
Software Architect