Злые люди прислали ссылку на игру: agar.io. И я не могу оторваться от неё.
Если вы играли в игру Spore и видели первый уровень — вы сразу всё поймёте. Если вы не играли, то вы — нормальный человек и тоже поймёте всё сразу.

Вы начинается играть чем-то круглым, предположительно клеткой (кругла клетка! оксюморон! (примитивный лингвистический юмор (очевидное объяснение очевидного (лингвистический фрактал (примитивный математический юмор))))).
Как клетка вы можете двигаться и поглощать более другие клетки. Начинаете жить размера 10 и питаться подножным кормом который добавляет по +1 к вашему размеру. Как только вы отъедаетесь на размер ~20 у вас появляются суперспособности.
Первая — это откинуть часть своей плоти на корм другим.
Вторая — разделиться на две равные части причем одна часть выстреливает вперёд, а первая часть остается на месте (я прямо лингвистический террорист сегодня).
На карте находитесь вы, другие игроки, некоторое колличество подножного корма и зелёные мины (вирусы?).
Вот, собственно и всё, но за этими простыми правилам скрывается потрящающая игровая механика.
Ваша цель увеличиться в размере максимального сильно. По началу вы просто обязаны есть подножный корм, но как только вы начинаете делиться — вы уже готовы к охоте. На подножном корме сильно увеличить не получится — его немного. Поедать других будет нужно, но делать это непросто.
Во-первых, чем вы меньше тем вы быстрее.
Во-вторых, поглотить вас можно двумя способами: или просто поглотить, или выстрелить часть себя.
Шутка в том что вы не можете поглотить клетку сходного с вами размера, но можете тех кто меньше. Кто больше может вполне успешно поглотить вас. Но клетки меньше вас быстрее вас — вы никогда её не догоните.
То есть клетки которых вам не нужно опасаться вы не можете догнать! И тут начинается интересное. Самый просто способ это выстрелить половиной себя вперед, но и тут есть нюансы! Вы можете поглотить выстрелом только клетки которые меньше вашей половины. То есть вы жертва половины вашего размера, то выстрелив половиной себя вы не сможете её поглотить, а сами уменьшитесь вдвое.
Из этого исходит два нюанса этого способа. Во-первых, очень хорошо когда вы стреляете в больше колличество клеток размера ~45% от вашего. Во-вторых, рядом очень нежелательного иметь клетки размер которых >60% вашего размера. Но при этом если вы уверены что после разделения вы нормально поглотите других клеток, то ваша вторая половина вполне может быть больше вас до разделение + остается вторая ваша половина.
То есть выгодно, но опасно. При этом разделившись вы не можете сразу соединиться обратно — вам нужно какое-то время поплавать, а размера вы уже меньще и поэтом вы хорошая жертва.
Во-вторых на карте есть вирусы съедая который вас разрывает на части. Одно крупная размера ~50% и много мелких. А ещё в вирусы можно стрелять своей плотью и после поедания ~60 поинтов оно стреляет в противоположную сторону другим вирусом.
У вирусов сразу два назначения: во-первых они опасные и все стараются их избегать. Поэтому в них хорошо как прятаться/убегать в панике, так и вести жертву к скоплению вирусов чтобы они не могли от вас никуда убежать. БВА-ХА-ХА.
Во-вторых, это оружие и поэтому когда вы видите кого-то сильно больше вас вы можете в него стрельнуть вирусов и если у вас получится, то как минимум у преследтователя/жертвы появляются проблемы. А в лучшем вы ещё и нормально увеличитесь в размерах.
Чем вы больше тем вам играть веселее — у вас всё более масштабно. Но при этом вы постоянно теряете в размере (видимо, энергия на движение) и поэтому вам было бы неплохо атаковать. При этом делиться надвое страшно — вдруг пожрут. Поэтому совсем мелких стараешься лишний раз не есть во избежание.
Это вот про механику, при этом есть ещё одна потешная составляющая — социальная. В игре нет никакого общения кроме как выбрать ник. При этом от ника может зависить ваш скин. Например, игроки с ником Russia полосатые, которые Poland так там кантри-бол, Польша стронг! Stalin с усами, USSR с серпом и молотом.
Я, например, если сам большой, то стараюсь не есть тех кто говорит на русском. Ну то есть я могу, но могу и проплыть мимо. При этом иногда ещё и делюсь своей энергией помогая со стартовым ростом. При этом могу иногда не съесть меня. А когда у тебя с игроком цвета российского флага такой негласный альянс (о котором никак вообще не договориться и вообще цель игры в поедании!), то очень удобно бывает загонять в угол какого-нибудь урода с ником Nazi.
Забавная игра в общем-то.
2015.05.12 00:25
Ведь если бы я был программистом я бы понимал что тут происходит:
And now as one allocation, sliced into lines:
// Allocate the top-level slice, the same as before.
picture := make([][]uint8, YSize) // One row per unit of y.
// Allocate one large slice to hold all the pixels.
pixels := make([]uint8, XSize*YSize) // Has type []uint8 even though picture is [][]uint8.
// Loop over the rows, slicing each row from the front of the remaining pixels slice.
for i := range picture {
picture[i], pixels = pixels[:XSize], pixels[XSize:]
}
2015.05.08 15:02
Эти ваши интернеты очень-очень странное место, вот Bolk написал Личный пост Евгения Дорохина в своём блоге, а оказывается, Евгеша не давал разрешение делать Болку личный пост у себя в блоге! Это восхитительно!
С нетерпением жду у себя в блоге гневного комментария, Евгеша!
2015.05.06 21:20
За последнюю неделю мне дважды хотелось написать разработчикам / саппорту двух разных сайтов. Один большой, а второй нет. И в обоих случаях не нашёл ничего подобного на developer@example.com или support@example.com.
Или багтрекеры с обязательной регистрацией, или какие-то социальные сети, но не e-mail, о боже, только не e-mail.
Мир катится в неправильном направлении, неудобненько.
2015.04.30 10:40
Если когда-нибудь у меня заведётся своё кафе или какое-нибудь подобное злачное место, то целыми днями на 117 мониторах будут крутится только демки.
2015.04.27 18:39
Код должен быть оформлен как минимум одинаково. Лучше — красиво, но как минимум одинаково. Но хочется красиво. Но проблема в том что “красиво” у всех своё и это немного проблема. Понапишу про то что я считаю красивым.
1. Табы или пробелы?
Википедия нам сообщает следущее:
Горизонтальная табуляция (HT, TAB) — управляющий символ таблицы ASCII с кодом 0916, используется для выравнивания текста в строках. Встретив этот символ, терминал перемещает каретку (или курсор) вправо на ближайшую позицию табуляции. Традиционно эти позиции располагаются каждые 8 знакомест, в колонках 1, 9, 17, 25… Вводится при помощи клавиши Tab ↹, во многих языках программирования обозначается как \t.
По непонятной мне причине я пока не встречал по работе людей которым нравятся табы. Всем нравятся пробелы потому что у всех выглядит всё одинаково. Я не совсем понимаю почему преобладают идиоты которые не могут осознать что “одинаково” != “удобно”.
Желаю всем любителям пробелов умереть в агонии.
2. CamelCase или Snake_Case?
По непонятной мне причине в мире восторжествовал CamelCase. Печалька. Я люблю Snake_Case. Возможно, дело в том, что я люблю всё что не мейнстрим?
3. Именование переменных
Несмотря на то что я пишу на пхп и прочем мусоре с динамической типизацией, я полюбил венгерскую нотацию (вы не поверите, но она тоже не мейнстрим):
a_var -- array b_var -- bool i_var -- int f_var -- float s_var -- string o_var -- object f_var -- function (lambda)
Помимо базовых типов, можно по ходу дополнять всяким своим, к примеру я пишу m_var и наивно полагаю что там лежит модель.
Главное удобство не в том, что я знаю какой тип (с динамической типизацией там может быть что угодно), а в том что я избавился от главной проблемы — именования! Сравните вот:
ids = array(); id = 12; pet_name = 'MALAMUTE'; pet_model = get_model(pet_name); is_pet_model_loaded = (bool)pet_model;
И что-нибудь типа такого:
a_id = array(); i_id = 12; s_pet = 'MALAMUTE'; m_pet = get_model(s_pet); b_m_pet_loaded = (bool)pet_model;
Я готов принимать любые аргументы по данному вопросу (например, что это неудобно, глупо и по-идиотски), но у меня есть ровно 1 контраргумент: я никогда, никогда, никогда, никогда, никогда не должен буду больше писать это идиотское ids, потому что если у меня написано a_id, то это значит что это массив. Массив — это всегда много. Мне не нужно писать это идиотское ids. Вам просто не передать как же я сильно ненавижу это ids.
2015.04.27 09:30
Увидел страшную штуку в интернете — человеко-спальник! Спальник в форме человека. Не знаю насколько это удобно, тепло или хорошо, но с трудом сдерживаюсь чтобы не купить. Я не знаю зачем, он просто сам по себе прекрасен. Самый идиотский спальник что я видел. Не говорите мне что вы можете удержаться от его покупки.

2015.04.27 03:44
Совсем недавно, буквально пару месяцев назад, я написал душераздирающий пост про программное выключение монитора в линуксе, но с тех пор прошло много времени, технологии шагнули вперед, а монитор программно всё ещё хочется выключать.
Радует, что больше не нужно сходить с ума от того что по VGA кабелю передаются управляющие команды, но всё же.
Традиционно в линуксе говорят что чтобы выключить монитор надо сделать вот такое:
# xset dpms force off
Но, знаете, у меня после этого монитор все равно включался и это немного, самую малость, бесило. Прошли годы и я всё же решил попробовать все ЧЕТЫРЕ ВОЗМОЖНЫЕ ОПЦИИ. И, вы не поверите, одна из них работает как надо! Вот уж неожидаемо!
# xset dpms force standby
Удачи! Выключайте монитор! Проваливайте из интернета!
2015.04.26 21:35
Если вам когда-нибудь захочется слать письма с локалхоста, но при этом не захочется поднимать у себя весь тот ад что тесно связан с отсылкой почты, а просто захотите слать через внешний smtp сервер, то ssmtp — это то что вам нужно.
Правда, с 32-х символьным паролем на гмаиле оно почему-то не заработало, но я справился.
Подробности можете смело смотреть в archwiki (я, кстати, ненавижу archwiki потому что она пришла на смену gentoowiki что как бы намекает на нехорошее).
Ну а в тут я напишу на память (вдруг archwiki будет менее надёжное хранение информации чем мой бложик!)
Собираем:
# emerge -av ssmtp
Докидываем в конец файла “/etc/ssmtp/ssmtp.conf”:
# tail -n 23 /etc/ssmtp/ssmtp.conf # The user that gets all the mails (UID < 1000, usually the admin) root=username@gmail.com # The mail server (where the mail is sent to), both port 465 or 587 should be acceptable # See also http://mail.google.com/support/bin/answer.py?answer=78799 mailhub=smtp.gmail.com:587 # The address where the mail appears to come from for user authentication. rewriteDomain=gmail.com # The full hostname hostname=localhost # Use SSL/TLS before starting negotiation UseTLS=Yes UseSTARTTLS=Yes # Username/Password AuthUser=username@mail.com AuthPass=password # Email 'From header's can override the default domain? FromLineOverride=yes
Создаём адские алиасы для пользователей (по идее это для модицикации From)
# cat /etc/ssmtp/revaliases root:username@gmail.com:smtp.gmail.com:587 malamute:username@gmail.com:smtp.gmail.com:587
И добавляем всех подряд в группу ssmtp:
# gpasswd -a malamute ssmtp # gpasswd -a phpfpm ssmtp
2015.04.24 13:45
Я вот в последние года полтора думаю “а не пора ли закопать стюардессу?” хитро поглядывая на жаббер.
Пожалуй, единственное что меня останавливает — нежелание оставаться один на один со скаепом.
А вы что думаете по этому поводу? Жаббер не взлетел из-за xml’а или происков массонов? Ведь даже гугл его ~год назад уже закопал.
2015.03.31 19:22