Search
Write a publication
Pull to refresh
1
0
Виталий Ф. @FuN_ViT

программист, синьор-помидор :)

Send message

Исправление уязвимости shellshock для устаревших систем

Reading time4 min
Views14K
Для дистрибутивов с действующей поддержкой уязвимость Shellshock устраняется простым обновлением пакета bash. Но если обновления уже не выпускаются, решение проблемы будет сложнее. Рабочих вариантов всего два — обновлять bash другим способом или отказываться от bash в пользу другого shell-интерпретатора.

Читать дальше →

XNA 3D: введение в custom shader и чуть-чуть прототипа

Reading time11 min
Views30K


Привет, Хабрахабр! К сожалению, очень давно не писал на хабр. Личные дела совершенно были против того, чтобы сесть и написать пару статей по геймдеву. Может оно и к лучшему, за эти два года я набрался очень много опыта и всегда рад им поделиться. Стоит отметить, что я совершенно отказался от создания 2D игр: я не против их, но разрабатывать игры в 3D куда интереснее и веселее! По традиции — в качестве инструмента будет XNA 4.0, почему XNA 4.0 дорогой слушатель? А все потому, что, он до сих пор остается актуальной для инди-разработчиков. У нас есть язык с очень низким вхождением — C#. Есть тот самый фреймворк XNA с необходимыми начальными классами/структурами и алгоритмами. И есть DirectX с поддержкой шейдеров, вплоть до Shader Model 3.0. Если ты, %username%, читаешь меня впервые, то можешь прочитать заодно и мои статьи датированными 2012 годом. Не сказать, что они актуальны на все 100%, что в них нет ошибок, но определенную базу они могут дать. Как, наверное, понятно — я буду писать только о 3D: со списком тем я определился не до конца, но думаю, что сформирую их довольно быстро.

Пока точно задумал две статьи:
  • “XNA 3D: введение в custom shader и чуть-чуть прототипа”
  • “XNA 3D: HDR vs LDR, реализация HDR"


Сейчас сделаю введение в custom shader и реализуем простой прототип игры FEZ.
Читать дальше →

UDP и C# async/await

Reading time3 min
Views35K
Недавно возникла необходимость решить следующую несложную задачку: есть несколько десятков устройств (учебных комплексов), у которых нужно регулярно запрашивать их текущее состояние. Комплексы общаются по протоколу UDP, и хотелось сделать так, чтобы не задумываться о цикле опроса и определении, от какого же устройства пришел ответ, а просто посылать запрос — и когда пришел результат — записывать его. Задачу эту я решал и раньше, но захотелось посмотреть, насколько концепция async/await упростит и сократит код. Оказалось, что финальный результат занимает меньше странички.

Читать далее

Cybercortex. Система расширенного восприятия и мышления

Reading time4 min
Views5.1K
Добрый день!

Cybercortex.org — open source проект. Находится на этапе старта и видится как возможность сконцентрировать и скоординировать усилия компаний и разработчиков для решения задач по развитию интеллекта человека. Для внедрения в быт новых форм усиления мышления и ускорения продуктивной коммуникации. Поэтому все, кто так или иначе заинтересован в вопросе, приглашаются к сотрудничеству.

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

image

Читать дальше →

SSD + raid0 — не всё так просто

Reading time6 min
Views136K

Вступление


Коллеги с соседнего отдела (UCDN) обратились с довольно интересной и неожиданной проблемой: при тестировании raid0 на большом числе SSD, производительность менялась вот таким вот печальным образом:

По оси X — число дисков в массиве, по оси Y — мегабайтов в секунду.

Я начал изучать проблему. Первичный диагноз был простой — аппаратный рейд не справился с большим числом SSD и упёрся в свой собственный потолок по производительности.

После того, как аппаратный рейд выкинули и на его место поставили HBA, а диски собрали в raid0 с помощью linux-raid (его часто называют 'mdadm' по названию утилиты командной строки), ситуация улучшилась. Но не прошла полностью -цифры возросли, но всё ещё были ниже рассчётных. При этом ключевым параметром были не IOPS'ы, а многопоточная линейная запись (то есть большие куски данных, записываемых в случайные места).

Ситуация для меня была необычной — я никогда не гонялся за чистым bandwidth рейдов. IOPS'ы — наше всё. А тут — надо многомногомного в секунду и побольше.

Адские графики


Я начал с определения baseline, то есть производительности единичного диска. Делал я это, скорее, для очистки совести.

Вот график линейного чтения с одной SSD.



Увидев результат я реально взвился. Потому что это очень сильно напоминало ухищрения, на которые идут производители дешёвых USB-флешек. Они помещают быструю память в районы размещения FAT (таблицы) в FAT32 (файловой системе) и более медленную — в район хранения данных. Это позволяет чуть-чуть выиграть по производительности при работе с мелкими операциями с метаданными, при этом предполагая, что пользователи, копирующие большие файлы во-первых готовы подождать, а во вторых сами операции будут происходить крупными блоками. Подробнее про это душераздирающее явление: lwn.net/Articles/428584
Читать дальше →

Одна на всех

Reading time2 min
Views25K
Как-то так получилось, что в нескольких последних проектах я использовал в качестве излучающего элемента различные модификации IFA (Inverted А Antenna). Эта рабочая лошадка активно эксплуатируется в огромном количестве современных беспроводных устройств. Видовому разнообразию IFA мне и хотелось бы посвятить этот пост.

Читать дальше →

Патчим процессы в Linux на лету при помощи GDB

Reading time11 min
Views15K
Техники перехвата функций в Linux хорошо известны и описаны в интернете. Наиболее простой метод заключается в написании динамической библиотеки с «функциями-клонами» и использовании механизма LD_PRELOAD для переопределения таблицы импорта на этапе загрузки процесса.

Недостаток LD_PRELOAD в том что необходимо контролировать запуск процесса. Для перехвата функций в уже работающем процессе или функций отсутствующих в таблице импорта можно использовать «сплайсинг» — запись команды перехода на перехватчик в начало перехватываемой функции.

Также известно, что в Python имеется модуль ctypes позволяющий взаимодействовать с данными и функциями языка Си (т.е. большим числом динамических библиотек имеющих Си интерфейс). Таким образом ничто не мешает перехватить функцию процесса и направить её в Python метод обёрнутый в С-callback с помощью ctypes.
Читать дальше →

Опыт применения Go в продакшене Яндекса

Reading time7 min
Views75K
Хочу поделиться опытом использования языка Go в продакшн-системах Яндекса. Вообще мы здесь довольно консервативно относимся к тому, какие языки использовать для реальных систем. И это лишь добавляет полезности тому опыту, который мы получили в этот раз.

Мы начали разрабатывать на Go летом прошлого года. Тогда появился фреймворк Go для облачной платформы Cocaine. До этого приложения серверного API Браузера писались в основном на C++ и Python. Серверный API в это время как раз переходил на облачную платформу, и мы по большей части только определялись с тем, какие технологии использовать в будущем для него. API выполняет следующие функции: получить данные, обработать, отправить во внутренний сервис Яндекса, ещё раз обработать, отдать назад Браузеру. Набор простых приложений.



Недостатком C++ для нас был явный оверкилл для наших целей, на разработку уходила уйма времени, также большой проблемой для нас было то, что плюсовый фреймворк для Кокаина не представлял никакой возможности работать асинхронно, кроме как с помощью коллбэков. У нас было много обращений к различным сервисам, поэтому в результате скоро весь код стал одной большой лапшой из коллбэков. Масштабировать и отлаживать ее было очень сложно.
Читать дальше →

Меня попросили взломать программу на собеседовании. Часть 2

Reading time10 min
Views71K
Это перевод второй части публикации «Меня попросили взломать программу на собеседовании». Оригинальный текст можно найти здесь.

Предисловие


Привет, ребята. Если вы не знаете, что означает «Часть 2», пожалуйста прочитайте Часть 1.
Для начала я хотел бы поблагодарить всех прочитавших первую часть, поскольку в итоге я получил массу отличных отзыв.

Так же я бы хотел устранить некоторые недопонимания:
  1. Я более не работаю на данную компанию, я переехал в Барселону;
  2. Я проходил данное интервью почти год назад;
  3. Программы я взламывал в облаке ($5 тариф, да, вы угадали компанию), поэтому я не считаю, что использование root@'a является проблемой — я могу пересоздать новую среду за пару секунд. В итоге я все же переключился на пользователя eren@, так как gdb не принимал рутовые инит файлы.
  4. Не забудьте прочитать окончание статьи — вам обязательно понравится!

Поехали


На этот раз мы будем работать не с дверью, а с ядерной ракетой.
Читать дальше →

Веб-компоненты в реализации Polymer от Google

Reading time6 min
Views98K

Веб-компоненты — это новая эра веб-разработки и почувствовать ее мощь можно уже сегодня при помощи Polymer от Google. Вы можете создавать свои собственные «элементы» (тэги), содержащие шаблон и инкапсулированные стили и логику (js), а так же воспользоваться богатой коллекцией уже готовых элементов.
Заинтересовались? Прошу под кат.

Centrifuge — я больше не буду обновлять страницу перед отправкой комментария

Reading time10 min
Views26K
Прошло некоторое время с тех пор, как я писал про Центрифугу в предыдущий раз. Произошло множество изменений за этот период. Многое из того, что было описано в ранних статьях (1, 2) кануло в лету, но суть и идея проекта остались прежними — это сервер рассылки real-time сообщений пользователям, подключенным из веб-браузера. Когда на вашем сайте возникает событие, о котором вам нужно моментально сообщить некоторым вашим пользователям, вы постите это событие в Центрифугу, а она, в свою очередь, отправляет его всем заинтересованным пользователям, подписанным на нужный канал. В самом простом виде это показано на схеме:



Проект написан на Python с использованием асинхронного веб-сервера Tornado. Использовать можно даже если бекенд вашего сайта написан не на Python. Хотелось бы рассказать о том, что Центрифуга представляет собой на данный момент.
Читать дальше →

Команда разработчиков графического языка Processing представила официальную JavaScript-библиотеку p5.js

Reading time3 min
Views24K
Язык Processing, основанный на Java, был написан в 2001 году для создания графики и анимаций. Для использования этого языка в интернете в 2008 году Джон Резиг написал библиотеку Processing.js. Библиотека быстро завоевала популярность и активно развивалась в течение нескольких лет после релиза. Часы на кривых Безье, о которых на Хабре писали несколько дней назад, были созданы именно с помощью Processing.js.

В прошлом году команда разработчиков Processing объявила о планах создать собственную JavaScript-библиотеку. В августе бета-версия p5.js была представлена широкой публике. Библиотека p5.js сильно отличается от Processing.js по архитектуре. Главные отличия — отсутствие необходимости изучать язык Processing и более тесная интеграция с HTML. Processing.js — это транслятор Processing в JavaScript. Основное назначение этой библиотеки — рендеринг файлов PDE с исходным кодом Processing. При использовании этой библиотеки программист может вообще не знать JavaScript. Возможно, в 2008 году это была весьма удачная идея, но сейчас, после нескольких лет бурного развития JavaScript и появления множества графических библиотек сформировалось поколение программистов и дизайнеров, для которых JavaScript намного «роднее» и понятнее Java-подобного Processing.


Пример анимации, созданной с помощью языка Processing
Читать дальше →

Десктоп на ладони

Reading time4 min
Views99K
Российская компания ЗАО «Сетевые Технологии» и её отделение на Тайване «Communication Technology» Ltd. на грядущей выставке Computex 2014, проходящей с 3-го по 7-ое июня в Тайбэе, представляет три миникомпьютера на основе платформ Cedar Trail — Atom N2000, Chief River — 3rd gen Core i3/i5/i7 и Shark Bay — 4th gen Core i3/i5/i7.


Читать дальше →

Искусственный интеллект как совокупность вопросов

Reading time4 min
Views77K
image
Когда мы рассуждаем о сильном искусственном интеллекте, то мы понимаем, что это не изолированный вопрос, не вещь в себе, а вопрос ответ на который подразумевает объяснение всех явлений, которые связаны с мышлением человека. То есть, ответив на вопрос о природе интеллекта, мы неизбежно должны будем ответить на такие вопросы как:

  • Что есть информация?
  • Как мозг представляет знания?
  • Что такое язык?
  • Какова роль языка в мышлении?
  • Как совершаются поступки?
  • Как осуществляется планирование?
  • Какова природа фантазий и воспоминаний?
  • Что такое мотивация?
  • Какова природа эмоций?
  • Откуда берется многообразие эмоциональных оценок?
  • Что есть смысл?
  • Как рождается мысль и какова ее природа?
  • Что такое внимание?
  • Что есть любовь?
  • Что есть гармония и красота?

Читать дальше →

Пара полезных команд, которые могут пригодиться при DDoS и не только

Reading time3 min
Views82K
В моем случае, в качестве frontend сервера, стоит nginx и формат access-лога имеет вид:

log_format main '$remote_addr — $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" -> $upstream_response_time';

Что на выходе дает что-то вроде такой строки:

188.142.8.61 — - [14/Sep/2014:22:51:03 +0400] «www.mysite.ru» «GET / HTTP/1.1» 200 519 «6wwro6rq35muk.ru» «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.191602; .NET CLR 3.5.191602; .NET CLR 3.0.191602» "-" -> 0.003

1. tail -f /var/log/nginx/nginx.access.log | cut -d ' ' -f 1 | logtop

Позволяет получить общую картину: распределение уникальных IP, с которых идут запросы, кол-во запросов с одного IP и т.д.
Самое ценное — что все это работает в режиме реального времени и можно мониторить ситуацию, внося какие-либо изменения в конфигурацию (например просто забанить ТОП 20 самых активных IP через iptables или временно ограничить географию запросов в nginx через GeoIP http://nginx.org/ru/docs/http/ngx_http_geoip_module.html).
Читать дальше →

Вывод видео с нескольких web-камер на одной странице

Reading time7 min
Views26K
Как-то раз я приуныл, делать ничего не хотелось, и тут я вспомнил, что в детстве мне сильно хотелось иметь пульт видео наблюдения, как у какого-то злодея из кино, который сидит в темной комнате и хохочет, наблюдая за беспомощными людишками, которые пытаются найти выход. Ну и освежив свои детские воспоминания, я решил воплотить их в жизнь, ну ту часть с пультом наблюдения, без людишек. И тут моим другом стал шагающий семимильными шагами HTML5, а если точнее Stream API.
Так как я раньше уже использовал getUserMedia для захвата звука с микрофона, я подумал, что с видео тоже не будет никаких проблем, но они все же вылезли на свет. Т.е. проблем с самим захватом видео-потока не было, а вот с одновременным выводом данных с нескольких источников на одной странице оказалось не все так просто, как хотелось.

Итак, начнем с самого начала, а именно с захвата и вывода видео с одного источника. Для этого мы будем использовать ф-ю getUserMedia, которая поддерживается во всех нормальных браузерах старших версий (Stream API), ну разумеется кроме IE.
Читать дальше →

Странный глюк Git, чуть не стоивший 10 часов работы

Reading time2 min
Views57K
Я провел весь вчерашний день, напряженно работая, чтобы закрыть долгую и порядком надоевшую задачу. Было достаточно поздно, когда я закомитил изменения и отправил на пуш. Гит привычно ругнулся что не может, потому что есть свежие правки. Окей, pull, push. Теперь вроде нормально, можно идти спать.

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

На следующий день я еще раз сделал деплой на тестовый сервер, но он упорно показывал старую версию. Решил свериться с логом Гита… мой коммит… ЕГО ПРОСТО НЕ БЫЛО! Его не было нигде, ни в локальной копии, ни в удаленной. Его не было даже в исходниках на диске. Файлы, оставленные открытыми в редакторе, были пусты. Единственный фактом, связывающим меня в тот момент с реальностью, был скомпилированный js-файл проекта, оставшийся после сборки исходников. Он работал именно так, как я оставил его вчера.
Читать дальше →

Через час ты проводишь вебинар: Google Hangouts on Air

Reading time5 min
Views53K
На днях возникла необходимость провести вебинар для студентов на безе компании, в которой тружусь.

Требования были следующие:

  • бесплатность для любой стороны;
  • работа из браузера;
  • возможность шарить экран;
  • запись трансляции;
  • простота в освоении (важно).

Бегло просмотрев несколько существующих сервисов, я понял, что все не нравится: почти все они не бесплатны; многие не работают прямо из браузера; нет бесплатной возможности записать вебинар.
Читать дальше →

Итоги пяти лет жизни электронщика в стиле фриланс. Последняя осень?

Reading time16 min
Views123K
В прошлой статье, посвящённой выбору комфортной среды обитания такому редкому в наших краях зверю, как фрилансеру электронщику, я обещал освятить основные вопросы своей деятельности — рассказать о том как искать клиентов, где они живут, и наконец, как с ними общаться. Не весь мой опыт положительный, за весьма удачным стартом последовал спад, но анализ ошибок порой бывает важнее, чем чтение истории успеха. Умные предпочитают учиться на чужих ошибках.

image
Последняя осень?

Признаться, я долго колебался как поступить — иллюстрировать свои рекомендации и советы примерами из личного опыта, либо ограничиться их перечислением с короткими комментариями. Так и не сделав выбор, решил сразу написать две статьи и выложить их одну за другой, с разницей в день. Эта рассказывает о моём опыте на примерах, которые я сопровождаю комментариями. Если у вас мало времени и вам более интересны краткие содержательные выводы и конкретные рекомендации, просьба не тратить время на мой сегодняшний опус, а прочитать мою следующую статью, которую я специально публикую одновременно с этой.
Конечно, можно было бы просто составить сухую выжимку из полезных рекомендаций, но, думаю, что легче они будут восприниматься, если будут подкреплены рассказом о моём личном личном опыте. Реальные события воспринимаются проще, чем на сухие строчки.
В этом посте я попробовал в качестве эксперимента выровнять фотографии по ширине текста. Надеюсь, этот эксперимент не вызовет отторжения в хабрасообществе.
Читать дальше →

Fujitsu совершенствует защиту и управление качеством сервиса дисковых массивов

Reading time4 min
Views4.4K
В конце июля компания Fujitsu представила новый функционал своих дисковых массивов ETERNUS DX S3. Эти усовершенствования СХД реализуют дополнительный уровень защиты данных от сбоев дисков и крупных аварий и упрощают контроль времени отклика для приложений с разным приоритетом.

Читать дальше →

Information

Rating
Does not participate
Location
Москва и Московская обл., Россия
Date of birth
Registered
Activity