Как стать автором
Обновить
14
0

Software Developer

Отправить сообщение

Настраиваем NGINX для мультиязычных сайтов

Время на прочтение4 мин
Количество просмотров27K

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

Какой метод определения языка пользователя подходит лучше – вопрос достаточно спорный. Мой личный ранг значимости языковой информации (в порядке убывания): cookie, настройки браузера, регион.

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

Распространенные варианты кодирования языковой информации о ресурсе следующие:
  • каждая языковая версия на отдельном субдомене, например en.example.com, ru.example.com
  • язык ресурса указывается в префиксе URI, например example.com/en/, example.com/ru
  • язык ресурса указывается в GET параметре, например example.com?lang=en, example.com?lang=ru

Первый вариант наиболее радикальный, каждая языковая версия сайта рассматривается как отдельный ресурс. Могут возникнуть сложности с SSL сертификатом, необходимо заранее предусмотреть все возможные варианты в SAN DNS Host Name, или заказать сертификат с маской, например *.example.com.

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

Третий вариант выглядит менее привычно, требует дополнительной логики при добавлении остальных GET параметров и может смутить пользователя при копировании ссылки. Не самый лучший вариант для публичных ссылок.
image
Я расскажу о реализации второго варианта на базе сервера NGINX. При минимальных изменениях можно применить описанные настройки и для первого варианта.
Читать дальше →
Всего голосов 55: ↑50 и ↓5+45
Комментарии22

Хабракамп #5

Время на прочтение1 мин
Количество просмотров14K
image
Хабракамп — это пост на Хабре, где в комментариях первого уровня IT-специалисты пишут темы, в которых они хорошо разбираются. Темы должны быть специфичные — настройка svn + trac или nginx + apache неинтересны и описаны везде, а вот оптимизация mysql для тысячи баз данных bugzilla или вещание видео потока на 10 гигабит в интернет интересно. Пользователи в ответ к комментариям пишут своим вопросы специалистам.

Просьба на первом уровне не задавать вопросы, а писать только специалистам об их сфере деятельности.
Для специалистов это шанс получить некоторое количество кармы, если им лень писать статьи и отвечать в qa, а для остальных — возможность задать вопросы, ответы на которые сложно найти в Google.
Не забываем плюсовать карму тем кто ответил на ваши вопросы.
Всего голосов 51: ↑33 и ↓18+15
Комментарии190

Хабракамп

Время на прочтение1 мин
Количество просмотров11K
Хабракамп — это пост на Хабре, где в комментариях первого уровня IT-специалисты пишут темы, в которых они хорошо разбираются. Темы должны быть специфичные — настройка svn + trac или nginx + apache неинтересны и описаны везде, а вот оптимизация mysql для тысячи баз данных bugzilla или вещание видео потока на 10 гигабит в интернет интересно. Пользователи в ответ к комментариям пишут своим вопросы специалистам.

Просьба на первом уровне не задавать вопросы, а писать только специалистам об их сфере деятельности.
Для специалистов это шанс получить некоторое количество кармы, если им лень писать статьи и отвечать в qa, а для остальных — возможность задать вопросы, ответы на которые сложно найти в Google.
Не забываем плюсовать карму тем кто ответил на ваши вопросы.
Всего голосов 46: ↑34 и ↓12+22
Комментарии271

Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №60 (1 — 8 июня 2013)

Время на прочтение6 мин
Количество просмотров24K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →
Всего голосов 39: ↑32 и ↓7+25
Комментарии9

Начался реверс-инжиниринг процессора PlayStation 1: безумству храбрых поём мы песню!

Время на прочтение2 мин
Количество просмотров95K
Вероятно многие из вас уже слышали о проекте Visual6502 — в котором умельцы отсняли по слоям легендарный процессор 6502 (а затем и 6800), восстановили электрическую схему, и написали визуальный эмулятор процессора на JavaScript. Помимо академической ценности, это также позволяет реализовать абсолютно точный эмулятор любых компьютеров, построенных на этих процессорах.

Однако наши соотечественники решили поднять планку выше, намного выше — и начали проект по восстановлению электрической схемы процессора Playstation 1 (MIPS R3051). Этот процессор — изготовлен по намного более тонким нормам чем 6502 (~800нм против ~5000нм), содержит 3 слоя металлизации (вместо 1), и имеет бОльшую площадь (~250тыс транзисторов против 3.5тыс у 6502) — потому объем работы обещает быть по меньшей мере в 100 раз больше.

Цель проекта — создание абсолютно точного эмулятора Playstation 1.
Читать дальше →
Всего голосов 184: ↑178 и ↓6+172
Комментарии96

Изучаем С используя GDB

Время на прочтение6 мин
Количество просмотров107K
Перевод статьи Аллана О’Доннелла Learning C with GDB.

Исходя из особенностей таких высокоуровневых языков, как Ruby, Scheme или Haskell, изучение C может быть сложной задачей. В придачу к преодолению таких низкоуровневых особенностей C, как ручное управление памятью и указатели, вы еще должны обходиться без REPL. Как только Вы привыкнете к исследовательскому программированию в REPL, иметь дело с циклом написал-скомпилировал-запустил будет для Вас небольшим разочарованием.

Недавно мне пришло в голову, что я мог бы использовать GDB как псевдо-REPL для C. Я поэкспериментировал, используя GDB как инструмент для изучения языка, а не просто для отладки, и оказалось, что это очень весело.
Читать дальше →
Всего голосов 70: ↑66 и ↓4+62
Комментарии30

Symfony 2.3.0! Первый релиз с долгосрочной поддержкой!

Время на прочтение4 мин
Количество просмотров13K
image

Symfony 2.3.0


Мы все долго этого ждали, многие из нас работали последние 4 года что бы это произошло. Сегодня, Symfony 2.3.0 доступна и это первый релиз с долгосрочной поддержкой(LTS) для Symfony 2.

Я очень счастлив, что мы достигли этой точки в жизни Фреймворка. Спасибо вам, что сделали это возможным!
Читать дальше →
Всего голосов 41: ↑30 и ↓11+19
Комментарии6

Регулируемая подсветка монитора своими руками

Время на прочтение2 мин
Количество просмотров141K
Всем привет, я Александр, и я фрилансер.

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

Но вот беда, освещение в комнате слабое, и яркость монитора в вечернее время суток просто выедает глаза. Мирился с этим я долго. И тут, внезапно, во время очередного вечернего просмотра шедевра кино-индустрии на своём телевизоре Philips, с замечательной технологией Ambilight, посещает меня идея — почему бы не сделать аналогичную белую подсветку для монитора?


Сказано-сделано! Результат работы:

Кому интересны этапы построения — прошу под хабракат.
Читать дальше →
Всего голосов 105: ↑96 и ↓9+87
Комментарии71

Дайджест интересных новостей и материалов из мира PHP за последние две недели №18 (22.05.2013 — 03.06.2013)

Время на прочтение6 мин
Количество просмотров15K


Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.

Приятного чтения!
Читать дальше →
Всего голосов 63: ↑55 и ↓8+47
Комментарии11

Сравнение эффективности минимизаторов CSS- и JavaScript-кода

Время на прочтение3 мин
Количество просмотров31K
Логотипы модулей-минимизаторов из Bundle Transformer

Разработчики, использующие Bundle Transformer, часто спрашивают у меня: «Какой минимизатор обладает самой высокой степенью сжатия?». В принципе, в сентябре прошлого года в своей статье «Вышел Bundle Transformer 1.6.2 или что изменилось за полгода?» я уже проводил сравнение минимизаторов по степени сжатия кода, но это сравнение было поверхностным и не было подкреплено цифрами.

В этой краткой статье мы проведем сравнение наиболее популярных алгоритмов минимизации CSS- и JS-кода на примере адаптеров-минимизаторов из Bundle Transformer. В качестве исходных файлов будут использоваться файлы bootstrap.css и bootstrap.js из Twitter Bootstrap версии 2.3.2. Измерять размеры файлов мы будем с помощью YSlow.
Читать дальше →
Всего голосов 53: ↑48 и ↓5+43
Комментарии26

Система изучения языка в Дании

Время на прочтение8 мин
Количество просмотров138K
В продолжение статьи "Дания: страна здравого смысла" хочу поделиться, как здесь организовано изучение датского языка для иностранцев.

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

Вначале — небольшая вводная, затем затронем техническую часть.

Зачем учить датский язык


Приезжим даётся 3 года, чтобы начать изучать язык за счёт государства, т.е. безвозмездно. Несмотря на это, я размышлял, стоит ли тратить на это несколько часов в неделю — ведь на нём говорит всего-то 5.7 млн человек.

В итоге я выделил для себя такие плюсы:
  • хотя датчане поголовно владеют английским, они очень ценят, если ты стараешься общаться с ними на родном языке. Также хотелось бы понимать надписи на улице, письма из банка, и т.д.,
  • для получения вида на жительство требуется сдать экзамен на владение языком и знание культуры страны. Оставаться здесь жить я не планирую, но решил не захлопывать это «окно в Европу»,
  • знание датского сильно упрощает понимание остальных языков скандинавской группы,
  • стало просто интересно, что говорят окружающие, когда думают, что ты их не понимаешь,
  • то, о чём я не подумал, пока не начал заниматься — новые знакомые. С иностранцами-одногруппниками подружиться проще, чем с датчанами: на курсах получается сплочённая интернациональная компашка с общим интересом.

Читать дальше →
Всего голосов 105: ↑95 и ↓10+85
Комментарии63

Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №59 (25 — 31 мая 2013)

Время на прочтение7 мин
Количество просмотров30K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →
Всего голосов 46: ↑35 и ↓11+24
Комментарии4

Поддержка USB в KolibriOS: что внутри? Часть 1: общая схема

Время на прочтение9 мин
Количество просмотров36K
Архитектура USB содержит несколько уровней. На самом низком уровне специально обученное железо, называемое хост-контроллером (host controller), общается с USB-устройством специальными сигналами. Сигналы кодируют биты, биты складываются в пакеты, пакеты образуют транзакции, транзакции составляют передачи (transfers).

Я рассказываю о программной поддержке USB, поэтому уровни ниже передач почти неинтересны: за них отвечает хост-контроллер. Зато важно, какой интерфейс представляет хост-контроллер софту. Сейчас распространены три интерфейса, и постепенно распространяется четвёртый:
Аббр. Название интерфейса Версия Код поддержки контроллера в KolibriOS
UHCI Universal Host Controller Interface USB 1.1 kernel/trunk/bus/usb/uhci.inc
OHCI Open Host Controller Interface USB 1.1 kernel/trunk/bus/usb/ohci.inc
EHCI Enhanced Host Controller Interface USB 2.0 kernel/trunk/bus/usb/ehci.inc
XHCI eXtensible Host Controller Interface (новый) USB 3.0 В KolibriOS ещё не поддерживается
На этом же уровне взаимодействия с контроллерами находятся файлы kernel/trunk/bus/usb/hccommon.inc, где реализованы некоторые функции, общие для всех контроллеров, и kernel/trunk/bus/usb/init.inc, который запускает всю подсистему. Впрочем, не торопитесь пока лезть в код — во-первых, я ещё не рассказала про то, чего же ожидают от него более высокие уровни, а во-вторых, после демонстрации общей схемы я вернусь к отдельным компонентам с подробностями.
И что же на более высоких уровнях?
Всего голосов 167: ↑164 и ↓3+161
Комментарии57

4 шага на пути в Google, не имея высшего образования

Время на прочтение4 мин
Количество просмотров192K


Как получить должность инженера в Google, не имея высшего образования?
Вот вам небольшая история.
Читать дальше →
Всего голосов 249: ↑219 и ↓30+189
Комментарии55

Вы опасно некомпетентны в криптографии

Время на прочтение7 мин
Количество просмотров141K
От переводчика: Хоть посыл статьи Najaf Ali, переведённой ниже, и носит слегка рекламный оттенок («оставьте криптографию нам, экспертам»), но описанные в ней примеры показались мне довольно интересными и заслуживающими внимания.
Кроме того, никогда не будет лишним повторить прописную истину: не придумывайте свою крипто-защиту. И эта статья отлично иллюстрирует почему.

Читать дальше →
Всего голосов 181: ↑168 и ↓13+155
Комментарии143

Вышел Laravel 4

Время на прочтение2 мин
Количество просмотров14K
Состоялся долгожданный релиз четвертой версии замечательного фреймворка.
Также обновился официальный сайт.

Быстрая установка


Для установки Laravel, скачать копию репозитория с Github.
Далее, после установки Composer, запускаем composer install команду в корневой папке. Composer скачает и установит все зависимости.
Читать дальше →
Всего голосов 41: ↑32 и ↓9+23
Комментарии23

Оптимальный алгоритм игры в морской бой

Время на прочтение4 мин
Количество просмотров950K
Пару дней назад я с удивлением узнал, что некоторые мои знакомые не умеют играть в морской бой. Т.е. правила они, конечно, знают, но вот играют как-то бессистемно и в итоге часто проигрывают. В этой записи я постараюсь изложить основные идеи, которые помогут повысить уровень вашей игры.
Читать дальше →
Всего голосов 186: ↑163 и ↓23+140
Комментарии124

Дайджест интересных новостей и материалов из мира айти за последнюю неделю №58 (19 — 24 мая 2013)

Время на прочтение6 мин
Количество просмотров24K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →
Всего голосов 37: ↑29 и ↓8+21
Комментарии5

Ruby on Rails. Установка, настройка, начало работы

Время на прочтение7 мин
Количество просмотров112K

Зачем.


В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).

Установка.


Просто и быстро ror ставится через rvm c rvm.io.

>\curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled


Запустить rvm:

>source /Путь_к_домашней_директории*/.rvm/scripts/rvm

*$HOME в дальнейшем.
После этого в $HOME/.bash_profile должна появиться строчка:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*


и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:

. ~/.bash_profile


Теперь всё точно должно быть хорошо.
Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть здесь -http://www.ruby-lang.org).
>rvm install 1.9.3

Проверка на успешность создания
>ruby -v

должна вернуть более подробную информацию, вроде
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux].

В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
>rvm list
Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:
>rvm use ruby-1.9.2-p320 (любая нужная версия)

Чтобы поменять дефолтную версию руби пишем:
>rvm use ruby-1.9.2-p320 --default

Читать дальше →
Всего голосов 66: ↑35 и ↓31+4
Комментарии89

Каким бы я хотел видеть свой первый проект на Symfony

Время на прочтение5 мин
Количество просмотров25K
Вот уже полтора года я использую Symfony 2 для разработки web-приложений. За это время я трижды начинал новый проект, еще в трех проектах работал с унаследованным кодом, а также провел ревью около 15 тестовых заданий на знание фреймворка.

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

Читать дальше →
Всего голосов 75: ↑60 и ↓15+45
Комментарии86

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность