суббота, 3 апреля 2010 г.


Нарисовал иконку для своего приложения. Возможно, начинать приложение с иконки и дурной тон, но мне так захотелось. Думаю, что видно, что приложение будет связано с твиттером. И я напишу его в виде скриптового приложения, а затем выложу исходники скрипта здесь, в моем блоге, с описанием того что и как там устроено. Надеюсь получится интересно...
суббота, 27 марта 2010 г.
Недавно я решил что буду в своих проектах следовать плану: Краткий план для новичков в шароваре. Можно, конечно, сразу писать нормальные десктопные приложения на Delphi. Но меня привлекает идея скриптовых приложений с HTML интерфейсом. Я уже пробовал писать такие приложения - результат получился вполне презентабельный:


HTML позволяет сделать приложения с более привлекательным внешним видом, а JavaScript библиотеки типа JQuery добавить анимацию и живость интерфейсу. Это приложение было написано мной достаточно давно в качестве эксперимента и использовал я его исключительно для себя.

И вот теперь я решил подойти к разработке таких приложений более основательно. Теперь у меня есть небольшой фреймворк, который позволяет использовать в скриптовых приложениях: многопоточность, подключаемые протоколы для динамической генерации html-контента (можно сгенерировать изображение в памяти и затем его показать в браузере прямо из памяти), работа с изображениями, http, pop3, xml, ресурсами приложений, бинарными данными и т.п. Данный фреймворк доступен в 2-х вариантах: как COM-библиотека и в EXE-модуле сугубо для использования объектов внутри приложениия.

Для таких скриптовых приложений я выбрал аббревиатуру JSA (JavaScript Application). Приложения представляют из себя zip-архив с расширением jsa. В архиве должны присутствовать файлы: app.js - основной скрипт в котором расположен код приложения, app.ini - информация о приложении (название, издатель, версия и т.п.), app.html - html-интерфейс приложения, а так же все необходимые дополнительные файлы: css, графические файлы и файлы данных.

Исполняться эти приложения будут следующим образом: модуль для выполнения приложений jsa.exe загружает jsa-приложение, создает окно браузера, инициализирует скриптовый движок и объекты фреймворка и выполняет скрипт расположенный в app.js, а затем открывает файл app.html в браузере. В файле app.js располагаются основные процедуры по работе с приложением, а взаимодействие с html-интерфейсом выполняется через свойство External доступного из скрипта html-интерфейса.

Jsa.exe кроме выполнения jsa-приложений переданных параметром в командной строке может выполнять неупакованные в zip-архив приложения, для этого достаточно передать в качестве параметра путь к любому из файлов приложения расположенных в отдельном каталоге. Это может быть удобно при разработке jsa-приложений. Так же если в Jsa.exe включить ресурс с jsa-приложением под именем app, про при запуске такого измененного Jsa.exe будет выполнено приложение из ресурсов. Таким образом, можно разработать свое jsa-приложение и распространять его в виде самодостаточного приложения.

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

Есть еще один вариант использования этой технологии, базовый функционал пишется в jsa-приложении, но интерфейс загружается с реального веб-сайта, т.е. мы можем сделать подобие веб-сервиса, но вся работа будет выполняться на компьютере пользователя. В таком варианте возможна монетизация приложения за счет рекламы, что может быть хорошим вариантом для бесплатного приложения.
четверг, 25 марта 2010 г.
Сейчас появилось много веб-приложений которые ничуть не уступают десктопным. Так почему бы не делать десктопные приложения на этой же технологии. Adobe AIR как раз это и позволяет делать. Но речь не об AIR. Мне нравится JavaScript и для его использования в в своих приложениях я написал некоторое количество базовых объектов - получилось что-то вроде небольшого фреймворка для создания скриптовых приложений с HTML интерфейсом.

Есть большая область задач для решения которых достаточно небольшого скриптового приложения, это могут быть задачи обработки графики, SEO-инструменты и т.п. которые могут обойтись парой десятков строчек JavaScript кода. Писать полноценное десктопное или веб приложение для подобных задач вроде бы и ни к чему, но быстрое решение с аскетичным интерфейсом выполняющее четко поставленную задачу пригодилось бы. Поэтому пришла в голову такая мысль - JavaScript код и HTML пакуется в zip-архив и пишется в ресурсы универсального exe-модуля который и обеспечивает функционирование мини-приложения. Таким образом получаем самостоятельное приложение которое не нуждается в установке и сразу готово к запуску.
пятница, 19 февраля 2010 г.
Собирался уже идти спать, но пришла мысль по поводу хранения настроек и регистрационных данных программы, вернулся записать чтоб не забыть. Лично мне хотелось бы хранить в настройках программы и регистрационную информацию и время последнего запуска и количество запусков для триала и вообще для статистики. Но в открытом виде хранить это как-то не очень красиво, любой школьнег подправит что ему надо и усё... Поэтому надо бы шифроваться. Как вариант - бинарный формат, но с ним не очень удобно работать из программы и совместимость версий будет проблемой если делать на основе обычной структуры данных. Удобно работать с INI или с XML и с версиями у них проблем нет, но они легко читаются и могут быть изменены без особых проблем в любом текстовом редакторе. Поэтому делаем так:
1. храним настройки в INI/XML
2. при чтении/записи файлов настроек файл просто его шифруем/дешифруем, а можно еще дополнительно ZIP-ануть чтоб места меньше занимал.
Периодически балуюсь с внедренным IE контролом и скриптами, особенно интересно работать с JavaScript и свойством External через которое можно выставить функции приложения наружу. Об использовании этого я еще выскажусь позже.

А сейчас про использовании IE-контрола при активации продукта:
1. После ввода ключа, продукт просит активацию.
2. При активации открывается окошко с внедренным IE и выполняется переход на страницу активации.
3. На странице активации выполняется JavaScript который собственно и выполняет активацию продукта, это может быть, например, вызов набора функций самого же приложения для создания кода с привязкой к HardWareID. Иными словами в самом приложении имеется только код проверки активации, но не готовая функция создания активации, ее роль выполняет набор вызовов функций на странице активации.

Разумеется все это легко ломается крякерами, но я вижу некоторые дополнительные плюсы:
- можно блокировать некоторые ключики на сайте (разумеется от генератора активаций это не спасет, но все же).
- на странице можно предложить купить более новую версию продукта со скидкой или другие свои продукты
- можно выложить ключики продукта в открытый доступ, а на странице активации повесить SMS-замок

Короче придумать можно много еще чего...
У меня сложилось стойкое впечатление, что новичкам (да и наверное не только им) сейчас нужно действовать по следующей схеме:

1. берем наиболее понравившуюся идею из своего списка (не говорите, что у вас нет такого списка, пусть даже мысленного — НЕ ПОВЕРЮ)

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

3. программу делаем как free, либо если хочется сразу денег ставим простенькую защиту — пусть ломают — крякеры тем сами нам помогут своими кряками распространению программы.

4. создаем сайт одностраничник на простом бесплатном шаблоне, например можно взять с www.freecsstemplates.org/ и обязательно ставим статистику посещений

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

6. хелп пишем на сайте очень коротенечко и из программы открываем страницу своего сайта.

7. сабмитим свое произведение на макимальное количество сайтов.

8. берем следующую идею из своего списка и переходим к пункту 2, мониторя по статистике популярность или не популярность выпущенной программы.

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

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

Лично у меня плохо получается следовать этим правилам — у меня болезнь вылизывания кода и интерфейса — перфекционизм — надо как-то с этим бороться. Никто не знает как? :)
суббота, 5 декабря 2009 г.
Это начало истории для литературной игры для блоггеров BlogNetStory, если у вас есть идеи по продолжению истории, пишите его в своем блоге и присылайте ссылку мне или запостите ее к комментарии.


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

Я еще раз оглядел страницу и взглядом зацепился за знакомое Register. Регистрация. Ну, блин - нафига? Экспериментальный чат, могли бы и открытым сделать. Но форма регистрации оказалась на удивление лаконичной и состояла из одного поля для ввода e-mail. Забавно, ну ладно, давайте, подпишите меня на свой спам. В качестве мыла я указал несуществующий ящик одного из своих доменов. Я всегда так делал, письма для несуществующих адресатов попадали в специальный ящик, откуда я их и забирал, зато реальное мыло не светилось на сомнительных сайтах. Я залогинился на почте под пользователем Spam. Письмо уже было там. Так, что там? Бла-бла-бла... перейдите по ссылке для перехода в ваш персональный чат. Я кликнул по ссылке и распахнул открывшийся Хром на весь экран.

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

Hi
>Hi

Хм, версия об искусственном интеллекте похоже находила свое подтверждение - слишком уж быстро был дан ответ, он появился вместе с моим сообщением. Продолжим:

How are U?
>How are U?

Блин, фигня какая-то. Отвечать вопросом на вопрос по крайне мере невежливо. Какой-то этот интеллект слишком уж искусственный. Ладно, спросим напрямую:

Are you bot?
>Are you bot?

Блин, как об стенку горох. Я написал - bye, в окне появилось предсказуемое:

bye
>bye

Я закрыл окно чата. Какой смысл разговаривать самому с собой?

Я вновь открыл QIP и написал Нику - в чем прикол? Но его похоже уже не было, статус картинка - указывала на его отсутствие на рабочем месте. Ладно, появится - ответит. Я закрыл окно QIP-а и вернулся к своим повседневным делам. Нужно было обновить процедуры в одном из модулей, найти баг, который очень давно нужно было уже закрыть, но все никак не доходили руки, собрать промежуточную версию и отправить ее на тестирование. Короче, дел на сегодня было еще много. Я уселся поудобнее и окунулся в кодинг.

Social

Popular

Технологии Blogger.

Постоянные читатели