You are viewing [info]aka_rider's journal

January 1st, 2014


12:00 am - Давайте знакомиться.
Я программист / орхетектор / аналитик / team lead / системный интегратор / консультант, больше всего - программист.
Занимаюсь я восновном приблудами для операторов мобильной связи. Ну, знаете? Биллинги там, провижининг, CRM'ы, платежи, sms сервисы и прочая дрянь. Интересно это тем, что у твоего продукта десятки миллионов гарантированных пользователей.

Занимаюсь я SQL и no-SQL субэдешечками.

Чем-то занимаюсь ¯\(°_o)/¯

А ввиду того, что это не тематический блог, а ЖЖ - готовтесь встретить всякий мусор эмоционального происхождения, да и прочий мусор тоже.

Заметки о программировании фильтруются по dev

Google профайл

Linkedin профайл




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

(4 comments | Leave a comment)

March 10th, 2012


03:01 am - C++ lifehack
Всякие compile time сообщения можно выводить в том же формате, в котором компилятор выдает предупреждения / ошибки, тогда они будут восприниматься IDE как сообщения компилятора и к нужной строчке можно будет перейти по клику. У меня для этих целей служит вот такой макрос:

#define __PP_STR1(X) #X
#define _PP_STR(X) __PP_STR1(X)
#if defined(_MSC_VER)  // output in format that Visual Studio "cl" does
# define PP_LOCATION __FILE__"("_PP_STR(__LINE__)"): "
#else  // assume gcc and output in the format it does
# define PP_LOCATION __FILE__":"_PP_STR(__LINE__)": "
#endif
#define COMPILE_TIME_MSG(theMSG) PP_LOCATION theMSG

Пример использования:
.....
#else
# define forceinline inline
# pragma message ( COMPILE_TIME_MSG("Warning: forceinline macro was not properly defined") )
#endif

* Отвлеченное бессознательное: если в аду есть специальное место для тех, кто увлекается преждевременной оптимизацией, как оно выглядит? *


Current Music: Herbie Hancock - Cantaloupe Island

(7 comments | Leave a comment)

March 9th, 2012


04:33 am - Trolling like a Guido
"Explicit better then implicit" - говорит нам Гвидо, заставляя дописывать этот дурацкий self аргумент в каждый метод класса. А потом он добавляет декораторы функций...



Питон на брейнбенче я сдал плохо - 3.84. Хотя результат и ожидаемый: ни одного крупного проекта на питоне у меня не было, граблей я встречал немного, кастомных метаклассов и прочей черной магии не практиковал. Знания одной лишь документации для теста явно мало, нужен солидный опыт.
Current Mood: accomplishedaccomplished
Current Music: God Is An Astronaut - Echoes
Tags: ,

(Leave a comment)

March 6th, 2012


03:42 pm - Халява брейнбенче до 9-го. Налетай!

Current Music: Limp Bizkit - Shotgun

(2 comments | Leave a comment)

March 1st, 2012


11:07 pm - Балуюся с GarageBand
Такое оно вот:

Прослушать или скачать aka.rider Groovy mood бесплатно на Простоплеер

Не знаю, музыка оно или нет, а минусовок для гитары я себе теперь наклепаю.
Current Mood: creativecreative

(2 comments | Leave a comment)

February 24th, 2012


07:43 am - Переключение раскладки в Windows по CapsLock
Захотелось странного: переключать раскладку клавиатуры в Windows по CapsLock. Клавиша большая, красивая и расположена в удобном месте, а вот функция на нее навешена абсолютно бесполезная.
Нативно windows этого не умеет, а маленькой программы, способной выполнять эту простую функцию я не нашел.
Поэтому вот: CapsLock keyboard layout switch sources

После запуска программы переключение раскладки для активного окна будет работать по CapsLock. Если для каких-то целей эта демоническая кнопка все-таки понадобится в своей оригинальной ипостаси, то это Shift+CapsLock.
А, ну и стандартная комбинация (Alt+Shift / Ctrl+Shift) естесственно никуда не девается.

Комбинация для переключения раскладок может быть вобще любой, возможно кто-нибудь захочет поиметь стандартную маковскую Alt+Space на Windows - это поменять одну строчку кода.
Current Mood: cheerfulcheerful
Current Music: Placebo - The Bitter End

(4 comments | Leave a comment)

February 9th, 2012


10:29 pm - Многопоточное программирование для самых ленивых. Async call и концепт Future
"Всякие IO bounded операции хорошо выполнять паралельно, но плохо синхронизировать" - сообщает нам кэп.
Очевидный паттерн "вызвал чё-то там, подписался на callback" - самое ужасное, что только можно придумать, я уже как-то про это писал. Вот тут-то на сцену выходят микропотоки, coroutine, tasklet и черт в ступе - все это только для того, чтобы писать (и читать конечно же) многопоточный код сверху вниз, как будто поток всего один. Вся эта артиллерия действительно хороша, если к месту (и зачастую нужны специальные сорта травы, чтобы понять реализацию очередного micro-threading framework), но иногда хочется просто обычного асинхронного вызова в одну строчку.
Для таких случаев существует один прекрасный концепт - future, я с ним впервые познакомился, разбирая код boost::coroutine.
Future - это такой placeholder под результат асинхронной операции, вся его прелесть в простоте как реализации так и работы с ним.

Выглядит оно приблизительно так:
Copy Source | Copy HTML
import sys, async
def really_long_op(what, nonsense):
    import time
    time.sleep(3)
    print('Beyond: ', what, nonsense)
    return 42
def main():
    print('One answer to the Ultimate Question of Life, the Universe, and Everything. Please')
    future = async.async(really_long_op, 'Be cool!', nonsense='Bzzz')
    if (not future.is_ready()):
        print('Not ready yet. Do other stuff')
    print(future.wait_result(timeout = None))
if __name__ == '__main__':
    sys.exit(main())


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

Такой подход - просто возможность распаралелить какие-то операции нахаляву, не меняя архитектуры. Для труЪ многопоточности нужно запастись фреймворком посолиднее.

Все 47 строчек модуля async скачать бесплатно без регистрации

Good coding, everyone.
Current Mood: busybusy
Current Music: Day one - Bedroom dancing

(13 comments | Leave a comment)

December 9th, 2011


06:06 am - SQL Fail
Когда я только начинал учить SQL, книжка мне рассказывала что это такой специальный язык на котором я должен изложить чего я хочу и не волноваться как именно это будет сделано.
Но абстракции-то, сука, текут! И вот я занимаюсь тем, что прыгаю с бубном вокруг базы, пытаясь прибить гвоздями планы выполнения к запросам. Причем т.к. я не должен вобще-то беспокоится о такой мелочи, как способ выполнения запроса, то стандартных средств у меня просто нет.
Конечно же есть хинты (только рекоммендации оптимизатору), есть аутлайны, есть заморозка статистики, но это все напоминает мне о корешках и припарках.
Я не видел ни одной продакшн системы с СУБДшечкой, где бы нужен был оптимизатор, все запросы вылизаны и обкатаны заранее, наоборот трясешься после создания индекса как бы планы выполнения не поплыли.
Вот и получается: бородатые математики пишут умный оптимизатор, специально обученные обезьянки навроде меня пытаются обойти этот оптимизатор, все за это получают деньги, все довольны, многим даже нравится.
Я не то чтобы против SQL'я и реляционок, просто я бы хотел нормальный инстумент для своих ритуальных плясок, по типу:
SELECT USING INDEX(index_a) a.* FROM table_a a
 LEFT INNER NESTED LOOPS JOIN table_b b ...
 [...]


Да, и чтобы два раза не вставать:
Никогда не пишите:
assert(size > 0 && is_valid_alignment(alignment))

пишите:
assert(size > 0); assert(is_valid_alignment(alignment));

Когда прийдет время Ч, не всегда будет понятно какое из условий профэйлилось, и повторить ситуацию тоже получается не всегда.

Good coding, everyone.
Current Music: Children Of Bodom - Bed of Razors
Tags: ,

(17 comments | Leave a comment)

December 1st, 2011


08:43 pm - Лингвистика и культурология
Работая в международной компании, получаешь великолепную возможность узнать больше о культуре и обычаях разных стран. Причем о такой культуре и таких обычаях в книгах писать не принято :)

Вот какие ассоциации у вас вызывает: "Ja, ja. Dast ist Fantastish!"? Ну ты понел.
Оказывается у китайцев есть точно такой же стеб на тему японского порно (там слово что-то вроде "яматО", что означает: "пожалуйста остановись", но подразумевается: "не останавливайся"), куча анекдотов на тему, в фильмах встречаются референсы и т.п.

Кстати, мне рассказывали, что Германия - вовсе не сердце порноиндустрии, как мы привыкли считать. Просто большинство порнухи, привезенной из Америки в Европу, было переозвучено(!) в Германии, а оттуда она уже попала на родимые просторы.

А еще я сегодня выучил 2 слова на китайском, в переводе - "спасибо" и "пошел нахуй". С произношением певого проблемы, а второе идеально (это постоянный источник лулзов на перекурах).
В китайском очень важна интонация, а я не всегда могу ощутить разницу в своем произношении.

Такие дела.
Current Music: Slipknot - Snuff

(4 comments | Leave a comment)

08:17 pm - CMakeLists from dir
Сайт перфекционист.ру все еще находится на стадии разработки (с)

Решил разобраться с CMake (проект кросс-платформенный, надоело обновлять vcproj и makefile руками).
Ну почитал документацию, посмотрел как сделана build система в Ogre - вроде бы ничего сложного, сел писать. Самая первая задача (кроме базовой конфигурации) - засунуть список исходников в target, руками конечно же делать лень, а shell'а под рукой не оказалось. Дай думаю пару строчек на питоне набросаю... Long story short:
Usage: cmakelists_from_dir.py [directory] [options]

  directory             path to directory for which file list will be generated

Options:
  -h, --help            show this help message and exit
  -m *.*, --mask=*.*    file mask
  -v SOURCES, --variable=SOURCES
                        name of CMake variable containig all listed files
  -o CMakeLists.txt, --output=CMakeLists.txt
                        redirect output to FILE (by default it will be print
                        to stdout)
  -n, --no-recurse      disable subdirectories recursion
  -p PREFIX, --prefix=PREFIX
                        add PREFIX to each file


Человеку свойственно откладывать задачу, которая непонятна, а браться за простую.
Ладно, выводы сделаны. Я надеюсь оно кому-нибудь еще пригодится

CMakeLists_from_dir.py )
Current Mood: crappycrappy
Current Music: Portishead - Roads

(8 comments | Leave a comment)

November 17th, 2011


06:50 pm - Вопросы на собеседованиях
Кратенько так расскажу про субъективное восприятие вопросов на собеседовании. Это я про техническое собеседование, конечно же.
Когда меня спрашивают про структуры для хранения хренальйона данных со сложными связями, хитрые оптимизации разных сортировок для частных случаев, заставляют решать нетривиальные задачки и т.п., я выхожу с собеседования выжатым, но всегда довольным.
И наоборот, когда мне показывают куски кода навроде:
Copy Source | Copy HTML

  1. class B {

  2.   B() { printf("B::B"); throw "error"; }

  3.   ~B() { printf("B::~B") }

  4. };

  5. class C { C() { printf("C::C") } };

  6. class A : virtual public B, virtual public C

  7. {

  8.   A() {

  9.     printf("A::A");

  10.     throw std::runtime_error

  11.   }

  12. };

  13. // ................................

  14. i = 42;

  15. ++i++ = ++i + i++

  16. printf("i = %d", i);


И просят расписать что попадет в output, я грущу, печалюсь, неправильно отвечаю на вопросы и т.п.

Почему так? Все просто. По вопросам же пытаются определить квалификацию кандидата, причем не какую-нибудь там абстрактную, а тот кусок, что будет востребован в реальной работе.
Так вот в первом случае мне кажется что заниматься прийдется как минимум rocket science, это даже не принимая в расчет того, что собеседования такого плана - это такой персональный challenge. Второй случай я (подсознательно) интерпретирую так: "ну у нас этого говнокода тонны, меняешь местами классы в списке наследования - все падает. Код чуть менее чем полностью завязан на порядок инициалиции переменных и цепочке вызовов конструкторов, из которых может прилететь exception, на рефакторинг и юнит тестирование MBA бюджеты не выделяют, мы здесь стандарт наизусть знаем".
А я под дулом пистолета не вспомню эту гребаную цепочку при виртуальном множественном наследовании, приоритеты операторов я тоже не помню /* у оператора () выше приоритет, чем у &, твою ж мать */ Я читал это тыщу раз, но как могу это запомнить, если я не пишу такого кода и главное - такого кода я видеть не хочу.

Еще раз подчеркну, что вышеизложенное - это всего лишь мое субъективное восприятие, понятно что оно, если кореллирует с реалиями, то слабо.

Выводов не будет. Хотя... Тщательно продумывайте вопросы на собеседование и помните что ненависть портит карму.
Current Music: God Is An Astronaut - Fire Flies And Empty Skies
Tags: , ,

(104 comments | Leave a comment)

November 15th, 2011


09:22 pm - p2p mmorpg anyone?
Я знаю что пост, с таким заголовком у меня в ЖЖ уже есть

Я тут подумал другое:
Я вижу 3 основные проблемы, с которыми прийдется столкнуться при создании этого самого mmo:
Во-первых теорема CAP, потом latency (маршрутизация в p2p все-таки медленная), ну проблема синхронизации игрового состояния станет в разы круче. Что там еще?

Можно все технически скользкие моменты заложить прямо в игровую механику. Конечно, про мужиков с мечами сделать игру не получится, но вот представим какой-нибудь космосим, или "Космических рейнджеров":
. Разбиваем игровую вселенную на секторы - маршрутизация становится легче.
. Передвижение кораблей медленное, выстрелы требуют например разогрева лазера, или торпеды там, которые долго летят на цель - высокое latency уже не так критично.
. Вместо традиционного чата делаем войс чат (latency в текстовом чате критично), а все косяки VOIP'а скидываем на "помехи при передаче в космосе же", режем частоты.
. Ну и в таком же духе можно еще придумать.

А! И главное: заплатите мне кто-нибудь бабла за R&D сабжа, у меня руки чешутся, как в молодости, ей-богу.
Current Music: Bush - The Chemicals Between Us

(33 comments | Leave a comment)

October 11th, 2011


04:27 pm - Удаленная работа (продолжение)
Я совсем забыл написать о преимуществах удаленной работы. Потом я думал что же написать такого, что не совсем уж очевидно.
Вот оно: ищу удаленную работу С++ программистом

мое резюме

Можно предлагать работу в комментариях, или слать письма на мыло, указанное в резюме
Current Music: Flaw - Decide

(Leave a comment)

October 7th, 2011


03:32 pm - Удаленная работа, работа - мечта.
Поделюсь своим опытом об удаленной работе, постараюсь изложить максимум полезной и конструктивной информации. Понятно, что многие сказанные вещи базируются на субъективном мнении и восприятии, а вопросы, касающиеся законодательства привязаны к Украине (для России это +/- тоже самое), но думаю информация будет полезна всем, кто работает, или подумывает работать удаленно.
Итак, вы решили работать удаленно. )

Пользуясь случаем, смею заметить, что Amy Winehouse великолепна
Amy Winehouse — He Can Only Hold Her
Current Mood: awakeawake
Current Music: Amy Winehouse — He Can Only Hold Her

(34 comments | Leave a comment)

July 7th, 2011


03:45 am - p2p mmorpg anyone?
Я сейчас усиленно изучаю всякие p2p протоколы, и мне тут подумалось, что в mmorpg можно сделать если не полностью p2p, то сильно разгрузить сервер, используя принцип Bitcoin.
Например солвер физики на клиенте расчитывает новую позицию видимых игроков и broadcast'ит результат в сеть, сеть принимает только тот результат, что подтвержден максимальным количеством клиентов, остальные отбрасывает. При апаратной поддержке физ. движка, большой нагрузки на железо не случится. Тоже самое можно для pathfinding'а реализовать.

(33 comments | Leave a comment)

D.Rider on everything

> Recent Entries
> Archive
> Friends
> User Info
> previous 15 entries

> previous 15 entries
> Go to Top
LiveJournal.com