• Открытие совместной магистратуры JetBrains и ИТМО

      Компания JetBrains объявляет об открытии магистерской программы «Разработка программного обеспечения / Software Engineering» на базе Университета ИТМО. Приглашаем абитуриентов продолжить своё обучение и получить качественные знания в области программирования и компьютерных наук.

      Учебная программа


      Программа предлагает студентам актуальные знания в области разработки программного обеспечения. Базовые курсы (алгоритмы, программирование, машинное обучение и другие) дополнены специализированными предметами (глубокое обучение, информационный поиск, анализ изображений и другие), которые представляют современные подходы к решению задач IT-индустрии. Преподавательский состав программы включает в себя действующих учёных и разработчиков крупных компаний Петербурга.
      Подробнее о магистратуре
    • Ещё больше простых багов [язык Ада]

      • Перевод

      (Many) More Low Hanging Bugs


      Примечание переводчика. На Хабре практически полностью отсутствуют публикации, связанные с языком Ада. А ведь это — живой язык, на котором пишут программы, для которого разрабатываются инструменты статического анализа. Чтобы хоть немного заполнить этот информационный вакуум на Хабре, я решил перевести небольшую заметку, связанную с данным языком. Почему её? В ней упоминается PVS-Studio, и мне это приятно :). Плюс, возможно, российские разработчики на языке Ada узнают о новом для себя инструментарии и увидят, что они совсем не одиноки, и жизнь продолжает кипеть в мире Ада.
      Читать дальше →
      • +22
      • 6,8k
      • 5
    • Обзор примитивов синхронизации — спинлоки и тайны ядра процессора

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

        (Наверное, потом напишу ещё одну про совсем уже нетипичную задачу, но это потом.)

        Сегодня мы немножко заглянем в процессор. Чуть-чуть.

        По сути, мы будем говорить про единственный примитив, который принципиально отличается от остальных: спинлок. Spinlock.

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

        На уровне процесса всё так и есть — различия между спинлоком и мьютексом — чисто технические, вопрос реализации и производительности.

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

        Дело в том, что внутри ядра мьютекс реализован с помощью спинлоков, а вот спинлоки реализованы сами по себе, автономно. Они — действительно базовый примитив. Ниже — только сам процессор.

        Есть и ещё одно, семантическое различие. Мьютекс допускает и предполагает снятие нити с процессора, долгую остановку вызывающей нити. Мьютексом можно запереть объект на час или сутки, это приемлемо и нормально. Спинлок принципиально рассчитан только на кратчайшие приостановки, это всегда работа с неатомарным стейтом объекта. Присваивание группы переменных, небольшой цикл — это максимум того, что можно сделать под спинлоком.

        Итак, иерархия реализации такова: mutex/cond/sema сделаны на базе спинлоков, спинлоки — на базе атомарных операций, предоставляемых процессором. Мы в них немного заглянем сегодня.

        Как устроен спинлок?
        Читать дальше →
      • Обзор примитивов синхронизации — Семафор и немного lockless-а

          В прошлой заметке мы обсудили самую известную пару из лагеря инструментов синхронизации тредов — mutex и cond. Сегодня встретимся с sema — примитивом, который умеет заменять предыдущие два в одиночку.

          Но сначала — пара слов о случайных пробуждениях. (Спасибо xaizek, который мне об этом напомнил.) В принципе, строго реализованные механизмы синхронизации этим не страдают, но, тем не менее, опытный программист на это никогда не полагается.

          Напомню фрагмент кода:

          while(total_free_mem <= 0)
              {
              wait_cond(&got_free_mem, &allocator_mutex);
              }
          


          Здесь цикл вокруг wait_cond гарантирует нам, что даже если мы вернёмся из ожидания события случайно или по ошибке, ничего страшного не случится — проверка в while обеспечит нам уверенность, что нужное состояние проверяемого объекта достигнуто. Если нет — поспим ещё в ожидании.

          Отметим ещё раз, что проверяем мы состояние объекта (total_free_mem <= 0) при запертом мьютексе, то есть никто не может его менять в то же самое время.
          Читать дальше →
        • Обзор примитивов синхронизации — mutex и cond

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

            Меня всё нижесказанное, конечно, больше волнует с точки зрения разработки ядра ОС. Но почти всё применимо и к пользовательскому коду.

            Кстати, ядра старых ОС в примитивах синхронизации не нуждались, поскольку преемптивной мультизадачности внутри ядра в старые добрые времена не было. (Уж за Юникс 7-й версии я отвечаю. Не было.) Точнее, единственным методом синхронизации был запрет прерываний. Но об этом позже.

            Сначала перечислим героев. Мне известны следующие примитивы синхронизации:

            User/kernel mode: mutex+cond, sema, enter/leave critical section.
            Kernel only: spinlock, управление прерываниями.

            Зачем всё это нужно, читатель, наверное, знает, но всё же уточним.

            Если некоторая структура данных может быть доступна двум параллельно работающим нитям (или нити и прерыванию), и являет собой сущность, к которой нельзя обеспечить атомарный доступ, то работу с такой структурой нужно производить так, чтобы только одна нить одновременно выполняла сложные манипуляции с состоянием структуры.
            Читать дальше →
          • Lua что новенького в BitTorrent DHT?

              Какое-то время назад я написал для Shareaza внешний DHT Tracker на Lua (GitHub). Для Shareaza это обычный локальный трекер, а по сути это BitTorrent DHT клиент, который позволяет ей качать торенты по магнет ссылкам без трекера.

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

              Итак, что новенького мы наловили в BitTorrent DHT.
              Читать дальше →
            • Как правильно качать в p2p сетях или магнит с битрейтом

                Раз уж пошла такая пляска, то и я расскажу про новый параметр магнет ссылки.

                br=192000
                



                В магнет-ссылке он выглядит так.

                magnet:?dn=pop_music.mp3...&br=192000
                

                Этот параметр позволяет совместить преимущества последовательного и случайного выбора частей для загрузки. Назовем это «смешанный способ выбора частей». Тем самым давая возможность «онлайн» просмотра/прослушивания без ущерба для скорости загрузки.
                Подробности
              • Новый параметр описания раздачи &x.do= в магнет-ссылке для FlylinkDC++. Факторы выбора юзером файлообменной сети

                  Прочитав заголовок статьи многие подумали, что первая часть не имеет никакого отношения ко второй части. Однако, ниже я приведу примеры которые показывают тесную взаимосвязь многих обстоятельств — и как итог выбор пользователем определённой файлообменной сети.
                  Читать дальше →
                • Приручение файлообменных P2P сетей. DC (Direct Connect). Часть 2

                    С момента первой публикации программы MediaDC на этом сайте прошло не много времени, но уже сейчас можно сказать, что программа вызывает интерес.

                    Вкратце, программа представляет собой средство для просмотра файлов (фильмов, музыки, картинок) по протоколу DC (Direct Connect).
                    Таким образом, можно не скачивая оценить контент и избежать разочарования от потерянного времени на скачивание не интересного (в плохом качестве, etc) фильма.

                    Программа задумана для стирания грани между локальными файлами и файлами доступными в DC, по подобию обычной (SMB, Netbios шары).
                    Более детальное описание можно найти в моем первом посте Приручение файлообменных P2P сетей. DC (Direct Connect).

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

                    Читать дальше →
                  • EiskaltDC++. Первый релиз под номером 2.0

                      Совсем недавно состоялся первый релиз нововго DC++ клиента для Linux — EiskaltDC++ 2.0. Проект разрабатывается нашими соотечественниками и является прямым наследником EiskaltDC. Выход сразу версии 2.0 связан с тем, что был осуществлен переход на ядро dc++ (EiskaltDC был основан на dclib), код был полностью переписан, новый интерфейс основан на Qt4 и внешне максимально приближен к оригинальным клиентам DC++. В результате EiskaltDC++ стал представлять собой front-end на Qt4 для ядра dc++.
                      Читать дальше →
                    • Azure Service Fabric: вторые шаги


                        Снова Чарли Чаплин на фабрике в фильме «Новые времена»


                        Продолжаем разговор про Azure Service Fabric. В предыдущей статье я упомянул о планах написать сначала про stateful сервисы, а затем уже перейти к модели акторов в ASF. Концепция изменилась — подумалось мне, что неплохо бы для примеров использовать если уж не production-решение, то что-то близкое, чтобы была теоретическая польза и практический смысл. Можно объединить все компоненты ASF в одном флаконе — чтобы и корованы набигали, и лунапарк, и Винни-Пух и все-все-все. Вот с такими мыслями я и пошел на кладбище домашних проектов в поисках кандидата на оживление.


                        Читать дальше →
                      • Сжатый видеообзор свежей версии операционной системы BlackBerry 10

                          У нас недавно появилась возможность взглянуть на свежую версию операционной системы BlackBerry 10, установленную на устройство для разработчиков BlackBerry Dev Alpha. Поигравшись с системой, мы поняли, что это может быть интересно несколько большему кругу людей, а потому решили поделиться своим сжатым видеообзором об этой ОС.



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

                          Приятного просмотра!
                        • DVD-RX, борьба с защитой

                          DVD-RX это многоуровневая защита DVD видео от несанкционированного копирования. Но раз есть информация которую можно просмотреть, значит её можно и сохранить. В этом посте я опишу то, как именно мне удалось снять образ с такого диска, при помощи Linux.
                          Читать дальше →
                        • OS Xак — мой опыт

                          Тема хакинтош — довольно занимательная штука, за которой я слежу и представляю себе «что там да как». Недавно назрела необходимость покупки нового PC домой. Ничего необычного, никаких супер компьютеров, самый середняковый компьютер для дома почитать новости, почту, посмотреть фотки, качнуть фильмец (ну или зачем там еще люди используют компьютер дома?). Вот тут то и закралась у меня мысль совместить приятное с приятным – собрать PC, максимально совместимый с OS X.
                          Собственно, своим опытом сборки Хакинтоша я и решил поделится в данном топике, всех кому это может быть интересно прошу под кат.
                          Читать дальше →
                        • Обратные сетевые эффекты — от чего умирают большие сети

                            Для успеха любой социальной сети жизненно важен сетевой эффект, который заключается в том, что ценность сети растёт с ростом количества участников. Согласно эмпирическому закону Меткалфа, полезность сети приблизительно равна половине квадрата численности участников. Тем не менее, сетевой эффект не является гарантией безоблачного существования крупной сети. Закон Меткалфа не помешал Facebook обойти Friendster и MySpace.

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

                              Успешные компании всегда привлекают к себе разного рода мошенников, взяточников и прочую нечисть. По собственной практике могу сказать, что в бизнесе действует принцип детской песочницы. В детстве все делились на тех, кто создает и тех, кто хочет прийти на все готовенькое. Вот построишь ты дворец из песка, а кто-то придет и обязательно или разрушит, или заберет. Бороться с этим бесполезно, как бесполезно бороться с животными инстинктами, которые в нас живут.
                              Читать дальше →
                            • Исследователи MIT открыли новое состояние вещества

                                Исследователи Массачусетского технологического института открыли новое состояние вещества с новым состоянием магнетизма, которое было названо квантовая спи́новая жидкость (quantum spin liquid, QSL). За счет такой характеристики как квантовая запутанность дальнего действия (long-range entanglement) новое открытие может помочь достичь значительных успехов в хранении данных и способствовать развитию новых систем коммуникаций.

                                В современном технологическом мире наибольшее распространение получили всего два вида магнетизма: ферромагнетизм и антиферромагнетизм. Первый известен человечеству уже сотни лет, и как в стрелке, вращающейся на игле компаса, так и в тех магнитах, с которыми мы играли в детстве, работает одно и то же свойство: магнитные моменты (к примеру, зарядов ионов и электронов) устанавливаются одном направлении, что вызывает появление двух полюсов.
                                Читать дальше →
                              • Смартфон Yota с eInk вторым экраном

                                  Как вам идея второго eInk экрана в смартфоне? Низкое энергопотребление, много различных статусов, фотографии, даже навигация. В видео подробнее об этом, но интересно, что вы думаете без оглядки на цену и срок выхода. Технология интересна?

                                • История авторского права. Часть 7: Рейдерский захват корпорацией Pfizer

                                  • Перевод
                                  Окончание.
                                  Первая часть — Чёрная смерть.
                                  Вторая часть — Кровавая Мэри.
                                  Третья часть — Монополия умирает… и возрождается.
                                  Четвёртая часть — США и библиотеки.
                                  Пятая часть — Неимущественные права.
                                  Шестая часть — Рейдерский захват звукозаписывающими компаниями.



                                  В 1970-е Toyota поразила США в самое сердце, и все американские политики почувствовали, что конец близок. Самые американские из всех вещей — автомобили! Американские автомобили! — вдруг оказались недостаточно хороши для американцев. Вместо них они покупали машины Toyota. Это был апокалиптический знак — США уже не могли конкурировать с Азией, и их промышленное могущество близилось к закату.

                                  Это последняя часть моей серии статей об истории копирайтной монополии. Период с 1960 по 2010 годы был отмечен двумя процессами: во-первых — проникновение некогда исключительно коммерческой монополии в некоммерческую, частную жизнь («домашняя звукозапись незаконна» и тому подобная чушь), в результате которого копирайт стал угрозой для фундаментальных прав человека; во-вторых — корпоративная политическая экспансия копирайтной и других монополий. Первый процесс, в ходе которого индустрия интеллектуальной собственности пророчила катастрофу после каждого нового витка технологического прогресса, заслуживает отдельной статьи. Здесь же я сосредоточусь на втором процессе.

                                  Когда политики поняли, что Соединённые Штаты более не способны удерживать экономическое лидерство, производя что-либо ценное и жизненно необходимое, они создали множество комитетов и рабочих групп, перед которыми стояла одна цель — найти ответ на критически важный вопрос: как США смогут остаться мировым лидером, не имея возможности производить конкурентноспособные товары?

                                  Ответ пришёл из неожиданного источника — от фармацевтической компании Pfizer.
                                  Читать дальше →
                                • История авторского права. Часть 3: Монополия умирает… и возрождается

                                  • Перевод
                                  Продолжение. Первая часть — Чёрная смерть. Вторая часть — Кровавая Мэри.

                                  После того, как Кровавая Мэри ввела монополию на копирование книг, обеспечив власти возможность цензуры, ни книготорговцы, ни корона не испытывали желания что-либо менять. Идиллия длилась 138 лет.

                                  Монополия была учреждена Марией I в 1557 году, как механизм цензуры, предотвращающий распространение и обсуждение протестантской литературы. Её преемница, Елизавета I с удовольствием воспользовалась этой монополией уже для того, чтобы предотвращать распространение и обсуждение литературы католической.

                                  На протяжении XVII века парламент пытался постепенно отобрать у монархов контроль над цензурой. В 1641 году праламент распустил суд, в котором обычно слушались дела о нарушении копирайта, так называемую "Звёздную палату". В результате нарушение авторских прав стало де-факто ненаказуемым преступлением, примерно как сегодня в Швеции переход улицы в неположенном месте. Технически это является правонарушением, но фактически никто не будет за него судить и наказывать. В результате этого творческая активность в Британии буквально взлетела в стратосферу.

                                  К сожалению, парламент вовсе не этого хотел добиться.
                                  Читать дальше →
                                  • +81
                                  • 40,8k
                                  • 8