• Введение в GitLab CI

    • Translation
    • Tutorial

    Публикую перевод моей статьи из блога ГитЛаба про то как начать использовать CI. Остальные переводы гитлабовских постов можно найти в блоге компании Softmart.




    Представим на секунду, что вы не знаете ничего о концепции непрерывной интеграции (Continuous Integration — CI) и для чего она нужна. Или вы всё это забыли. В любом случае, начнем с основ.


    Представьте, что вы работаете над проектом, в котором вся кодовая база состоит из двух текстовых файлов. Более того, очень важно, чтобы при конкатенации этих файлов в результате всегда получалась фраза "Hello world." Если это условие не выполняется, вся команда лишается месячной зарплаты. Да, все настолько серьезно.


    Hello wolrd


    Читать дальше →
  • Ionic framework. Обзор экосистемы


      Ionic framework — один из самых широко обсуждаемых фреймворков. Как гласит официальный сайт, Ionic — это SDK для создания гибридных мобильных приложений, набор CSS и JS компонент, созданный на основе AngularJS, SASS, Apache Cordova.

      На момент написания статьи репозиторий Ionic насчитывает 15300 звездочек, а сумма инвестиций в компанию Drifty, чьим продуктом является Ionic, уже достигла $3.7 миллиона.

      Посмотрим, что интересного предлагает Ionic для разработчика.
      Читать дальше →
    • Новое в Wolfram Language: функция TimelinePlot для создания временной шкалы

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



      В общем, в прошлом году мы добавили функцию NumberLinePlot в Wolfram Language для визуализации точек, областей и неравенств. Как только пользователи начали работать с NumberLinePlot, мы начали получать просьбы о введении подобной функции, но с датами и временем, поэтому мы решили, что пришло время для TimelinePlot.
      Читать дальше →
    • Как на самом деле устроен процесс в Data Science

        Привет, хабр!

        После последней публикации «Ваш персональный курс по Big Data» мне пришло несколько сотен писем с вопросами, читая которые, я с удивлением обнаружил, что люди очень сильно погружаются в теорию, уделяя мало времени решению практических задач, в которых навыки необходимы совершенно другие. Cегодня я расскажу, какие сложности появляются на практике и с чем приходится работать при решении реальных задач.
        Читать дальше →
      • Новое в Wolfram Language: функция WikipediaData для интеграции с Википедией и обработки её данных

        • Translation
        С момента создания сервиса Wolfram|Alpha, Википедия занимала особое место на пути его развития. Мы обычно используем её не как первичный источник данных, но скорее в качестве важнейшего ресурса для улучшения распознавания естественного языка. В частности, для добычи данных о том, как люди описывают те или иные вещи в разговорном/официальном стиле.

        В течение многих лет мы разрабатывали различные инструменты для анализа и извлечения информации из Википедии, однако теперь мы добавляем «сервис интеграции» с Википедией, который будет доступен в новой версии языка Wolfram Language (системе Mathematica 10.1, выходящей уже совсем скоро). Теперь встраивать контент из Википедии в рабочие процессы внутри Wolfram Language стало значительно проще.

        Конечно, вы можете просто взять текст из статьи в Википедии и передать его новым функциям Wolfram Language для обработки текста и визуализации:




        Читать дальше →
      • Совсем просто про минимальное идеальное хеширование, основанное на графах

          Представим, что перед нами стоит классическая задача получить данные по какому-то ключу. Причем количество данных и их ключей заранее известно.

          Как решать подобную задачу?
          Читать дальше →
          • +16
          • 23.6k
          • 5
        • C++. От ламера до программера

            image Привет Хаброжители!

            У нас вышла книга Алекса Эллайна «C++. От ламера до программера»

            Прототип: Jumping into C++ Paperback – April 19, 2013

            Эта книга предлагает быстрый способ изучить принципы объектно-ориентированного программирования и освоить практику программирования на языке С++. Издание может использоваться как учебный курс для начинающих осваивать C++, так и удобный справочник для тех, кто хочет быстро найти актуальную информацию о том или ином аспекте языка. Автор книги Алекс Эллайн — профеcсиональный разработчик на С++, создатель популярнейшего ресурса Cprogramming.com, предлагает собственную уникальную методику обучения программирования, которая позволит вам в кратчайшие сроки стать экcпертом разработки на C++.
            Читать дальше →
          • RapidMiner – Data Mining и BigData у вас дома, быстро и без подготовки (почти)



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

              Закачка, установка и получение первых результатов — минут 20 максимум.

              Я говорю про RapidMiner — опенсорсную среду, которая при всей своей бесплатности некисло «уделывает» коммерческих конкурентов. Правда, сразу скажу, что разработчики всё равно её продают, а в опенсорс отдают только предпоследние версии. Дома можно попробовать потому, что есть вообще бесплатные сборки со всей-всей логикой с всего лишь двумя ограничениями — максимальный объем используемой памяти 1 Гб и работа только с обычными файлами (csv, xls и т.п.) в качестве источника данных. Естественно, в малом бизнесе это тоже не проблема.
              Читать дальше →
            • Руководство хакера по нейронным сетям. Схемы реальных значений. Стратегия №1: Произвольный локальный поиск

              • Translation
              Мы начинаем публиковать перевод книги (как называет ее сам автор) «Руководство хакера по нейронным сетям». Книга состоит из четырех частей, две из которых уже закончены. Мы постараемся разбить текст на логически завершенные части, размер которых позволит не перегружать читателя. Также мы будем следить за обновлением книги и опубликуем перевод новых частей после их появления в блоге автора.

              Содержание:
              Глава 1: Схемы реальных значений
              Часть 1:
                 Введение   
                    Базовый сценарий: Простой логический элемент в схеме
                    Цель
                       Стратегия №1: Произвольный локальный поиск
              

              Часть 2:
                       Стратегия №2: Числовой градиент
              

              Часть 3:
                       Стратегия №3: Аналитический градиент
              

              Часть 4:
                    Схемы с несколькими логическими элементами
                       Обратное распространение ошибки
              

              Часть 5:
                       Шаблоны в «обратном» потоке 
                    Пример "Один нейрон"
              

              Часть 6:
                    Становимся мастером обратного распространения ошибки
              


              Глава 2: Машинное обучение
              Часть 7:
                    Бинарная классификация
              

              Часть 8:
                    Обучение сети на основе метода опорных векторов (SVM)
              

              Часть 9:
                    Обобщаем SVM до нейронной сети
              

              Часть 10:
                    Более традиционный подход: Функции потерь
              


              Читать дальше →
              • +13
              • 49.5k
              • 3
            • Лучшие плагины для Sublime Text

                WebInspector


                Мощный инструмент для дебаггинга JavaScript, полноценный инспектор кода для Sublime. Фичи: установка брейкпоинтов прямо в редакторе, показ интерактивной консоли с кликабельными объектами, остановка с показом стек трейса и управление шагами дебаггера. Все это работает на ура! А еще есть Fireplay от Mozilla, который позволяет подключаться к Firefox Developer tools и максимально простой дебаггер JSHint.



                Читать дальше →
              • Учимся готовить Log4j + Logstash + ElasticSearch + Kibana 3 + Auth (Google OAuth2/BasicAuth/CAS Authentication)


                Задача


                Настройка удобного средства для обработки и получения логов.

                Условия


                1. Лицензия MIT или Apache 2.0
                2. Возможность приема и обработки многострочных сообщений
                3. Простота в настройке и использовании
                4. Возможность работы с логами из Log4j


                Решение


                Logstash + ElasticSearch + Kibana 3.
                Читать дальше →
              • Google Web Starter Kit: конструктор мобильных сайтов



                  Google Web Starter Kit — конструктор и шаблоны для быстрой разработки отзывчивых мобильных сайтов, которые хорошо работают на любой платформе и почти в любом браузере (кроме самых старых). Такие сайты везде выглядят, как нативные приложения.

                  Основные особенности:
                  • HTML-шаблоны, оптимизированные для мобильного применения;
                  • отзывчивый макет для разных мобильных устройств
                  • руководство по стилю визуальных компонентов;
                  • поддержка Guilp.js (по умолчанию), Node.js, Ruby и Sass.
                  Читать дальше →
                • Django tips & tricks

                    Приветствую!

                    В этом посте — небольшие советы по работе с Django, которые могут пригодиться начинающим разработчикам. Как я хотел бы знать это в начале моего пути освоения Django!..
                    Рассматривать эти советы следует с долей критицизма. Буду рад, если вы найдёте неточности / лучшее решение, или предложите свои «фишки» для django, которых нет в документации.

                    Итак, начнём издалека, а уж потом перейдём к деталям.

                    Читать дальше →
                  • Масштабировать просто

                      От B2C-порталов ожидается прежде всего масштабирование. К сожалению, масштабирование слишком часто объявляется вопросом Технологии — достаточно выбрать модную технологию и все проблемы решены. То, что это не так, может проявиться, позднее всего, уже в production mode (на рабочей системе).
                      Вместо того, чтобы махать технологической булавой, расскажу о том, как при помощи продуманной архитектуры и сознательного отказа от модели данных разработать высоко доступный (highly available), масштабируемый (scalable) портал. Первая часть опишет общие концепты, а возможные сценарии и их решения последуют.
                      Читать дальше →
                    • Изучаем внутреннюю кухню ядра Linux с помощью /proc для быстрой диагностики и решения проблем

                      • Translation
                      Данная статья касается современных линуксов. Например, RHEL6 с ядрами 2.6.3х — подойдёт, а вот RHEL5 с ядрами 2.6.18 (кстати, наиболее популярный в продакшне) — увы, нет. И ещё — здесь не будет описания ядерных отладчиков или скриптов SytemTap; только старые-добрые простые команды вида «cat /proc/PID/xyz» в отношении некоторых полезных узлов файловой системы /proc.

                      Диагностика «тормозящего» процесса


                      Вот хороший пример часто возникающей проблемы, которую я воспроизвёл на своём лаптопе: пользователь жалуется, что команда find работает «значительно медленнее», при этом не возвращая никаких результатов. Зная, в чём дело, мы решили проблему. Однако меня попросили изложить систематический подход к решению подобных задач.

                      К счастью, система работает под управлением OEL6, т.е. на достаточно свежем ядре (а именно — 2.6.39 UEK2)

                      Итак, приступим к диагностике.
                      Подробности
                    • Рассуждения о Software Defined Storage: что не так с IO?

                        Abstract: О новом тренде — software defined strorge и главной родовой травме блочных устройств — обещании бесконечной надёжности.

                        Лирика


                        На горизонте новый buzzword: Software defined $thing. Мы уже имеем состоявшийся и сформировавшийся круг всего, относящегося к software defined networks (SDN), пришла очередь и storage (SDS). Видимо, дальше у нас будет software defined computing или ещё что-то подобное, потом резко всполошатся и подтянутся HP/VMWare и предложат (private) «software defined enterprise», который будет означать всё тоже, что было, но ещё моднее и актуальнее.

                        Впрочем, рассказ не про баззворды. За каждым таким странным названием (grid, elastic, cloud) стоит дальнейшее развитие технологий — построение дальнейших слоёв взаимодействия компонент (эм… взаимодействия участников взаимодействия, иначе не скажешь), основным мотивом которых является уход от гранулированности компьютерной системы, так, чтобы вся терминология, вся предметная область ушла от «межпроцессного взаимодействия» и стала автономной. В более-менее приличном виде мы это (в виде уже свершившегося факта) мы видим в волшебном мире javascript работе www, когда нас никаким образом не волнуют сервера, на которых крутятся задачи — всё общение происходит на уровне между браузером (с учётом его интимных подробностей DOM, JS и т.д.) и абстракцией, под названием URI, которой не важно — один это сервер или сотни разных.

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

                        Перед рассказом про SDS, посмотрим на уже состоявшееся: SDN (software defined network).
                        Читать дальше →
                      • Профилирование и отладка Python, инструменты

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

                          Сегодня мы познакомимся с основной и самой многочисленной группой инструментов — событийными профайлерами.

                          Приступим!
                          • +66
                          • 69.6k
                          • 9
                        • Хватит быть милым и умным

                          Этот текст является переводом статьи 'Stop Being Cute and Clever' небезызвестного (по крайней мере, в Python-комьюнити) Армина Ронахера.

                          Последние дни в свободное время я занимался созданием планировщика. Идея была простой: создать некий клон worldtime buddy c использованием AngularJS и некоторых других JavaScript-библиотек.

                          И знаете что? Это было отнюдь не весело. Я уже давно так сильно не злился, работая над чем-либо, а это что-то значит, потому что обычно я быстро высказываю своё недовольство (прошу прощения у моих фолловеров в Twitter).

                          Я регулярно использую JavaScript, но мне редко приходилось сталкиваться с кодом других людей. Обычно я привязан только к jQuery, underscore и иногда AngularJS. Однако в этот раз я пошел ва-банк и решил использовать различные сторонние библиотеки.

                          Для данного проекта я использовал jQuery, без которого уже нельзя обойтись (да и зачем?), и AngularJS с некоторыми UI-компонентами (angular-ui и биндинги к jQuery UI). Для работы с часовыми поясами использовался moment.js.

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

                          Однако я заметил тревожную тенденцию появления кода ужасного качества в JavaScript-библиотеках (по крайней мере в тех, которые я использую), и задумался о том, почему так происходит.
                          Читать дальше →
                        • Свой инструмент нужно знать в лицо: обзор наиболее часто используемых структур данных

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

                            Вопрос: Почему поиск в python dict на больших объемах данных быстрее чем итерация по индексированному массиву?

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

                            На самом деле никакого бинарного поиска тут нет. И сложность алгоритма не O(lg(N)), а Amort. O(1) — так как в основе dict питона лежит структура под названием Hash Table.

                            Причиной неверного ответа было то, что я не удосужился досконально изучить те структуры, которые лежат в основе работы с коллекциями моего любимого языка. Правда, по результатам опроса нескольких знакомых разработчиков, оказалось что это не только моя проблема, очень многие вообще не задумываются, как работают коллекции в их любимых ЯП. А ведь используем мы их каждый день и не по разу. Так родилась идея этой статьи.
                            Читать дальше →