Pull to refresh
-2
0
Михаил Котельников @wolandtel

GNU/Linux: администрирование и разработка ПО

Send message

Как потерять капитал

Reading time2 min
Views81K
Лично меня жизнь убедила, что люди это капитал. Особенно в нашей отрасли все зависит от людей. Если кто-то сомневается в этом, то очень рекомендую книгу шведов Кьелла А. Нордстрема, Йонаса Риддерстрале, «Бизнес в стиле фанк. Капитал пляшет под дудку таланта». Книга не новая, но, имхо, очень доходчиво разъясняет, почему Маркс, Ленин и Мао Дзэдун были правы в современном мире это именно так.

А коль скоро люди это капитал, то его надо беречь и приумножать, а не разбазаривать. А остаться без человеческого капитала очень просто. Вот, набор высказываний, которые могут заставить лучших ваших бойцов задуматься, а не пора ли обновить резюме на hh. И с вами останутся только неудачники.
Читать дальше →
Total votes 102: ↑73 and ↓29+44
Comments59

«Нетворческая» сторона локализации игр. Как мы делаем это

Reading time5 min
Views32K
(Новая запись от Марины Ильиных virtualtomato, старшего менеджера проектов в All Correct Localization)

Часть 1


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

image
Иллюстрация с сайта Dageron.com
Читать дальше →
Total votes 52: ↑47 and ↓5+42
Comments37

Вебсокеты на PHP. Часть 3. От чата до игры: Battle City

Reading time5 min
Views40K
В предыдущих двух частях (Делаем вебсокеты на PHP с нуля и Межпроцессное взаимодействие) в качестве демонстрации я использовал чаты, но в этой статье на примере онлайн-игры я покажу, что сфера применения вебсокетов может быть гораздо шире.

Как обычно, в конце статьи ссылки на демонстрационную игру и исходный код на гитхабе.

Содержание:
  • Поддержка вебсокетов браузерами
  • Разработка онлайн-игры
  • Благодарности
  • Демка и исходный код

Читать дальше →
Total votes 40: ↑33 and ↓7+26
Comments23

Tig — консольный GUI для Git

Reading time2 min
Views37K
Никогда не был фанатом gitk и пользовался им редко, предпочитая консоль и настроенные алиасы. Благодаря хабраюзеру grossws, я открыл для себя tig. Это то, чего мне не хватало. После месяца использования его в работе хочу поделиться находкой с вами.

Tig это консольный GUI(TUI) для Git, основанный на Ncurses.
Основные преимущества:

  • потрясающая скорость, 20,000 коммитов готовы к просмотру за четверть секунды
  • консольный
  • управление в vim стиле

Cкриншоты основных режимов и сравнение с gitk.
Читать дальше →
Total votes 64: ↑60 and ↓4+56
Comments46

AlfabankAPI для работы с Альфа-Клиент On-line

Reading time3 min
Views24K
Как и у многих, в один прекрасный день появилась идея автоматизировать бизнес процессы в своей организации. Так или иначе автоматизировать можно всё и бесконечно долго, но задача по работе с банком показалась наиболее важной и интересной. Перед началом исследования стоит предъявить требования к необходимому API с помощью которого мы ходим общаться с банком. На первом этапе неплохо было бы установить соединение с банком, получить текущий баланс и список операций по счёту на указанный период.
Подробности
Total votes 27: ↑26 and ↓1+25
Comments22

Клиент Яндекс.Диска для Linux. Консольный

Reading time8 min
Views115K
Сегодня мы представляем долгожданный клиент Яндекс.Диска для Linux. Можно было бы даже сказать «специально для Хабрахабра», так как ни одно упоминание Диска здесь не обходилось без вопросов о клиенте для Линукса.

У него есть вся основная функциональность, которая есть у клиентов для OS X и Windows, и даже больше (симлинки!), и одна особенность — он консольный.

image

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

Читать дальше →
Total votes 201: ↑185 and ↓16+169
Comments224

SDK от Яндекс.Диска

Reading time4 min
Views33K
Яндекс.Диск получил SDK. Теперь можно удобно использовать его возможности в приложениях для OS X и Windows, ровно как и в мобильных приложениях на iOS, Android и Windows Phone. Кроме этого, мы разработали специальные виджеты, чтобы и любой веб-сайт мог легко реализовать работу с Я.Диском (например, загружать файлы прямо на Я.Диск пользователя) прямо на месте.

Сразу замечу — мы и раньше использовали открытый протокол WebDAV, поэтому в своих приложениях интегрироваться с Диском можно было практически с самого начала. Но теперь возможностей для этого стало больше, а главное — это станет намного более удобным и простым делом.

Также, кроме SDK и виджетов, есть ещё одно важное нововведение — дедупликация файлов, загружаемых через WebDAV. Теперь, если какой-то пользователь уже загружал такой файл, то для вас он будет загружен мгновенно.

image

Обо всём этом я вчера рассказал в своей презентации на Yet Another Conference, а сейчас специально для вас хочу раскрыть подробности на Хабре.
Обо всём по порядку
Total votes 103: ↑92 and ↓11+81
Comments92

Открылась бета-версия новых Яндекс.Карт: как и почему мы их делали

Reading time4 min
Views66K
Сегодня мы запускаем бета-версию Карт. Это начало долгого пути по созданию нового интерфейса Яндекс.Карт с нуля. Можно сказать, что это третий решительный виток в его истории. На примере этого запуска я попробую поделиться с вами видением того, как можно организовать создание сложного пользовательского продукта с кучей различных требований.

image

Интерфейс Яндекс.Карт — сложное одноэкранное суперинтерактивное приложение в браузере: куча кнопочек, карта интерактивная, поиск — вы как пользователь нажимаете на кнопки, что-то происходит на экране. С ростом функциональности мы пришли к ряду проблем в интерфейсе, которые уже невозможно лечить по отдельности. Нужен какой-то решительный шаг, который поможет не только вылечить текущие проблемы, но и сделать так, чтобы сервис был готов к росту числа фич, аудитории, скорости внешних и внутренних изменений. Именно поэтому мы придумали бету: не ломая привычки пользователей, разработали новую версию, чтобы хорошенько её протестировать и только потом переключить на неё пользователей.
Читать дальше →
Total votes 97: ↑88 and ↓9+79
Comments155

По следам мобильного телефона. Геолокация с помощью сотовой сети

Reading time5 min
Views200K
В прошлый раз, когда мы рассказывали о приложении МегаФон Навигация и принципах его работы, мы упомянули еще несколько услуг, главной составляющей которых является определение координат и их интерпретация (Location-based services).

В зависимости от поставленных перед сервисом задач и требований по точности, мы применяем разные технологии определения координат. Сегодня мы расскажем, какие технологические площадки есть у нас в распоряжении, и как мы их используем.
Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments11

Случай в Pixar или еще раз о важности тестирования резервных копий

Reading time6 min
Views54K
1998 год, Студия Pixar. Полным ходом идет создание «Истории игрушек 2». В процессе участвует более 150 человек. Размер исходных материалов анимации составляет 10 ГБ (по тем временам это очень много). Каждый день строится полный бэкап на ленту. Кассета имеет размер… 4ГБ (данные при записи на ленту сжимаются, но, конечно, не до такой степени). Каждый раз выдается ошибка, но этого никто не замечает, потому что лог-файл располагается на этой же кассете и пишется в самом конце бэкап-задания, а, поскольку места на кассете уже нет, он имеет размер 0 байт. Каждую неделю проводится тестовое восстановление данных, в ходе которого проверяются первые 2000 кадров анимации. И, конечно, каждый раз тест проходит успешно.

… А потом вдруг наступил день, когда кто-то из сотрудников (ошибочно или намеренно) запустил на сервере команду "/bin/rm -r -f *" (или аналогичную), которая удалила 90% из 100,000 файлов исходников анимации. Один из сотрудников компании, Ларри Катлер, как раз просматривал файлы папки с исходниками анимации, собираясь откорректировать что-то в модели шляпы персонажа Вуди, как вдруг он заметил, что файлов в папке осталось всего 40… потом 4… а еще через секунду их там не осталось вовсе. Ларри позвонил в ИТ службу и сообщил, что "произошла масштабная потеря данных", и что "восстановление потребует полную резервную копию..." Которой, как выяснилось чуть позже, у них не было, несмотря на ежедневный бэкап.

Читать дальше →
Total votes 55: ↑46 and ↓9+37
Comments18

QLiveBittorrent — консольный bittorrent клиент для просмотра файлов до скачивания

Reading time5 min
Views34K
Ровно месяц назад была опубликована статья LiveDC — Быстрый доступ к p2p файлам. Смысл ее в том, что Erty_Hackward написал DC-клиент с возможностью просмотра файлов до их окончательной загрузки. С его помощью можно, например, смотреть фильмы спустя пару минут после начала закачки, перематывать их, смотреть с любого момента. А можно извлечь нужный файл из большого архива, не перекачивая целый архив.

Мне очень понравилась идея этой программы. Но она написана на C#. А хотелось бы использовать ее в линуксе. Поэтому с разрешения автора я с большим удовольствием взялся за создание аналогичной программы для линукса. В результате получился консольный битторрент клиент QLiveBittorrent.


Читать дальше →
Total votes 146: ↑141 and ↓5+136
Comments91

Решаем квартирный вопрос при помощи API Яндекс.Карт

Reading time7 min
Views51K
В жизни даже самого «махрового» IT-шника порой наступает момент, когда нужно не только вылезти из своей берлоги на улицу, но целиком перенести себя на новое место жительства. Обычный человек в таких случаях вооружается Интернетом и прочёсывает сайты недвижимости в поисках подходящих вариантов, которые отмечаются на карте, выписываются или распечатываются, а затем планомерно прозваниваются. Если наступает конец цикла, а задача ещё не выполнена — goto line 1… А на каком-то этапе человеку это надоедает и он идёт в агенство.

Вот и в моей жизни пришло время для переезда, но проведя несколько дней за такой рутинной деятельностью я вспомнил, что незря ношу бороду есть такой чудесный сервис, как Яндекс.Карты, и у них есть не менее чудесное API. Посидев одно утро и скомбинировав всё с простейшим граббером на PHP и XPath я получил такую вот красочную карту, где разными маркерами можно отмечать объекты (квартиры) по любому из критериев, или просто одним взглядом оценить, какие из них ближе к желаемому месту дислокации (в моём случае это было метро):

Снимок экрана

Под катом - PHP, JS, немного HTML и кое-какие полезные ссылки
Total votes 77: ↑67 and ↓10+57
Comments51

Http запросы — мы все это делаем неправильно

Reading time3 min
Views189K
В проекте, над которым я работаю, мы используем огромное количество сторонних библиотек. Многие из них — адаптеры для различных сервисов. Что их объединяет, это то, что они работают с сетью. Json поверх http, soap поверх http, какие-то свои протоколы поверх http. Т.е. все так или иначе используют http. И как ни удивительно, мало кто из них пользуется преимуществами его последней версии. Я не поленился заглянуть в википедию, прошло ровно 14 лет как была принята спецификация http 1.1. И потому я решил обратиться с призывом:
image

Да, речь пойдет о keep alive. Суть в том, что, начиная с http 1.1, клиент и сервер могут договориться не закрывать установленное tcp-соединение после завершения запроса, а переиспользовать его для следующих запросов. Это нужно потому, что на установку соединения требуется время. Иногда это время больше, чем время самого запроса. И если все серверы уже давным-давно такую возможность поддерживают, а все браузеры и большинство других клиентов её используют, то у разработчиков различных библиотек для популярных языков программирования здесь почему-то пробел.
Читать дальше →
Total votes 167: ↑142 and ↓25+117
Comments169

5 вещей, которых вы не знали о многопоточности

Reading time10 min
Views293K
Хоть от многопоточности и библиотек, которые её поддерживают, отказываются немногие Java-программисты, но тех, кто нашёл время изучить вопрос в глубину ещё меньше. Вместо этого мы узнаём о потоках только столько, сколько нам требуется для конкретной задачи, добавляя новые приёмы в свой инструментарий лишь тогда, когда это необходимо. Так можно создавать и запускать достойные приложения, но можно делать и лучше. Понимание особенностей компилятора и виртуальной машины Java поможет вам писать более эффективный, производительный код.

В этом выпуске серии «5 вещей …», я представлю некоторые из тонких аспектов многопоточного программирования, в том числе synchronized-методы, volatile переменные и атомарные классы. Речь пойдет в особенности о том, как некоторые из этих конструкций взаимодействуют с JVM и Java-компилятором, и как различные взаимодействия могут повлиять на производительность приложений.
Читать дальше →
Total votes 86: ↑77 and ↓9+68
Comments40

Двуликий REQUEST_URI или в поисках корректного HTTP/1.1 сервера

Reading time15 min
Views67K
Вы знаете, чем отличается %{REQUEST_URI} в Apache mod_rewrite от $_SERVER["REQUEST_URI"] в PHP?

Сможете в .htaccess на уровне Apache сделать корректную переадресацию 301 с домена с префиксом www или на него?

Для последнего вопроса я и сейчас не смогу предложить решение. Причина в протоколе HTTP/1.1, который пришлось изучить подробнее, когда «изобретал велосипед» (создавал ядро для сайта).

Всё дело в HTTP-заголовке запроса «Host:». При определённых условиях там может быть всё, что угодно, причём сервер должен полностью это проигнорировать согласно HTTP/1.1. Большинство же разработчиков используют значение этого поля, например, для SEO-оптимизаций. Забегая вперёд, скажу, что дополнительный прокси (например, nginx) позволит решить эту проблему.

Для иллюстрации некорректного поведения серверов решил перебрать сайты компаний Хабра. Для дюжины сайтов сделал это вручную, а потом обнаружил, что некоторые сайты на ошибочные запросы отвечают «правильно». После этого была написана небольшая утилита для тестирования, что позволило увеличить количество тестовых шаблонов и проверяемых сайтов.

Что же скрывает REQUEST_URI в HTTP/1.1?

Узнать подробности
Total votes 48: ↑43 and ↓5+38
Comments27

ToS;DR упрощает юридические документы до ключевых фраз

Reading time2 min
Views20K


«Я прочёл условия пользовательского соглашения и согласен с ними» — величайшая ложь в интернете. Каждый из нас сотни раз нажимал кнопку "OK" под такой фразой. Участники проекта ToS;DR уже ровно год анализируют условия пользовательских соглашений на популярных сайтах — и составляют ясную записку из нескольких предложений, в чём суть ToS и как оно ущемляет наши права. Выжимка содержит ключевые достоинства и недостатки сервиса. Каждому ToS выставляется оценка. Очищенная от юридической шелухи версия пользовательского соглашения передаётся пользователю через расширение в браузере.

За прошедший год юридический аудит прошли 72 пользовательских соглашения, десятки других на подходе. Сервис уже собрал €20 тыс. пожертвований, выпущены расширения для всех популярных браузеров.
Читать дальше →
Total votes 112: ↑102 and ↓10+92
Comments28

Многопоточность в Java

Reading time14 min
Views1.1M
Здравствуйте! В этой статье я вкратце расскажу вам о процессах, потоках, и об основах многопоточного программирования на языке Java.
Наиболее очевидная область применения многопоточности – это программирование интерфейсов. Многопоточность незаменима тогда, когда необходимо, чтобы графический интерфейс продолжал отзываться на действия пользователя во время выполнения некоторой обработки информации. Например, поток, отвечающий за интерфейс, может ждать завершения другого потока, загружающего файл из интернета, и в это время выводить некоторую анимацию или обновлять прогресс-бар. Кроме того он может остановить поток загружающий файл, если была нажата кнопка «отмена».

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

Давайте начнем. Сначала о процессах.
Читать дальше →
Total votes 75: ↑59 and ↓16+43
Comments97

Однажды вы читали о ключевом слове volatile…

Reading time5 min
Views101K
В C и C++ есть ключевое слово volatile, которое указывает компилятору, что значение в соответствующей области памяти может быть изменено в произвольный момент и потому нельзя оптимизировать доступ к этой области. Обычно описание ключевого слова сразу приводит пример с данными, которые могут быть в любой момент изменены из другой нити, аппаратным обеспечением или операционной системой. Прочитав описание примера, большинство читателей глубоко зевает, решает, что в этой жизни им такое не понадобится, и переходит к следующему разделу.

Сегодня рассмотрим менее экзотический сценарий использования ключевого слова volatile.

Читать дальше →
Total votes 99: ↑89 and ↓10+79
Comments84

Перезаписывать память – зачем?

Reading time4 min
Views40K
В недрах Win32 API есть функция SecureZeroMemory с очень лаконичным описанием, из которого следует, что эта функция перезаписывает область памяти нулями и устроена таким образом, что компилятор при оптимизации кода никогда не удаляет вызов этой функции. Там же говорится, что следует с помощью этой функции перезаписывать память, ранее использованную для хранения паролей и криптографических ключей.

Остается один вопрос – зачем это? Можно найти пространные рассуждения о риске записи памяти программы в файл подкачки, файл hibernate или аварийный дамп, где его может найти злоумышленник. Это похоже на паранойю – далеко не всякий злоумышленник имеет возможность наложить руку на эти файлы.

На самом деле, возможностей получить доступ к данным, которые программа забыла перезаписать, гораздо больше – иногда не нужно даже иметь доступа к машине. Дальше мы рассмотрим пример, и каждый сам решит, насколько оправдана паранойя.
Читать дальше →
Total votes 89: ↑84 and ↓5+79
Comments15

Information

Rating
Does not participate
Location
Пермь, Пермский край, Россия
Date of birth
Registered
Activity