Parallelism vs Concurrency: правильно подбираем инструменты

Автор: admin от 5-01-2016, 21:10, посмотрело: 380

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

Категория: Программирование

 

Почему функциональное программирование — мейнстрим?

Автор: admin от 5-01-2016, 20:58, посмотрело: 453

Функциональное программирование вряд ли можно назвать новым явлением. Еще в начале 90-х, когда я учился в университете, нам нередко приходилось писать что-то на LISP. Казалось бы, 25 лет прошло – но ведь уже тогда этот язык программирования был старше меня.

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

Но, похоже, ни один функциональный язык не претендует на звание общепризнанного. Я имею в виду своеобразную всемирную гегемонию C в 70-х, который позже передал корону C ++, Java, а со временем и javascript. Ни один из претендентов второго эшелона (Python, PHP, Perl, Ruby, C# ...) не попадал в категорию функциональных.

Категория: Программирование

 

Создание функции на Rust, которая возвращает String или &str

Автор: admin от 5-01-2016, 18:20, посмотрело: 552

От переводчика


Создание функции на Rust, которая возвращает String или &str
Это последняя статья из цикла про работу со строками и памятью в Rust от Herman Radtke, которую я перевожу. Мне она показалась наиболее полезной, и изначально я хотел начать перевод с неё, но потом мне показалось, что остальные статьи в серии тоже нужны, для создания контекста и введения в более простые, но очень важные, моменты языка, без которых эта статья теряет свою полезность.

Мы узнали как создать функцию, которая принимает String или &str (англ.) в качестве аргумента. Теперь я хочу показать вам как создать функцию, которая возвращает String или &str. Ещё я хочу обсудить, почему нам это может понадобиться.

Категория: Программирование

 

Firefox будет поддерживать нестандартные CSS для совместимости с WebKit

Автор: admin от 5-01-2016, 17:55, посмотрело: 286

Firefox будет поддерживать нестандартные CSS для совместимости с WebKit

Разработчики браузера Firefox заявили о включении поддержки специфических для движка WebKit элементов CSS. Поддержка таких элементов появится в движке Gecko, который является основой браузера Firefox. Что касается первых версий, с включением CSS, то они выйдут в апреле и мае — это версия 46 и 47 соответственно. По словам представителей команды Firefox, речь идет о новых возможностях с префиксом «-webkit-».

Об добавлении поддержки нестандартных элементов CSS разработчики задумались довольно давно. Причина — пользователи браузера стали активно использовать расширения, добавляющие поддержку названных элементов CSS в мобильных приложениях. Сами расширения неофициальны, но они смогли стать достаточно популярными, поскольку основные браузеры для мобильных устройств основаны на таких движках, как WebKit и Blink/Chromium.

Категория: Программирование » Веб-разработка

 

Sound Manager для небольших игр и прототипов на Unity

Автор: admin от 5-01-2016, 14:14, посмотрело: 445

Воспроизвести звук в Unity просто. Нужно создать компонент AudioSource прикрепить к нему звуковой файл в виде AudioClip и вызвать audioSource.Play() из скрипта. Или даже поставить автовоспроизведение на при создании объекта(Play on Awake).

Сложности начинаются когда звуков в игре становится много. Их все нужно расставить, прописать приоритеты. Звуки отдельно, музыку отдельно. При регулировке громкости звуков и музыки раздельно тоже сложности. Можно, конечно, регулировать громкость разных каналов в AudioMixer, но он не работает в WebGL. А Webplayer сейчас считается устаревшим.

А если какой то звук повторяется несколько раз подряд(например игрок быстро нажимает на кнопку и играет звук клика), то хорошо бы чтобы тот не обрывался на середине, а начинался новый, не мешая предыдущим. Да еще и при включении паузы звуки игры нужно ставить на паузу, а звуки меню нет. Из коробки такая возможность в Unity есть, но почему то доступна только из скрипта и не все о ней знают.

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

Sound Manager для небольших игр и прототипов на Unity

Категория: Программирование » Game Development

 

Method Swizzling и Swift: но есть нюанс

Автор: admin от 5-01-2016, 13:59, посмотрело: 395

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

В статье Objective-C Runtime. Теория и практическое применение этот процесс хорошо описан. Но с переходом на Swift появляются некоторые нюансы.

Категория: Веб-разработка, iOS

 

Настройка logrotate + доступ для сбора логов по SFTP

Автор: admin от 5-01-2016, 12:37, посмотрело: 488

У меня стояла задача: настроить сжатие логов DNS сервера Unbound, с возможностью удобного сбора этих бэкапов в коллектор. Также требовалось ограничить права доступа, чтобы с коллектора можно было зайти только в дирректорию, где хранятся бэкапы логов. Указанные действия проводил на CentOS 7 Minimal и CentOS 6.6 Minimal.

Категория: Системное администрирование, Linux

 

Jii 0.8: Миграции, ReactViews, изоморфное приложение и прочие плюшки

Автор: admin от 5-01-2016, 10:42, посмотрело: 387

Привет всем жителям и гостям хабра и с новым годом! :)
В этой статье я хочу рассказать о том, с какими фичами Jii вступил в 2016-й год и что его в ждет в новом году.
Jii 0.8: Миграции, ReactViews, изоморфное приложение и прочие плюшки

Итак, начнем по порядку.

Категория: Программирование » Веб-разработка

 

Истории из практики оптимизации сети

Автор: admin от 5-01-2016, 10:36, посмотрело: 527

Привет! Я с коллегами оптимизирую имеющиеся каналы. Нас постоянно путают то с оптическими уплотнителями, то с инженерами-кабельщиками, то, вообще, с грузчиками.

Истории из практики оптимизации сети

А наша работа – это разбор стека протоколов и его полная перекомпоновка под особенности канала, настройка оптимальных размеров фрейма, сбор нескольких пакетов на канал с большим latency в один, дедупликация, обычное сжатие, разбор SSL и пересборка с тем же сертификатом. Решается это в самом простом случае установкой специального железа на принимающей и передающей стороне. Поскольку до каждой точки надо добраться, мы ещё и работаем выездными инженерами. И, как у любых выездных инженеров, историй у нас море. Ниже я расскажу несколько, только поменяю ряд второстепенных обстоятельств, чтобы нельзя было узнать заказчика.

Например, идут ночные работы в очень крупном магазине. Админ заказчика и наш инженер зашли в час ночи в серверную, работают. Инженер вышел в туалет, вернулся. Через пару минут – стук в дверь. Открывают — и сразу влетает ГБР с автоматами, сразу ногами по корпусу, мордой в пол и в наручники.

Потом подъезжают полиция и главный по магазину. Главный оценивает ситуацию и веско заявляет:
— Вот этого знаю, это наш админ. А вот этого не знаю. Забирайте.

Категория: Админитстрирование » Сетевые технологии

 

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

Автор: admin от 5-01-2016, 08:21, посмотрело: 392

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

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

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

В своей новой работе, исследователи продемонстрировали, что деанонимизация возможна и через анализ уже скомпилированных бинарных файлов в отсутствии исходных кодов (видео презентации доклада). В этот раз для исследования использовались исходные коды 600 участников Google Code Jam, которые были скомпилированы в исполняемые файлы, а потом подвергались разбору. Благодаря тому, что задания на соревнованиях были одинаковы для всех, разница файлов заключалась в значительной степени именно в стиле программирования, а не в алгоритме. Изначально, при сборке бинарных файлов отключались оптимизации компилятора и не применялась обфускация исходных кодов. Но, как утверждают авторы работы, некоторые отличительные признаки сохраняются и при применении этих способов сокрытия авторства, снижая точность деанонимизации до 65%.

Категория: Программирование, Информационная безопасность