• Go: производительность горутин

    • Translation

    Введение


    В этом посте мы рассмотрим производительность горутин (goroutine). Горутины — это нечто в роде очень дешевых и легковесных потоков. Больше всего, наверное, они похожи на процессы в Erlang.

    Согласно документации мы можем использовать сотни тысяч горутин в наших программах. И цель статьи — проверить и конкретизировать это.
    Читать дальше →
    • +50
    • 10.6k
    • 6
  • Go как язык для обучения программированию

      tl;dr: Go достаточно многословный и строгий язык программирования с очень предсказуемой и стремительной кривой обучения, что делает его крайне удачной технологией для обучения программированию новоприбывших!

      Я только приехал из штатов, после Google Code-In 2014 Grand Prize Trip, отдохнувший и веселый. Какое-то время думал написать отчет о том, чем призеры там занимались, как нас приняли в Mountain View и обо всем этом, но в какой-то момент понял, что все это совершенно бесполезно. Совсем недавно я по воле случая должен был помочь своему товарищу с домашкой по информатике (там было что-то вроде selection sort). Реализация требовалась на паскале, а я паскаль знаю очень плохо, как впрочем и другие неактуальные, по большей мере, языки программирования, вроде Ada.

      В меня ударила молния и укусил гофер, после чего мое тело мутировало в какую-то кунг фу Go хренотень. Иными словами, я задумался о возможном потенциале моего любимчика среди новых технологий, Go, в качестве языка для обучения программированию новоприбывших (читай: школьников). Мне кажется, у Go есть все, что в принципе может быть нужно подобной программе и даже чуточку больше (например, в школе могли бы затрагивать тему параллельного, ни в коем случае не concurrent, программирования, которую не затрагивают, просто потому что FPS вообще не умеет гонять два куска кода одновременно). Под катом, собственно, мои мысли на этот счет. Кстати, пользуясь случаем, хочу передать привет divan0! Большое спасибо за твою просветительскую деятельность в тематическом хабе: Go действительно нуждается в огласке, ведь много людей до сих пор считают, что это какая-то страшная поделка уровня Plan9 из 80-х и к тому же, без обобщенного программирования (в каждой шутке есть доля шутки), а ты рассказываешь людям очень правильные вещи на понятном для них языке! Никакого дисклаймера не будет, но я настоятельно не рекоммендую воспринимать содержимое статьи абсолютно серьезно, ведь я человек, у которого есть целых два гофера: синий и розовый!
      Читать дальше →
    • Наберитесь смелости сделать не как все. 12 устаревших интерфейсных и технологических решений

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

        Подтверждение пароля или email при регистрации


        Как часто случается, что человек промахивается, и набирает неправильный пароль, когда он внимательно набирает его в первый раз при регистрации? Что случится, если он при регистрации ошибется в пароле? Какие эмоции вы испытываете, когда вас просят ввести подтверждение пароля? Было ли хоть раз, что вы не копировали подтверждение email из первого поля, а набирали его руками?


        Читать дальше →
      • Всё, что вы хотели знать про GOPATH и GOROOT

          Несмотря на то, что Go считается одним из самых легких для входа языков, приходится регулярно слышать: «как-то все непонятно, какие-то переменные GOROOT и GOPATH нужно устанавливать». И хотя тема полностью раскрыта на официальном сайте Go, не будет лишним объяснить совсем простым языком.

          TL;DR


          Теперь чуть подробнее:
          Читать дальше →
        • Стековое программирование с человеческим лицом (часть вторая)

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

            image

            Давайте сразу расставим все точки над i: я не пытаюсь сочинить замену Форту. Форт — семейство среднеуровневых языков программирования, которое продолжает продуктивно решать поставленные задачи и на покой не собирается. Но я размышляю в другой нише: высокоуровневый стековый язык с упором на лёгкость чтения программ для начинающих (насколько это вообще возможно). Большая традиционность и высокоуровневость имеет свои достоинства, но при этом теряются некоторые особенности (в том числе и положительные) Форта.

            У нового воображаемого языка появляется своя философия и свои концепции. Об этом я и продолжу писать.
            Читать дальше →
          • Стековое программирование с человеческим лицом

              Думаю, многие из вас находили в интернете статьи и книги о стековом программировании и языке Forth. Сперва волна энтузиазма: как всё просто, логично, понятно и мощно! И почему же эти идеи имеют такое незначительное распространение? Почему так мало программистов реально используют языки вроде Форта? Через какое-то время подступает волна разочарования: да, интересная мысль, но как же тяжело читать исходный код, как же муторно ведётся работа с переменными, строками и дробными числами! Интересная игрушка, полезная группе байтослесарей, не более.

              image

              Часто на этом всё и заканчивается. Но лично я никак не мог примириться с мыслью о том, что изящное конкатенативное программирование так и останется в тени других идей. Да, трудности с чтением исходного кода. Да, синдром одной строки. Да, каждый раз для понимания алгоритма приходится в воображении транслировать программу и представлять себе стек, читая исходный код. Но неужели это те недостатки, которые обязательно присущи стековым языкам и без которых стековое программирование перестало бы быть стековым? Неужели никак нельзя хотя бы сгладить подобные недостатки и облегчить жизнь программистам? Оказывается, можно и нужно!
              Читать дальше →
            • FORTH: Самоопределяющиеся слова

                Пусть имеется некоторый проект на языке Форт, в котором используется достаточно большое число однотипных переменных.
                Например: x, y, z, x', y', z', x'', y'', z'', s, m и так далее…
                Для их определения придется каждый раз выписывать слово VARIABLE, а это громоздко, уныло и некрасиво. Можно ли как-то сделать повеселее?
                Указать, что дальше будут определены переменные и выписать их имена.
                Что-то вроде:
                VARIABLES:
                  x   y   z  
                  x'  y'  z'
                  x'' y'' z''
                  s   m
                ;VARIABLES
                

                Как это можно реализовать?
              • Forth и шейдеры

                Речь у нас пойдёт о поэзии. Минимализм языка программирования Forth и красота образов демосцены подтолкнули программиста Брэда Нельсона к идее Forth Haiku. Подражая японским хайку, Брэд писал свои первые программы из трёх строк, состояли они из пяти, семи, и снова пяти слов. Но в отличии от традиционного японского жанра, поэзия на языке Forth порождала картины не в воображении читателя, а зримо, на экране компьютера. Эта затея могла бы остаться причудой одинокого фаната компьютерного ретро (Forth прочно ассоциируется со старыми добрыми семидесятыми), если бы Брэд не воплотил её на самой что ни на есть современной платформе (WebGL) и не сделал бы онлайн-редактор общедоступным.

                Вот пример кода Forth Haiku и изображение, которое этот код создаёт: «Light Drop» by Brad Nelson.

                : iii x y z*
                Sin ; x 5 * x y
                - iii exp y iii

                Light Drop by BradN

                Впереди нас ждут немало удивительных (в том числе и «живых») картин, но сперва — немного теории.
                Читать дальше →
              • Хорошая работа, Apple, вы обманули весь мир

                • Translation
                Apple выиграла патентное разбирательство против Samsung с присуждением более одного миллиарда долларов в качестве возмещения ущерба. Можете почитать об этом подробнее на MacRumors.

                Ответ Apple: «Мы благодарны присяжным за свою работу и за потраченное время на наш рассказ, и мы счастливы, что наконец-то можем это сказать. Множество доказательств, представленных во время процесса, показали, что Samsung занимался копированием намного глубже, чем мы думали. Судебные процессы между Apple и Samsung были о гораздо большем, чем просто о патентах и деньгах. Они были о ценностях. В Apple мы ценим оригинальность и инновации, и мы посвятили свою жизнь созданию лучших на Земле устройств. Мы делаем эти продукты для того, чтобы порадовать наших клиентов, а не для того, чтобы наши конкуренты их скопировали. Мы аплодируем суду за признание действий Samsung’а преднамеренными и за громкий и яркий знак, что воровство это нехорошо.»

                Ответ Samsung: «Сегодняшний вердикт не должен рассматриваться, как победа Apple, но как потеря для Американского потребителя. Это приведёт к меньшему выбору, низкой инновации и потенциально высоким ценам. Очень жаль, что патентным правом можно манипулировать для отдачи одной компании монополии над прямоугольниками с закругленными углами, или технологией, которая улучшается каждый день Samsung’ом и другими компаниями. Потребители имеют право выбирать, и они знают что покупают, приобретая продукты Samsung. Это не последнее слово в этом деле или в других битвах, которые ведутся в судах и трибуналах по всему миру, некоторые из которых уже отклонили претензии Apple. Samsung продолжит применять инновации и предоставлять потребителю выбор.»
                Читать дальше →
              • Gosbook.ru — социальная сеть для российских чиновников открыла регистрацию для всех желающих

                  image

                  У российских чиновников появилась собственная социальная сеть «Госбук» (gosbook.ru). Проект обошелся в 1 млн рублей, полученный в виде гранта. Эксперты уверены, что такой проект нужен, но, чтобы он был реальным инструментом, необходима поддержка государства. А с учетом того что проект разрабатывался при участии Медведева поддержка будет.

                  Читать дальше →
                • Анализ утёкших паролей Gmail, Yandex и Mail.Ru

                    Совсем недавно в публичный доступ попали базы паролей популярных почтовых сервисов [1,2,3] и сегодня мы их проанализируем и ответим на ряд вопросов о качестве паролей и возможном источнике (или источниках). Так же мы обсудим метрики качества отдельных паролей и всей выборки.

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

                    Формально, мы рассмотрим следующие вопросы: насколько надежными являются пароли в базе и могли ли они быть собраны словарной атакой? Есть ли признаки фишинговых атак? Могла ли «утечка» данных быть единственным источником данных? Могла ли данная база быть аккумулирована в течение длительного периода или данные исключительно «свежие»?

                    Структура статьи:

                    1. Описание данных
                    2. Невалидные пароли и не-пароли
                    3. Распределение длины паролей
                    4. Распределение надёжности паролей
                    5. Словарная атака
                    6. Топ паролей
                    7. Выборка Gmail
                    8. Выборка Rambler
                    9. Анализ открытых источников
                    10. Заключение

                    Читать дальше →
                  • PHP создан, чтобы умирать

                    • Translation
                    Дисклеймер: у меня за спиной более десяти лет разработки на PHP. Я начал использовать его, когда PHP4 был совсем малышом, а PHP5 — только мечтой компании Zend. С помощью него я сделал многое, я любил его, проклинал и не без стыда наблюдал за тем, как он растёт и развивается. Я всё ещё использую его в некоторых доставшихся по наследству проектах, но предпочитаю больше его не применять. Также хочу отметить, что я не сотрудничаю с создателями фреймворков или инструментов, упомянутых в статье.

                    TL;DR (англ. too long; didn't read. Так, в частности, говорят, когда лень читать статью целиком — прим. пер.): если ваш проект основан на функциях фоновых процессов (фоновых служб, демонов — прим. пер.), избегайте PHP.

                    По-моему, в большинстве случаев ненавистники PHP упускают один весьма важный момент: PHP создан, чтобы умирать. Это не значит, что довольно способный (в какой-то степени) язык программирования исчезнет в никуда; это всего лишь означает, что ваш PHP код не может выполняться вечно. В настоящее время, спустя 13 лет после первого официального релиза в 2000 году, эта мысль до сих пор кажется мне вполне обоснованной.
                    Читать дальше →
                  • Как работают одноразовые пароли

                    • Tutorial

                    Вступление


                    Как показывает практика, существует определенное непонимание принципов работы одноразовых паролей (это те самые, которые используются в GMail, в спец. токенах платежных систем и так далее).

                    Прочитав эту небольшую статью, Вы разберетесь в принципе работы одноразовых паролей на основе хэшей, а заодно напишете на Python небольшую программу, которая умеет вычислять пароли для двухэтапной аутентификации Google.
                    Читать дальше →
                  • Архитектура форм в Symfony2

                    • Translation
                    Картинка для привлечения внимания

                    В Symfony 2 появился совершенно новый компонент для работы с формами, который, насколько я знаю, легко заменит большинство подобных библиотек для PHP и по функционалу, и по возможности в расширении оного (конечно, если не брать в расчет небольшие недостатки при работе с JavaScript). Разработка этого компонента заняла более двух лет, хотя думать над ним я начал еще где-то в 2009-ом году или даже раньше. С каждой новой версией этот компонент становится все более и более стабильным, а полностью стабильная версия ожидается с выходом Symfony 2.2.

                    Данный пост приурочен к выходу Zend Framework 2 Form RFC, так как мне кажется, что его разработчики, по сути, сделали много того, что уже было сделано нами. Конечно же всем ясно, что Zend Framework 2 должен обладать прослойкой для работы с формами, который полностью учитывает особенности компонентов, поставляемых с фреймворком. Целью данного поста является попытка показать, что Symfony2 Forms прекрасно подходит под эти требования. Функционал, присущий Symfony2, может быть легко убран: код для обработки форм и все уровни абстракций полностью независимы. Привязать же поддержку особенностей компонентов Zend-а так же не составит труда.

                    Создание обобщенной библиотеки для работы с формами, которая покрывает все возможные сценарии использования, возникающие при разработке, было непростым испытанием, долгим и сложным делом, которое, к тому же, еще не завершено. Сотрудничество и дальнейшее совместное развитие должно помочь добиться более гибкого и простого управления формами из PHP.
                    Читать дальше →
                  • Датчик освещённости из веб-камеры вашего ноутбука

                      image
                      Почти всегда на ночь (или утром, со словами «Что? Рассвет уже?») я включаю на ноутбуке фильм или сериал. Чтобы бубнило и успокаивало. Недавно заметил, что совсем не уменьшаю яркость при включении. Свет светит в глаза, мешает уснуть. Решается поворотом на другой бок или уменьшением яркости, конечно, но я слишком ленив, чтобы искать Fn+уменьшить яркость или установить и вывести апплет яркости. Уменьшение яркости при неактивности ставить не захотел, потому как это меня раздражает (пьешь себя кофе и смотришь код, тут резко до нуля так хрясь). Вспомнил про свою старую Nokia E70 (ох и шикарный телефон был), в котором был индикатор освещённости. Подумал, что такой датчик может заменить и обычная камера.
                      Читать дальше →
                    • Разработка для Drupal 7 с помощью новой концепции сущностей (Entity)

                      Концепция сущностей (Entity), которая будет рассматриваться в данной статье является одной из новинок, представленных в Drupal 7. Для того чтобы осознать всю новизну предлагаемого подхода, следует сделать небольшой экскурс в историю и вспомнить, как все было в Drupal 6.
                      Читать дальше →
                    • Учет затраченного времени с Emacs и org-mode

                        Если вам, как и мне, платят почасово, то наверняка заказчик захочет знать, на что именно ушло время и сколько.
                        Да и в любом случае, полезно знать это, даже если только для себя.

                        В этой статье я расскажу об одном из способов учета затраченного времени — org-mode в Emacs.
                        Этот способ хорош тем, что он очень гибок и при желании все настраивается под себя, работает практически на всех операционных системах и платформах, и довольно прост в использовании.

                        image
                        Читать дальше →
                      • Введение в org-mode emacs

                        • Translation
                        По сути это даже не перевод, а свободное изложение моих мыслей на эту тему, после ознакомления с указанным источником. То есть — переработка. Некоторые, показавшиеся очевидными, вещи, были намеренно исключены из текста. Какие-то, показавшиеся полезными — добавлены.

                        Введение


                        Описано было довольно хорошо вот здесь.

                        Как его подключить

                        Если у Вас версия 22 и выше — он у Вас уже установлен. Если нет — установите новую версию. :)

                        Дальше - больше.
                      • Memoization в Python

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

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

                          Допустим, у нас есть некая функция bigfunc, результат которой зависят только от переданных в нее аргументов, а сложность вычислений достаточно большая. Естественно нам не хотелось бы производить вычисления при каждом вызове bigfunc если она уже вызывалась ранее с теми же параметрами. Тут то нам на помощь и приходит memoization.

                          Для python декоратор для функции будет выглядеть следующим образом:

                          import cPickle
                          def memoized(func):
                              memory = {}
                              def memo(*args,**kwargs):
                                 hash = cPickle.dumps((args, sorted(kwargs.iteritems())))
                                 if hash not in memory:
                                     memory[hash] = func(*args,**kwargs)
                                 return memory[hash]
                              return memo
                          

                          Далее, нам достаточно объявить bigfunc как

                          @memoized
                          def bigfunc(…):
                          …

                          Или переопределить, если она уже объявлена:

                          bigfunc = memoized(bigfunc)

                          Декоратор, объявленный в начале статьи, работает только с пиклезуемыми объектами. Если ваша функция работает с непиклезуемыми объектами – вы можете заменить

                          hash = cPickle.dumps((args, sorted(kwargs.iteritems())))

                          на

                          hash = (tuple(args), frozenset(kwargs.items())

                          но вы потеряете возможность работы с mutable объектами.

                          Декоратор можно легко модифицировать, для ограничения количества закешированных элементов.
                        • Drupal day 3 декабря

                            DrupalCamp Moscow

                            Рунетовское сообщество вебплатформы Drupal (www.drupal.ru) проводит 3 декабря семинар Drupal Day в Москве, участие бесплатное, программа и подробности по месту и времени проведения опубликованы на сайте moscow.drupalcamp.ru. Для участия требуется регистрация — там же на сайте. Ввиду ограничений помещения семинар расчитан ровно на сто участников.

                            Вот неполный список докладов Drupal Day:
                            • Заглянем в будущее: Drupal 7
                            • Пример связи со сторонними скриптами: интеграция с PHPBB3
                            • VDS и DS: стереотипы и оптимизация
                            • Прототипирование проекта на Drupal
                            • Работа с Simpletest
                            • Примеры использования Drupal: о создании сайта forbesrussia.ru
                            • Обзор инструментов разработчика и вебмастера на unix-десктопе

                            Также будут доклады по работе JQuery/JavaScript/AJAX, созданию тем оформления в Drupal, работе с Google Maps и запланирована сессия пятиминутных блиц-докладов на разные темы. Докладчики — участники рунетовского сообщества drupal.ru.

                            Цели мероприятия:
                            • Повышение квалификации Drupal-разработчиков и пользователей.
                            • Вовлечение новых разработчиков в работу с платформой Drupal и проект разработки Drupal.
                            • Привлечение внимания вебстудий к Drupal.
                            • Контакты между разработчиками и работодателями.
                            • Привлечение внимания к движению СПО в России.


                            Спонсор Drupal Day 3 декабря — компания Мастерхост. Информационное спонсорство мероприятий на сегодняшний день оказывают: Аналитический портал «CMS Magazine», Вебпланета, Хабрахабр, Сервис 1PS.RU, Новостной ресурс NetNews.by, Издательство «Открытые системы», Журнал Computerworld, Журнал PC Magazine, Журнал Designcollector.

                            Больше информации на сайте moscow.drupalcamp.ru.