Рубрика «Программирование» - 622

Как научить веб-приложение говорить на 100 языках: особенности локализации - 1

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

Идея написания этой статьи возникла после MoscowJS митапа, на котором я говорил о том, как происходит процесс локализации в компании Badoo. Но в этой статье я бы хотел рассказать немного подробнее об особенностях локализации на примере веб-приложений, о том, какие существуют решения для локализации и почему в Badoo пошли своим путем. Всем неравнодушным — добро пожаловать под кат.Читать полностью »

I think noone ever looked at the code as deeply as you did.
(Я думаю, что еще никто так глубоко не заглядывал в мой код, как вы.)

Christian Hohnstädt

Читать полностью »

Особенности реализации виртуальной машины в Dart. JS и Dart глазами компиляторщика - 1

Продолжаем публиковать видео с митапа Dart разработчиков, который прошел в офисе Wrike в конце ноября. Сегодня представляем доклад Вячеслава Егорова из Google. Вячеслав — сотрудник Google в городе Орхус, Дания, в том самом офисе, где появился на свет V8 JavaScript engine и язык программирования Dart. Компиляторщик до мозга костей, интересующийся всем, что так или иначе связанно с виртуальными машинами. Работал над V8, сейчас работает над Dart VM и иногда чинит баги в LuaJIT. Вместе с ним залезем под капот Dart VM.
Читать полностью »

Всем привет! Недавно я уже писал статью про интеграцию своего бота с IBM Watson, а в этой статье рассмотрю интеграцию с Google Cloud Vision для распознавания котиков и более подробно опишу внутренности своего бота.
Читать полностью »

Для начала я приведу небольшой тестовый проект из трёх классов, проанализирую его покрытие с помощью гема SimpleCov, а напоследок немного поразмышляю о том, как анализ покрытия может приносить пользу проекту, и какие есть недостатки у Coverage в Ruby.

Анализ покрытия кода тестами в Ruby - 1

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

# Мама очень заботится о своём сыне, и не разрешает ему гулять,
# если он не надел шарф. А ещё она заботится о его успеваемости, поэтому если
# сын не сделал домашнюю работу, гулять ему она тоже не разрешит.
class Mother
  def permit_walk?(child)
    child.scarf_put_on && child.homework_done
  end
end

Читать полностью »

Lock-free структуры данных. Итераторы: multi-level array - 1
В предыдущих частях опуса (1, 2, 3) мы рассмотрели внутреннее строение lock-free map и убедились, что все основные операции — поиск, добавление и удаление ключа — могут быть выполнены без глобальных блокировок и даже в lock-free манере. Но стандартный std::map поддерживает ещё одну очень полезную абстракцию — итераторы. Возможно ли реализовать итерабельный lock-free map?
Ответ на этот вопрос — под катом.
Читать полностью »

Все началось с того, что у меня перестал работать tagbar. Плагин падал с ошибкой, якобы текущая моя версия Exuberant Ctags вовсе не Exuberant. Покопавшись немного в исходниках, я понял, что последняя внешняя команда завершалась с ошибкой, а v:shell_error выдавал -1, что говорит о том, судя по документации vim'a, что "the command could not be executed". Я не стал копать дальше и установил fzf. Fzf, как и ctrlp, позволяет проводить нечеткий поиск по файлам, тегам, буферам, ..., но в отличии от последнего, работает гораздо шустрее, однако, не без минусов. Приложение работает напрямую с терминалом и каждый раз затирает мне историю вводимых команд. Это также означает, что мы не можем отобразить результаты поиска в буфере (neovim, судя по некоторым скринкастам, может), например, справа от основного буфера, когда ищем нужный тег. В отличие от sublime, fzf не придает больший вес имени файла, из — за чего я часто получал в топе вовсе не те результаты, которые ожидал увидеть. Ко всему прочему, отсутствие полной свободы в настройке цветовой схемы, что в общем-то не слишком важно для обычного пользователя, но только не для меня, с моим повышенным вниманием к мелочам. Под свободой я понимаю, как минимум, разграничение цвета для обычного (нормального) текста и строки запроса.

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

Читать полностью »

Расширение uBlock Origin вышло на Microsoft Edge - 1

Наконец-то к браузеру Microsoft Edge вышел самый эффективный блокировщик рекламы, который потребляет минимальное количество ресурсов процессора и памяти по сравнению с другими блокировщиками, а также распространяется с открытым исходным кодом. Конечно, это знаменитый uBlock Origin Рэймонда Хилла.

Работа над портированием uBlock Origin для Microsoft Edge идёт в репозитории uBlock-Edge на Github. 11 декабря 2016 года проект достиг такого уровня, что его автор Ник Роллс (Nik Rolls) решил выложить uBlock-Edge в официальном каталоге Windows Store расширений для браузера Edge.
Читать полностью »

29 сентября в Москве прошла мини-конференция JetBrains Night: 7 часов разработчики из JetBrains рассказывали разработчикам из других компаний о том, что компания делает, зачем, и что будет делать дальше, а потом отвечали на вопросы, обсуждали общие проблемы и вообще делились опытом (т.е. слушали, как разработчики из других компаний рассказывают им о том, что они делают и почему им удобно или пока еще не очень удобно делать это с помощью того, что делает JetBrains).

На Хабре мы постепенно публикуем видео всех докладов, чтобы можно было в комментариях обсудить то, что не успели обсудить на JetBrains Night, особенно с теми, кто не смог приехать лично.

Краткое содержание предыдущих серий:
Дмитрий Жемеров про язык Kotlin;
Максим Мазин и Валерия Андрианова про интеграцию серверных продуктов и использование новых Agile-досок;
Сергей Пак. Первые шаги с TeamCity DSL.

Сегодня публикуем видео, где Дмитрий Кожевников рассказывает, как CLion справляется Читать полностью »

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

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

Но так ли это? Давайте не будем просто воспринимать на веру слова некоторых парней в интернете, как библейское откровение, а проведём небольшой эксперимент и выясним.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js