Pull to refresh
57
0
Mike Mirzayanov @MikeMirzayanov

User

Send message

Russian Code Cup: как это было, как это будет

Reading time4 min
Views10K

В 2013 году Mail.Ru Group организует очередную, третью по счёту, международную олимпиаду для самых сильных программистов – Russian Code Cup 2013. Мы задумывали олимпиаду как способ популяризации программирования, поднятия престижа профессии (и, конечно, как отличный повод измерить свою скорость мысли на интеллектуальной гоночной трассе).

Читать дальше →
Total votes 51: ↑42 and ↓9+33
Comments6

Автономная кроссплатформенная монолитная программа на Java

Reading time21 min
Views62K
Я люблю desktop-приложения. Признаваться в этом нынче, похоже, стыднее, чем в связях с иностранной разведкой, но это так. Нет, это не значит, что я не люблю интернет-технологии. Более того, некоторые я не только уважаю, а даже более-менее знаю. Но, тем не менее, я скучаю по тем временам, когда программа писалась на одном компьютере, потом компилировалась и запускалась на других, разных компьютерах. Тогда везде (почти) была одна система — Windows с одной и той же API, почти не было проблем совместимости на уровне приложений, никто не материл разработчиков браузеров — все берегли нервы на разработчиков WinAPI, которые умудрялись создавать конфликты даже внутри нее одной. Но это я, конечно, иронизирую, а если серьезно — иногда и сейчас хочется написать просто desktop-приложение, да так, чтобы работало оно на всех популярных системах. Трудно? Если подумать и покопать, то не очень.

Еще я люблю языки высокого уровня с аккуратной архитектурой и строгой типизацией. Мои фавориты — Java и C#. Оба они предоставляют разработчику множество преимуществ по сравнению с C++, оба избавляют от ряда забот. Чем приходится платить? Тем, что таскаешь за собой тяжелую колоду, которая называется Oracle JVM, .NET или mono. Все три колоды весят сотни мегабайт и лицензию имеют такую, что каждый пользователь вынужден качать эту штуку сам, не путая при этом разрядность своего компьютера, а главное — программа на Java не может быть совместима со всеми версиями JVM разом, не так ли? И вот — мы приходим к тому, что просто скинуть программку другу (или миллиону друзей) и не заботиться о том, что она у него не запустится, не выходит. Приходится делать хитрые сетапы, вбивать костыли, и это я еще не упомянул .NET — однажды я видел у друга сразу 3 установленных версии, причем все три были нужны разным приложениям…

Стоп! А давайте напишем программу на Java, но так, чтобы она не требовала установки на машину какой-либо JVM, чтобы одним касанием собиралась под Windows, Linux и OS X и чтобы при этом занимала совсем чуть-чуть; так, чтобы никто даже не понял, что она написана, скажем, не на C. Невозможно? Совсем наоборот! (И нет, я имею в виду не gcj, который лишает Java всех ее прелестей. Рефлексия будет работать и даже сторонние jar вы сможете запускать).

Ну и как это сделать?
Total votes 156: ↑146 and ↓10+136
Comments80

Технопарк Mail.Ru. Начало

Reading time6 min
Views50K
Горячая дискуссия, которую вызвал этот пост на Хабре, навела на мысль, что пора взять себя в руки и написать про Технопарк. Что это за проект? Каковы его цели? Как они достигаются? Каковы первые результаты? И, в конце концов, почему зарплата >150 000 рублей после окончания университета представляется достижимой для примерно 30% студентов проекта? Итак…

Читать дальше →
Total votes 93: ↑63 and ↓30+33
Comments43

Приходите на чемпионат по программированию: будем решать задачи и «ронять» код оппонентов

Reading time5 min
Views17K

Финал прошлого чемпионата для студентов МГТУ – фото MDovzhenko

Правила простые — 5 «олимпиадных» задач разной сложности, плюс возможность «взламывать» решение оппонента сложным набором входных данных. То есть, сначала пишем свой код, потом «ломаем» чужой. Официально всё это называется Всероссийский Открытый Чемпионат по программированию «КРОК-2013» при поддержке Codeforces и Саратовского ГУ.

Зачёт индивидуальный, призы — 100 000 рублей за первое место, 70 тысяч — за второе, 50 тысяч — за третье. Плюс будет дополнительный игровой конкурс, победитель которого тоже получит приз. Для финалистов из РФ — бесплатная поездка в Москву, питание и проживание на два дня.

В прошлом году проводилось похожее мероприятие, тогда участвовало примерно 1500 человек (в квалификационном раунде), поэтому в этом году схема будет такая:
  • Квалификационный раунд – 13-14 апреля, удалённо (на следующий этап проходит не более 2000 участников).
  • Первый отборочный раунд – 15 апреля, удалённо (проходит 400 участников).
  • Второй отборочный раунд – 22 апреля, удалённо (проходит 50 участников).
  • Финал чемпионата состоится 16 и 17 мая в Москве в офисе компании КРОК.

Во всех раундах 5 задач, по мере приближения к финалу их сложность будет немного увеличиваться.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments12

Частые ошибки при разработке lockfree-алгоритмов и их решения

Reading time13 min
Views60K
На хабре уже было несколько статей про lock-free алгоритмы. Этот пост — это перевод статьи моего коллеги, которую мы планируем публиковать в нашем корпоративном блоге. По роду деятельности мы пишем огромное количество lock-free алгоритмов и структур данных, и этой статьей хочется показать, насколько это интересно и сложно одновременно.



Эта статья во многом похожа на эту статью, но в той статье рассматриваются не все проблемы, с которыми можно столкнуться, разрабатывая lock-free структуры данных, и уделяется очень мало внимания решению этих проблем. В этой статье хочется детально остановиться на некоторых решениях, которые мы используем в реальной реализации lock-free структур данных в нашем продукте, и больше внимания уделить оценке производительности.
Читать дальше →
Total votes 148: ↑147 and ↓1+146
Comments52

19 команд ffmpeg для любых нужд

Reading time3 min
Views572K
От переводчика:
Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его man объёмен и местами малопонятен, лишь немногие постигли дао профессиональной работы с ним. И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне. О некоторых полезных консольных командах ffmpeg и пойдёт речь в статье. В некоторых местах я взял на себя смелость вставить ссылки на поясняющие статьи.


ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. Я собрал 19 полезных и удивительных команд, покрывающих почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.

1. Получение информации о видеофайле

ffmpeg -i video.avi

2. Превратить набор картинок в видео

ffmpeg -f image2 -i image%d.jpg video.mpg

Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg

(примечание переводчика: мне больше нравится такой формат:
ffmpeg -r 12 -y -i "image_%010d.png" output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)
Читать дальше →
Total votes 222: ↑214 and ↓8+206
Comments107

Кнопки социальных сетей, HTML 5, атрибут data и асинхронная загрузка javascript

Reading time6 min
Views102K
Давно уже планировал установить на свой сайт кнопки социальных сетей. Наконец нашел время для этого, проблема усугублялась тем, что я сам не являюсь пользователем социальных сетей, хотя против ничего не имею.

Первым делом начал собирать информацию, ее довольно много, есть правда и устаревшая. Например, Twitter поменял уже ссылку, старая twitter.com/share, а новая twitter.com/intent/tweet, у Google ссылка «www.google.com/buzz/post», уже давно не работает, вместо нее plus.google.com/share. Конечно, это общеизвестные факты, но, похоже, все-таки не все об этом знают и предлагают «шарить» на старые ссылки.

В общем, ознакомившись с темой, решил взять кнопки в первоисточнике:
Читать дальше →
Total votes 33: ↑24 and ↓9+15
Comments28

Вредная верстка

Reading time9 min
Views74K
Как определить, что сайт сверстан качественно?
Есть много статей о том, как делать хорошо, но совсем нет – о том, как делать не надо, ведь даже валидный и кроссбраузерный сайт может быть сверстан отвратительно.

Из этой статьи вы узнаете:


  • О плохих приемах современной верстки;
  • О том, как даже не будучи профессионалом, за 5 минут определить плохо ли сверстан сайт или нет.


Читать дальше →
Total votes 203: ↑175 and ↓28+147
Comments339

Двигаем время на лету для JVM

Reading time6 min
Views12K
Наверное всем иногда приходилось сталкиваться с проблемой перевода времени на локальном компьютере для тестирования программ. Например, вам нужно проверить как сервер обработает платежи через неделю от сегодняшней даты.

Самый простой способ сделать это — подвинуть системное время. Но у него есть несколько недостатков. Некоторые программы, например, Skype, начинают глючить, сохранять сообщения далеко в будущее или в прошлое. Так же системными политиками может быть задано синхронизировать время с корпоративным сервером каждые 5 минут.
Читать дальше →
Total votes 22: ↑16 and ↓6+10
Comments9

«Див» блоки одинаковой высоты

Reading time2 min
Views44K

На днях столкнулся с задачей:


Сделать две одинаковые по высоте -колонки, не зависимо от количества текста в какой либо из них.

Условия:


  1. Никаких таблиц;
  2. Поддержка IE6+ и т.д;
  3. Резиновая верстка;
  4. Никакого JavaScript, чистый HTML и CSS.

Дизайн:


В дизайне изображены две колонки с отступом друг от друга. Каждый из них имеет свой фон и border с округленными уголками. На вид все просто.

Поиск решений:


Искал и естественно нашел очень полезный пост, где описаны все самые действенные способы решения данной задачи: http://habrahabr.ru/post/64173/.
Собственно 4-е решение из этого поста было наиболее приемлемым, но с помощью него мне так и не удалось вывести два разных фона для своих колонок.

Решение

Читать дальше →
Total votes 44: ↑32 and ↓12+20
Comments95

Валидация форм в AngularJS

Reading time4 min
Views92K
Валидация — одна из автомагических возможностей AngularJS. Хотя магического здесь, конечно же, ничего нет. Просто такие стандартные теги html как form, input, select, textarea — это тоже директивы. И когда они объединяются с ngModel, required, ngPattern и т.п., начинает работать валидация.

Читать дальше →
Total votes 8: ↑8 and ↓0+8
Comments23

Применение, советы и особенности knockout.js

Reading time7 min
Views68K
О библиотеке knockout.js на хабре написано не так много, но кое что есть (и конечно же есть официальный туториал и другие материалы на оф. сайте и хороший ресурс на англ. языке knockmeout.net, статьи которого смогу перевести, если будет спрос). Данная статья возможно перерастёт в цикл статей по javascript и нокауту, если нло не похитит меня.

Изначально готовил материал для людей, уже знакомых с нокаутом и mvvm, но в комментариях к другим статьям меня попросили рассказать как готовить нокаут для чайников. Предполагаю, что вы уже прочитали предыдущие статьи о нокауте на хабре. Поехали!
Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments27

Пишем сложное приложение на knockoutjs

Reading time8 min
Views47K
Есть такая библиотека knockout.js. Она отличается от прочих хорошим туториалом для начинающих и кучей понятных рабочих примеров. Еще там стройная MVVM модель, декларативные связи и так далее.

Короче, если вы, как и я, поиграли с этой библиотекой, понаписали красивых формочек, и вам это понравилось, то все это дело захотелось применить на реальном проекте. И тут проблема — в реальном проекте формочек больше чем одна. А раз такие инструменты, то хочется single web page application и никак иначе. А делать один контроллер и все темплейты заверстывать на одну страницу тоже тупо и тормозно.

Под катом приведу основу своего сложного приложения. Само оно совсем не сложное, но модульное и допускает расширения, а темплейты и модели подгружаются динамически. Идея была подсмотрена в этой презентации — http://www.knockmeout.net/2012/08/thatconference-2012-session.html, код презентации выложен на github — https://github.com/rniemeyer/SamplePresentation — на базе этого кода будем писать свой.
Читать дальше →
Total votes 43: ↑38 and ↓5+33
Comments21

Russian AI Cup: итоги

Reading time2 min
Views8.4K
Итак, Russian AI Cup завершен!

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

Раунд 1: 900 участников из Песочницы, тройка лидеров выглядела так:
1. Геннадий Короткевич — tourist (Гомель, Беларусь)
2. Роман Удовиченко — Romka (Белорусский ГУ, Минск, Беларусь)
3. Николай Вабищевич — Mr.Smile (Москва, Россия)

Раунд 2: 300 + 45 участников. Изначально по правилам должны были пройти 300 человек. Но ввиду большой популярности мы выдали 45 вайлдкардс тем, кто следовал сразу за 300. Лучшими на этом этапе стали:
1. Александр Миланин — Milanin (Таврический НУ, Симферополь, Украина)
2. Роман Удовиченко — Romka (Белорусский ГУ, Минск, Беларусь)
3. Александр Важев — valex (Челябинск, Россия)

И наконец (барабанная дробь…) в финале чемпионата Russian AI Cup 2012 сразились 50 участников, и мы торжественно объявляем победителей!
Читать дальше →
Total votes 15: ↑10 and ↓5+5
Comments5

Об одном методе распределения памяти

Reading time17 min
Views29K
image
Не секрет, что иногда выделение памяти требует отдельных решений. Например — когда память выделяется и освобождается стремительным домкратом потоком, в параллельных задачах.

В результате стандартный консервативный аллокатор выстраивает все запросы в очередь на pthread_mutex / critical section. И наш многоядерный процессор медленно и печально едет на первой передаче.

И что с этим делать? Познакомимся поближе с деталями реализации метода Scalable Lock-Free Dynamic Memory Allocation. Maged M. Michael. IBM Thomas J. Watson Research Center.

Самый простой код что я сумел найти — написан под LGPL камрадами Scott Schneider и Christos Antonopoulos. Его и рассмотрим.

Читать дальше →
Total votes 103: ↑101 and ↓2+99
Comments62

Создание плагина разрешения ссылок для PhpStorm (IntelliJ IDEA)

Reading time8 min
Views17K
Я работаю веб-программистом, пишу на PHP и использую фреймворк Kohana. Для разработки использую потрясающую, на мой взгляд, среду PhpStorm.

При работе с большими и не очень проектами меня всегда угнетало, что я много времени трачу на навигацию по проекту, на поиск того или иного файла (контроллера или шаблона) в дереве проекта. Ctrl+Shift+N, к сожалению, удобен далеко не всегда.

Для начала мне захотелось сделать так, чтобы можно было переходить из файла контроллера по нажатию Ctrl+B (или Ctrl+Click) над именем шаблона, передаваемого в кохановский View::factory(), непосредственно в файл шаблона:


 
Поэтому я решил написать небольшой плагин для PhpStorm, который облегчил бы мою работу и освободил бы от некоторой части рутины.

Читать дальше →
Total votes 60: ↑54 and ↓6+48
Comments16

Путь к серебряной медали на Russian AI Cup 2012

Reading time14 min
Views18K
Расскажу о своем участии в Russian AI Cup. Я — участник с ником Hohol, занявший второе место в финале.

У меня уже имелся некоторый опыт в написании бота для управления танком. Дело в том, что я вот уже пять лет участвую в ACM ICPC. Четвертьфинал нашего региона проходит в стенах Саратовского Государственного Университета, который, напомню, является одним из организоторов Russian AI Cup. На четвертьфинале каждый раз проводится неофициальный игровой конкурс Code Game Challenge. Суть все та же — напишите бота, который всех порвет. И хотя боты оказываются то волшебниками в шляпе и с посохом, то гоночными автомобилями, то суднами на воздушной подушке — мы всегда звали их танчиками.

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

Но познакомившись с правилами поближе, решил, что конкурс мне все же интересен.
Читать дальше →
Total votes 63: ↑60 and ↓3+57
Comments20

Путь к победе на Russian AI Cup 2012

Reading time11 min
Views28K
Здравствуйте, Хабравчане!
Предлагаю вашему вниманию историю своего участия и победы в финале конкурса по программированию CodeTanks 2012.



Про соревнование я узнал на Хабре, решил выяснить подробнее, пошел на сайт проекта. Обрадовала возможность писать на С++ под Linux без танцев с бубном. Сразу подумалось, что будет выигрыш в производительности по сравнению с участниками, пишущими на языках типа Java/Python. Ну и сам формат соревнования мне понравился: до первого раунда две недели, дальше по неделе перерыва между раундами. Не нужно в жутком цейноте рожать правильно работающий код, а можно относительно спокойно все продумать и запрограммировать. Дальнейшее изучение правил и просмотр боев на сайте только укрепили решение участвовать: мне гораздо более интересно программировать AI в сложном и плохо определенном окружении, чем в полностью формализованном, типа настольных игр.

Читать дальше →
Total votes 166: ↑160 and ↓6+154
Comments49

Завершились отборочные этапы Russian AI Cup 2012

Reading time2 min
Views8.5K
Всем доброго дня.

Завершились отборочные этапы открытого соревнования по программированию искусственного интеллекта Russian AI Cup 2012. Напомним, что участникам чемпионата предлагается запрограммировать искусственный интеллект для танков, сражения между которыми симулируется игровой системой.



Интересная статистика:

Интересно посмотреть, как меняется процент распределения используемых языков с прогрессом в этапах чемпионата. Так,
* C#, C++, Java практически не меняют свои доли;
* Pascal сделал рывок в Раунде 2;
* Python 2 стабильно растет на протяжении всех этапов;
* Python 3 стабильно падает на протяжении всех этапов.

Чем обусловлена такая динамика Python 2 против Python 3 – загадка.

Читать дальше →
Total votes 36: ↑29 and ↓7+22
Comments13

До старта первого раунда Russian AI Cup остались считанные часы

Reading time2 min
Views4.7K
До старта Раунда 1 чемпионата Russian AI Cup остались считанные часы. Ажиотаж продолжает нарастать: в умении писать искусственный интеллект будут состязаться жители разных стран.

В связи с тем, что желающих поучаствовать становится все больше, организаторы Russian AI Cup — Одноклассники и Саратовский государственный университет — решили увеличить число стратегий, участвующих в Раунде 1. Таким образом, для первого раунда будет отобрано не 600, а 900 стратегий.

Измененная турнирная сетка выглядит так:


Раунд 1 будет проводиться с 10 по 11 ноября 2012 года. Тип боев — 6x1. Этот этап будет состоять из двух частей. Между двумя частями будет сделан перерыв, на время которого возобновит работу Песочница. Кстати, перерыв можно использовать для того, чтобы улучшить свою стратегию, приняв во внимание результаты первой части. Каждая часть будет длиться 12 часов, перерыв — 24 часа.

Для боев в каждой из частей Раунда 1 будет выбираться последняя корректная стратегия, отправленная до начала соответствующей части. Бои будут проводиться волнами. В каждой волне каждая стратегия примет участие ровно в одном бою. Количество волн будет не меньше 10, но не более 100. Мы надеемся успеть протестировать ровно 100 волн в каждой части, но многое будет зависеть от скорости работы ваших стратегий.

Внимание, изменение!
Читать дальше →
Total votes 23: ↑19 and ↓4+15
Comments20

Information

Rating
Does not participate
Location
Саратов, Саратовская обл., Россия
Registered
Activity