• Yew — Rust&WebAssembly-фреймворк для фронтенда

      Yew — аналог React и Elm, написанный полностью на Rust и компилируемый в честный WebAssembly. В статье Денис Колодин, разработчик Yew, рассказывает о том, как можно создать фреймворк без сборщика мусора, эффективно обеспечить immutable, без необходимости копирования состояния благодаря правилам владения данными Rust, и какие есть особенности при трансляции Rust в WebAssembly.



      Пост подготовлен по материалам доклада Дениса на конференции HolyJS 2018 Piter. Под катом — видео и текстовая расшифровка доклада.
      Читать дальше →
    • Что такое блокчейн и зачем он нужен



        В сознании среднестатистического пользователя само слово “блокчейн” (“цепочка блоков”) стало довольно тесно связано с термином “биткоин”, что двояко отразилось на восприятии.

        С одной стороны, популярность биткоина вызывает интерес и к блокчейну, с другой стороны, в массовом сознании биткоин часто ассоциируется лишь с чем-то негативным, запрещенным и подвергаемым преследованию со стороны законодателей. Мол, зачем расплачиваться биткоинами, когда есть целый зоопарк электронных кошельков и банковских карт? Ясное дело – чтобы проворачивать какие-то темные делишки.
        Читать дальше →
      • Rust и парадокс Блаба

        • Translation

        Несколько недель назад я наткнулся на сравнительный анализ Rust, D и Go от Андрея Александреску. Андрей, уважаемый член сообщества C++ и главный разработчик языка программирования D, нанес Rust сокрушительный удар под конец своего повествования, высказав нечто, что выглядит довольно проницательным наблюдением:



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



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

        Читать дальше →
      • Анонс Rust 1.6

        • Translation
        Привет в 2016-м году! Мы рады объявить первый в этом году релиз Rust — 1.6. Rust — системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

        Как всегда, вы можете установить Rust 1.6 с соответствующей страницы нашего сайта, а также посмотреть подробный список изменений для версии 1.6 на Github. Этот релиз включил в себя 1100 патчей.

        Что вошло в стабильную версию 1.6


        В этот релиз вошли ряд небольших доработок, одно большое нововведение и изменение на Crates.io.
        Читать дальше →
        • +18
        • 8.1k
        • 9
      • Rust в 2016 году

        • Translation
        2015 год был значительным годом для Rust: мы выпустили версию 1.0, стабилизировали большинство элементов языка и кучу библиотек, значительно выросли как сообщество, а также реорганизовали управление проектом. Может показаться что 2016 год не будет таким же интересным (будет трудно превзойти выпуск 1.0), но это будет супер-важный год для Rust, в котором произойдет много захватывающих вещей. В этой статье я расскажу о том, что, как я думаю, должно произойти. Это не официальная позиция и не обещание разработчиков Rust.

        2015


        Прежде чем мы поговорим о будущем, вот несколько цифр за прошлый год:

        В 2015 году силами сообщества Rust:

        Читать дальше →
      • Обработка ошибок в Rust

        • Translation

        Как и многие языки программирования, Rust призывает разработчика определенным способом обрабатывать ошибки. Вообще, существует два общих подхода обработки ошибок: с помощью исключений и через возвращаемые значения. И Rust предпочитает возвращаемые значения.



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



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


        Читать дальше →
      • Анатомия программы в памяти

        • Translation
        Управление памятью – одна из главных задач ОС. Она критична как для программирования, так и для системного администрирования. Я постараюсь объяснить, как ОС работает с памятью. Концепции будут общего характера, а примеры я возьму из Linux и Windows на 32-bit x86. Сначала я опишу, как программы располагаются в памяти.

        Каждый процесс в многозадачной ОС работает в своей «песочнице» в памяти. Это виртуальное адресное пространство, которое в 32-битном режиме представляет собою 4Гб блок адресов. Эти виртуальные адреса ставятся в соответствие (mapping) физической памяти таблицами страниц, которые поддерживает ядро ОС. У каждого процесса есть свой набор таблиц. Но если мы начинаем использовать виртуальную адресацию, приходится использовать её для всех программ, работающих на компьютере – включая и само ядро. Поэтому часть пространства виртуальных адресов необходимо резервировать под ядро.

        image

        Это не значит, что ядро использует так много физической памяти – просто у него в распоряжении находится часть адресного пространства, которое можно поставить в соответствие необходимому количеству физической памяти. Пространство памяти для ядра отмечено в таблицах страниц как эксклюзивно используемое привилегированным кодом, поэтому если какая-то программа пытается получить в него доступ, случается page fault. В Linux пространство памяти для ядра присутствует постоянно, и ставит в соответствие одну и ту же часть физической памяти у всех процессов. Код ядра и данные всегда имеют адреса, и готовы обрабатывать прерывания и системные вызовы в любой момент. Для пользовательских программ, напротив, соответствие виртуальных адресов реальной памяти меняется, когда происходит переключение процессов:
        Читать дальше →
      • Я наконец-то понял, что такое unit-экономика

          «Наконец-то понял, что такое unit-экономика!», воскликнул я сам себе. Не спешите закрывать статью, если вы уже знаете, что это. Я понял про unit-экономику для МОЕГО проекта, и, надеюсь, эта информация поможет и другим. Спасибо приятелю Коле, который зашел к нам в офис поболтать о жизни и натолкнул на эти мысли.

          Итак, когда говорят о unit-экономике, то ставят такой вопрос: «Сколько вам стоит привлечение одного клиента?». Я несколько лет не мог на него ответить. И это меня очень смущало. Наша команда доросла до 12 человек, а ответить на такой простой и нужный вопрос я почему-то не мог.
          Читать дальше →
        • Как я сделал тренажер английского, которым пользуется не только моя мама

            Я расскажу о том, как мы с releu придумали, сделали и развиваем сервис мини-уроков английского языка, которым пользуются уже 4000 человек каждый день. Для затравки рост числа активных пользователей:

            Читать дальше →
          • Когда данных действительно много: Vowpal Wabbit

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



              В предыдущих двух постах (раз, два) мы расмотрели основные алгоритмы и техники, применяющиеся участниками соревнований Kaggle. Сегодня хотелось бы пойти дальше и поговорить про то, с какими трудностями встречаются исследователи при разработке алгоритмов в случае, когда данных очень много и обучаться приходится на выборках, которые не помещаются в память. Сразу стоит отметить, что это происходит довольно часто, даже на самом Kaggle (в данной задаче обучающая выборка имеет обьем в несколько гигабайт и новичку может быть просто не понятно, что с этим делать). Ниже мы рассмотрим алгоритмы машинного обучения и инструменты, справляющиеся с данной проблемой.
              Читать дальше →
            • Алекс Шульц (часть 2): введение в growth hacking

              • Translation


              Cтэнфордский курс CS183B: How to start a startup. Стартовал в 2012 году под руководством Питера Тиля. Осенью 2014 года прошла новая серия лекций ведущих предпринимателей и экспертов Y Combinator:


              Первая часть курса
              Читать дальше →
              • +13
              • 11.6k
              • 4
            • Адора Чьюнг (2-я часть лекции): growth hacking

              • Translation


              Cтэнфордский курс CS183B: How to start a startup. Стартовал в 2012 году под руководством Питера Тиля. Осенью 2014 года прошла новая серия лекций ведущих предпринимателей и экспертов Y Combinator:


              Первая часть курса
              Читать дальше →
              • +17
              • 13.3k
              • 5
            • 10 феерических выступлений Стива Джобса


                На прошлой неделе случилось то, что хотелось оттянуть на как можно больший срок, но что все равно было неизбежным. Самый инновационный предприниматель Америки, а может, и мира, Стив Джобс оставил пост CEO компании Apple.
                Некоторым везунчикам в жизни предоставляется шанс работать над одним революционным устройством. Стив Джобс – человек, который совершил сразу несколько революций в цифровом мире, – по праву может считаться успешным человеком. 
                В этой статье собраны 10 наиболее известных и символичных выступлений, которые характеризуют жизнь и карьеру мастера. 
                Читать дальше →
              • Что такое суперсимметрия?

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

                  Одной из важных целей работы LHC является проверка суперсимметричных моделей. Суперсимметрия как раз является областью моей научной деятельности, и я решил в научно-популярной форме попытаться рассказать, что же это такое.

                  Я остановлюсь в этой статье на современных теориях физики элементарных частиц, на некоторых идеях и следствиях этих теорий. Среди рассмотренных тем следующие:
                  • Стандартная модель фундаментальных взаимодействий (описывает практически все экспериментальные данные в физике элементарных частиц),
                  • ее достоинства и недостатки,
                  • идея суперсимметрии,
                  • решение многих проблем Стандартной модели при ее суперсимметричном обобщении,
                  • некоторые особенности минимальной суперсимметричной Стандартной модели (МССМ),
                  • экспериментальный статус суперсимметрии.
                  Я постарался вести рассказ максимально популярно, поэтому пришлось отказаться от математической строгости. Однако кое-где предполагается, что хабралюди, все-таки, еще помнят школьную математику и физику. Без этого было бы затруднительно, если вообще возможно, изложить часть понятий и идей.
                  Читать дальше →
                • Как заюзать буфер обмена из bash?

                    Доброго всем времени суток!

                    Не так давно начал познавать все прелести программирования на bash. Пишу скрипты для автоматизации рутинных действий, возникающих в процессе работы (программист на Си под никсы я). Вроде получается =)
                    Так вот, возникла необходимость заюзать из баш буфер обмена(используя лишь средства баш и стандартные утилиты Solaris). Т.е. скопировать значение некой переменной в этот самый буфер. «xsel» и «xclip» нет.
                    Специфика такова, что вся работа происходит на удалённой тачке заказчика, в сетке которого даже нет интернета. Соответственно никакого софта ставить я не могу.
                    Подскажите, как это сделать(если такое вообще возможно)?
                    Гугление не дало результатов.

                    P.S. надеюсь, прямой эфир хоть кто-нибудь читает.
                  • Оптимизация бизнес-процессов при помощи кривых выживаемости

                    Давайте представим, что у нас есть сервис по бронированию столиков в ресторане. Бронирование происходит в 2 этапа:

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

                    Мы хотим понять, насколько эффективно работает колл-центр и как быстро обрабатываются заявки.

                    Хороший способов проанализировать это — кривые выживаемости.


                    Читать дальше →
                    • +13
                    • 9.7k
                    • 6
                  • Графические модели в машинном обучении. Семинар в Яндексе

                      Несмотря на огромную популярность аппарата графических моделей для решения задачи структурной классификации, задача настройки их параметров по обучающей выборке долгое время оставалась открытой. В своем докладе Дмитрий Ветров, рассказал об обобщении метода опорных векторов и некоторых особенностях его применения для настройки параметров графических моделей. Дмитрий – руководитель группы Байесовских методов, доцент ВМК МГУ и преподаватель в ШАДе.

                      Видеозапись доклада.

                      План доклада:
                      • Байесовские методы в машинном обучении.
                      • Задачи с взаимозависимыми скрытыми переменными.
                      • Вероятностные графические модели
                      • Метод опорных векторов и его обобщение для настройки параметров графических моделей.



                      Сама концепция машинного обучения довольно несложная – это, если говорить образно, поиск взаимосвязей в данных. Данные представляются в классической постановке набором объектов, взятых из одной и той же генеральной совокупности, у каждого объекта есть наблюдаемые переменные, есть скрытые переменные. Наблюдаемые переменные (дальше будем их обозначать X) часто называются признаками, соответственно, скрытые переменные (T) — это те, которые подлежат определению. Для того, чтобы эту взаимосвязь между наблюдаемыми и скрытыми переменными установить, предполагается, что у нас есть обучающая выборка, т.е. набор объектов, для которых известны и наблюдаемые и скрытые компоненты. Глядя на нее, мы пытаемся настроить некоторые решающие правила, которые нам позволят в дальнейшем, когда мы видим набор признаков, оценить скрытые компоненты. Процедура обучения приблизительно выглядит следующим образом: фиксируется множество допустимых решающих правил, которые как правило задаются с помощью весов (W), а дальше каким-то образом в ходе обучения эти веса настраиваются. Тут же с неизбежностью возникает проблема переобучения, если у нас слишком богатое семейство допустимых решающих правил, то в процессе обучения мы легко можем выйти на случай, когда для обучающей выборки мы прекрасно прогнозируем ее скрытую компоненту, а вот для новых объектов прогноз оказывается плохой. Исследователями в области машинного обучения было потрачено немало лет и усилий для того, чтобы эту проблему снять с повестки дня. В настоящее время, кажется, что худо-бедно это удалось.
                      Конспект доклада
                      • +41
                      • 15.6k
                      • 5
                    • Разработка iOS8 приложения на Apple Swift

                      • Translation
                      • Tutorial
                      Статья является своеобразным продолжением статьи «Знакомьтесь, Swift!» за авторством Helecta, а также вольным переводом статьи Developing iOS Apps Using Swift Tutorial Part 2.



                      Итак, в первой статье мы написали простое Single View приложение, включающее таблицу с несколькими ячейками.
                      На этот раз мы немного углубимся и сделаем несколько более амбициозных вещей. Мы будем обращаться к API поиска iTunes, парсить ответ, полученный в JSON и отображать результаты в Table View.
                      На первый взгляд может показаться, что все это довольно сложно и предстоит много работы, но на самом деле это не так. Все описанное выше является достаточно простым функционалом для iOS приложений и каждый уважающий себя iOS разработчик должен это уметь.
                      Читать дальше →
                    • Геймификация багфикса. Как мы превратили исправление ошибок в увлекательную многопользовательскую online-игру

                        Автор: maxim_korobtsev, WorkAndPlay.Ru

                        Совсем недавно в компании Одноклассники прошло интересное и необычное событие. Пять дней разработчики и тестировщики участвовали в Багатлоне, киберспортивном соревновании по багфиксу и прокачке навыков.

                        Фиксить баги скучно, если не превращать это в игру. Особенно, если речь идет о низкоприоритетных багах, которые не были исправлены в свое время из-за незначительности. Но, обо всем по порядку!

                        Как все начиналось?


                        Все началось за несколько месяцев до Багатлона, когда мы, Work&Play, вместе с OK придумывали игровые механики и само соревнование. Родилась достаточно неплохая идея: расфасовать все множество накопившихся низкоприоритетных багов по группам (коробкам с багами). Для каждого бага заранее указать навыки, которые он прокачивает у того, кто его фиксит или проверяет. Далее раз в несколько месяцев устраивать соревнование. Причем, победителем будет не тот, кто больше пофиксил, а тот, кто больше всех прокачался пока багфиксил. Также хотелось, чтобы вся игра проходила без отрыва от работы(в рабочие дни), по тикетам из багтрекера и доступ к ней был прямо из Jira.

                        Первоначальная идея выглядела интересной и все взялись за реализацию. Пока мы разрабатывали плагин для Jira, ребята из OK отбирали баги для первой коробки, проставляли для них значение навыков, в общем готовили контент для игры. Тут хочется отдельно отметить профессионализм Одноклассников, они достаточно сильно помогли при работе над первой версией и, также как и мы, подошли к работе с душой.

                        Что у нас получилось в итоге?


                        В результате, после нескольких месяцев работы над плагином, у нас получилось вот это:
                        главный экран jira модуля для геймификации багфикса
                        Читать дальше →