Tech Questions

Ни хао, комрады!

У меня тут на повестке дня созрело два вопроса:

  1. Doctrine ORM — плюсы/минусы/подводные камни?
  2. Code Review Tools for SVN — как жить дальше?

Может есть дельные советы (с гуглом дружу, но там уж очень сильно мнения расходятся)

Jun. 29, 2009 // 16:17 | Комментарии (2)


.dev | Cards

Поскольку томными вечерами сейчас заниматься особо нечем, я с бумажкой и ручкой выдрочил алгоритм игры в карты (конкретно в Дурачка, но смысловая составляющая будет применима к практически любой карточной игре). Как результат, код для AI игры пишется за час с хвостиком и уместился в примерно 250 строк.

Основные постулаты:

  • Кажой карте присваивается определённый «вес», скажем от 0.01 до 1.00
  • Специальным картам (например козырям) к весу прибавляется 1.00, в принципе если играть в дурачка с сменным козырем, то можно к сменной масти прибавлять какой-то постепенно увеличивающийся «вес».
  • Игра AI делится на атаки и защиту
    • Атака
      • Цель №1 — повысить свой «средний вес» карт
      • Цель №2 — понизить «средний вес» карт противника
      • Лучший ход, соответственно, будет тот, который наиболее близко совпадает с моими целями
    • Защита
      • Цель №1 — удержать свой «средний вес» как можно выше (то бишь тут сразу ясно что порой выгодно «брать», вместо того, чтобы биться)
      • Цель №2 — сбить «средний вес» карт противника «выманивая» тяжёлые карты (ведь AI знает, что противник получит из колоды)
      • Стратегия элементарно расчитывается методом нехитрого перебора вариантов

Вот, собственно, и всё! Осталось сделать кучку опций и продумать интерфейс. В будущем меня, правда, ждёт более сложный момент изучения графического API iPhone, но это должно быть интересно!

Jun. 07, 2009 // 12:54 | Комментарии (0)


.project | Gandja

Ололо, Маньяки!

Я тут ебанулся на отличненько, и сделал одну очень полезную штуку, и назвал её "Gandja" (намёк не понял).

Не знаю как вы, но у меня постоянно какие-то косяки с структурой БД происходят. Локально всё чики, а на сервере какой-нить запрос нет-нет, а не выполню. Проблема эскалировала, когда задействованых в работе компьютеров стало 3. Понять где, что, когда и как делал стало практически невозможно.

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

Есть проблема? Есть решение! Отчего бы не следить за изменениями автоматически (а делиться ими через SVN)? Сказано-сделано.

Welcome to Gandja. Просто и удобно. До безобразия просто и удобно.

copyright note — этот скрипт у нас быстренько на коленке набросал один дяденька, я же его причесал парочкой стилей и с общего согласия выложил на google code

Apr. 24, 2009 // 21:46 | Комментарии (6)


Всему Своё

Меня порой искренне удивляет повальное рвение интернет-сообщества стрелять по тараканам из тяжёлой артиллерии. Например сплошь и рядом все вешают под банальные сайты-визитки хитрожопые CMS и фреймворки, когда в 99% случаев можно было бы обойтись простым SSI?

Keep It Simple, Stupid!

Nov. 20, 2008 // 21:21 | Комментарии (6)


PHP5 on Leopard

В связи с тем, что у меня из офиса на прошлых выходных спёрли компы, обзавёлся новёхоньким iMac. Конечно быстро на него понавешал всяких рюшечек, однако новый PHP5 c сайта entropy.ch вставать категорически отказывался.

Причина капризов оказалась в том, что апач летает в системе используя 64 битную архитектуру, когда модуль PHP5 от entropy собран только под 32х битную машину. Кто виноват? Что делать? Элементарно, Ватсон! Локальную сборку апача оставляем только 32х битную :)

Всё работает. Полёт нормальный!

Nov. 18, 2008 // 19:48 | Комментарии (1)


Конвертировать базу в UTF8

Меня часто спрашивают как конвертировать СУБД MySQL в UTF8 (из дефолтной кодировки, конечно). Итак, рассказываю:

Действие первое — сделать дамп базы с помощью утилиты «mysqldump», команда выглядит примерно вот так:

Действие второе — заменить стандартные кодировки таблиц:

Действие третье — воссоздать базу данных с новой дефольной кодировкой:

Действие четвёрное — залить в базу все данные:

Вот, собственно и всё. Правда есть ещё одна очень важная мелочь — указывать стандартную кодировку для отдачи данных для каждого нового соединения с СУБД, делается это следующим SQL запросом:

Вот!

Nov. 06, 2008 // 20:47 | Комментарии (1)


Flash Charts

А посоветуйте пож-ста движок для построения Flash графиков — обязательно нужна динамическая подгрузка данных (ajax ест-но). Пока из приличного нашёл разве что fusioncharts.com

Jul. 21, 2008 // 10:49 | Комментарии (3)


Google Media Planner

Получил приглашение в Google Media Planner — пока не совсем понял зачем это чудо нужно сайтостроителю, разве что сравнить аудиторию своего проекта с другими в этой же категории (результаты далеко не лучшие, у меня всего 0.2% рынка, хнык-хнык). Дни гламура сочтены, тыц-тыц :)

Jul. 15, 2008 // 11:53 | Комментарии (0)


.hardware

Вопрос, в первую очередь, к маленьким студиям/компаниям, чей первичный источник дохода лежит в сети. Скажите, а как вы организуете ваш хардвер (не побоюсь громкого слова «серверпарк»)?

На данный момент я имею дело с следующей архитектурой:

  • Два «live» сервера примерно одинаковой мощности, перед ними живёт load balancer.
    • Скрипты фигачит апач
    • css и прочую мелкую статику отдаёт nginx
    • крупную статику отдаёт Amazon S3 (ежедневный бекап падает туда же)
  • Один «demo/development» сервер, куда сначала попадают все новые разработки и тщательно обкатываются. К «dev» машине доступ есть у всех разработчиков, там же живёт кодовый репозиторий и всякая ненужная чешуя.
  • Мейлом рулит Google Hosted Applications
  • DNS живёт на XName + Afraid.org

Какие при этом раскладе очевидные минусы? Какие плюсы?

Май. 13, 2008 // 15:29 | Комментарии (0)


.server

После небольшого «слешдота» в пятницу, когда с сервера вдруг тысячи пользователей начали тянуть сотни фотографий одновременно и апач решил отбросить коньки, я таки нашёл пару часов времени и вполне успешно (и с первой попытки) поднял nginx как reverse proxy, то бишь на основных сайтах всю статику стал отдавать именно он, а уже с php обработкой валандался апач.

Не знаю кто там что кричал на отсутствие документации, но скажу честно, что того, что написано на сайте вполне себе достаточно чтобы всё это дело быстро и аккуратно настроить. Будет время – может быть расскажу как ;)

Что примечательно, так это то, что nginx даже не видно в top процессах, когда mysql, apache и postgres там постоянные обитатели.

Жить классно!

Apr. 20, 2008 // 15:38 | Комментарии (3)


.project 2.0

А кто что знает про dosug.nu? Ну в смысле прибыли/обороты, кто конкуренты, что можно сделать лучше и тд и тп; м?

Apr. 16, 2008 // 16:28 | Комментарии (1)


.gtd

Я тут давно вообще-то про GTD распинаюсь, но только сейчас заметил, что мало кто вообще-то читал великое творение Дэвида Аллена. Самое время провести работу над ошибками, ибо русская версия великолепной книги «Getting Things Done» есть в сети. Велкам!

Dec. 12, 2007 // 12:08 | Комментарии (1)


javascript str_replace

Да-да, все давно пользуются prototype 1.6, однако порой ой как не хочется ради тривиальных задачь фигачить всем простым смертным целую библиотеку, а посему встала однажды передо мной задача сделать на Джаба Скрипте банальный str_replace() — долго поэт бился головой об стенку, однако ответ был найден:


function str_replace(search, replace, subject) {
    return subject.split(search).join(replace);
}

Nov. 27, 2007 // 12:21 | Комментарии (3)


Как Наши Лочили Ряды

Да-да, все «реальные пацаны» умеют строить веб-системы, способные выдержать монументальные нагрузки. Ну а для «непацанофф» всегда есть гугл и масса сайтов посвящёных данной тематике. Однако «проблема роста» включает в себя не только вопрос верной сервировки данных клиенту и их грамотной репликации/распределении на кластере. Зачастую проблемы возникают от того, что всё как раз-таки наоборот — слишком шустро работает. Рассмотрим пример из недавней практики:

[ "Поехали" ]

Oct. 25, 2007 // 12:09 | Комментарии (0)


.app | GMail

В GMail появилась поддержка IMAP — как же этого не хватало честным людям! Теперь у нас всё выглядит примерно так:

[image]

Oct. 24, 2007 // 11:06 | Комментарии (1)