Мы ищем разработчика

Компании ООО «ИнноТрио» требуется Flex, PHP разработчик на удаленную работу. Вакансия для студентов, позволяющая официально совмещать учебу и работу даже во время сессии.

Задачи:

Разработка веб-приложений по сбору, хранению и анализу данных, настольных систем, мобильных приложений (Android, iOS) и приложений для соц. сетей с использованием фреймворка компании, позволяющего переносить между системами до 90% кода. Ведение собственных проектов.

Обязательно:

*Иметь готовые примеры Ваших работ;

*Умение разбираться в чужом коде;

*Понимание ООП;

*Знание основ SQL;

*Умение самостоятельно решать поставленные задачи без детального ТЗ и постоянного контроля;

*Умение следовать корпоративному стилю;

*Умение работать в команде;

*Умение работать с заказчиками;

*Желание и готовность расти до Project Manager’а в краткосрочный период.

Желательно:

*Опыт работ на C# и/или Action Script3;

*Опыт работы с MySQL, PHP;

*Приветствуется опыт работы с HG/git/SVN;

*Приветствуется опыт работы с Redmine, Trac;

*Иметь законченные проекты (курсовые или иные), грамотно оформленные для оценки способностей.

Наши условия:

*Официальное оформление по ТК;

*Гибкий график, позволяющий совмещать работу даже с сессией; :)

*Преимущественно удаленная работа;

*10-20ч в неделю;

*Стартовая зарплата – 10 – 15 тыс. рублей с очень хорошими премиями при закрытии проектов(до 15 зарплат);

*Молодая, активно развивающаяся команда;

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

*Карьерный рост по итогам сдачи проектов.

Информация о компании

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

Предложения присылайте на gkonnov @ innotrio.ru.

Нет комментариев

Наши успехи

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

Оперативные новости можно узнать в нашем твиттере.

За прошедшие месяцы мы наладили стандарт по работке программных продуктов. Разработали библиотеку с компонентами, необходимыми для быстрой разработки программных продуктов, активно взаимодействующих с БД. Пришли к единому стандарту по обеспечению безопасности создаваемых систем. Разработали более 10 примеров использования наших компонентов и 4 модуля, готовых к использования в нашей платформе InnoPlatform.

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

Нет комментариев

Flex Tree right-click Menu, или куда ж мы указали?


Не так давно долго-долго мучился с желанием сделать динамическое меню по правому клику мышки над элементом в дереве. Казалось бы – все просто. Подписываемся на MouseEvent.RIGHT_CLICK и дело в шляпе, ан нет, зараза не дает информации о том, над каким элементом мы кликнули. Единственное, что нашел в гугле, – убогий пример, требующий добавления еще одного хендлера. При этом, если мы провели над элементами мышкой, а потом кликнули куда угодно, то контекстное меню возникнет для последнего элемента, над которым мы провели мышкой, но он никак не будет выделен для пользователя. Таким образом, пользователь может даже не осознавать, с каким элементом он работает. Так дело не пойдет.
Лично я работаю с объектами в дереве, т.к. XML обладает меньшей гибкостью. Поэтому проблема решается так:

private function rightClickHandler(event:MouseEvent):void
{
if (event.target.parent.data is CodeTreeFolder)
{
this.selectedItem=event.target.parent.data;
if (treeMenu != null)
treeMenu.hide();
refreshMenuItems(this.selectedItem as CodeTreeFolder)
showItemMenu(event.stageX, event.stageY);
}
}

* This source code was highlighted with Source Code Highlighter.

В данном случае, я сначала проверяю, является ли объект, над которым пользователь кликнул мышкой, элементом дерева(Собственный класс – CodeTreeFolder), а затем устанавливаю его как выделенный в текущий момент. Далее уже идет создание меню.

Нет комментариев

Flash Builder 4 или Flex 4

Все слышали про выход Flash Builder 4? Кратко познакомиться с нововведениями можно здесь.
Я был потрясен видео по работе с базой данных. Теперь нет никакой необходимости изучать тонкости работы AMFPHP и создавать руками классы для передачи данных. Flash Builder 4 сам анализирует таблицы и создает необходимые объекты.
Очень понравилась новая система работы со скинами. Правда, я поймал там ряд глюков и до сих пор не разобрался как _нормально_ скинировать mxml-компонент, особенно в случае наличия в нем своих состояний, но все равно впечатляет. Теперь, используя смену скинов, можно менять не только цвета, подложки и т.п., но и положение компонентов, и даже их классы! И все это не требует написания ни 1 строчки AS3 кода. Однако,  немного не согласуется с тем, как работал Code Behind в Flex 3.
Кстати, InnoViewer 2.0 будет построен на основе обновленных Spark компонентов из Flash Builder 4.

Полезный мануал по переходу на новые типы компонентов.

Нет комментариев

Open Source, лицензии и деньги

Сейчас, во время подготовки коммерческого проекта, пока мы налаживаем связи и заканчиваем его разработку, встал вопрос с распространением программ.
Естественно, нам, как законченным идеалистам, хочется сделать мир лучше и помочь как начинающим, так и не очень Flex/Flash разработчикам, открыв исходные коды с документацией. Однако кушать разработчикам тоже хочется, а сейчас речь идет о выходе на окупаемость зарождающейся фирмы, поэтому прорабатываются следующие моменты:
1) Разрабатываемое ПО будет иметь 3 версии:
1.1) Бесплатная
1.2) Платная, расширенная (150-300р)
1.3) Бесплатная, расширенная, оплаченная партнерами.
2) Все ПО будет иметь открытый исходный код для некоммерческих разработок.
2.1 Его нельзя будет использовать в коммерческих разработках, не заплатив за лицензию.
2.2 Заплатив за лицензию, нельзя будет создавать конкурирующий продукт.
2.3 ПО, в котором используется наш исходный код, если не куплена лицензия, должно иметь открытый исходный код.

Отсюда вытекают вопросы:
1) Кто-нибудь что-нибудь знает про подходящие лицензии для такого распространения ПО? И что делать с двумя вариантами лицензий: коммерческой, когда исходники могут быть использованы в закрытом продукте и бесплатной, когда такой возможности нет.
2) Что в целом думаете о такой модели распространения ПО?

Нет комментариев

Мы переехали и расширились

На прошлой неделе мы были усиленно заняты переездом на новый хостинг. Как многие из вас могли видеть, раньше сайт периодически кидал 504 ошибку. Надеюсь, что теперь такого наблюдаться не будет. :) Если что-то не работает, либо работает не так – пишите, исправлю. ;)

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

И небольшой анонс: 01.04.2010 вы увидите кардинально обновленную версию CodeProp. :)

Нет комментариев

Обновляем AIR приложение. (Обновлено для AIR 2.5)

Совсем недавно мы узнавали версию приложения. Пришла пора что-то делать с этой информацией. Раз уж Adobe создала удобную возможность для обновления программы, то давайте её используем. Удивительно, но чтобы добавить автообновление, нам придется написать меньше 100 строк кода. Однако, естественно, нужен web-сервер, на который мы положим 2 файла:

  1. Файл с номером версии и описанием текущей версии программы;
  2. Инсталятор программы.

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

А теперь немного кода.


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

20 Comments

Как узнать версию AIR приложения?

Все уже знакомы с дескрипторами AIR приложений? Это такой xml файлик, который лежит в папке src и называется как %ProjectName%-app.xml. В нем мы указываем название приложения, его версию и многое другое. И как же нам узнать текущую версию приложения?

Оказывается, все очень просто, ввиду полноценной поддержки E4X Flex’ом.


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

2 Комментария

Выключаем LinkButton и CodeProp 2 preAlpha

При обновлении интерфейса CodeProp столкнулся с неприятностью по части замены обычных Button на LinkButton. Когда у LinkButton выставляешь свойство enabled в false, то получаешь затемнение текстовой метки. А что будет с иконкой, если она есть? Ничего не изменится. И если в программе все кнопки обозначены только иконками, без текста, то возникает проблема…
Решил я её тоже достаточно быстро, изменяя значения alpha с 1 до 0.5.
Подкатом пример и новости о CodeProp2.

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

Нет комментариев

Code Behind – лишь разделение дизайна и интерфейса?

Что это?

Code Behind подразумевает разделение логики работы и описания интерфейса. Для этого сначала создается базовый AS3 класс, в котором описывается вся логика работы, включая хендлеры, а затем от него создается mxml класс-наследник, в котором описывается интерфейс.

Зачем это надо?

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

Оказалось, что нет. Самое главное, что дает Code Behind – это удобный доступ к конструктору класса. Дело в том, что если мы подписываемся на события в MXML, делая так:

<mx:Button click="bAddClickHandler(event)"/>

то очень часто мы получаем утечку памяти, т.к. все ссылки, описываемые в MXML, являются жесткими, т.е. не позволяющими очистить память, выделенную под объект. (В случае, если очистка памяти происходит по числу активных ссылок на объект, а не по проходу от корня дерева объектов.)
Если же мы подписываемся на обработку так:

private function creationCompleteHandler(event: Event) : void
{
bAdd.addEventListener(MouseEvent.Click, bAddClickHandler, false,0,true);
//другие обработчики
}

то мы создаем мягкие ссылки, которые корректно обрабатываются. Хотя, я придерживаюсь правила, что если ты подписался на событие, то ты должен от него и отписаться, поэтому создаю метод Destroy(), в котором удаляю все ссылки из дочерних объектов и текущего. Это позволяет избежать утечки памяти при массовом создании и удалении объектов.

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

Нет комментариев