Хабрахабр:
У меня в последнее время с завидной частотой спрашивают: ?Как защитить данные, летающие между Flash Player и сервером??. Вместо ответа я предлагал прочитать любые книжки по криптографии, а от сильно наглых отбивался следующим кодом. var myAge:Number = 23; //Ключ var someTextToEncode:String = 'Sometext, or xml, or anything else'; //Текст для шифрования var arr:Array = new Array(); var l:Number = someTextToEncode.length; var encodedText:String = ''; for (var i:Number = 0; i< l; i++){ encodedText += String.fromCharCode(someTextToEncode.charCodeAt(i) + myAge); //Шифруем методом сдвига позиции кода символа. Просто и со вкусом. 90% "хакеров" на этом этапе уже отсеятся. } post(encodedText); //Метод, посылающий шифрованные данные на сервер И от меня отвязывались, копипастя код. И всё у меня было хорошо, до тех пор, пока один из любопытных не спросил: ?А как же защитить ключ? Ведь любую флешку можно утащить с сайта и декомпилировать!? Способ, как оказалось, очень прост и не требует наличия никаких обфускаторов. Речь пойдёт о стендалон-флешках, скомпилированных одним файлом. Читать дальше →
Наверняка многие из вас сталкивались с проблемой хранения перечислений в базе данных, возникающей при попытке реализации удобного способа работы с разного рода служебными справочниками ? статусами, типами объектов и так далее. Суть её очень проста: если хранить перечисления как сущности (@Entity), то с ними получается крайне неудобно работать, база данных нагружается лишними запросами даже несмотря на кэширование, а сами запросы к БД усложняются лишними JOIN'ами. Если же перечисление определять как enum, то с ними становится удобно работать, но возникает проблема синхронизации с базой данных и отслеживания ошибок таковой синхронизации. Особенно актуально это в том случае, когда поле, содержащее перечисление, аннотировано как @Enumerated(EnumType.ORDINAL) ? всё мгновенно ломается при смене порядка объявления значений. Если же мы храним значения в строковом виде ? как @Enumerated(EnumType.STRING) ? возникает проблема скорости доступа, так как индексы по строковым полям менее эффективны и занимают больше места. Более того, вне зависимости от способа хранения значения поля при отсутствии в базе данных таблицы со списком допустимых значений мы никак не защищены от некорректных или устаревших данных и, как следствие, проблем. Однако сама идея хранения в базе данных заманчива простотой построения запросов вручную, очень ценной при отладке ПО или решении сложных ситуаций. Когда можно написать не просто SELECT id, title FROM product WHERE status = 5, а, скажем, SELECT id, title FROM product JOIN status ON status.id = product.status_id WHERE status.code = 'NEW' ? это очень ценно. В том числе и тем, что мы всегда можем быть уверены в том, что status_id содержит корректное значение, если поставим FOREIGN KEY. На самом деле, существует очень простое и изящное решение этой проблемы, убивающее сразу всех зайцев. Читать дальше →
Изначально пост планировалось посвятить ошибке 64х-битового компилятора xlc которую я безуспешно отлавливал многие часы и которая имеет место быть на серверах фирмы IBM архитектуры AIX. Но так уж получилось, что подобная ошибка затрагивает многие компиляторы, не стал исключением и Visual Studio 2010 с установленным пакетом обновления SP1. Что в итоге кажется забавным, так как наводит на мысли, что специалисты Microsoft сотрудничают с разработчиками из IBM в деле создания оптимизирующих компиляторов. Немного предыстории. Есть один научный проект, который был написан на С++ достаточно давно и сейчас успешно переносится на многие платформы, среди которых можно отметить мейнфреймы HP-UX, IBM AIX, Oracle Solaris. Перенос по большому счету состоит в том, что исправляются ошибки времени компиляции, запускается группа тестов и если все тесты проходят, то делается вывод о работоспособности кода. Так как скорость выполнения математических процедур очень даже важна, компиляция проходит с включенным ключом оптимизации по скорости -O2. Но на архитектуре IBM AIX компилятор xlc почему-то не может создать работоспособный код, удовлетворяющий набору тестов. В то же время без ключа -O2 все работает нормально. Я бы, конечно, мог попробовать отловить эту ошибку непосредственно на мейнфрейме IBM AIX, будь у меня в запасе достаточно времени, но за отсутствием отладчика (в debug mode ошибка не проявлялась) ловить приходилось по-старинке, методом вставки printf в участки кода. Удаленный доступ к IBM AIX мне так и не дали, приходилось работать непосредственно в дата-центре и за те несколько часов, проведенных за терминалом, ничего внятного понять не удалось, кроме того, что ошибка имеет место быть и достаточно устойчивая. В итоге, ошибка так и сидела в коде на протяжении долгого времени. Так продолжалось до тех пор, пока я не попробовал перенести код на Visual Studio 2010 SP1. Читать дальше →
Хабрадевелоперам, привет! Те, кто работал с Arduino, знает, что для его программирования существует специальная Arduino IDE. По сути это блокнот с двумя кнопками: ?прошить? и ?послушать через serial?. Блокнот подходит для написания маленьких программок-экспериментов, но выбешивает при написании чего-то большего. Многие привыкли работать в своих любимых Visual Studio, Eclipse, KDevelop и т.п. Я сам ? убеждённый фанат Vim?а, окна терминала и кнопок Alt+Tab. Давно хотелось, чтобы сборка проектов для Arduino была такой же простой, как в официальной IDE, а вот их ужасный редактор на глаза больше не попадался. Тем более, что язык ?Arduino? несмотря на позиционирование как отдельного, простого языка программирования ? это не что иное, как C++. А собирается всё в конечном итоге инструментами avr-gcc. Для решения проблемы Амперкой был создан Ino. Читать дальше →
Продолжая традиции популярной конференции ?Платформа. Определяя будущее?, компания Microsoft проведет бесплатную онлайн-трансляцию конференции Tech∙Ed Russia 2011 на сайте http://www.msteched.ru. Посетители сайта смогут посмотреть прямую трансляцию пленарной сессии с участием С. Сомасегара, корпоративного вице-президента по инструментам разработки корпорации Microsoft, и Кевина Тернера, главного операционного директора корпорации Microsoft. По завершении пленарного доклада зрителям будет предложена трансляция из 7 залов (всего на конференции будет 16 секционных залов). Кроме того, в перерывах между сессиями они смогут принять участие в видео-экскурсии по конференции, увидеть интервью с ключевыми докладчиками, получить советы и рекомендации по продуктам Microsoft, а также принять участие в различных конкурсах. ?Tech∙Ed Russia ? это следующая ступень развития всеми любимой конференции ?Платформа?. Одними из ключевых направлений этого развития стало увеличение количества тем и технологических сессий более чем в два раза, а также приглашение большого количества экспертов из команд разработки Microsoft в Редмонде, ? сказал Ромуальд Здебский, руководитель направления по работе с техническими аудиториями Microsoft в России, отвечающий за организацию Tech∙Ed Russia. ? В полном объеме ощутить масштаб конференции можно, только лично приняв участие в самом мероприятии. Но, одновременно, мы не хотим нарушать добрую традицию проведения онлайн-версии мероприятия, поэтому обеспечим онлайн-трансляцию ряда ключевых докладов?. Желающие получить возможность посетить все треки конференции еще могут успеть зарегистрироваться на конференцию Tech∙Ed Russia 2011, оплатив свое участие на сайте http://www.msteched.ru. В настоящее время на сайте Tech∙Ed Russia 2011 доступна финальная программа мероприятия. Подробная программа в виде файла .pdf может быть загружена со страницы ?Программа?. Получить информацию и зарегистрироваться на конференцию Tech∙Ed Russia 2011 можно на сайте http://www.msteched.ru. Читать дальше →
Большинство разработчиков stand-alone приложение рано или поздно сталкиваются с проблемой доставки обновлений для своего приложения. В этой статье я постараюсь решить эту проблему наилучшим, на мой взгляд, способом ? написать свой собственный универсальный сервис авто-обновлений. Существует несколько готовых решений для .NET, но самое актуальное ? это ClickOnce. Эту технологию уже нельзя назвать новой, однако серьёзное развитие, на мой взгляд, она получила не так давно, и не обладает исчерпывающим функционалом. Если вы не хотите изобретать велосипед, то советую вам пристально изучить возможности ClickOnce, и если вам будет достаточно предлагаемого функционала, то это определенно ваш выбор. Однако ClickOnce не панацея и далеко не всегда ею можно обойтись. Сейчас же я хочу рассказать о своём видении механизма авто-обновлений. Я не претендую на истинность в последней инстанции, так что конструктивная критика и предложения в комментариях приветствуются. Итак задача Пусть у нас есть несколько разных приложений, установленных на компьютере пользователя. Мне бы хотелось написать универсальный сервис авто-обновлений, чтобы потом я мог использовать его и в других приложениях. Так же желательно, чтобы в существующих приложениях мне потребовалось внести минимальные изменения для подключения и настройки авто-обновлений. Процесс обновления должен быть настраиваемый для каждого приложения. далее
Отписаться от этой рассылки