Записи с меткой "рабочее"

19
Авг

wtf

   Автор: Aen Sidhe    в дневник

Представьте себе, что у вас единственно возможная кодировка — utf-8 (здравствуйте, мега-разработчики ActionScript 3 AKA Flash).

Представьте, что вы шлёте ник игрока (русские буквы) через инет в параметре GET (POST нельзя, здравствуйте, мега-разработчики ActionScript3. Точнее можно, но только если флешко — в браузере).

Буковки будут закодированы через UrlEncode.

На другой стороне сервер эти буковки декодирует. Но в cp1251. Потому что по другому не умеет. И пишет их в БД.

Потом другой сервер берёт эти получившиеся говнобуковки из БД, считает, что это utf-8, пробегает UrlEncode’ом и шлёт их вам для валидации.

А вы всё считаете, что это буковки в utf-8 первоначальные, пусть даже и закодированные.

Как сказал один из товарищей:

[12:18:00] <ххххх> подобное со стороны часто выглядит как «а давайте и принимающий, и передающий будут ебаться с форматом»

14
Авг

Обновление

   Автор: Aen Sidhe    в дневник

Ну, что, граждане, вышла 3я версия Фрагории, мморпг которую я делаю. 33 часа на рабочем месте — рекорд для меня.

Да, это было вчера и было не до написания данного поста.

Вечером отбывают на ‘Войну в Ираке 3’

UPD: Отличный апдейт ВордПресса. Автозамена кавычечек отломалась.

30
Июл

рабочее

   Автор: Aen Sidhe    в дневник

Всем «спасибо», кто причастен к срыву моего отпуска.

Всем спасибо, кто сделал эти три дня отличными. Остров на Волге — это круто, без вариантов.

UPD: а саундтрек к Watchmen таки офигенен.

14
Июл

mysql is free

   Автор: Aen Sidhe    в дневник, программирование

Дано: таблица T с полями id (pk, autoincrement, int(11)), played (int(11)), avgScore(int(11)). Для записи с заданным id played = avgScore = 0. Это важно.

Вопрос: чему будут равны played и avgScore для записи с этим id (пусть будет 123, неважно) после запросов:

  1. update `T` set
    `T`.`played` = `T`.`played` + 1,
    `T`.`avgScore` = (`T`.`played` * `T`.`avgScore` + 300) / (`T`.`played` + 1)
    where `T`.`id` = 123;
  2. update `T` set
    `T`.`avgScore` = (`T`.`played` * `T`.`avgScore` + 300) / (`T`.`played` + 1),
    `T`.`played` = `T`.`played` + 1
    where `T`.`id` = 123;
8
Июл

profilers-part-2

   Автор: Aen Sidhe    в дневник, программирование, рецензии

Обещанное продолжение про профайлеры. Начало тут

В предыдущей статье мы сделали дамп с помощью WinDbg. Далее, что с ним можно сделать? Наверно много, но меня интересовало только одно, а именно — память. Поэтому, я загнал дамп в .Net Memory Profiler.

Данный профайлер сказал мне, что из 7 гигов рама, у меня управляемой памяти всего 1.5 гига. Так как я был тупо уверен (без всяких на то указаний — это ошибка), что утечка именно в управляемой дотнетом памяти, то эту информацию я сразу отбросил и выкинул профайлер.

Пришлось гуглить и пытать по аське знакомых. Результаты:

“!eeheap -stat” — выдаст статистику по управляемым кучам. Предварительно надо загрузить расширение sos.dll. Посмотрев результаты, я понял, что управляемой памяти на самом деле всего полтора гига.

Дальнейшее было делом техники — зацепился из кода к GC Lua, стал выводить статистику по памяти в лог и убедился, что жрёт наш замечательный интерпретатор.

А вот пособие для нубов, как юзать WinDbg для отсечки утечек памяти.

2
Июл

студенты

   Автор: Aen Sidhe    в дневник

Готовим сдачу очередного этапа партнёрам. Гоняем туда-сюда релизную версию. Диалог между студентом (с) и шефом (ш) (все сидят уже долго и хотят домой, в диалоге мат):

Прочитать запись полностью »

1
Июл

Profilers

   Автор: Aen Sidhe    в программирование, рецензии

Расскажу я вам сказочку о профайлерах. Их есть много, за каждый хотят обычно денег. Да, чуть не забыл — профилировать мы будем память.

Итак, условия задачи: есть 64битный (это важно) .NET процесс, штатный режим которого — 1-2 Gb Ram, иногда оно съедает 7-8 (больше на сервере нет просто). Задача: выяснить что же там такое, что сжирает эти лишние 6 гиг рама, найти и уничтожить, как обычно всё в общем.

На испытания поступили:

  1. WinDbg + SOS (брать в составе нужного фреймворка) — брутальнейший отладчик от майкрософт с интерфейсом в духе «назад в 90е» и «я-vi», ибо практически всё управление через командную строку.
  2. JetBrains dotTrace — новенький гламурный профайлер, писанный на шарпе, с блекджеком и шлюхами.
  3. .Net Memory Profiler — понтов поменьше, чем у JetBrains, но интерфейс вполне приятный.

Я не буду рассказывать про все их фичи — желающие сами прочтут по ссылкам. Я лишь расскажу, как я ими пользовался.

Запустил я WinDbg, увидел аццкое окошко, кучу непонятных букв и мегамануал и понял, что этот звездолёт я освою только в крайнем случае. Ну уж если совсем жопа будет. И отложил его подальше, благо он бесплатный, лежит — жрать не просит. Далее шёл фаворит — dotTrace.

Фаворит заупрямился сразу — к работающим процессам он не аттачится, видите ли там API херовое, поэтому у них API своё и надо запускать процесс из-под него. Ну раз так — значит так, нам то, что. Запускаем, эмулируем ситуацию, делаем дамп. Доттрейс думал долго. Минут 15, но дамп сделал (честь ему и хвала). Но дальше — финиш. Открывать его он отказался, сославшись на «Not enough memory». Я тупо посмотрел на свободных 6 гиг рама и ещё 20 гиг свопа, почесал в затылке и написал в саппорт.

добрый день.
у меня есть пара вопросов по dottrace
есть дампы по 900 метров файлы, снятые с процесса, который жрал примерно 2 гига рама. записывались только сами объекты, без колстеков, гарбадж коллектора и финалайзер инфы.
пытаемся открыть версией 3.1 этот дамп на сервере (16 гб рама, вин 2003 р2 сп2 х64, 2 xeon каких-то). доттрейс падает с not enough memory.
что у нас не так?

Ответ меня сразил наповал:

слишком большой снепшот. dT 3.1 — 32-битное приложение, ей 16 физических гигов не сильно помогут

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

Ну, да ладно. Выкинув поделку от Jetbrains, я взялся за .Net Memory Profiler. Создателям возможная кривость Debugging API не помешала и профайлер умеет как цепляться к существующим процессам, так и запускать из под себя их. Поигравшись по мелочи с настройками, пытаемся сделать дамп процесса. Профайлер думал 2 часа, меня проклинали тестеры, но дамп сделать не смог. Стоит, правда, в два раза дешевле — 250 баксов.

Добрый коллега посоветовал для снятия дампа ClrDump, бесплатную тулзу от спецов по отладке. Тулза порадовала быстрой работой, произведя дамп в 0 (ноль) байт с процесса в 7 гигов. Немедленно была составлена жалоба в суппорт:

Hello.

I wonder why ClrDump produces dump of zero size? My process have 7 Gb of ram and I want to look why.

Command string: ClrDump 3684 sil.dmp Max.

What am I doing wrong?

There is enough space on HDD (about 100 Gb of free space)

Regards, Anatoly Popov.

Автор сначала вежливо ответил, что он в отпуске, но на следующей неделе рассмотрит проблему внимательно. Не обманул, но ответ уже не удивлял:

Hello Anatoly,

Is your process 64-bit? If so, ClrDump cannot create a dump for it (limitations of 32-bit DbgHelp.dll). Unfortunately, there is no 64-bit version of ClrDump (it was created when 64-bit systems were not widespread, and now I don’t have time to upgrade it).

As a workaround, it should be possible to write your own tool that would be built as 64-bit executable, load 64-bit DbgHelp.dll and create the dump. Three function calls are needed: OpenProcess (open the target process), CreateFile(create the dump file), MiniDumpWriteDump with the proper parameters to create the dump. I can send you a sample code if you want.

Regards,

Oleg

Но тут хоть претензий предъявить нельзя — тулза бесплатная, делалась для себя. Так что ладно.

А что же наш звездолёт, который WinDbg? Звездолёт отлично делает дампы со скоростью, примерно равной скорости записи на винт, работает как часы, даром, что бесплатный, древний, да от майкрософта.

Да, кстати, в Vista и 2008 сервере так трахаться не надо. Открываем Task Manager, тыркаем правой кнопкой в процесс, выбираем Create Dump, вуаля, всё готово.

Приятной вам работы.

28
Май

рабочее

   Автор: Aen Sidhe    в дневник

Произносить с выражением, стоя в позе Гамлета перед монологом про Йорика:

— Коровы! Коровы! Не жрите мою память!

17
Май

байка из Нска

   Автор: Aen Sidhe    в дневник, программирование

Делали как-то какую-то херню для танковых войск. Один модуль у нас, один в Москве. Наш модуль сделали, приезжают москвичи. А они то ли сроки пролюбили, то ли просто не смогли сделать. В общем, включают их херню, а она не работает. Ехали москвичи в купе, в поезде. И они значит, придумали отмазку. «Растряслось, пока ехали». Растряслась херовина для танка в поезде, агащасблин.

Директор НИИ просто присел. А потом он долго объяснял «специалистам», где, как и через что их будут иметь. А также как будут иметь всех их родственников.

Одного спеца уволили в тот же день, второго по выходу из больницы, куда он попал с инфарктом.

Понятное дело, что все совпадения с разными реальными персонажами или НИИ, или ещё чем-нибудь абсолютно случайны.

2
Май

World of Warcraft на iPhone

   Автор: Aen Sidhe    в дневник

Сижу, никого не трогаю, читаю игроновости и внезапно натыкаюсь на ролик. Господа, ММОРПГ на мобилах уже здесь.

Хотя чего я удивляюсь. 600 МГц проц, 256 Мб рама для смартфонов/кпк уже давно не проблема, а ультима вроде как раз на такой конфигурации и работала. Хотя врать не буду, не помню. Под катом ролег.

Да, перед тем как кричать «фейк» и прочее, следует уяснить, что графика рендерится на сервере Vollee, а айфон общается именно с ним. А сервер Vollee проксирует все запросы уже в WoW сервера. Соглашение с Blizzard у них есть.

Прочитать запись полностью »

Страница 4 из 7« Первая...23456...Последняя »