• Организация локальной сети с одновременным подключением к двум интернет-провайдерам при помощи маршрутизатора MikroTik

    Предположим, что у нас есть два интернет провайдера. Первый получает настройки по L2TP, для второго необходимо задать настройки статически, а нам требуется организовать безотказную работу интернет соединения. То есть, в случае отказа первого интернет провайдера маршрутизатор должен автоматически переключиться на второго (резервного) провайдера. А при восстановлении связи с первым провайдером маршрутизатор должен снова начать с ним работать.


    Читать дальше →
  • 50 цитат о программировании всех времён

    • Перевод
    Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

    50. Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает.
    — Rick Cook

    49. Lisp — это не язык, а строительный материал.
    — Alan Kay

    48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
    — Edward V Berard
    Читать дальше →
  • Как веб-дизайн катится прямо в Ад

      Забавный и весьма жизненный комикс Мэтью Иннмана «How a web design goes straight to Hell» уже несколько раз упоминался на Хабрахабре в разных топиках, и наверное многие хабралюди уже с ним знакомы. Мы с моей коллегой, Юлей Лисевич (у нее пока нет акаунта на Хабре) решили сделать его перевод на русский язык. Зачем? Те, кому ежедневно приходится сталкиваться с ситуациями, подобными описанным в комиксе, смогут показать его заказчикам. Возможно это поможет им найти общий язык. :) Итак…

      Как веб-дизайн катится прямо в Ад
      Читать дальше →
    • Профессиональная иммиграция в Австралию, IT и жизнь на другом континенте

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

      Собственно хочу поделиться собственным опытом получения независимой иммиграционной визы, переезда, работы и жизни в Австралии. До сих пор так до этого руки и не дошли, если не считать рассказов друзьям тет-а-тет, а опыт-то на самом деле довольно интересный. Это может быть полезно как состоявшимся специалистам в области IT, которые ищут дальнейших перспектив для своей карьеры, жизни, или просто хотят сменить обстановку или климат, так и начинающим специалистам и, возможно, студентам, которые ищут правильное направление для своей карьеры. Всем остальным может быть интересно узнать подробнее как IT и повседневная жизнь выглядят за океаном.



      Читать дальше →
    • Пара полезных команд, которые могут пригодиться при DDoS и не только

        В моем случае, в качестве frontend сервера, стоит nginx и формат access-лога имеет вид:

        log_format main '$remote_addr — $remote_user [$time_local] "$host" "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for" -> $upstream_response_time';

        Что на выходе дает что-то вроде такой строки:

        188.142.8.61 — - [14/Sep/2014:22:51:03 +0400] «www.mysite.ru» «GET / HTTP/1.1» 200 519 «6wwro6rq35muk.ru» «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.191602; .NET CLR 3.5.191602; .NET CLR 3.0.191602» "-" -> 0.003

        1. tail -f /var/log/nginx/nginx.access.log | cut -d ' ' -f 1 | logtop

        Позволяет получить общую картину: распределение уникальных IP, с которых идут запросы, кол-во запросов с одного IP и т.д.
        Самое ценное — что все это работает в режиме реального времени и можно мониторить ситуацию, внося какие-либо изменения в конфигурацию (например просто забанить ТОП 20 самых активных IP через iptables или временно ограничить географию запросов в nginx через GeoIP http://nginx.org/ru/docs/http/ngx_http_geoip_module.html).
        Читать дальше →
      • Обзор teXet TM-511R: защищенный телефон с батареей на 2 700 мАч

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

          Помнится, полгода назад мы с товарищем устроили весьма серьезные испытания смартфону teXet X-Driver, и ему удалось сохранить честь и достоинство. Но все могло сложиться и по-другому: после каждого броска мы с опаской смотрели на экран – вдруг все же треснул? Так вот, если защищенный аппарат вам все же нужен, а связываться с «сенсорниками» не хочется, стоит смотреть в сторону внедорожных кнопочных телефонов. Сегодня речь как раз об одном из них – teXet TM-511R.


          Читать дальше →
        • Лёгкий способ писать iOS приложения на вебе

            Всем привет. Не так давно Габриель подарил нам игру 2048. Это тот самый удивительный случай, когда клон игры становится более популярный, чем оригинал. Не малая часть успеха Габриеля — открытый код и, вуаля, MIT лицензия. Набрав чуть больше 20к очков, захотелось поделиться результатом с друзьями, кроме как сделать скриншот не получилось. Глянул аппстор на наличие клона с геймцентром или чем-то подобным — пусто. И тут подумал, почему бы нет?
            Забегая вперёд, на создание приложения и всех «ништяков» к нему ушло 4 дня. На выходе универсальный код, который от части работает и в вебе и легко портируется на иос/андроид. Однако, давайте по порядку.


            Читать дальше →
          • Элементарные социальные share-кнопки

            • Tutorial
            В ответ на посты о кнопках для шаринга в социальных сетях с громоздким исходным кодом, и сложной детальной кастомизацией, хочу показать хабрасообществу решение которое однажды написал неизвестный, но однозначно добрый программист. Автор сего чуда не я, но использую это решение уже больше года в проектах с которыми работаю.
            Читать дальше →
          • Восстановление удалённых c Apple iPhone контактов. 9 простых шагов

            Ситуация — нарочно не придумаешь.

            У блондинки 2 телефона на одной учётке в iСloud. Локальных копий скорее всего нет. За свежесть копий в облаках не ручаюсь. Блондинка решает подарить один из телефонов подруге. Что двигало в её светлой голове — не знаю, но она по одному стёрла более 200 контактов. Вручную. И получила девственно чистую телефонную книжку на втором аппарате. Слёзы, истерика, звонок — выручай.
            Первым делом изолируем аппарат от внешнего мира. Вынимаем SIM-карту, отключаем WiFi и прочие коммуникации.
            Решение настолько простое и очевидное, что мне даже стало немного обидно за ребят из Купертино. Возможно мне повезло, что телефон был не запаролен.
            Читать дальше →
          • Ruby on Rails и Nginx: эффективно отдаем большие файлы

            В этом посте я расскажу, как правильно настроить Nginx для максимально эффективной отдачи больших файлов из вашего rails приложения. К своему удивлению, на русском языке я такой информации не нашел. Есть статьи про использование X-Accel-Redirect совместно с php, а вот чтобы про рельсы да на родном языке что-то не густо… Вобщем, постараюсь восполнить этот пробел.

            Задача


            Итак, исходные данные следующие:
            • мы используем Ruby on Rails, запросы пользователей проходят через Nginx;
            • нам нужно отдавать большие файлы;
            • файлы должны быть недоступны для прямого скачивания, решение об отдаче файла принимает rails приложение.

            Читать дальше →