Как стать автором
Обновить
0
0
Saben @Saben

Пользователь

Отправить сообщение

Жизнь PHP-разработчика

Время на прочтение3 мин
Количество просмотров42K
Вступление от переводчика: очень давно веду разработку на PHP. Хоть я знаком с рядом других технологий и вижу некоторые недостатки PHP, но в целом я им доволен, и мне кажется несправедливым, что этот язык программирования подвергается нападкам чаще всего. Недавно нашел статью как раз на эту тему, думаю, позиция автора близка многим php-программистам, поэтому публикую перевод. Старался специально для корпоративного блога нашего проекта о платежных сервисах Web-payment.ru. Кстати, если вам понадобится подключить оплату на сайте — обращайтесь. Ну а далее перевод:
Субъективное восприятие языков программирования не только порождает дискуссии среди скучающих программистов. Оно также влияет на принятие важных решений — прием на работу и финансирование.
Эта фраза заставила меня всерьез задуматься над тем, как сообщество воспринимает PHP.

В недавнем выпуске JavaScript Jabber высказали пару замечательных комментариев о том, насколько люди предосудительны в вопросе выбора технологий, и как погоня за трендами отвлекает от работы над клевыми и нужными штуками.

Хотя Javascript активно занимает нишу PHP, особенно для начинающих разработчиков, есть несколько причин, по которым новые разработчики выбирают PHP:
  • Вы хотите сделать сайт или приложение на виртуальном хостинге.
  • Во всех книгах и видео, которые вы покупаете, так и или иначе работают с LAMP-стеком.
  • Все вакансии для начинающих — для PHP-разработчиков.

Читать дальше →
Всего голосов 69: ↑50 и ↓19+31
Комментарии344

С 0 до 1. Разбираемся с Redux

Время на прочтение9 мин
Количество просмотров330K
Когда вышла версия 1.0 Redux, я решил потратить немного времени на серию рассказов о моем опыте работы с ним. Недавно я должен был выбрать “реализацию Flux” для клиентского приложения и до сих пор с удовольствием работаю с Redux.

Почему Redux?


Redux позиционирует себя как предсказуемый контейнер состояния (state) для JavaScript приложений. Редакс вдохновлен Flux и Elm. Если вы раньше использовали Flux, я советую прочитать, что Redux имеет с ним общего в разделе "Предшественники" новой (отличной!) документации.

Redux предлагает думать о приложении, как о начальном состоянии модифицируемом последовательностью действий (actions), что я считаю действительно хорошим подходом для сложных веб-приложений, открывающим много возможностей.
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии16

Курс по машинному обучению на Coursera от Яндекса и ВШЭ

Время на прочтение4 мин
Количество просмотров116K
Когда-то мы публиковали на Хабре курс по машинному обучению от Константина Воронцова из Школы анализа данных. Нам тогда предлагали сделать из этого полноценный курс с домашними заданиями и разместить его на Курсере.

И сегодня мы хотим сказать, что наконец можем выполнить все эти пожелания. В январе на Курсере пройдёт курс, организованный совместно Яндексом (Школой анализа данных) и ВШЭ. Записаться на него можно уже сейчас: www.coursera.org/learn/introduction-machine-learning.


Сооснователь Coursera Дафна Коллер в офисе Яндекса

Курс продлится семь недель. Это означает, что по сравнению с ШАДовским двухсеместровым курсом он будет заметно упрощен. Однако в эти семь недель мы попытались вместить только то, что точно пригодится на практике, и какие-то базовые вещи, которые нельзя не знать. В итоге получился идеальный русскоязычный курс для первого знакомства с машинным обучением.

Кроме того, мы верим, что после прохождения курса у человека должна остаться не только теория в голове, но и скилл «в пальцах». Поэтому все практические задания построены вокруг использования библиотеки scikit-learn (Python). Получается, что после прохождения нашего курса человек сможет сам решать задачи анализа данных, и ему будет проще развиваться дальше.

Под катом можно прочитать подробнее обо всех авторах курса и узнать его примерное содержание.
Читать дальше →
Всего голосов 83: ↑81 и ↓2+79
Комментарии59

Красивое падение: CSS3-анимация с гравитацией

Время на прочтение3 мин
Количество просмотров51K
Давным давно (летом 2014), когда я усиленно работал с оформлением, передо мной возникла следующая проблема. Я хотел использовать CSS3 для создания эффекта прыгающего мячика с учетом естественных законов физики. Я прошерстил Интернет в поисках какого-нибудь способа, чтобы «вдохнуть» гравитацию в мой мячик.

После нескольких часов просматривания Stackoverflow и доков CSS, я нашел несколько опций, но это все равно не до конца меня устроило. Использование Javascript и Jquery было бы лишним и неэффективным для такой простой задачи, которая, как кажется, должна легко решаться с использованием существующих опций для анимации в CSS3.

Я сначала попытался использовать переходы ease-in (ease-out), которые представлены CSS. Но несмотря на то, что они выглядели достаточно плавными, было слишком сложно добиться ощущения естественности. И каждый новый прыгающий объект нуждался бы в совершенно новой функции, подобрать которую очень трудоёмко. Многие сайты, которые я посещал, предлагали использовать громоздкие keyframe-функции для описания анимации каждого прыжка. Код этих функций выглядит слишком сложным и избыточным. Более того, полученные прыжки объекта выглядели отрывистыми и непрофессиональными.
Решение задачи
Всего голосов 58: ↑37 и ↓21+16
Комментарии12

CSS3 hover effects. Пошаговый туториал

Время на прочтение26 мин
Количество просмотров105K
При создании этого мануала, моей целью было взять три десятка различных эффектов, частью — довольно распространенных, частью — придуманных мной, разместить их от простых к более сложным, и на их примере показать новичкам, никогда не имевшим дело с CSS3 возможностями, как эти возможности работают и как их применить на практике. Именно по этой причине статья вышла подробная, пошаговая, мне было важно описать и разобрать каждую деталь.

Демо материалы лежат здесь.

Предупреждение: эффекты работают только в современных браузерах, поддерживающих возможности CSS3.

Подготовка к работе.

Итак, для того, чтобы создавать наши эффекты нам понадобится вот такая простая дефолтная html-структура:

<div class="effect>
  <img src="img/ef1.jpg" alt="Effect #1" />
  <div class="caption">
    <h4>Title is Here</h4>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut.</p>
    <a class="btn" href="#" title="View More">View More</a>
  </div>
</div>

Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии8

Animate.css — набор кроссбраузерных CSS3 анимаций

Время на прочтение1 мин
Количество просмотров94K

Animate.css




На днях наткнулся на эту замечательную вещь и решил поделиться с Хабрахабром.
Animate.css — сборка отличных кроссбраузерных CSS3 анимаций в одном файле.
Читать дальше →
Всего голосов 71: ↑65 и ↓6+59
Комментарии23

JohnSmith — простой и легковесный JavaScript-фреймворк для построения UI

Время на прочтение6 мин
Количество просмотров15K


На сегодняшний момент существует масса JavaScript-библиотек для создания rich-client приложений. Кроме всем известных Knockout, Angular.JS и Ember есть великое множество других фреймворков, и каждый имеет свою особенность — кто-то пропагандирует минимализм, а кто-то — идеологическую чистоту и соответствие философии MVC. При всём этом многообразии, регулярно появляются всё новые и новые библиотеки. Из последнего, что упоминалось на хабре — Warp9 и Matreshka.js. В связи с этим хочется рассказать о собственной поделке, встречайте, JohnSmith — простой и легковесный JavaScript фреймворк для построения UI.


Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии21

Вкладки (страницы) на одной странице на html/css с помощью :target

Время на прочтение2 мин
Количество просмотров144K
Рассмотрим один из вариантов создания нескольких страниц или вкладок (в том числе вложенных) на html и css без скриптов, списков и таблиц, на одной html странице. Только дивы, только хардкор. Подходит для небольших портфолио и элементов интерфейса. Не будьте буратинами используя это везде подряд.
Суть:

image
Читать дальше →
Всего голосов 56: ↑46 и ↓10+36
Комментарии35

Flexbox на примере игрального кубика

Время на прочтение4 мин
Количество просмотров65K
Что если бы вы могли построить сложный css лейаут в считанные минуты? Flexbox — это новый лейаут CSS верстки, который позволяет легко построить динамические макеты. С Flexbox выравнивание по вертикали, блоки с одинаковой высотой, перестановка и направление становится проще простого.



Есть популярный миф, что flex еще не готов к использованию. Но это не так! У 93% людей сейчас запущен браузер, поддерживающий flexbox. Это лучше, чем поддержка для HTML5.

В этой статье я проведу вас через основы flexbox на примере создания игрального кубика. Сейчас мы пропустим некоторые из более сложных тонкостей flexbox, таких как вендорные префиксы, старая версия синтаксиса и браузерные причуды. Рассмотрим их в будущих уроках.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии37

Telegram-like анимированный placeholder для HTML-инпутов

Время на прочтение2 мин
Количество просмотров11K
В качестве улучшения UX/UI я часто сижу и думаю, что можно было бы улучшить в приложении, чтобы пользователю было чуточку веселее пользоваться им.

Как-то раз я заметил интересную анимацию placeholder'a в нативном Desktop приложении Telegram. Подумал, что будет интересным способом использовать такое и в своих проектах.
Читать дальше →
Всего голосов 14: ↑9 и ↓5+4
Комментарии9

Скринкаст: Знакомство с Codeception

Время на прочтение1 мин
Количество просмотров7.9K
Фреймворк для автоматического тестирования веб-приложений на PHP — Codeception живет и развивается. Но в этот раз вместо скупой порции новостей я бы хотел представить вам первый скринкаст в котором показаны азы работы с Codeception. Если вы только читали про Codeception, то вам обязательно стоит взглянуть на него в действии. Ну а если не читали, но у вас есть веб-сайт, который бы вы хотели протестировать — тоже взгляните.
Смотреть видео
Всего голосов 27: ↑24 и ↓3+21
Комментарии15

Zabbix и бесплатные SMS

Время на прочтение2 мин
Количество просмотров14K
Когда в Google Календаре появилась возможность получать бесплатные SMS уведомления, думаю все разработчики подумали о том, что это можно прикрутить к своим скриптам. Многие так и не нашли времени и сил этим заняться, поэтому предоставляю PHP скрипт для бесплатной отправки SMS себе, а для пущей пользы прикручу его к системе мониторинга Zabbix. Надеюсь после этих слов все системные администраторы подумали о том, как будет здорово получать SMS когда из сети выпадает сервер, кто-то наступает на сетевой провод, перезагружается роутер или повышается температура в серверной.
Читать дальше →
Всего голосов 40: ↑36 и ↓4+32
Комментарии28

Заземление. Что это такое и как его сделать (часть 3)

Время на прочтение16 мин
Количество просмотров97K


1 часть. Заземление
(общая информация, термины и определения)


2 часть. Традиционные способы строительства заземляющих устройств
(описание, расчёт, монтаж)


3 часть. Современные способы строительства заземляющих устройств
(описание, расчёт, монтаж)



В этой части я расскажу о современных способах строительства заземлителей, которые обладают достоинствами традиционных способов строительства и лишены их недостатков.

Д. Основные способы строительства

Д1. Модульное заземление (для обычных грунтов)

Д1.1. Особенности решения
Д1.1.1. Универсальность и простота применения
Д1.1.2. Долгий срок службы
Д1.1.3. Зависимость уменьшения сопротивления заземления от увеличения глубины электрода
Д1.1.4. Суперкомпактность
Д1.1.5. Никакой сварки
Д1.2. Расчёт получаемого сопротивления заземления
Д1.3. Монтаж
Д1.4. Достоинства и недостатки

Д2. Электролитическое заземление (для вечномёрзлых или каменистых грунтов)

Д2.1. Особенности решения
Д2.1.1. Простота применения в вечномёрзлых или каменистых грунтах
Д2.1.2. Компактность
Д2.1.3. Образование талика
Д2.1.4. Никакой сварки
Д2.2. Расчёт получаемого сопротивления заземления
Д2.3. Монтаж
Д2.4. Достоинства и недостатки


Д. Основные способы строительства

Напомню о достоинствах и недостатках традиционных способов строительства заземлителей, описанных в прошлой части:
Читать дальше →
Всего голосов 86: ↑75 и ↓11+64
Комментарии61

Как открыть свой интернет-магазин Ecwid на Facebook и Google Sites

Время на прочтение6 мин
Количество просмотров70K
Никаких веб-студий, техзаданий, кодов и программ. Самостоятельно и бесплатно. Быстро и без лишних заморочек. Просто пара-тройка дружеских советов как всего за 1 час открыть свой собственный магазин в Интернете.
Порядок действий укладывается в 3 приема.
— Создание магазина на Ecwid
— Установка магазина на странице Facebook
— Установка магазина на странице Google Sites
Вся информация из официальных хелпов и баз знаний. Поэтому для разработчиков магазинов эти советы очевидны, элементарны и примитивны. Однако надеюсь, что советы будут полезны тем, кто интересуется интернет торговлей, но пока не имеет специальных знаний и опыта.


Читать дальше →
Всего голосов 34: ↑21 и ↓13+8
Комментарии38

Как подружить Kohana с nginx и PHP FastCGI

Время на прочтение1 мин
Количество просмотров2.3K
Так как для nginxa понятие .htaccess в прямом виде отсутствует для корректной обработки URLов фреймворком Kohana приходится писать собственный конфиг для nginx.

Читать дальше →
Всего голосов 21: ↑10 и ↓11-1
Комментарии7

Создание системы авторизации в высоконагруженном проекте с использованием MemcacheDB

Время на прочтение4 мин
Количество просмотров1.8K
Здравствуйте!

В этой статье я хочу рассказать о проблемах авторизации с которыми может столкнуться любой посещаемый веб-сайт в период роста.

Где хранить аутентификационную базу пользователей?
Как быстро авторизовать пользователя по его строковому логину?
Как собирать распределенные по нескольким шард-таблицам и нескольким базам данных пользовательские данные?
Как заставить все это работать и как в этом нам может помочь MemcacheDB?

Читать подробности
Всего голосов 17: ↑17 и ↓0+17
Комментарии31

Memcached, PHP, Ketama. Если нет, но очень хочется.

Время на прочтение7 мин
Количество просмотров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’а!!!
Ладно, мы им это припомним. Наверное.

Определяем сервера
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
Всего голосов 117: ↑23 и ↓94-71
Комментарии23

Нахождения минимального расстояния до кривой с помощью API Яндекс.Карт

Время на прочтение8 мин
Количество просмотров7.8K
Здравствуйте уважаемые читатели.

Если вы когда-нибудь сталкивались с задачей описанной в топике, то наверное удивлены, тем что в посте будет что-либо кроме ссылки на описание метода getClosestPoint(), потому сразу скажу, что мое решение конечно основывается именно на ней. Однако, мне хочется поделиться не столько алгоритмической красотой (ее за меня реализовывала команда Яндекса создавая API), сколько готовым решением поставленной перед мной задачей.

Наша компания занимается в том числе представлением услуг IP-телефонии и интернета, а так же километрами собственного оптоволокна. для нас весьма важен вопрос на сколько далеко от кабеля находится офис предполагаемого клиента.

Готовое решение, от создания карты с маршрутами оптики, до реализации встроенной в формы определения кратчайшего расстояния ищите под катом.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии6

Домашний сервер. WiFi роутер

Время на прочтение6 мин
Количество просмотров32K
Домашний сервер это просто… компьютер, работающий 24 часа, 7 дней в неделю, 365 дней в году. Что он делает?
«Раздает» интернет по проводу и по воздуху.
Является складом с круглосуточном доступом для всех ваших коллекций фильмов, музыки, игр, программ, backup'ов важной информации, сюда же можно добавить, что это ваше файловое хранилище доступное внутри сети, а если постараться, то и из любого уголка мира можно попасть в него. Понравилось? Хотите «завести» подобное у себя дома?
Тут вспоминается фраза из анекдота — «Главное, мужики, не бояться!».
Читать дальше →
Всего голосов 25: ↑15 и ↓10+5
Комментарии17

40 механик для социальных игр

Время на прочтение4 мин
Количество просмотров29K
Разработчик игр Раф Костер (Raph Koster) составил всеобъемлющий список базовых правил, на которых основаны социальные отношения в играх (мультиплеер, параллельная игра и т.д.). Эти правила для разработчиков игры заменяют азбуку. Во многом они пересекаются с принципами игровой механики, которые уже обсуждались на Хабре.

Раф Костер приобрёл известность как создатель дизайна Ultima Online и креативный директор проекта Star Wars Galaxies, после чего основал собственную студию.
Читать дальше →
Всего голосов 102: ↑92 и ↓10+82
Комментарии33
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность