Блог пользователя RodionGork

Автор RodionGork, 11 лет назад, По-русски

Помню что здесь есть люди экспериментирующие с / занимающиеся / интересующиеся разработкой игрушек — вот их мой фэйл и позабавит (а будет ли полезен — не знаю).

Пару-тройку месяцев назад стало мне интересно андроидом побаловаться. Игрушка вышла незамысловатая, но ессно я был очень доволен и засунул её на гугл-плей.

И вот давеча приходит от гугла письмо счастья:

_This is a notification that your application, Wordys — word tetris, with package ID none.rg.wordys, has been removed from the Google Play Store. REASON FOR REMOVAL: Alleged trademark infringement. Google has been notified that aspects of your application, Wordys — word tetris, allegedly infringe upon the trademarks of others, and it has been removed from the Google Play Store due to a violation of the Content Policy. ... You may contact Blue Planet Software, Inc. at [email protected]. _

Дальше я минут пятнадцать читал и понял что удалили по-видимому десяток приложений выпадающих на первой странице по запросу "TETRIS", в связи с тем что это словечко оказывается зарегистрировано как товарный знак (сам дурак, конечно — но я как и многие привык считать его нарицательным). Ну удаляли видимо тех кто не проплатил его использование :)

explanation: These applications infringe Tetris Holding's trademark rights because they include the TETRIS trademark in the title of the applications.

Поди ж ты, целый "Tetris Holding" под это дело создан. Ложку мёда в бочку дёгтя добавляет лишь информация что вроде бы совладельцем является автор оригинальной игрушки (и соотечественник), т.е. не совсем чужой дядя карманы набивает... :D

Удаление приложения на гугле как оказалось означает что страница приложения лочится, статистика, звёздочки и отзывы теряются. Можно перевыложить приложение заново, с нуля "исправив нарушения" (что я и сделал). Тут конечно огорчает что шанса поправить косяк не дают (ну да, поставил галочку "правила читал" — значит получи поооолную ответственность)

В общем, мне повезло т.к. за пару месяцев существования игрушка набрала немного меньше 2000 скачиваний. Представляю как "радовались" собратья по ремеслу из той десятки, у кого статистика была на порядки получше :)

Кроме того повезло что удаляли видимо только с первой страницы выдачи — где-то на второй болталась ещё одно моё творчество (аналогично имеющее слово Tetris в названии — я как и многие пробовал силы на простеньких игрушках), но его я наученный опытом поспешил переназвать.

Так что если для кого это актуально — помните сей слегка печальный но довольно забавный опыт. Остаётся вопрос как проверять традемарки — сейчас я изучаю этот вот сервис — если кто-то посоветует лучше, буду благодарен.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +44
  • Проголосовать: не нравится

Автор RodionGork, 11 лет назад, По-русски

Коллега прислал эту ссылку с надписью "угораем всем отделом"

http://reportazhyst.com/u-lvovi-pravoohorontsi-nakryly-it-pryton/

В ходе блестящей операции... во Львове накрыли... IT-притон... в трёхкомнатной квартире... Для ВИП-клиентов из США и Европы... Предприимчивый организатор... Несчастные неимущие студенты, приехавшие во Львов в поисках ЛУЖ (лучших условий жизни)... А оказались... в притоне! Сказали что программизьмом занимаются впервые и отказались давать показания...

Полный текст и комментарии »

  • Проголосовать: нравится
  • +11
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Вкратце

Ищутся желающие потерзать проект корпоративного тренинга (который зашёл в идеологический тупик). Надо человек 20 я думаю. Догадываясь что желающих будет раз в 10 меньше чем надо, предлагаю по окончании определить "победителя" и наградить его символическим призом в 100 баксов.

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

Я выложил проект в инет — можно скачать игровые файлы и утилиту для запуска. Зарегиться тоже можно (наверное) но лучше написать мне в личку своё мыло (см ниже).

Подробнее

Тренинг в форме соревнования ботов на javascript. Боты должны играть в игру такого содержания:

Два игрока кидают игральную кость. Каждый может кидать несколько раз за ход, пока не выпадет 6-ка, либо пока он сам не решит остановиться. Если останавливается — прибавляет сумму выпавших за ход очков к своему текущему результату — если же выпадет шестёрка все очки за этот ход сгорают. Несколько подробнее, с примерами, можно в скачиваемом архиве посмотреть.

Победителя предполагается (пока) выбрать по финальным результатам с помощью лотереи, однако в соответствии с рейтингом (т.е. тот у кого рейтинг на 400 очков больше должен иметь в 10 раз больше шансов на выигрыш). Этот механизм тоже описан. Впрочем его можно будет обсудить / изменить.

Время проведения мероприятия приблизительно до 24 ноября 2012. Если наберётся 20 человек раньше то по общему согласию можно будет это дело сократить.

Русского языка нет, извините — прямо сейчас я не готов это пофиксить.

Чтобы зарегиться

Напишите в личку своё мыло (туда будут приходить пароли) и я создам для вас проапгрейженый аккаунт. Если всё же зарегились прямо там, можете щёлкнуть на странице профиля "попросить проапгрейдить". Если (для нужд тестирования, гы) вам надо доп.аккаунт, заводите ещё один неапгрейженный (или больше). В функционале определения победителя они не учитываются.

Тестирование

Будем считать "багом" ошибку, влияющую на нормальное функционирование, а "дырой" какую-либо уязвимость, которую можно злокозненно использовать. Если вы найдёте их, пожалуйста сообщите в личку. Наверное надо постановить что если будет найден косяк из-за которого завершить контест в принципе невозможно (неустранимый недостаток проверяющей части, скажем) то победителем будем считать того кто нашёл этот самый косяк.

Если что-то идёт не так или всё сломалось — пожалуйста, не пугайтесь (не ругайтесь). Но конечно все кому охота постебаться в мой адрес — вполне welcome (в пределах разумного)! :-)

P.S. Источник задачи (игры для ботов) — взял в старинной книжке Ж.Арсака "Программирование игр и головоломок" (он тоже у кого-то позаимствовал). В принципе правила можем поменять (или вообще другую игру сделать, это не оч принципиально).

Полный текст и комментарии »

  • Проголосовать: нравится
  • +13
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

В старом почтовом ящике обнаружил извещение об очередном соревновании в рамках проекта (или что это) "Интернет-математика".

Не нашёл чтобы кто-то постил здесь инфу об этом мероприятии, так что на всякий случай закидываю ссылку: http://switchdetect.yandex.ru/ (А может была но осталась незамеченной? ну не помешает, авось)

По прошлому году мне такое мероприятие запомнилось как контест в духе TopCoder Marathon с 17-гигабайтным текстовым файлом входных данных. Обработка на нетбуке шла ессно часами даже после утрясания и упрощения. Однако возможно коллегам более подкованным в этой сфере чем я контест будет интересен.

Регистрация там до 15 декабря, призы какие-то подразумеваются. В общем, если не видели, гляньте краем глаза — вдруг это для вас.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +28
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Для внутрикорпоративного тренинга планируется соревнование ботов. Откуда слизывать общую идею, то есть тьфу, брать примеры для подражания нынче вариантов много. Однако не всё ясно с тем как выявлять победителя (по рейтингу например).

Проблем вижу несколько. Сейчас хочу попросить идей/советов только по одной из них. Вот утрированный пример:

Играют два игрока, допустим, Ка и Бу в камень-ножницы-бумага. Ка придумал гениальную стратегию — кидать "камень" с вероятность 50% а всё остальное по 25%. Бу был ещё гениальнее и его стратегия — кидать "бумагу" с вероятностью 50%, а остальное по 25%.

Таким образом стратегии у них тупо одинаковые, но при игре вдвоём Бу при большом числе игр ощутимо ведёт в счёте.

Правда это только пока не придёт игрок Но (идея которого заключается в том чтобы с вероятностью 50% кидать "ножницы"). Он конечно всё испортит и рейтинги сравняются.

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

Не думаю что проблему можно решить "идеально", поэтому собираю пока варианты которые хотя бы отчасти помогут положению. Пока есть только два предложения:

  1. Добавить в систему безбашенных ботов играющих равномерно-рандомно (тогда относительно них "тупость/умность" других игроков будет проявляться) — но это вообще достаточно сложно и непонятно и зависит ещё от того какая игра будет окончательно выбрана.

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

В общем, буду страшно благодарен за подсказки и размышления!

Полный текст и комментарии »

  • Проголосовать: нравится
  • +11
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Есть задача (на форуме нашёл) о том как из рандомно заполненого квадрата 3*3 сделать магический, пользуясь циклическими сдвигами строк или столбцов. Сама задача несложная (если только не требовать минимизации числа ходов).

Однако я не могу придумать как можно доказать (и вообще так ли это) что поменять местами два числа (оставив остальные на местах) такими манипуляциями нельзя. (для исходной задачи это в общем и не нужно — вроде можно обойтись меняя числа парами)

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, перевод, По-русски

Коллеги, всем привет!

Итак, как сегодня выяснили, в англ. Википедии нет статьи про спортивное программирование, хотя для многих людей это хобби, а для кого-то стиль и смысл жизни.

Вот короткая заготовка статьи. Пожалуйста, помогите разрастить и улучшить её. Если знаете как - редактируйте прямо там, если не знаете, пишите здесь, чтобы я (или другие) могли добавить. Давайте полезные и ценные ссылки. Поправьте корявый английский. ;-)

UPD: За прошедшие полсуток доброжелатели решившие остаться неизвестными значимо улучшили текст статьи, хотя добавлять разделы не стали. Я хочу внести ещё два хотя бы: пример условия типичной задачи с типичного контеста, и список из нескольких выдающихся спортсменов.

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • +65
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

С интересом прочёл гневные дискуссии по поводу обновления системы учёта вклада. Однако, заметил следующие позитивные моменты:

1) Стали более-менее вразумительными, например, оценки моих собственных постов, пострадавшие когда-то неимоверно давно от игрищ коллег с накручивающими ботами. Теперь хотя бы какая-то зависимость между положительными/отрицательными оценками и темой постов. Т.е. система даже по сути лучше противостоит злодеям. Это хорошо. ;-)

2) Прежняя система была, на мой вкус, значительно более "с потолка", чем нынешняя. Теперь, хотя и спорная, но она вроде бы отражает желание администрации развивать ресурс для программирования и программистов, а не забацать пародию соцсети для узкого круга людей выделенных по профессиональному признаку.

3) И вообще хоть что-то наконец сделано. Ждали давно - может быть, многие не совсем так себе это представляли или не совсем представляли что получится - но перемены есть. За этими переменами много сложной работы разработчиков ресурса, я так понимаю, MikeMirzayanov в частности. Программистам стоит уметь видеть труд других программистов и уважать его. И поэтому крики что администрация занимается бредом и хренью мне кажутся неприличными. Как где-то сказал maksay (примерно) "просто напишите свой CodeForces" - и всё поймёте. ;-)

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -21
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Сообщение, не относящееся к смыслу жизни спортивному программированию, можно пропустить.

Смотрю - у лидера по вкладу, Alex_KPR - новая аватарка. Ой, да и у одного из топов, Egor - тоже смена имиджа! И автор 97 раунда, KADR - ещё неделю назад выглядел иначе.

Даже Anonymous сменил фото на что-то менее демонстрирующее его анонимную суть. Возможно всё это начал MikeMirzayanov, хотя и немножко раньше - месяца два или три назад?

Это, видимо, новый год, карнавал, праздник. Или ещё какой-то флеш-моб на эту тему. Однако, почему бы не поддержать! Впрочем не у всех пользователей аватарки есть (или не у всех они такие, что смена будет заметна)

Правда сам я попробовав проделать этот финт, заметил что маленькая картинка, представляющая меня, поменялась (в блогах и т.п.) а большая (в профиле) осталась старой. Не знаю, только ли с моего компа это наблюдается и когда пройдёт... Возможно это специально, чтобы сгладить для меня переходный период... (UPD: адаптационный период закончился)

Полный текст и комментарии »

  • Проголосовать: нравится
  • -3
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски
Уважаемые коллеги, всем привет!

Хотел выяснить, насколько близка проблема и кто как её решает. (сорри если "боян" - почему он, кстати, через "о"?)

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

Однако в контесте удаётся поучаствовать редко, а у контестов атмосфера особая, с дорешиванием (или виртуальным контестом) несравнимая всё же. Азарт.

Фиг с ним с рейтингом, всё равно он у меня мягко говоря незначительный - сажусь решать.

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

Надо ужинать, надо общаться, какие-то мелкие домашние заботы решать и т.п. А результат контеста мне кажется удовлетворительным. И вдруг, посреди вечернего чаепития - ретроспективно в мозгу что-то щёлкает - в проверке диагоналей прямоугольника у меня какой-то идиотский неадекват - нужно было до этой проверки рассортировать ещё точки и кроме того длину диагоналей не только друг с другом сравнить но и с расстоянием до ц/м - а я всё это рассеянно забыл. Смотрю на время - 20.58, т.е. до конца чуть больше 5 минут. Ладно, думаю, завтра дорешаю.

Утром исправил, закоммитил, послал - облом - сильно удивляюсь, но потом обнаруживаю что ещё скобки забыл после вызова функции testRect - а Python, который я пытаюсь сейчас осваивать, относится к этому даже более снисходительно чем Си (не то что привычная Java) - исправил, получилось.

Всё хорошо, удовлетворение есть - правда рейтинг, действительно - минус фиг знает сколько.

Собственно вопрос - кто как предпочитает действовать, если чувствует что морально-психолого-физическое состояние перед контестом - неудовлетворительное:
- не садиться за комп, оставить, может, для "виртуальных контестов";
- либо сесть и попробовать-таки порешать, чёрт с ним с рейтингом если что;
- либо вообще тщательно готовиться к контестам, даже небольшим, и в соответствующий день по максимуму отдыхать, решить пару задачек для разминки за час до и т.п.;
- или ещё какие варианты?

Полный текст и комментарии »

  • Проголосовать: нравится
  • -14
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски
Коллеги, всем привет!

В связи с разумным вообще-то замечанием Alex_KPR об оскорбительном характере моих леммингосодержащих комментов в прошлом посте (а также в связи с тем что невыдержанного меня опять растроллили на не относящуюся к CF пустопорожнюю болтовню), убрал его в черновики. Если там были какие-то сакральные мысли - напишите, достанем.

Приношу извинения за некорректные высказывания. ;-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Некоторое время назад обнаружили что почти все машины на работе (и не только на работе) для java-программ отображают время со сдвигом на час (меньше чем надо показывают).

Для проверки можно использовать следующее:

public class ShowTime {
public static void main(String... args) {
System.out.println(new java.util.Date());
System.out.println(java.util.TimeZone.getTimeZone("Europe/Moscow")
.useDaylightTime());
} // main
} // class ShowTime

Выглядит результат примерно так:

rodion@rg-home:~/my/java# date
Sat Nov 26 09:01:19 MSK 2011
rodion@rg-home:~/my/java# java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)
rodion@rg-home:~/my/java# java ShowTime
Sat Nov 26 08:01:30 MSK 2011
true
rodion@rg-home:~/my/java#

Заметьте - время в системе 9 утра, а в java - 8 утра. ;-)
С чем это связано идеологически все знают. А если кто-то не знает, как это поправить практически, то можете поступить как-то так:

1) Скачать и запустить официальный апдейтер инфы о таймзонах с ораклового сайта. Вариант хорош тем, что позволяет "пофиксить" время в JVM, не обновляя её. Актуально, скажем, если на работе 50 операторских компов используют java-приложения ещё под java 1.5 и т.п.

2) Можете попробовать обновиться до Java 7u1 или 6u29 - но по-моему это не поможет. Там пакет временных зон 2011g, кажется, а в апдейтере 2011k - возможно, в этом дело.

3) Проблема не будет воспроизводиться если временная зона самой ОС кривая-московская, не обновлённая например в XP SP2. Можно конечно этим воспользоваться... ;-)

P.S. Буду признателен, если сообщите на каких комбинациях OS/JVM у вас найдётся эта проблема. Я фиксил только на Windows/Linux и только 7u0, 7u1, 6u27.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

Автор RodionGork, 12 лет назад, По-русски

Введение

Попробовал задачи с Unknown Language Round #4. Большое спасибо уважаемой коллеге Nickolas - это действительно довольно увлекательно.

Язык здорово смахивает на APL (язык для марсиан и математиков) из-за символьных команд и на FORTH (язык управления радиотелескопами и стиральными машинами) из-за стека, однако из-за малого количества стековых операций (2dup и rot страшно пригодились бы начиная с задачи d) и отсутствия второго стека всё это смотрится бедновато.

Двумерность в этом смысле ничего существенно не меняет - пишем-то всё равно "в одну линию", хоть и кривую.


Однако есть и особенность - инструкция p позволяет, видимо, писать самомодифицирующиеся программы. (правда с таким набором команд это вероятно трудновато)
  К сожалению эта возможность, видимо, осталась невостребованной в раунде. Если есть любители самомодифицирующихся программулин (кроме меня), то предлагаю попытать силы.


Задача

Написать на Befunge программу, которая перемещает своё собственное тело в другую позицию "доски", после чего продолжает выполняться с этой копии. Таким образом она сможет потихоньку "перемещаться" в пространстве. (Конечно, чем меньше получится - тем круче)

Упрощение

На оригинальном Befunge делать это довольно противно из-за недостатка базовых операций. Поэтому можно рассмотреть решения на "расширенной" версии языка.

Скачать её можно здесь (извините, это гуглдокс - нажать File - Download original).

Дополнительные команды, в основном украденные из стандартного FORTH, приведены ниже. В скобках показана трансформация верхних элементов стека (элемент "a" - это тот, которого операция не касается - т.е. он глубже остальных). В указанном архиве есть демо-программы (с расширением bf) для большинства из этих команд.

"o" - аналог OVER - копирует предпоследний элемент стека наверх (a b c -> a b c b)

"r" - аналог ROT - перемещает третий снизу элемент наверх (a b c d -> a c d b)

"R" - аналог ROT ROT - "поворачивает" три верхних элемента в обратном порядке (a b c d -> a d b c)

";" - аналог 2DUP - дублирует два верхних элемента (a b c - > a b c b c)

"m" - аналог >R - перемещает верхний элемент на доп.стек

"w" - аналог R> - перемещает элемент с верха доп.стека на основной стек

"(" - копирует верхний элемент на верх доп.стека

")" - аналог R@ - копирует элемент с верха доп.стека в основной стек.

"=" - распечатывает текущее состояние доски.

Пример

В вышеупомянутом архиве есть файл selfcopy.bf - пример программы которая копирует несколько первых байт себя самой на 3 строки ниже, после чего распечатывает доску и выходит. Результат её работы выглядит как-то так:

#./befunge.py -w 30 -r 10 selfcopy.bf
------------------------------+
>9m00>;gm;wR3+pw1-(v          |
     ^         \+1\_=@        |
                              |
>9m00>;gm                     |
                              |

Полный текст и комментарии »

  • Проголосовать: нравится
  • +22
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

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

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

Напишем программу "Хелло Ворлд", такого размера, что выводимый текст будет занимать в ней больше половины!

Как и вся магия, она будет плохо переносима, но под дос и винды работать будет. Что нам понадобится? Утилита debug.exe - в современных виндах она живёт в c:\windows\system32 - это примитивный дебаггер который остался там рудиментарно с самых старинных версий доса... Кое для чего он ещё может пригодиться! (хотя для серьёзной разработки на ассемблере нужен нормальный компилятор - ну а простенькие вещи и в дебаггере можно накидать)

Если вы работаете из под linux, как я, то вам понадобится либо виртуальная машина, либо dosbox.

Итак, запустите окошко с командной строкой (например, cmd) и выполните команду:

С:\>debug.exe

Здесь и далее договоримся что полужирным отмечено то, что пишем мы, а простым - то что нам отвечает система.

Вы должны увидеть приглашение в виде единичного тире (минуса, дефиса) в левой позиции экрана. Введите команду "a" и нажмите enter. Слева появится шестнадцатеричный адрес в виде сегмент:смещение. Сегмент может оказаться довольно произвольным, а смещение будет 100 - с этого адреса грузятся в память программы в формате COM. Вводите дальше инструкции, строка за строкой (всего 4)

-a
7234:0100 mov ah,9
7234:0102 mov dx,109
7234:0105 int 21
7234:0107 int 20
7234:0109

В пятой строке вы просто нажмёте enter и опять перейдете в режим приглашения.

Наша программа состоит из 4 команд - из них первые три посвящены вызову системной функции печати строки. Первая загружает номер подфункции (9) в регистр процессора ah, вторая загружает адрес выводимой строки (её смещение) в регистр dx а третья вызывает системную функцию (прерывание) номер 21h - это прерывание зарезервировано за большим количеством простейших полезных функций операционной системы ДОС. В частности 9-я подфункция печатает строку с заданного в dx адреса до символа доллар.
В четвёртой строке мы вызываем ещё одну системную функцию, номер 20h (она не требует каких-либо аргументов в регистрах процессора) - выход из программы (да, в таких маленьких программах выходом нужно заниматься специально!)

Но ведь у нас ещё не записана выводимая строка? Нет проблем. Правда debug.exe не умеет задавать текст, но будем действовать так: введите команду e 109 (ввод данных побайтово с такого то адреса) и потом набирайте, нажимая пробел после каждых двух символов (оно само будет переходить к следующему байту) шестнадцатеричные значения. Старые значения байтов будут отображаться перед точкой, новые после:

-e 109
7234:0109   45.48   24.65   55.6C   47.6C   00.6F   00.0D   00.0A
7234:0110   50.24

Введя последнее значение, мы опять нажали enter. Введите d 109 (дамп памяти с заданного адреса) и убедитесь что всё верно (там справа будет отображаться текстовое представление, что удобно). Вообще нужно понимать, что эту цепочку байтов я не высасывал из пальца, а просто набрал в блокноте а потом сохранённый файл дампировал тем же debug.exe

Теперь дело за малым - укажем размер файла, его имя - и сохраним его

-r cx
CX 0000
:11
-n hw.com
-w
Writing 00011 bytes

Здесь нужно пояснить только две вещи - размер программы - от адреса 100 до адреса 110 включительно - 17 байт (11h) - это число надо записать в регистр CX (но не в режиме работы программы, а в самом отладчике, т.е. как бы в текущее состояние процессора).
Имя файла должно иметь расширение COM - это самый старый формат исполнимых файлов в DOS, он не требует специальных таблиц загрузки как EXE (хотя там есть смешной нюанс, в который не будем углубляться - формат определяется не по расширению а по сигнатуре MZ в начале).

Теперь вводите команду "q" чтобы выйти из дебаггера обратно в командную строку.

Выполните созданную программу:
C:\>hw.com
Hello
C:\>

Проверьте её размер:

C:\>dir hw.com
HW          COM        17 ....
1 file    17 bytes

95% из читающих это, это знание никогда не понадобится. Но в качестве развлечения - тем кто не знает что такое ассемблер, процессор и его регистры, адреса памяти, функции операционной системы и т.п. - всё это может сгодиться, не так ли? В инете вы можете найти массу информации на эту тему - ну или спросить меня если что. ;-)

Добавлю, что до недавнего времени проводились соревнования Hugi Compo - кто напишет самую маленькую программу выполняющую требуемые действия (например, распечатывающую текущий каталог).

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • +46
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Я вижу поднялась волна тем "спортивное программирование и всякая ересь". Попробуем немного отклониться от оффтопа и вспомним игры (отчасти резонансом на статью Михаила Мирзаянова об играх), тесно связанные с историей развития вычислительной техники вообще и программирования в частности.

Ну мы не будем заострять внимание на самых первых попытках типа "теннис на осциллографе" или шахматные программы для соревнований ЭВМ. Вспомним более полноценные игрушки, из-за которых ушло в никуда множество машино-часов и киловатт энергии - первые текстовые квесты.

В них играли, я так понимаю, ещё на тех машинах, у которых вместо монитора было АЦПУ с рулоном бумаги (как на известной картинке с Д.Ритчи) - в некоторых версиях даже можно найти "режим экономии бумаги".

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

Другим потомком этих игр стали безусловно графические квесты (кто не играл в Гоблинов или многочисленные произведения Сьерра: Quest for Glory, Larry, Space Quest - вы много потеряли). Тут основным отличительным элементом является конечно неистощимость авторов на головоломки и их подчас неожиданный юмор.

Итак, если вы не играли в Colossal Cave Adventure (Adventure 350), но готовы похвастаться тем что немного знакомы с английским языком - качайте подходящую к вашей ОС версию и проверьте себя. ;-)

Запустив её вы обнаружите что-то вроде:

"Вы стоите в цветущей долине, справа от вас какой-то дом"

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

Лучше не подсматривать в подсказку - до некоторых головоломок предпочтительно дойти самостоятельно, чтобы получить взрыв позитива. Единственное до чего не догадался в своё время я - как убить дракона. Разгадка была очень проста и очень смешна, но второй раз в эту реку не войти... %)

Конечно, типичная реакция "у-у-у, да тут вообще картинок нет, такой шит" сразу выявляет "не наших" людей. Впрочем несмотря на отсутствие картинок игрушка вдохновляет тру-программеров на кучу интересных идей (в основном в области разработки игр)... В частности компания Sierra была создана Кеном и Робертой Вильямс которые пройдя игрушку до конца не смогли найти ничего подобного ей. Это заставило создать их и компанию, и первый графический квест в мире... В общем, сами понимаете... От игрушки веет историей. В статье википедии есть ссылка на фото где игрушка запущена на таком вот смешном компьютере - нехилый экранчик, а? ;-)

Также рекомендую игрушку если вы немного интересуетесь собственно английским языком - в ней есть определённое количество шуток основанных на игре слов (например, при попытке убить медведя что-то вроде "you want to kill him with your bare hands against his bear hands?")

Ну а если случится невероятное и вам не только понравится жанр текстовых квестов (ну если вы не были знакомы с ним раньше), но и осилив игрушку вы захотите "ещё" - обращаю внимание на целую серию Zork - впрочем, вы наверняка найдёте её по википедии и т.п. В отличие от написанной на фортране или C "Adventure", для этой игрушки в большинстве вариантов использовался уже собственный Lisp-подобный язык, насколько я знаю - для её игровых файлов можно скачать интерпретатор Frotz под линукс (ну а под виндой она непосредственно в виде досовой программульки существует).

Впрочем, возможно вы найдёте и другие (благо их немало), либо решите создать что-то своё (возможно с элементами MUD-а, раз уж нынче век интернета)...

Полный текст и комментарии »

  • Проголосовать: нравится
  • -47
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Коллеги, всем привет!

(UPD: появилась потребность в ещё людях, притом возможно студентах - см коммент)

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

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

Есть Группа Компаний Бюллетень Недвижимости. Когда-то это был просто толстый журнал, сейчас это несколько изданий и веб-ресурсов (не только по недвижимости). В ней есть отдел связанный с программизьмом (не скажу точно сколько человек) - большая часть касаются веб-ресурсов (т.е. веб-программисты, дизайнеры, сео и т.п.) - и ещё те кто работает с софтом для "внутренних потребностей". В основном это программулины которые принимают и обрабатывают информацию и рекламные объявления от заказчиков или помогают заказчикам подавать эту информацию.

Вот в число этих последних и нужен компетентный человек. Будет ли это по опыту/скиллам старший либо младший разработчик - не очень принципиально - задачи найдутся. Главное - не идиот, извините, а самостоятельный человек, умеющий немножко подумать, немножко подебажить, немножко погуглить. ;-)

Список требований в объявлении... Не вполне адекватен. В общих чертах нужно:
- твёрдые навыки в Java Core вообще, полезненьких классиках из J2SE API в частности - плюс желательно знакомство с J2EE (в первую очередь JPA в виде Hibernate или EclipseLink, Spring в общих чертах, GWT и IceFaces в различных проектах присутствуют) - вообще понимание что такое сервлет, томкат, хттп-запрос и ответ... ну короче, страшно сложные вещи;
- представление об SQL (умение написать несложные запросы для MySQL или FireBird, или хотя бы Access вполне покатит);
- познания в алгоритмах... Общие... Понимание временной сложности и затрат по памяти... Алгоритмы на графах или цифровые фильтры не понадобятся, почти наверняка... Некоторые алгоритмы обработки строк - могут;
- довольно много обработки текста и данных вообще, поэтому желательно не бояться регэкспов, уметь придумывать автотестилки и вообще иметь бодрый склад ума... ;-)
- уважение к Java Code Conventions и стилю оформления, принятому в чужом проекте - обязательны;
- используются система контроля версий SVN и багтрекер RedMine... не думаю что это имеет смысл в требования писать.

Некоторые пункты из указанных в оригинальном объявлении совершенно неактуальны - например ANTLR (хотя это не значит, что не придётся работать с чем-то похожим).

Если вы чувствуете что чего-то не знаете, но можете изучить - можете написать с просьбой предложить вам адекватное тестовое задание. По деньгам не буду вводить в заблуждение - как и во многих конторах всё хранится в страшной тайне. Так что пишите сколько сами считаете адекватным и убеждайте что вы этого стоите. ;-)

Основной плюс работы здесь (на мой взгляд) - мягкие условия труда - никаких переработок, график можно варьировать в широких пределах, чай-кофе, свой медцентр на первом этаже на случай насморка/кашля и плохого самочувствия (ну для некоторых важно - строго белая з/п). Про возможность получить определённый опыт ессно всё понятно. Задачи не слишком тупые... Ну и не всегда очень острые. ;-)

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

UPD: забыл заранее ответить на вопрос который принято задавать - вакансия открылась в связи с тем что разработчик трудившийся здесь 4 года справедливо решил что надо иногда работу менять. Отдел разработки не настолько большой чтобы расти карьерно внутри него (хотя между отделами и даже отдельными компаниями внутри ГК люди растут вполне - но это не всех по темпераменту интересует).

Полный текст и комментарии »

  • Проголосовать: нравится
  • -6
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Совершенно неинформативное сообщение, просто забавно. Можно спокойно пропустить.

Случайно ввёл адрес в гугле а не в адресной строке... Наткнулся на ресурс якобы оценивающий стоимость сайтов...

www.codeforces.com оценён в ~ 6 Kbucks
www.topcoder.com оценён в ~ 96 Kbucks

для сравнения

www.kremlin.ru оценён в ~ 210 Kbucks
www.lurkmore.ru оценён в ~1 Mbucks

Хотя выглядит это как некая эпическая хрень, извините за выражение. %)

Полный текст и комментарии »

  • Проголосовать: нравится
  • -47
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

В посте Conducting a contest (http://codeforces.com/blog/entry/2521 - я отчаялся понять как на него ссылку вставить, сорри - дайте кто-нибудь пример, пожалуйста) автор спрашивает, с помощью какого софта ему провести локальный контест. В одном из первых ответов ему предлагаются contester, ejudge и dudge.

Три вопроса:
1) Есть ли ещё альтернативы (freeware / open-source)?
2) Есть ли у кого-нибудь из них демо-сервер какой-либо в инете, чтобы иметь возможность понять основные фичи и оценить визуально (хм... да может хоть набор скриншотов на худой конец)?
3) Может ли кто-то кто пользовался (пытался пользоваться) дать краткую сравнительную характеристику, особенно если пользовался несколькими?

Поскольку тот пост не единственный в своём роде, по-моему, то возможно ответы были бы интересны не только мне... Вопрос ессно обусловлен тем, что пытаться собрать/установить/попробовать все варианты - не минутное дело.

UPD: Трудно гуглить т.к. подходящие ключевые слов придумать непросто. Вот смотрю DOMjudge ещё обсуждается и там что-то демонстрационное изображено. И ещё некий PC^2... Что бы это могло быть?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +8
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Вчера зарегился на контест (90й), прочёл первые две задачи, понял что страшно устал, ни глаза ни мозги в кучку не собрать - и пошёл восвояси. Сегодня вижу - оказывается, повезло в определённом смысле, что не стал писать... ;-)

Помню был ещё контест (ага, нашёл - 78-й) на котором я долго и упорно пытался решить единственную задачу, 3 или 4 раза сдавал - ничего другого из-за неё и не трогал, ушёл в расстройстве - а потом радостно обнаружил что ничего не потерял. Тоже что ли везёт? %)

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

Каждый имеет равные шансы и равное право решить для себя "а с этой проблемкой какой-то косячок!" и заняться остальными задачами.

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

Можно даже в интерфейс участника добавить кнопку МЕГАВЗЛОМ - нажав на неё человек должен отправить сообщение с указанием что авторское решение на его взгляд некорректно, а его собственное, отосланное пять минут назад, правильное. Ну или что для этой задачи не существует правильного решения.

Чтобы кнопкой не злоупотребляли (т.к. проверять придётся вручную!), для неё как и для обычных взломов надо назначить награды. В простейшем случае, скажем, +2000 очков если был прав и -5000 если ошибся (вероятно лучше привязать расценки к стоимости задачи).

Что делать с решениями участников, которые прошли некорректные тесты к некорректной задаче? Отдельный вопрос - ну, наверное, обнулять.

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • -42
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Помню, на CodeForces случались соревнования типа "unknown programming language". Однако как последнее показало, такие соревнования, видимо, хороши когда язык действительно достаточно необычен, загадочен и т.п. И может быть чужд привычного "императивного" стиля.

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

Полный текст и комментарии »

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Совсем тупой стал. Задачка не решается. От уныния по собственной тупости стал рассматривать список передовиков сегодняшнего контеста.

Любопытно что в первых десятках самых успешных спортсменов есть определённое количество зарегистрировавшихся на CodeForces в последний час до соревнования. Скажем, на текущий момент в первой сотне:

http://codeforces.com/profile/hack_me
http://codeforces.com/profile/bigfat
http://codeforces.com/profile/pakcamat
http://codeforces.com/profile/syx12321
http://codeforces.com/profile/fjxmlhx
http://codeforces.com/profile/fan
http://codeforces.com/profile/Karoluch
http://codeforces.com/profile/UESTC_Fish
http://codeforces.com/profile/Spider-man

Стало любопытно - может, возможность участвовать вне конкурса как-то плохо выделена в интерфейсе и кто-то ещё не знает? Ку-ку! Есть такая возможность, есть! :-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Пожилой чекист спрашивает молодого "Знаешь, какое наше самое главное оружие, на букву Н" - хм... Наган? нет... может, Наручники? тоже нет... а что же? - Балда ты, наше главное оружие есть Нтеллект!

Заранее извиняюсь - этот маленький пост о вещах (системах контроля версий и багтрекерах) которые для кого-то (достаточно многих, обычно, уже вступивших на поприще профессиональной деятельности) банальны. В этом случае лучше его не читать. Ну а если кто поймёт что для него это в диковинку - рекомендую не полениться и изучить вопрос подробнее. (Впрочем, если вы используете их на работе, а дома нет - то возможно надо задуматься, почему это так и правильно ли это?)

Итак, здесь частенько всплывают вопросы типа "какую IDE вы рекомендуете/используете" и немного реже вопросы по поводу "какую ОС". Однако компьютер, ОС и компилятор любимого языка это лишь необходимый минимум того, что нужно программисту по жизни. Есть ещё несколько вещей которые и полезны в личном обиходе - и которые (если их употребить в качестве волшебных слов на самом первом собеседовании) заставят работодателя относиться к вам с бОльшим доверием.

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

Системы контроля версий

А где мы храним свои исходники? В папочке, на флешке? Этот подход хорош только тем что он кажется естественным, однако рассмотрим пример: при участии в марафоне, или другом длинном соревновании (типа google ai-challenge) копятся десятки версий вашей программы - в таком случае порой очень хочется уметь быстро найти старую версию, сравнить исходники разных ревизий, отделить разработку какого-то сложного/спорного функционала в отдельную ветку, или вновь состряпать из нескольких веток одну новую и т.п.

Или если вы работаете над небольшой программулиной, проектом более чем одной парой рук - носить файлы друг другу на дискетке, конечно, архаично - но не менее архаично кидать их в общий сетевой каталог, спрашивая "а этот файл ты менял? нет, ну тогда я его затру!" (хотя есть ещё даже целые конторы которые до сих пор на флешках-папочках живут - ну это называется "мужественно создаём себе трудности и мужественно их преодолеваем!")

В профессиональной деятельности такие вопросы возникают вообще постоянно. Ну вот тут мы и приходим к использованию систем контроля версий.

Я не собираюсь описывать как с ними работать - на это есть громадные тюториалы и мануалы. Обычно всё это выглядит так: исходники (разных версий) хранятся в отдельном хранилище (репозитории), откуда вы себе для работы извлекаете нужную ревизию файлов (checkout), а потом, поработав с ними в своё удовольствие, можете сохранить обратно в репозиторий (commit). При этом до коммита вы можете сделать несколько полезных действий:

* update - обновить свои исходники (возможно уже изменённые) новыми версиями из репозитория, если ваш коллега успел там что-то поменять (или вы сами на другом компе поработали над частью проекта в выходные у бабушки, скажем);

* revert - заменить свои локальные изменённые исходники на оригинальные их версии из репозитория если поняли, что сделали что-то не то (таким образом все сделанные изменения будут убиты);

* diff - сравнить свою локальную версию с той что в репозитории (построчно, возможно с выделением цветами и т.п.);

* log - посмотреть сообщения сделанные при сохранении предыдущих ревизий

* и кстати, самому оставить вменяемое сообщение при коммите (например "исправлен баг описанный в тикете № 1529" - см ниже).

Главное то, что всё, что однажды сохранено в репозиторий, впоследствии в нём можно найти (и хранится это в достаточно эффективном по объёму виде). При этом использовать такие системы не обязательно для больших проектов. Можно завести в репозитории отдельные папки например, для задач с тимуса, CodeForces, ProjectEuler и т.п. - даже если большинство файлов будут иметь единственную ревизию, это всё равно будет удобно.

При этом вам не обязательно разворачивать систему контроля версий у себя на компьютере - можно пользоваться готовыми хранилищами в интернете (FreePository, Assembla) и т.п. Но можно и развернуть (это не очень сложно, однако вы можете обнаружить что вам нужно установить и веб-сервер типа Apache httpd, что впрочем тоже не так страшно, как звучит). Необходимым является только клиентский интерфейс, который позволяет пользователю "общаться" со своим репозиторием. Кстати в большинстве современных IDE уже встроены, как в NetBeans (или в виде плагинов, как в Eclipse) возможности для работы с популярными системами контроля версий. Ну кроме того в большинстве систем есть возможность доступа по http - т.е. можно зайти в репозиторий браузером и посмотреть что у нас там творится.

Какие системы наиболее употребимы? Пожалуй, CVS - хотя он сейчас считается малость устаревшим, потом SVN (Subversion) и Git. Нужно вводить в гугле "учебник по SVN" например и смотреть, как им пользоваться (имеет смысл делать это на языке который вам понятен). Под виндовс существуют очень удобные клиенты TortoiseSVN (TortoiseCVS, TortoiseGIT) - они прямо в проводнике помечают изменённые файлы красными флажками, неизменённые зелёными и т.п. (в учебниках вы найдёте кучу поясняющих картинок). В linux часто используется набор клиентских утилит для командной строки - ну они требуют привычки для использования, хотя тоже всё не так страшно, как звучит.

Различия в упомянутых (и других) системах достаточно сильны, однако не очень принципиальны - все они обеспечивают базовый функционал контроля версий.

Я лично сторонник SVN т.к. он сейчас довольно распространён и он есть на всех сервисах управления проектами которыми мне приходится пользоваться, впрочем всё может потихоньку измениться. Многие утверждают что Git это неимоверно круто. Посмотрим как-нибудь.

Кроме того рекомендовал бы, если нет опыта, не начинать знакомство с клиентов, встроенных в IDE (а то можете либо поломать голову, либо развить в себе неадекватные навыки - коммиты по одной ревизии на каждый файл и т.п.), а попробовать сначала отдельный (например TortoiseSVN, т.к. он наглядный).

Эти умения (и клиентские программулины) зачастую понадобятся вам и в тех случаях когда вы захотите поучаствовать в чужих проектах.

Картинка: Windows Explorer показывает папку, находящуюся под версионным контролем - TortoiseSVN расставил забавные флажки у папок. Открыто меню TortoiseSVN, встроенное в контекстное меню проводника.


Картинка: blame в TortoiseSVN - этот режим позволяет посмотреть для данного файла, кто и когда в нём какую правку вносил (см. номера ревизий слева), можно также копнуть и посмотреть что было в этой строке раньше и т.п. - классная вещь когда непонятно, кто накосячил или зачем этот кто-то это сделал (в частности сейчас виден комментарий автора, сделавшего данную правку, к коммиту с которым он сохранил этот файл в репозитории).


Багтрекеры

Точнее "Issue Tracker-ы". Не знаю стандартного перевода для термина. Это системы для исключительно банальной цели, которую многие однако недооценивают.

Допустим, я добавляю функционал в проект и вдруг замечаю, что где-то сбоку, при специфических обстоятельствах выскакивает дурацкая ошибка. Должен ли я сразу кидаться её исправлять?

В общем, нет. Я открываю багтрекер, создаю новый тикет "баг" и пишу в нём "Если в форме такой-то поле Имя длиннее чем столько-то символов, то приложение падает.", устанавливаю важность "пустяк" и жму кнопку "сохранить".

Или если по ходу работы мне пришло в голову что хорошо бы попробовать в используемом алгоритме такую-то простую эвристику - я не записываю это на бумажке, на холодильнике (тоже вариант, но ламерский), а пишу в багтрекер новый тикет класса "фича".

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

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

Удобный трекер обычно может иметь веб-интерфейс (так нескольким человекам легче работать с одним трекером - просто в браузере набрали его адрес и ура), возможность делать ссылки между тикетами или назначать одни тикеты дочерними для других. Кроме того, как уже ясно, многие любят использовать трекер который удобно совмещается с любимой системой контроля версий. Это не очень принципиально, но тоже полезно. Некоторые трекеры содержат в себе wiki, к другим её можно подключить. Большинство трекеров позволяют кастомизацию в широких пределах (нам обычно хочется лишь привести вид к симпатичному, отредактировав css-файл).

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

Если интересно повозиться с настройкой трекера самому, можно попробовать Mantis, Trac или RoundUp. Первый из них на PHP, остальные два на Питоне (при этом эти два могут использовать встроенную БД, так что её не придётся настраивать отдельно - хотя запустить mysql сервер и создать в нём базу - прямо скажем не ахти какая задача). Трекеров на Java свободных мало, желающие могут поэкспериментировать например с JTrac (или вот популярная JIRA предлагает себя всего за 10долл для маленьких проектов либо бесплатно для опенсорсных?).

Я сам имел дело с разными багтрекерами (mantis, bugzilla, redmine, trac, jtrac) - но когда выбирал для личных потребностей, то скачал RoundUp - мне оказалось его легче настроить, кроме того на сервере, где я его размещал, не было возможности использовать существующую СУБД, а отдельную под багтрекер заводить не хотелось и притом интерфейс мне не показался слишком отвратительным с первого взгляда (особенно когда я слегка поправил стили). Возможностей у него не ахти как много, но внутренние ссылки я наконец нашёл а это одно из самых важных.

Кроме того можно взять "hosted" трекер - т.е. размещённый в интернете и поддерживаемый какой-то конторой, позволяющей завести бесплатно несколько трекеров под собственные проекты. Типичный пример Unfuddle. Если же вы разрабатываете проект на каком-то из известных ресурсов типа SourceForge, то вы скорее всего найдёте здесь встроенные трекер и репозиторий для своих целей.

Картинка: список тикетов в Mantis - цвет означает состояние (открыт, отработан, возвращён и т.п.). Видна также "серьёзность" задач и к какому проекту они относятся (мантис позволяет сразу несколько проектов видеть).


Картинка: список тикетов в RoundUp (по умолчанию группировка по важности - видно, кто создал и на кого назначил задачу).


Картинка: просмотр тикета в RoundUp, видны сообщения, добавленные в разных стадиях работы и история изменения тикета. Видно что цвета, шрифты и т.п. несложно поменять на приятные/кислотные, ненужные поля (типа "зарегистрироваться) удалить и т.п. а ссылка на другой тикет появляется сама если вписать "issue #" (или "msg #" - ссылка на конкретное сообщение к тикету).


Для иных разработчиков иметь аккаунты в нескольких общественных багтрекерах и репозиториях так же естественно как иметь аккаунты в почте и соцсети. Если вы используете подобные софтины (не на работе!), то отпишитесь в комментах о своих предпочтениях.

P.S. Думал, стоит ли в связи с багтрекерами отдельно написать о СУБД, раз уж их можно использовать не только для багтрекера (ха-ха) но и для своих разработок, даже небольших - но что-то подсказывает что это уж совсем будет тупо, общеизвестно и значительно менее актуально.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +65
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

Думаю, в силу известных обстоятельств, все уже слышали про MemSQL. ;-)

Полный текст и комментарии »

  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски

На столе лежат в ряд палочки. Можно брать одну палочку или две соседних. Тот кто берёт последнюю проигрывает.

Т.е. если группа палочек разделена промежутком (уже кто-то взял или так было в начальной позиции) - то нельзя взять две палочки по обе стороны промежутка.
И выиграет тот, кто вынудит противника взять последнюю палочку.

Пример:

начальная позиция:
XXXXXX
После хода игрока А
XX__XX
После хода игрока B
XX___X
После хода игрока A
______X
Игрок B берёт последнюю и проигрывает.

Очевидно, что любая позиция может быть либо выигрышной (если существует ход переводящий её в проигрышную), либо проигрышной (если любой ход делает её выигрышной). Пример проигрышной позиции 1 палочка, пример выигрышной - пустой стол.

Стратегия игры очевидно напрямую связана с возможностью определять выигрышность позиции.

Требуется внятный алгоритм определения выигрышности позиции. Мне он неизвестен. Статьи по такой именно игре вроде есть в сети, но они не обязательно описывают алгоритм (или не обязательно в доступных терминах). Буду рад помощи!

Кстати, с интересом заметил что рейтинг всех моих старых постов находится на уровне минус 200-300 баллов. По-моему даже JKeeJ1e30 такого не удостаивался. Польщён, весьма польщён! (Вот соплежуям озорникам некуда технический гений направить!) :D

UPD: вижу что случилось какое-то массовое обнуление "вкладов". Чем дальше, тем любопытственнее.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +6
  • Проголосовать: не нравится

Автор RodionGork, 13 лет назад, По-русски
В прошлом году было достаточно увлекательное соревнование Google AI Challenge. Причём я так понял что и за год до этого оно вроде проходило, правда возможно не было открытым (?). Правильно ли я понимаю, что в традицию оно не вошло и больше видимо подобного не случится? Или есть какая-то полезная/радостная информация на этот счёт?

P.S. Не могу понять - в подсказках тегов вроде уже есть "google ai challenge" но в поиске по тегам пусто.

Полный текст и комментарии »

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится