Итак, у вас есть чистая Ubuntu, в консоли открыто ssh-соединение с сервером и консоль вас заманчиво приглашает — «root@my-awesome-host:~#» — и больше ничего нет. А хочется запустить и показать всему миру какое-то рельсовое приложение. Поехали от супа до орехов.
Shmavon Gazanchyan @MunGell
Manager
Связка rvm + Rails + Nginx + Unicorn или деплоим рельсы правильно
9 мин
55K![](https://habrastorage.org/storage/263722fa/68d4808e/bad30747/f721e883.png)
+58
Подготовка rails-окружения для установки Redmine используя RVM
3 мин
5.8KДля корректной работы многих rails-приложении требуются конкретные версии состовляющих компонент, таких как версия ruby, версия самого rails, а так же rake, rubygems и т.д. И скорее всего в вашем дистрибутиве Linux (в моём случае это Ubuntu 10.04 LTS Server) версии этих компонент будут отличаться. Можно пойти простым путём — поставить ruby нужной версии из исходных кодов, а всё остальное с помощьью rubygems. Но мы же хотим получить надёжный и воспроизводимый результат, а систему, при этом не превратить в свалку.
+5
Доступные методы борьбы с DDoS-атаками для владельцев vds/dedicated серверов с Linux
12 мин
38K![image](https://habrastorage.org/getpro/habr/post_images/cb4/890/f21/cb4890f218b7683d5ee3fe9bd3205dab.png)
Начать свое присутствие на Хабре мы решили с материала, подготовленного для Конференции уральских веб-разработчиков, в котором описаны проверенные на собственной практике и оказавшиеся вполне успешными методы борьбы с DDoS-атаками. Целевая аудитория данной статьи — это программисты, имеющие в распоряжении vds или dedicated. Статья не претендует на полноценное руководство и многие сисадминские нюансы в ней намеренно опущены. Мы рассматриваем только DDoS типа http flood как наиболее распространенный тип DDoS и наиболее дешевый для заказчика.
Целевая аудитория данной статьи – это программисты, имеющие в распоряжении VDS или Dedicated.
+63
Джентельменский набор модулей для Drupal 7
3 мин
86KДоброго всем времени суток!
Те, кому часто приходится поднимать сайты на Drupal, имеют в загашнике постоянный набор модулей и тем, которые так или иначе могут использоваться на поднимаемом ресурсе.
При отсутствии данного набора приходится вспоминать и скачивать модули для воплощения на сайте того или иного функционала.
Поскольку актуальной на данный момент версией является седьмая, о ней и пойдёт речь.
Те, кому часто приходится поднимать сайты на Drupal, имеют в загашнике постоянный набор модулей и тем, которые так или иначе могут использоваться на поднимаемом ресурсе.
При отсутствии данного набора приходится вспоминать и скачивать модули для воплощения на сайте того или иного функционала.
Поскольку актуальной на данный момент версией является седьмая, о ней и пойдёт речь.
+34
Анонимности нет, смиритесь! (русские субтитры)
1 мин
39KПеревод
Выступление Стива Рамбама на конференции Hackers On Planet Earth (часть I)
Это выступление Стива Рамбама на последней конференции H.O.P.E. (Hackers On Planet Earth)
Стив выступает на каждой хакерской конференции H.O.P.E. с 1994 года.
Если вы не знаете про Стива и не видели его выступления — обязательно посмотрите это видео.
Покажите его тем, кто плохо знаком с миром IT: бухгалтерам, продажникам, маркетологам…
Обычным людям.
Видео с русскими субтитрами на Universal Subtitles
(хабр не позволил вставить скрипт):
Ctrl+ www.amara.org/ru/videos/YSEgofMg2wgv/info/steven-rambam-privacy-is-dead-get-over-it-part-1
Это же видео без наложенных субтитров, для англоговорящих:
+68
Используйте бандлер вместо практики rvm gemset per project
1 мин
7.6KНаша команда долгое время использовала известную практику rvm gemset per project. Однако, после работы с пакетным менеджером nodejs мы поняли, что гораздо удобнее складывать зависимости в папку проекта (дефолт для нодовского пакетного менеджера).
Немного покопавшись в документации бандлера я обнаружил, что тоже самое можно сделать и на его основе.
Немного покопавшись в документации бандлера я обнаружил, что тоже самое можно сделать и на его основе.
+45
Резервное копирование для standalone *NIX-серверов. Эмулируем TimeMachine
7 мин
7.1KДумаю никому из присутствующих не нужно объяснять важность резервного копирования.
Проблема в том, что из десятков готовых решений ни одно толком не удовлетворяет моим требованиям standalone *NIX-сервера на колокейшене.
Чего же хотелось от резервного копирования?
1) ежедневного полного бакапа всех данных. Никаких incremental-бакапов.
2) максимально быстрого восстановления отдельно взятого файла. Архиваторы (tar/gzip/bzip2/rar) отпадают
3) быстрого мониторинга «кто именно залил вчера на сервер 156Гб?!!!»
4) резервные копии хочется хранить максимально долго, насколько хватает свободного места на дисках.
5) хочется не заботиться об ручном удалении старых копий если место на диске всё-таки уже кончилось
Если в двух словах — то мне захотелось реализовать функционал MAC OS TimeMachine на Linux-сервере.
И я начал писать скрипт.
Проблема в том, что из десятков готовых решений ни одно толком не удовлетворяет моим требованиям standalone *NIX-сервера на колокейшене.
Чего же хотелось от резервного копирования?
1) ежедневного полного бакапа всех данных. Никаких incremental-бакапов.
2) максимально быстрого восстановления отдельно взятого файла. Архиваторы (tar/gzip/bzip2/rar) отпадают
3) быстрого мониторинга «кто именно залил вчера на сервер 156Гб?!!!»
4) резервные копии хочется хранить максимально долго, насколько хватает свободного места на дисках.
5) хочется не заботиться об ручном удалении старых копий если место на диске всё-таки уже кончилось
Если в двух словах — то мне захотелось реализовать функционал MAC OS TimeMachine на Linux-сервере.
И я начал писать скрипт.
+34
КартонБот v1.0 — утилизируем картон с пользой для мозга
6 мин
30KКоличество попыток собрать робота у меня – не счесть. Но, то материалов не хватало, то навыков их обработки, то каких-то узлов, то знаний, как все эти штуки связать вместе. Если знакома такая ситуация – я постараюсь рассказать свой опыт сборки робота из подручных материалов и каких-то узлов купленных на eBay.
![image](https://habrastorage.org/getpro/geektimes/post_images/a1d/a80/7fb/a1da807fba5e442b138e89801c07871d.jpg)
Робот обошелся мне в 35$ и два дня отпуска, но восторг, испытанный от его первых движений, стоил намного больше. Если заинтересованы – прошу под кат (много картинок).
![image](https://habrastorage.org/getpro/geektimes/post_images/a1d/a80/7fb/a1da807fba5e442b138e89801c07871d.jpg)
Робот обошелся мне в 35$ и два дня отпуска, но восторг, испытанный от его первых движений, стоил намного больше. Если заинтересованы – прошу под кат (много картинок).
+146
Тренды, возведенные в культ
4 мин
30KНесколько последних лет ознаменовались появлением большого количества новых терминов, понятий, технологий, течений. Также появилось достаточное количество базвордов, которые заполонили медийное пространство. И заполонили до такой степени, что многие айтишники начинают поддаваться на соблазны и искушения рисующихся золотых перспектив. Но не буду говорить загадками — под катом список понятий, с которыми связано большое количество надежд, холиваров и… заблуждений. Давайте немного разберемся, что к чему.
+189
Чем может быть полезен Inkscape для веб-разработчиков?
2 мин
7.4KПеревод с английского: Inkscape: optimization tips for web developers.
В этой короткой статье я поделюсь с вами несколькими полезными приемами работы с редактором векторной графики Inkscape, которые помогают ускорить процесс подготовки SVG-кода.
В этой короткой статье я поделюсь с вами несколькими полезными приемами работы с редактором векторной графики Inkscape, которые помогают ускорить процесс подготовки SVG-кода.
+26
Ваш сайт тоже позволяет заливать всё подряд?
4 мин
52KОдин французский «исследователь безопасности» этим летом опубликовал невиданно много найденных им уязвимостей типа arbitrary file upload в разных «написанных на коленке», но популярных CMS и плагинах к ним. Удивительно, как беспечны бывают создатели и администраторы небольших форумов, блогов и интернет-магазинчиков. Как правило, в каталоге, куда загружаются аватары, резюме, смайлики и прочие ресурсы, которые пользователь может загружать на сайт — разрешено выполнение кода PHP; а значит, загрузка PHP-скрипта под видом картинки позволит злоумышленнику выполнять на сервере произвольный код.
Выполнение кода с правами apache — это, конечно, не полный контроль над сервером, но не стоит недооценивать открывающиеся злоумышленнику возможности: он получает полный доступ ко всем скриптам и конфигурационным файлам сайта и через них — к используемым БД; он может рассылать от вашего имени спам, захостить у вас какой-нибудь незаконный контент, тем подставив вас под абузы; может, найдя параметры привязки к платёжной системе, отрефандить все заказы и оставить вас без дохода за весь последний месяц. Обидно, правда?
Выполнение кода с правами apache — это, конечно, не полный контроль над сервером, но не стоит недооценивать открывающиеся злоумышленнику возможности: он получает полный доступ ко всем скриптам и конфигурационным файлам сайта и через них — к используемым БД; он может рассылать от вашего имени спам, захостить у вас какой-нибудь незаконный контент, тем подставив вас под абузы; может, найдя параметры привязки к платёжной системе, отрефандить все заказы и оставить вас без дохода за весь последний месяц. Обидно, правда?
+83
Введение в OCaml: Структура программ на OCaml [2]
12 мин
8.1KПеревод
[прим. пер.: продолжение перевода, первая статья тут]
![тизер к статье с графикой на OCaml](https://habrastorage.org/getpro/habr/post_images/923/f9c/3a3/923f9c3a37d9a2263615e60b69ed03c8.png)
Теперь мы потратим немного времени на высокоуровневый анализ некоторых настоящих программ на OCaml'е. Я хотел бы показать вам локальные и глобальные определения, разницу в использовании , модули, вложенные функции, ссылки. Из-за этого мы столкнёмся с множеством концепций OCaml'а, которые пока что не имеют смысла для начинающего изучать OCaml, так как мы не встречали их ранее. Не фокусируйтесь на них, сконцентрируйтесь вместо этого на общем представлении о формате программ и особенностях языка, на которые я буду указывать.
Возьмём нашу функцию
Теперь посмотрим на это для OCaml:
Стандартное выражение
![тизер к статье с графикой на OCaml](https://habrastorage.org/getpro/habr/post_images/923/f9c/3a3/923f9c3a37d9a2263615e60b69ed03c8.png)
Структура программ на OCaml
Теперь мы потратим немного времени на высокоуровневый анализ некоторых настоящих программ на OCaml'е. Я хотел бы показать вам локальные и глобальные определения, разницу в использовании
;;
и ;
Локальные «переменные» (на самом деле локальные выражения)
Возьмём нашу функцию
average
на Си и добавим в неё локальные переменные (сравните её с примером в прошлой главе).double average (double a, double b) { double sum = a + b; return sum / 2; }
Теперь посмотрим на это для OCaml:
let average a b = let sum = a +. b in sum /. 2.0;;
Стандартное выражение
let name = expression in
используется для определения локального именованного выражения и name
может быть использовано в дальнейшем вместо expression вплоть до ;;
, который означает окончание локального блока кода. Обратите внимание, мы даже не использовали отступ после объявления in
. Просто воспринимайте let ... in
так, как будто это один оператор.+19
Введение в OCaml: The Basics [1]
10 мин
26KПеревод
(предисловие от переводчика: сел учить окамл, обнаружил, что отсутствует перевод на русский язык руководства для начинающих. Восполняю этот пробел).
Комментарии в OCaml обозначаются символами (* и *), примерно так:
Другими словами, комментарии в OCaml очень похожи на комментарии в Си (
В настоящий момент нет однострочных комментариев (как
Комментарии в OCaml вложенные, это позволяет очень просто комментировать куски кода с комментариями:
Допустим, вы написали функцию, назовём её repeated, которая берёт исходную строку s, число n и возвращает новую строку, состоящую из n раз повторённой строки s.
В большинстве С-подобных языков вызов функции будет выглядеть так:
Это означает «вызвать функцию repeated с двумя аргументами, первый аргумент — строка hello, второй аргумент — число 3».
Подобно остальным функциональным языкам программирования, в OCaml, запись вызовов функций и использование скобок существенно отличается, что приводит к множеству ошибок. Вот пример того же самого вызова, записанного на OCaml:
Обратите внимание — нет скобок, нет запятых между аргументами.
Основы
Комментарии
Комментарии в OCaml обозначаются символами (* и *), примерно так:
(* Это однострочный комментарий *)
(* Это комментарий на несколько строк. *)
Другими словами, комментарии в OCaml очень похожи на комментарии в Си (
/* ... */
).В настоящий момент нет однострочных комментариев (как
#...
в Перле или // ...
в C99/C++/Java). Когда-то обсуждалась возможность использовать ## ...
, и я весьма рекомендую окамловским товарищам в будущем добавить эту возможность (однако, хорошие редакторы открывают возможность использования однострочных комментариев даже сейчас).Комментарии в OCaml вложенные, это позволяет очень просто комментировать куски кода с комментариями:
(* This code is broken ...
(* Primality test. *)
let is_prime n =
(* note to self: ask about this on the mailing lists *) XXX;;
*)
Вызов функций
Допустим, вы написали функцию, назовём её repeated, которая берёт исходную строку s, число n и возвращает новую строку, состоящую из n раз повторённой строки s.
В большинстве С-подобных языков вызов функции будет выглядеть так:
repeated ("hello", 3) /* this is C code */
Это означает «вызвать функцию repeated с двумя аргументами, первый аргумент — строка hello, второй аргумент — число 3».
Подобно остальным функциональным языкам программирования, в OCaml, запись вызовов функций и использование скобок существенно отличается, что приводит к множеству ошибок. Вот пример того же самого вызова, записанного на OCaml:
repeated "hello" 3 (* this is OCaml code *)
.Обратите внимание — нет скобок, нет запятых между аргументами.
+53
Реализация REST API на Symfony2: правильный путь
18 мин
57KПеревод
![REST](https://habrastorage.org/storage2/d03/960/dfc/d03960dfc6cf5f445e629a99a8bf9452.png)
Создание REST API это нелегкая задача. Нет, серьезно! Если вы хотите написать API правильно, вам придется о многом подумать, решить, быть прагматиком, или API маньяком. REST это не только GET, POST, PUT и Delete. На практике, у вас могут быть взаимодействия между ресурсами, нужно перемещать ресурсы куда-то еще (к примеру внутри дерева), или вы захотите получить конкретное значение ресурса.
В данной статье собрано все, чему я научился реализуя различные API сервисы, используя для этих целей Symfony2, FOSRestBundle, NelmioApiDocBundle и Propel. К примеру сделаем API для работы с пользователями.
+26
Rackspace обновило свое облако
1 мин
3K![image](https://habrastorage.org/storage2/c8e/eb0/c7a/c8eeb0c7a7adbbb0c6694f402cd3410d.png)
Ровно 2 года назад, в июле 2010 года, компания Rackspace совместно с NASA объявили об открытии исходных кодов своих проектов (Rackspace Cloud Files и Nebula соответственно), которые стали базой для открытой облачной операционной системы OpenStack. За это время к инициативе присоединились почти две сотни компаний включая таких гигантов как Akamai, AT&T, Dell, IBM, HP и Canonical.
Множество компаний уже используют OpenStack в своих облаках (например, Deutsche Telekom, в России — Selectel), теперь же сама компания-основатель объявила о переводе своей облачной инфраструктуры на открытую платформу (а точнее с 1 августа).
+17
Встречайте обновленный Windows Azure. Небольшой обзор нововведений
11 мин
5KДобрый день, уважаемые коллеги. Пока ещё уставшие от недосыпа последних дней (утренняя Венера, MEET Windows Azure) спят, в Томске сидит скромный автор и пишет эти строки, испытывая нечто вроде феерии от того, что происходит сейчас в мире IT. А мы, друзья, стоим на пороге окончательной необходимости менять парадигму.
В этой статье я попробую в рамках небольшого обзора передать то, что произошло сегодня ночью на событии MEET Windows Azure – мажорном релизе новой функциональности платформы. Основной доклад делался светлым умом, которого в твиттере назвали «Мидасом нашей современности» — Скоттом Гатри.
В этой статье я попробую в рамках небольшого обзора передать то, что произошло сегодня ночью на событии MEET Windows Azure – мажорном релизе новой функциональности платформы. Основной доклад делался светлым умом, которого в твиттере назвали «Мидасом нашей современности» — Скоттом Гатри.
+16
Облачные базы данных: кто их делает и на что они способны
5 мин
35KПеревод
![](https://habrastorage.org/storage2/5ba/e96/063/5bae960638322fdcfe8eaa388528782f.jpg)
Примечание: мы говорим только об автоматизированных БД, не включая те, которые требуют пользовательского администрирования
+2
Памятка пользователям ssh
13 мин
1.5M![](https://habrastorage.org/getpro/habr/post_images/784/133/dac/784133dac3a6daa093e5a8174962be7f.png)
Предупреждение: пост очень объёмный, но для удобства использования я решил не резать его на части.
Оглавление:
- управление ключами
- копирование файлов через ssh
- Проброс потоков ввода/вывода
- Монтирование удалённой FS через ssh
- Удалённое исполнение кода
- Алиасы и опции для подключений в .ssh/config
- Опции по-умолчанию
- Проброс X-сервера
- ssh в качестве socks-proxy
- Проброс портов — прямой и обратный
- Реверс-сокс-прокси
- туннелирование L2/L3 трафика
- Проброс агента авторизации
- Туннелирование ssh через ssh сквозь недоверенный сервер (с большой вероятностью вы этого не знаете)
+344
Leaflet 0.4 — новая версия открытой JS-библиотеки для интерактивных карт
7 мин
17K![](http://leaflet.cloudmade.com/docs/images/logo.png)
После пяти с половиной месяцев разработки с момента выхода предыдущей версии, очень рад наконец представить вам Leaflet 0.4 — новую версию легковесной JavaScript-библиотеки для интерактивных карт, которая одинаково хорошо работает и на десктопных браузерах, и на мобильных устройствах.
Этот релиз, к которому приложило руку 33 разработчика, несёт в себе более простой, удобный API и громадное множество улучшений и исправлений вместе с масштабным обновлением документации, запуском официального блога и страничкой плагинов. Давайте рассмотрим улучшения по порядку.
+71
Информация
- В рейтинге
- Не участвует
- Откуда
- London, England - London, Великобритания
- Дата рождения
- Зарегистрирован
- Активность