Архив за 12 августа 2013 - 6

Как всё начиналось

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

Со временем стало ясно, что переписывать проект на компилируемом языке слишком затратно по времени и ресурсам. Скорость работы и потребление памяти не являлись критичными показателями в данном случае и были вполне приемлемыми и достаточными. Поэтому было принято решение оставить всё как есть, и продолжить разработку и поддержку проекта на языке Python. К тому же, документация по большей части уже была написана с использованием Sphinx.

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

Здесь сразу обозначилась новая проблема: как защитить исходные коды нашей Python-библиотеки? Может быть, в ином случае никто бы не стал этим заниматься, я бы уж точно, но в библиотеке были реализованы некоторые ноу-хау, и руководители проекта не хотели, чтобы данные наработки попали к конкурентам. Так как я был одним из исполнителей, мне пришлось озаботиться данной проблемой. Далее я постараюсь рассказать об основной идее, что из этого вышло, и как нам удалось скрыть Python-исходники от лишних глаз.
Читать полностью »

Введение

Прочитал недавно пост, в котором автор рассказал о своём боте для торговли на аукционе в игре World of Warcraft. Его персонаж бегал челноком на небольшие расстояния и выполнял конкретные действия, строго заданные в управляющей программе. Воспользовавшись его идеями, я решил пойти немного дальше: пусть персонаж будет способен бегать по маршруту длительностью хотя бы пять минут, при этом должна быть возможность записывать маршрут и выполняемые действия извне, не прибегая к изменению самой программы управления. Описанное мной является развитием поста-оригинала, тем не менее я постарался, чтобы его чтение не было обязательным.
В посте я опишу

  1. Процесс создания тривиального аддона для пользовательского интерфейса WoW на языке Lua
    • Сериализация данных для передачи между частями системы
    • Передача с помощью цвета пикселей
  2. Процесс управления персонажем на языке AutoIt
    • Программа для записи выполняемых действий
    • Программа для воспроизведения
    • Мат.расчеты направления перемещения
    • Почему не стоит прибегать к чтению/записи памяти процесса
  3. Программа управления (ро)ботом с командами, понятными непрограммисту

Читать полностью »

image

По роду моей деятельности, мне часто приходится делать различные небольшие проекты, в основном, это сайты написанные на ASP.NET MVC. В любом современном проекте присутствуют данные, а значит и база данных, а значит с ней нужно как то работать.
Если отбросить все дискуссии про «за и против», то спешу сообщить, что мой выбор пал на Entity Framework Code First. Во время разработки проекта, я уделяю внимание исключительно бизнес-логике и не трачу время на проектирование базы данных и прочие шаблонные действия. Неприятным сюрпризом при использовании такого подхода для меня стало отсутствие возможности «из коробки» у Entity Framework возможности строить индекс по полям, а так же пользоваться удобным и современным механизмом полнотекстового поиска.

После многочасового гугления, опробовав десятки различных методов со StackOverflow и прочих подобных сайтов, я пришел к выводу, что очевидного и простого решения проблемы нет, поэтому решил сделать собственное, об этом и пойдет речь далее.
Читать полностью »

На днях закрыли очередной проект. Суть: создание новой версии интернет-каталога. Старая версия сайта, в силу ряда причин, клиента не устраивала. Особенностью проекта была его номенклатурная база. Объём номенклатуры каталога составлял ~26000 позиций раскиданных по дереву из 513 узлов + характеристики товара. Почти каждая номенклатурная позиция имела описание на 1-2К текста.

Файл выгрузки каталога в формате ComerceML 2 для старого сайта весил 104 MB. Формировался на стороне 1С 10 минут и после передачи на хостинг, парсился на стороне сайта полтора часа (!) со 100% загрузкой CPU.
Читать полностью »

Авторское отступление: Не закидывайте камнями те, кому выпало писать под разные браузеры!
В моей работе из-за использования ActiveX-компонентов сейчас поддерживается только IE. Поэтому дальнейшее изложение касается только различных версий IE.

IE10 — это особый браузер. Многое из того, что было верно для предыдущий версий IE, перестало работать.
Рассматриваются только ошибки JavaScript, возникшие при миграции legacy-кода. Различие в CSS выходит за рамки данной статьи.

Читать полностью »

Введение

На данный момент самым популярным решением для клиентского тестирования является selenium. Стоит заметить, что вполне заслужено — те возможности, которые предоставляет selenium в связке с webdriver'ом, действительно охватывают почти весь спектр пользовательского взаимодействия с веб-приложениями.

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

Предлагаю вам посмотреть на возможности клиентского тестирования (в частности django проектов), которые дает python-selenium в связке с библиотекой lettuce.
Читать полностью »

Некоторое время назад компания Samsung Electronics объявила о важном достижении в области производства флэш-памяти. Южнокорейский производитель первым начал серийное производство флэш-памяти с объемной компоновкой 3D Vertical NAND (V-NAND).

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

Читать полностью »

Здесь я сформулировал семь навыков профессионального программиста. Однако, для успешной профессиональной карьеры в разработке ПО этих навыков, увы, недостаточно. Хороший программист должен быть еще и командным игроком.

Профессиональное командное поведение

Далее, короткая история из жизни и ИМХО о том, каким должно быть профессиональное поведение в команде.
Читать полностью »

По словам источника, компании Apple и Samsung разрабатывают планшеты с экранами размером 12 дюймов и более. Поставщики компонентов уверены, что эти производители надеются создать новый сегмент рынка, чтобы уйти от конкуренции с моделями небольшого размера. Однако этот шаг может сказаться на спросе на ноутбуки, полагают отраслевые источники.

Как мы уже сообщали, во втором квартале рынок планшетов сократился на 9,7%Читать полностью »

image

Спустя полтора года работы канала ПРОСТАЯ НАУКА мы решили сделать электронную версию книги с детскими опытами, которые без труда можно повторить в домашних условиях. На съемку роликов с опытами специально для детей, написание текста и верстку у нас ушло около двух месяцев. Когда все было готово, пришла идея с бумажной версией.

Возник вопрос: «а с чего начать?». Естественно, с обращения в издательства. Мы составили описание книги, приложили несколько разворотов и начали списываться и рассылать их в различные издательские дома. После недели таких переписок, стало понятно следующее: мы получим либо ганорар в 50-80тр, либо 10% от продаж. Хотя книга с DVD-диском может стоить на полке 350-500р, при тираже 5000 экземпляров, авторы получают от 5% до 10%. При том, что текст, фото, вся верстка, видео с опытами — все это у нас уже готово.

Нужно было решать: остановиться на электронной версии или искать иные варианты для издания бумажной книги. И тут, совершенно случайно, мне позвонили ребята из Boomstarter и сказали буквально следующее: «Мы ищем людей с идеями, наверное они у вас есть». Конечно, есть! И вот эту идею я им рассказал и показал все наработки.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js