|
January 1st, 2014
12:00 am - sticker Чтобы убрать неястности...
Я программист / орхетектор / аналитик / team lead, больше всего - программист. Занимаюсь я восновном приблудами для операторов мобильной связи. Ну, знаете? Биллинги там, провижининг, CRM'ы, платежи, sms сервисы и прочая дрянь. Интересно это тем, что у твоего продукта десятки миллионов гарантированных пользователей.
Но здесь речь не об этом. Одно из моих хобби разработка игр и еще всякое, с ней связанное.
А ввиду того, что это не тематический блог, а ЖЖ, готовтесь встретить еще и всякий мусор эмоционального происхождения, да и прочий мусор тоже
|
July 1st, 2009
03:55 pm - По мотивам башорг
#define _2PI PIPI
|
June 24th, 2009
10:01 pm - Мое отношение к OS
 Current Mood: cold Current Music: Blue October - Ugly Side
|
June 23rd, 2009
11:03 pm - Орхетектура Потихоньку делаю себе не движок, но что-то вроде game framework, ради фана. Хочется построить что-то гибкое, чтобы поверх можно легко было лепить. Ну и несколько целей, которые я себе ставил перед началом:
- модульность для упрощения написания / отладки, плюс возможность использовать уникальный набор модулей в каждом проЭкте (например не использовать сеть, или использовать навороченный AI), ну и
ради лулзов ради фана, конечно же
- поддержка многопоточности
- использование готовых middleware библитек (Ogre / ODE / fmod / etc.)
Собственно, получилась некая орхетектура, которую хотелось бы пообсуждать. ( Читать дальше )
Ссылки Component-oriented design на консолях, лобзиком по шаблонам A Flexible and Expandable Architecture For Computer Games Jeff Plummer's Masters Thesis A Data-Driven Game Object System by Scott Bilas (слайды) Паттерны revisited. Введение. На самом деле там aruslan зажигал не только и не столько про паттерны
|
10:08 pm - В Diablo3 не будет ни шлюх ни блэкджека Почему?
Да потому что выходцы из Blizzard так и норовят сделать свое Diablo, только с... ну вы поняли, короче. Новый проект называется Torchlight, ну и как водится, после сингла ребята из Runic Games (теперь они зовутся так) планируют выпустить MMO. Из интересного - в игре все dungeon'ы будут генерироваться движком, весь тулсет разработчики обещают отдать для растерзания игры моддерами.
Для рендера они использовали Огр, говорят - довольны, так что целесообразность использования ogre вроде бы подтверждается. Current Mood: busy Current Music: Stevie Ray Vaughan - The Sky Is Crying
|
June 20th, 2009
10:49 pm - Paderborn BBQ-Skatecontest 2009 Так получилось, что я сейчас ошиваюсь в Германии (Падерборн), а здесь как раз проходит фристайл скейтбоардинг контест - решил сходить. Честно говоря, ожидал увидеть уже успевший набить оскомину фристайл в парке - рампы / перила, но это оказалось намного круче - невозможно передать что оказывается можно делать с этой доской. Кстати, народ собрался совершенно разношерстный, были дети лет по 5, причем зажигали на уровне, были дядечки лет эдак под 40 - по тому что они вытворяли сразу становилось понятно чем они занимались последние 20 лет, проще говоря они на доске чувствуют себя увереннее, чем я на земле. Девушки были, да, но меньше. Камеры у меня с собой не было, так что вот видео с прошлогоднего контеста.
А вообще замечательно, что спорт среди молодежи всячески поощряют, тем более такой, который ей действительно интересен. Да, травмы были - ушибленные и поцарапанные коленки и локти. Current Mood: impressed Current Music: Everlast - Naked
|
June 18th, 2009
10:37 pm - Обратная сторона рептилии Есть некоторые вещи в Python, которые меня раздражают, а именно - переопределение переменных:
a = 0
def set_a(new_a):
a = new_a
set_a(5)
print(a)
И вот еще - отсутствие типизации в данном случае:
var = 0
print(Type(var))
var = "Hello, world"
print(Type(var))
Но на самом деле все это проще воспринимать с другой точки зрения - в Python нет оператора "присвоить значение", вместо него - создание переменной.
А еще я выяснил что внутрях питона список аргументов функции - это dict, еще бы интерпретатору не быть медленным при таких-то раскладах. Вот пруфкод:
def foo(s1, s2):
print (s1, s2)
args = {'s1' : 'Hello', 's2' : 'World'}
foo(**args)
Кстати, кто-нибудь знает что-нибудь про эти самые звездочки? В документации я ничего не нашел...
Подсветку синтаксиса питона я утащил отсюда Current Mood: sleepy Current Music: Rolling Stones - Wild Horses
|
June 17th, 2009
01:12 pm - untitled-01 Кто-нибудь знает рецепт?
 Current Mood: confused
|
May 29th, 2009
12:19 pm - sudo rm -f in a Windows way Наверное любого, кто пользовался *nix сильно раздражает сообщение Windows "Cannot delete file. Access denied". Выходы есть, конечно - Safe Mode, BootCD, но можно проще. Unlocker. Показывает процессы, использующие файл, может отобрать lock у процесса, или убить процесс. Что мне показалось чудом - утилита смогла убить процесс сервиса, работающего под LocalSystem. Current Music: Everlast - Angel
|
May 25th, 2009
04:08 pm - libKISS К сожалению подход KISS для библиотек не работает, потому что у библиотеки минимум 2 программиста - который разрабатывает библиотеку и который ее использует. Можно упростить разработку библиотеки, можно использование, а истина как всегда где-то рядом. Кстати, как раз про это писал ivansorokin
|
May 21st, 2009
08:50 pm - Insert? Append! - Мне абсолютно нечего сказать - Напиши об этом в блог
Как-то так получилось, что я принимаю участие в разработке уже третьей по-моему биллинговой системы и решил вот завести себе в журнале еще один тэг - oracle, собственно вот.
Иногда нужно лить в базу данные, много данных. В случае обычного INSERT INTO происходит много лишних телодвижений, а именно: заполнение свободных экстентов данными, генерация undo сегментов, генерация redo журналов, а еще возможно и flashback сегмента. Сюда же относится и перестройка индексов, выполнение триггеров и проверка констрейнтов (впрочем этого никак не избежать). Чтобы упростить процесс загрузки, Oracle предоставляет специальный режим вставки - append. При использовании этого режима данные добавляются не в свободные экстенты, а вконец таблицы, причем за high watermark (EOF для таблицы). Что происходит в этом случае? Информация в undo и redo не пишется - в случае ROLLBACK просто ничего не происходит, а записанные данные со временем перетрутся, в случае крэша инстанса до COMMIT'а тоже ничего страшного не произойдет. А сам commit в режиме append проходит практически моментально, oracle не нужно фиксировать транзакцию, только передвинуть high watermark за свежезалитые данные. Просто? - Да, но нюансы все-таки есть. Во-первых я не уверен смогут ли несколько сессий эффективно писать данные одновременно (говорят эту проблему решили в 10g), во вторых такой режим удобно использовать если данные из таблицы не удаляются, в противном случае дисковое пространство будет расходоваться неэффективно (Oracle не будет заполнять "дыры", а всегда писать вконец). Ну и самое главное - как использовать режим append. Можно просто добавить хинт в запрос INSERT /* +APPEND */ но в данном случае решение использовать этот режим, или нет принимает Oracle, гарантированно грузить в режиме append можно только с использованием OCI (Oracle Call Interface), это же API использует SQL*Loader Current Music: Stevie Ray Vaughan - Mary Had A Little Lamb
|
May 5th, 2009
04:34 pm - Параноикам на заметку Был просто эпический срач на тему QIP'a(например здесь), не надо воспринимать это буквально, это скорее в контексте: "QIP скурвился, это надо иметь ввиду"
Я вот о чем - QIP Infium умеет подключаться к Google Talk и делать notify о новых входящих в GMail, по клику на котором открывается браузер с почтой. Браузеру эта падла передает URL в виде gmail.com/someshit.ext?login="mylogin"&password="mypassword". Я просто офигел, увидев свой пароль в history браузера (это рабочий компьютер - как минимум неприятно). Current Mood: cold Current Music: Evans Blue - Beg
|
April 16th, 2009
12:57 pm - Не мог не запостить Если вы заняты разработкой Fallout / Stalker MMORPG в свободное время, а вдохновения не хватает - его можно брать здесь просто-напросто черпаком. Current Mood: cold Current Music: Everlast - This Kind of Lonely
|
April 13th, 2009
01:52 pm - Продолжая тему порно... Включал коллегам мелодию с заставки студии Private. Реакция разная, лучшие - морщатся и пытаются вспомнить "Где же я слышал(а) эту мелодию?", или "Ну, знакомое что-то, а в чем прикол?"
А еще диалог отличный вышел - Так а откуда эта мелодия? - Успокойся, ты ее проматывал постоянно Current Music: Everlast - White Trash Beautiful
|
April 4th, 2009
08:11 pm - Про деревья и лес
<Joric> если девелопера оставить одного - он рано или поздно начнет писать класс вектора! Взято у cppguru Известный факт - программисты не видят леса из-за деревьев, архитекторы не видят деревьев в лесу. Это не хорошо и не плохо - так есть. Сложно если программист должен проектировать, а не только писать код от сих до сих. Я сам за собой замечал, что могу углубляться в ненужные на данном этапе разработки детали, если время не жмет. В этом плане нужно над собой работать, конечно же. Но вот как решить сможет человек тянуть проектирование, или это просто хороший алгоритмист, еще на этапе собеседования?
Я когда-то на собеседовании получил задание, которое мне очень понравилось. Общий принцип таков: дается задание часов на 6 - разработать какую-то систему (можно на выбор), к системе есть ТЗ со списком обязательных фич, дополнительные - в плюс. А теперь основной момент - за отведеное время систему написать невозможно. На выходе кандидат дает код, по которому ясны подходы к разработке и что самое важное - умение расставлять приоритеты и подход к проектированию Current Mood: bored Current Music: Сплин - Что ты будешь делать
|
01:23 am - Всячина В целях повышаемости рейтинга журнала буду выкладывать порно, вот как.
В этом мувике снимается Натан Филмор, он же капитан Малколм Рейнолдс в "Светлячке" и "Миссии Серенити"
А вообще-то это сериал - его можно найти по тэгам "PG Porn", "Порно для всей семьи" Current Mood: sleepy
|
March 31st, 2009
09:40 pm - Передача ссылки на массив параметром функции в C++ Это я так, чтобы под рукой было. Ну и может не знал кто...
C++ for beginners
class A
{
public:
const int (&get_array() const)[4] { return m_arr; }
void set_array(int (&newArr)[4])
{
for (int i = 0; i < int(sizeof(newArr) / sizeof(int)); ++i)
m_arr[i] = newArr[i];
}
private:
int m_arr[4];
}; | | _Winnie C++ Colorizer |
Intermediate C++ - указатель на функцию-член, которая возвращает ссылку на массив фиксированного размера.
|
March 29th, 2009
03:03 pm - Фотостудия на колесах Чтобы фоткать всякие штучки для фотостоков купили жене ( jenny_eyre) фотостудию и свет за кучу бабок, блэкджек и шлюхи в комплекте.
Вот они - первые блины (апельсины, если быть точным)

( Фотки мегостудии ) Current Mood: creative Current Music: Бумбокс - Наодинцi
|
March 22nd, 2009
10:03 pm - Future is here Ребята из Microfoft'а написали некое Touchless SDK. Это творение позволяет разрабатывать multitouch интерфейсы, используя самую обычную web-камеру, как ввод, как они сами говорят: "Multitouch without touching". По ссылке есть видео - показывают тестовую программу, которая трэчит разноцветные объекты, с помощью которых можно играть в пинг-понг, или рисовать двумя руками, вообщем довольно интересно. Чтобы попробовать чудо инженерной мысли нужны всего лишь WEB-камера, .NET3.0 и SDK (которое open-source). Current Music: B.B. King - The Thrill Is Gone
|
March 20th, 2009
11:50 pm - Intrusive containers revisited Я как-то вскользь упоминал про intrusive контейнеры. Это такие контейнеры, которые не требуют дополнительных аллокаций для внутренних структур, за счет того, что элементы контейнера сами хранят в себе доп. информацию (ссылки на next / prev для list'а и т.п.). Так вот, в boost'е появилось целое семейство Intrusive, там все, начиная single-linked list'ом и заканчивая RB и AVL tree. Они даже разрешили проблему хранения одного элемента в двух контейнерах сразу и добавили holding strategies. Выглядит это где-то так:
#include <boost/intrusive/list.hpp>
using namespace boost::intrusive;
struct mytag1;
struct mytag2;
struct linked
{
typedef list_member_hook<tag<mytag1>, link_mode<auto_unlink> > hook1_t;
typedef list_member_hook<tag<mytag2>, link_mode<safe_link> > hook2_t;
hook1_t _hook1;
hook2_t _hook2;
};
list<linked, member_hook<linked, linked::hook1_t, &linked::_hook1>, constant_time_size<false> > list1;
list<linked, member_hook<linked, linked::hook2_t, &linked::_hook2>, constant_time_size<false> > list2; | | _Winnie C++ Colorizer |
Согласен, на вид запутанно, но на деле все просто. Пока что есть один нюанс - невозможно определить контейнер внутри объекта-элемента (т.е. дерево объектов построить не получится), по этому поводу я запостил баг, так что будем надеятся что все поправят. *UP Чего-то буст разочаровывает Либы boost'а меня радовали своей секьюрностью, с Intrusive все не так, хоть и задача комплексная, конечно. При использовании Intrusive надо либо публично наследоваться от ..._base_hook, либо добавлять ..._member_hook, но тоже в public секцию. В итоге всем становится доступен метод hook'а unlink(). Т.е. кто угодно может в любом месте выкинуть элемент из контейнера так, что никто об этом ничего не узнает. Current Mood: cold Current Music: Bloodhound Gang - The Ballad of Chasey Lain
|
|
|
|