Яндекс.Метрика

    Песочница

    Песочница

    Вычисление хеш-суммы строки в iOS

    Давайте рассмотрим с вами очень простую задачу – вычисление хеш-суммы некоторой строки. Задача встречается повсеместно, стоит вспомнить хотя бы аутентификацию пользователя посредством OAuth. Решение задачи будем рассматривать в рамках разработки приложений под iOS. Ниже, я постараюсь показать наиболее красивое (на мой взгляд) решение задачи с точки зрения архитектуры программного кода.

    Песочница

    Минусы и плюсы «традиционной» телефонии для построения телефонной сети предприятия

    За окном второе десятилетие 21 века, наши спутники бороздят просторы мирового океана, но разговор я заведу не о любимом Asterisk, а о старых добрых офисных мини-АТС в сравнении с IP-PBX аналогами. И прежде всего я расскажу, когда и почему (ИМХО) не стоит иметь с ними дело.

    Песочница

    Финансовая грамотность: Форекс и Автоматический трейдинг

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

    Песочница

    Установка Fedora 16 в качестве полнофункциональной PV-guest системы в XenServer

    В этой заметке хотелось бы рассказать, как можно установить Fedora 16 в качестве PV-гостевой машины в XenServer/Xen Cloud Platform. В принципе, описанный ниже способ установки не поддерживаемых напрямую дистрибутивов хорошо известен, однако при установке Fedora 16 возник ряд затруднений, с которыми пришлось немного повозиться. Готовое рещение под катом.

    Песочница

    Заметки про SSL

    После прочтения новостей про Google SSL PFS создается впечатление, что даже те, кто анонсируют новости, могут путать следующие два понятия:
    • Forward secrecy — секретность будущих сообщений
    • Backward secrecy — секретность прошлых сообщений

    Используя термин Perfect forward secrecy в статье про Google SSL PFS приводится пример backward secrecy. Для большинства это не будет иметь большого значения, но для тех, кто хочет разобраться — милости прошу.

    Песочница

    Простой способ передачи табличных данных из PHP в Excel

    К написанию данного топика меня подтолкнула одна заметка о генерации xls в PHP.
    Способ, представленный в той заметке действительно очень прост, но не всегда может быть удобен.
    Есть множество других способов передать табличные данные из PHP в Excel, я опишу тот, который показался мне наиболее простым и функциональным. Нужно особенно отметить, что что я не говорю о генерации xls файла, а лишь предлагаю пользователю открыть полученные данные при помощи Excel так, что пользователи не искушённые в программировании не заметят подлога.

    Песочница

    Chop Slider 2 — лучший jQuery-слайдер

    image
    Добрый день. Несколько дней назад появилась необходимость использовать слайд-шоу на своём сайте, но оно должно было быть нестандартным, чтоб привлекало внимание пользователей, искал в течение дня и ничего нормального не мог найти, были более менее подходящие «слайдеры», но душа хотела клубнички, после того как я облазил весь рунет, переключился на «забугорных» друзей и… удача! Забегая наперёд хочу сказать: этот обзор сделан потому что в рунете нет никакого упоминания про это слайд-шоу, отсюда и логика.

    Песочница

    Трассировка пути на GPU, часть 2

    Первая часть обнаружена тут.

    Чтож, рассмотрим:
    Видеокарта: Nvidia GeForce GTX580 (надо учитывать, что не каждый захочет ради еще не развитой технологии GPU рендеринга покупать топовую видеокарту), Частота шейдеров 800 MHz, 512 ядер CUDA.
    Тестовая сцена: хоровод стендфордских высокополигональных дракончиков, танцующих вокруг светящейся шестиугольной призмы, висящей в воздухе.

    image
    Вот эти ребята.

    Чего хотим добиться: минимального шума при минимальных вычислительных затратах.
    Сложности:
    1. Большинство испытаных рендеров не поддерживают SSS.
    2. Демоверсии Octane Render и Arion Render имеют ограничение по разрешению, а сцены типа «шар на поверхности при дневном свете» очищаются от шума быстро даже на CPU рендерах, тем более при столь небольшом разрешении.
    3. Сложностью для всех видов рендеринга является рендеринг непрямого освещения, в частности интерьеров, а особенно каустика, на которой мы и остановимся.

    Песочница

    Android GT540: Увеличение размера раздела

    Вступление


    Пользователи андроид-смартфона LG GT540 знают, что официальная прошивка 2.1 перегружена предустановленным софтом, который в массе своей не нужен и бесполезен. Изначально мы имеем два раздела: /system (245 МБайт) и /data (138,5 МБайт). Весь предустановленный софт находится в /system.

    Задачи и цели


    Задача: удалить весь ненужный хлам из system и изменить размер этого раздела в пользу data.
    Профит: получаем намного больше пространства на внутренней памяти, для инсталляции большего числа приложений, чем если бы мы могли это сделать ранее.

    Сейчас у меня такая картина: /system 180Мбайт и /data 203.5Мбайт (и это не предел совершенства)


    Песочница

    Отправка SMS с 3G

    Привет Хабр. В данной статье я бы хотел поделиться опытом работы с GSM модемом, а точнее опытом отправки SMS сообщений. Ниже будет описана реализация программы на Delphi для отправки SMS сообщений, а так же чтение и удаление входящих/исходящих сообщений с модема. В моём случае это был модем HUAWEI от MTS. Всех кого заинтересовал, прошу под кат.

    Песочница

    Мультисайтинг в Drupal


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

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

    Песочница

    X студенческая олимпиада по электронике в Томске

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

    Олимпиада проводилась с 14 по 18 ноября в Национальном исследовательском Томском политехническом университете (ТПУ). Проводится она на кафедре промышленной и медицинской электроники (ПМЭ) Института неразрушающего контроля Томского политехнического университета, и, как я понял, практически вся олимпиада организуется силами этой кафедры.

    Олимпиада проводится по двум направлениям:
    • 210100 – «Электроника и наноэлектроника», специальность 210106 – «Промышленная электроника»;
    • 201000 – «Биотехнические системы и технологии», специальность 200401 – «Биотехнические и медицинские аппараты и системы»

    Участие принимали 3 команды из Томска (одна из ТПУ, две из ТУСУР), 2 из Новосибирска (НГТУ, СибГУТИ), Москва (МЭИ), и даже Усть-Каменногорск (ВКГТУ, Казахстан). Вообще за 10 лет проведения олимпиады Томск посетили команды более чем из 20 городов.

    Как это проходило, читайте ниже.

    Песочница

    Возобновление доступа к сайту

    Здравствуйте, Хабравчане!

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

    Песочница

    Увеличение эффективности службы поддержки

    Нет худа без добра.
    Но это добро надо найти и
    суметь им воспользоваться.

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

    Песочница

    Трассировка пути на GPU, часть 1

    Железо и рендеринг
    Наиболее популярные, на сегодняшний день, архитектуры процессоров — x86-64. Их относят к CISC. Они обладают огромным набором команд, что привело к большой площади ядра на кристалле. Это, в свою очередь, повлекло за собой сложность в реализации нескольких ядер на чипе. Процессоры x86 не идеальны для многопоточных вычислений, где требуются многократное выполнение небольшого набора команд (RISC).
    В свою очередь, рендеринг — алгоритм, который отлично распараллеливается практически на неограниченное количество ядер.

    Unbiased renders
    В виду того, что производительность железа неуклонно растет — технические вопросы (например семплинг отражений материалов в V-Ray, количество биасов при антиалиасинге, размытии в движении, глубине резкости, мягких тенях) все больше переходят на плечи железа. Так, несколько лет назад появился первый коммерческий рендер «без допущений» (unbiased render) — Maxwell Render.
    Основным его преимуществом было качество финальной картинки, минимум настроек, всевозможных «биасов». С течением времени качество картинки приближается к «идеальному». А недостатком было и есть — время рендеринга. Ждать, пока шум сойдет, приходилось очень долго, и многие люди после нескольких проб сразу от него отказались. Еще хуже обстояли дела с анимацией (по понятным причинам).

    image

    Песочница

    Обработка заполняемой пользователем формы: как уменьшить сложность кода?

    Работая над написанием административного, да и пользовательского интерфейса, я не раз ловил себя на мысли — а все ли я делаю так, чтобы при минимуме усилий обеспечить оптимальное качество?

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

    Программирую я на PHP, поэтому примеры серверного кода будут на этом языке.

    Представим, что мы решили дополнить свой проект формой для заказа обратного звонка. Мало ли — линии часто перегружены, клиент хочет почувствовать свою весомость, мода такая… ну в общем надо. Быстро накидываем простейший html, пишем обработчик — данные красиво легли в базу, в общем — практически готово. Осталось сделать самую малость — написать обработку ошибок. (Конечно, порядок разработки весьма условен). Каким образом можно это проверить введенную пользователем информацию на правильность и уведомить его о результате?

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

    Рассмотрим базовую обработку ошибок (считаем что пользовательские данные уже прошли основные проверки и фильтрации):

    <?php
    
    $errors = array();
    
    if ( empty($person) || empty($phone) || empty($question) )
    {
    	$errors[] = 'Не заполнены обязательные поля';
    }
    
    if ( count($errors) )
    {
    	$template->assign_switch('errors', 1);
    
    	$template->vars(array(
    		'ERRORS' => implode(' ', $errors),
    		'PERSON' => $person,
    		'PHONE' => $phone,
    		'QUESTION' => $question
    		)
    	);
    
    	$template->send();
    }
    ?>


    Нам хочется привнести некоторые удобства для клиента. И на помощь нам приходит…

    JavaScript

    <script language="text/javascript">
    <!-- //
    function form_submit()
    {
    	if  (
    		( document.forms['callback'].person.value == '' ) ||
    		( document.forms['callback'].phone.value == '' ) ||
    		( document.forms['callback'].question.value == '' )
    	)
    	{
    		alert('Не заполнены обязательные поля');
    	}
    
    	return;
    }
    // -->
    </script>


    Функция alert использована лишь в качестве учебного примера, по статистике часть пользователей закроет его не читая, потому что выводится оно в дизайне ОС и не воспринимается как часть веб-страницы.

    Еще раз обращу внимание на то, что серверная проверка все равно необходима.

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

    Проходит время, сложность форм растет и я обращаю свой взор на следующую технологию.

    AJAX

    Теперь проверка для удобства вынесена в отдельный метод и немного дополнена, в результате получаем примерно такой код:

    <?php
    
    $errors = array();
    
    if ( empty($person) || empty($phone) || empty($question) )
    {
    	$errors[] = 'Не заполнены обязательные поля';
    }
    
    $ajax = isset($_REQUEST['ajax']);
    
    if ( count($errors) )
    {
    	if ( empty($ajax) )
    	{
    		$template->assign_switch('errors', 1);
    	
    		$template->vars(array(
    			'ERRORS' => implode(' ', $errors),
    			'PERSON' => $person,
    			'PHONE' => $phone,
    			'QUESTION' => $question
    			)
    		);
    
    		$template->send();
    	}
    	else
    	{
    		$ajax_handler->send(array(
    			'errors' => 1,
    			'error_text' => implode(' ', $errors),
    			)
    		);
    	}
    }
    else
    {
    	$ajax_handler->send(array(
    		'errors' => 0,
    		'error_text' => '',
    		)
    	);
    }
    ?>


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

    Вредный совет

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

    <?php
    
    if ( count($errors) )
    {
    	if ( empty($ajax) )
    	{
    		header('Location: form.php?error_code=1');
    		exit();
    	}
    }
    ?>


    Мы существенно упростили себе работу по дальнейшей поддержке кода, при этом сознательно отказавшись от полной поддержки устройств с отключенным JavaScript. Чем-то пришлось жертвовать в угоду собственному удобству. Но такой подход не оправдан, если упор идет на качество разработки.

    Заключение

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

    Песочница

    Личные сообщения в MODx Revolution

    Задумали мы с другом один сервис, решили реализовать на MODx Revolution. Причины такого решения, равно как и сам проект лежат далеко за рамками этой статьи, возможно (читай обязательно) я напишу об этом позже. Сегодня я хочу поведать, как решалась конкретная задача.

    Итак, необходимо реализовать “социальный” элемент в виде личных сообщений юзеров. Поиски готовых дополнений для MODx ничего толкового не дали, как и гугление на эту тему. Правда, некие проблески все-таки были, но явно не в том направлении. Ну совсем не хотелось использовать ресурсы (которые документы) не по назначению. И тут я обратил внимание на то, что в самом MODx, что называется “из коробки”, уже реализована система сообщений, с одним маленьким “но”: пользоваться ими можно только в админке, куда пускать юзеров вообще не предполагается. Даже никаких намеков на сниппеты для использования во фронтэнде. Тут-то я и решил копнуть глубже.

    Песочница

    @Autowired для сервлетов в OSGi-контейнере

    Вместо введения отправляю читателя к отличной статье Использование Spring в OSGi-контейнере которая и послужила отправной точкой для практического изучения.
    Итак, к делу. Рассмотрим классический вариант — есть бизнес-логика приложения и она как-то
    взаимодействует с внешним миром. Используем такую связку:
    клиент <-> транспорт <-> приемник <-> сериализатор/десериализатор <-> метод бизнес логики.
    Сериализатор напрашивается заменяемым модулем, например сериализация в JSON или сериализация в XML.
    Про бизнес-логику далее можно забыть, и сосредоточиться на связке приемника и сериализатора.
    В качестве приемника используем сервлет, а для сериализатора, для простоты, используем реализацию следующего интерфейса:

    Песочница

    Как я сделал это…

    Внимательно прочитал большинство опасений серферов нашей блогосферы, и сделал для себя не утешительный вывод. Значительное количество комментариев блогеров сквозило скептицизмом, они не верят в разрабатываемый россиянами Проект «ДО-РА», названный так по одноименному устройству «дозиметр-радиометр» и его первым буквам. Однако, критика бывает не только вредной, но и полезной, как свежее пиво по утру! do-ra.ru/image/magaz/1c.jpg

    Песочница

    Сборка ffmpeg на CentOS 6.0 x64 для Web видео mp4, webm, ogv

    Работая с одним проектом, столкнулся с необходимостью заливки видео на сервер (качественные ролики длительностью 2-3 минуты) с последующей репликаций их на S3 & дистрибьюцией через CouldFront. На хостинге стоит Centos 6.0 x64. ffmpeg который в дополнительных репозиториях к сожалению лохматой версии 6.1 и не включает в себя vp8 и иже с ним. Поэтому пришлось заниматься собственноручной сборкой. К сожалению пошарив по инету толкового гайда не нашел, поэтому почитав в округе на данную тему откатал для себя гайд на VirtualBox. Буду рад если кому-то пригодится. Библиотеки были выбраны последние на момент начала ноября.