четвер, 18 квітня 2013 р.

Маст рід для старту на Python і Ruby

Python:
Learning python: the animal guide

Ruby:
Beginning Ruby: From Novice to Professional
Pragmatic programmer programming Ruby

Загальний список ресурсів для всіх програмістів

Онлайн навчання:

https://www.coursera.org/
https://www.edx.org/
http://ocw.mit.edu/courses/
http://www.udacity.com/
http://online.stanford.edu/

Книжки:

Object-Oriented Analysis and Design with Applications (3rd Edition) Booch, Grady, Maksimchuk, Robert A., Conallen, Jim, Houston, Kelli A., Engle, Michael W., Young, Bobbi J., Ph.D.

Design Patterns: Elements of Reusable Object-Oriented Software - Gamma, Erich, Helm, Richard, Johnson, Ralph, Vlissides, John

Scrum и XP: заметки с передовой

Список використаної і рекомендованої літератури з вищевказаних.

Блоги і сайти:

http://www.joelonsoftware.com/
http://gameprogrammingpatterns.com/index.html

Для тих, хто хоче вивчати Android

Книжки по Java:
Философия Java. 4-е издание — Брюс Эккель
Effective Java, Joshua Bloch

Android:
Training course: developer.android.com/training/index.html
Professional Android Application Development (Wrox Programmer to Programmer)  Meier, Reto
Wei-Meng Lee - Beginning Android Application Development

Як працювати з ассетами в swf старих версій (про AVM1Movie)

Іноді дизайнери малюють анімації в форматах, які експортуються в .swf версій < 8 (на приклад, якщо дизайнери працюють в AfterEffect). Якщо таку .swf завантажити Loader-ом, то його content буде не MovieClip, a AVM1Movie.

Ось тут - клас, з допомогою якого можна "на льоту" перебити версію свф-ки на 9 і тоді контент можна буде використовувати як звичайний MovieClip з можливістю ходити по кадрах. Такий підхід можна використовувати, якщо весь арт в проект заливається через редактор (якщо редактор написаний, на приклад, на AIR-і) - версія файлів при заливці перевіряється, перебивається на 9 і зберігається для використання клієнтом вже в такому форматі.

А якщо потрібно викликати AS (1 чи 2) код з такої swf, то гугл може пыдказати рішення з використанням LocalConnection

середа, 16 січня 2013 р.

AS + Sockets

на всякий випадок: перед відкриттям з'єднання зі сокет сервером за заданими IP/PORT, флеш відкриває з'єднання на IP/843, висилає туди <policy-file-request/> і чекає у відповідь полісі - той же crossdomain, але з обов'язковим вказання портів:

<?xml version="1.0"?>
<cross-domain-policy>
 <allow-access-from to-ports="*" domain="*"/>
</cross-domain-policy>


Якщо полісі треба видати на іншому порті - в AS потрібно завантажувати його явно:

Security.loadPolicyFile("xmlsocket://server.com:2525"); Детальніше: ru, en

параметри компіляції з IDE для ручного компілювання mxmlc

Часто або для автоматизації білдів на сервері (IDE часто дають можливість одразу генерувати ANT скрипт, але не завжди на сервері система використовує ANT) або для виявлення проблем сумісності потрібно отримати всі параметри компілювання проекту.
Сам компілятор ж і дає можливість отримати XML файл в форматі налаштувань для компіляції - опція -dump-config=[config_filename]

В любій IDE є можливість додати власні опції компіляції, на приклад в Intellij Idea - Project Structure -> Modules -> Compiller Options, Additional compiller options.

В  ньому будуть прописані значення всіх опцій, але і в тому числі файл конфігурації IDE, на приклад:
<load-config>***/AppData/Local/Temp/IntelliJ_IDEA/idea-533EAC5F-ABEA8000.xml</load-config>

Для повної сумісності в ньому можна замінити повні шляхи на відносні, а всі %FLEX_HOME%/frameworks/ - на ${flexlib}/

Ручна компіляція:  mxmlc -load-config [config_filename] [main_class_filename]

вівторок, 25 жовтня 2011 р.

Tween + AS

Переважно люди використовують або те або інше - або твіни на таймлайні або анімують все виключно кодом.
Мені прийшлось зіткнутись з їх комбінацією, тому викладаю тут те, на що мабуть мало хто звертав увагу і взагалі в курсі що такі обмеження є. З офіційної документації, MovieClip клас:

If you modify any of the following properties of a MovieClip object that contains a motion tween, the playhead is stopped in that MovieClip object: alpha, blendMode, filters, height, opaqueBackground, rotation, scaleX, scaleY, scale9Grid, scrollRect, transform, visible, width, x, or y. However, it does not stop the playhead in any child MovieClip objects of that MovieClip object.

пʼятниця, 23 вересня 2011 р.

Все про компоненти

Флешові компоненти - глюкаві, кривенькі, але і з ними іноді приходиться мати справу. А іноді і самому їх розробляти. Та щей так, щоб в ComponentInspector-і кінцевий користувач їх міг налаштовувати тобою ж розробленою панелькою.
Так от, справа це невдячна, в CS5 підтримується важко, але є пару лінків, які в цій справі допоможуть:
Creating ActionScript 3.0 components in Flash – Part 3: From prototype to component

Ця ж стаття, перекладена російською на: блог ленивого флешера

Make an AS3 Flash Component with Custom UI Controls

Create .fla components for Flash CS3 (skinnable components)

Создание компонент для Flash CS3

І ще документацію по JSFL качнути варто:
EXTENDING FLASH
І ще може кому 2004 пригодиться.

вівторок, 19 квітня 2011 р.

Data Binding in pure AS3 Projects (with flex SDK)

давно тут не писала. зацікавилась он сабжем і накопала такі лінки:

Flex Bindings in AS3 Projects
Equivalent of Flex DataBinding using Pure Actionscript

і ще (по суті, для чого цей самий байндінг в такому вигляді може бути потрібен - для підв'язки фреймворків, заточених під Flex, у свої флешові проекти):

Swiz in Actionscript Projects (including Flash IDE projects)

ну і ще про флексові класи у пюр ас проектах:

Flex(mx package) classes in Actionscript only project?

пʼятниця, 21 січня 2011 р.

Debug version FlashPlayer + FF

To prevent FF from killing plugin or crashing because of debug version of Flash Player, go to about:config in FF and there you can do next:
- stop "plugin-container" from running at all: set the dom.ipc.plugins.enabled.* preferences to "false"

or

- just set time period of an out-of-process plugin or plugin script has stopped responding (its 45 sec by default): to prevent Firefox from terminating plugins it considers non-responsive, set dom.ipc.plugins.timeoutSecs to -1

More details here: http://kb.mozillazine.org/Plugin-container_and_out-of-process_plugins#Plugin_hang_detector


це з нашої внутрішньої документацію, яку ми ведемо англійською. мені лінь перекладати, сорі

четвер, 30 грудня 2010 р.

scrollRect, mask <=> size etc

переважно, коли йдеться про маски і скролректи народ жаліється або на те, що після їх застосування на об'єкт, неможливо взяти оригінальний розмір об'єкта, або на те, що неможливо взяти актуальний видимий розмір об'єкта і всіх контейнерів, які його містять.

про маски: якщо потрібно знати, який видимий розмір об'єкта, і взагалі якщо маска квадратна - використовуйте скролрект. об'єкт, на який наклали маску, буде завжди повертати свій оригінальний а не видимий розмір. та щей маска виїдає більше ресурсів компа, ніж скролрект.
обговорення цього питання на ruFlash google group, ще одне корисне обговорення масок
як на мене, маску краще додавати в парент маскованого об'єкта, ато потім можна заплутатись з координатами.

scrollRect. вродь як класна, зручна і корисна фіча - працює шустріше, не потрібно мувати контент, після її накладення об'єкт повертає свій видимий розмір (а повний його розмір можна брати, загорнувши його в контейнер і скролрект напускати на контейнер, але є народ, який видумує і інші рішення), тільки є одна підй... адобівська бага під 10м плеєром - в перші 1-30 мілісекунд (в залежності від потужності машини, на якій флешка крутитьсся) після зміни scrollRect об'єкта, його розміри залишаються попередніми. так що, поки-що любе звернення до розмірів замаскованого scrollRect-ом об'єкта робимо по таймеру, і всі дружно йдем і голосуєм за фікс цього бага (ато там всього 11 голосів).

понеділок, 27 грудня 2010 р.

а тепер по ділу

головний клас проекту:

public class Main extends Sprite {


 public function Main(): void {
  if(stage) {
   init();
  } else {
   addEventListener(Event.ADDED_TO_STAGE, init);
  }
 }


 private function init(event: Event = null): void {
  removeEventListener(Event.ADDED_TO_STAGE, init);
  
  var test: TestChild = new TestChild();
 }
}





клас TestChild


public class TestChild extends TestParent {


 public function TestChild() {
  data = [1, 2, 3, 4];
  arr = [11, 22, 33, 44];
  obj = {name: "Test", value: "ttt"};
  intNum = 24;
  floatNum = Math.PI;
  point = new Point(7, 13);
  str = "Svitovyda";


  super();


  trace(this, data);
  trace(this, arr);
  trace(this, obj);
  trace(this, intNum);
  trace(this, floatNum);
  trace(this, point);
  trace(this, str);
 }
}





клас TestParent


public class TestParent {
 protected var data: * ;
 protected var arr: Array;
 protected var obj: Object;
 protected var intNum: int;
 protected var floatNum: Number;
 protected var point: Point;
 protected var str: String;


 public function TestParent() {
  trace(data);
  trace(arr);
  trace(obj);
  trace(intNum);
  trace(floatNum);
  trace(point);
  trace(str);
 }
}





результат запуску в трейсі:



undefined
11,22,33,44
null
24
NaN
(x=7, y=13)
Svitovyda
[object TestChild] undefined
[object TestChild] 11,22,33,44
[object TestChild] null
[object TestChild] 24
[object TestChild] NaN
[object TestChild] (x=7, y=13)
[object TestChild] Svitovyda



якби мені хтось пояснив це, була б дуже вдячна. а так: Flash - #@%$%@^%$.


а ще скажу банальність: 9scaleGrid - #@%$%@^%$.
і лінії - теж.


гррррр!

не екшинскриптове

а хардварне

як ви думаєте, якщо така рижа блондинка, як я, візьметься розбирати непрацюючу колонку (друга працює, на поломаній - всі регулятори, входи для штекера і вихід на другу - і все це працює, а сама колонка мовчить. генєратор работаєт но нє гєнєріруєт, да) і спробує там знайти щось, від чого ця колонка не працює - з цього хоч щось получиться? ну, крім ще одного смішного поста сюди, я маю на увазі...

пробувала підключити до свого робочого ноута дома клавіатуру. PS/2 (ну так вже сталося. і не питайте мене де я дістала перехідник з usb на ps/2 за 15 грн і як перевіряла його дієздатність, підключивши через нього і мій старий перехідник з ps/2 на usb флешку - працює). а вінда - сьома (погугліть windows 7 + PS/2, ага). клавіатура щей старезна і майже безімянна - мітсумі. короч я згадала казку про кощеєву смерть, коли гуглила за драйвером під він7 для неї: смерть в голці, голка в яйці, яйце в качці качка ще там в комусь... сторінки і форумні пости датою до 2008, туманне посилання на щось, де ще туманніше посилання на мітсумівський ftp-шник (толку з мітсумівського офсайту - самі розумієте, а ні - зайдіть і зрозумієте), доступ до якого, мабуть, закритий ще з 2008 в кращому випадку. знайшла якусь ходилку по закритих фтп-шніках, добралась до папки з дровами - а там купа екзешників з кучерявими іменами. і доступ на скачування все-таки закритий. до кінчика голки я таки недобралась ))))
прогуглила на тему він7+пс2, проінсталювала купу всякого різного - толку нуль.

можна, звичайно, купити нормальну клаву. але, по-перше, мені і так вже потрібен монік (згорів ще у львові до переїзду, системник я вже перевезла), колонки (як видно з першої частини цього поста), wi-fi роутер (я ще і досі дома не підключилась до нету), і по ходу свій власний ноут. і взагалі в мене навіть холодильника робочого дома зараз нема ))). а ще і якось не спортивно виходить - стільки часу потратити на рішення проблеми і забити )))))

четвер, 9 грудня 2010 р.

Всяке різне

Пишуть мені в LinkedIn пропозицію віддаленої одноразової роботи, 40-50 годин. Мене не цікавить віддалена робота (я загружена на повну на поточному місці роботи, яким взагалі дуже задоволена), але от часом дивуюсь: дописувачка, скажемо так, кириличномовна, компанія "наша". Лист прийшов англійською. З коротким описом фіч до чогось.
Я все розумію - тз мабуть англомовне, та і взагалі рівень інгліша має бути завжди - ну але ж це робота на тиждень! Чому не можна бути попрощє? Не присилати опис абстрактних фіч, а попросити технаря сформулювати нормальний простий неконкретний опис того, що потрібно зробити? І писати не формальною мовою інглішем, а нормально, від себе: "нам потрібно зробити таку-то роботу з такою-то специфікою, віддалено, приблизний термін - ..."?

Взагалі, при повній заповненості мого лінкедіна, дуже дивують різні питання ейчарів, доходило до маразмів - коли мене, на приклад, рекрутили з фірми, на якій я пропрацювала більше 3 років (найшла мене HR через лінкедін, в якому її фірма з терміном, скільки я там пропрацювала, була вказана). Ще дивує повна відсутність внутрішнього обміну інформації про працівника на фірмах (абсолютно всіх!): завести просту базу на всіх абсолютно працівників - потенційних, теперішніх, минулих, з простими зв'язками багато-до-багатьох (з ким коли контактував з простим коментарем: працював в одному тімі, був піемом, дав контакт, був підлеглим, вчились разом, працювали разом, етц, етц, етц) - ну точно не складно для ІТ кантори, тим більше що готові рішення, мабуть вже давно є. Бояться, що таку базу легко буде злити? А що казати про повну передачу всієї інформації, отриманої при комунікаціях - першій, попередній, всіх інтерв'ю - всім решта інтерв'юючим - її нема ніколи, на абсолютно всіх моїх співбесідах.

Ще одна тема, яка вже давно, мабуть, є холіваром - це те, що роботодавці самі накручують зарплати ІТ-шникам, шукаючи спеціалістів тільки сеніор рівня, на проект, який от щойно прийшов і вже і тут починається. Деякі умудряються потім копнути цих спеціалістів, якщо проект закінчився, і потім знову панічно шукають нового... А потім жаліються, які програмісти офігівші: рівня нема, спеціалістів мало, грошей хочуть багато, та ще й тікають, сволочі, коли їм пропонують в півтора рази більшу зарплату - ну а як може бути інакше, скажіть мені, з таким підходом? І не потрібно розказувати про те, як тяжко і затратно вести бізнес в Україні. В цій країні люди умудряються виробництво запускати, і мати з нього якийсь прибуток - ось що дійсно тяжко! А набирати толкових джуніорів і вирощувати їх до мідлів - не дорого і не важко, навіть для маленьких ІТ фірм! Да, пробувати запускати свої дрібні проекти для людей, поки-що не задіяних в комерційних проектах, щоб підвищувати кваліфікацію працівників і напрацьовувати зіграну команду (яку потім тутже кинути на замовника) - це складно, тут потрібно відсіяти якісь технології і підсилювати кілька своїх, закладати немалий баланс. Але всерівно незрівнянно легше, ніж запустити своє виробництво одягу, чи, не приведи б-же, харчів.
Наша країна не дає розростись ІТ до рівня 500-1000 працівників (в одному офісі) - це вже інше питання, і то, все-таки, це частково питання вміння делегувати свої управлінські обов'язки. Але до рівня 100-300 - спокійно (тобто ніхто не заважає, що ще не означає, що це зробити легко). Так що нема чого жалітись, часто ще й маючи за плечима важкі іноземні інвестиції, працюючи з зарубіжними замовниками (які не кидають на половину суми і не просять безплатно переробити все заново), не маючи безпосередньої роботи з клієнтами, товарами, продукцією (що накладає на бізнес мінімальний прохід контролюючих органів), маючи мінімальний ризик бути вибитим з виробництва (мінімальні бекапи всіх основних серверів, швидко знайти на короткий час приміщення з електрикою і нетом - і за 2-3 дні робота повністю відновиться).
А то зараз тільки і чути ниття і одних і других, як все погано, і холівари на тему, загинається чи ні аутсорс. Його спершу організувати правильно треба пробувати, пробувати пробивати нормального рівня освіти і взагалі відстоювати свої і інших права - за свої ж податки, блін, вчитись вести великий бізнес а не тільки вимагати підвищення кваліфікації своїх працівників, організовувати процес розробки - а не просто кидати найдених програмістів на замовника, і т.д. і т.п.

Багато кантор запускають свої тренінг-центри, деякі, при тому, щей умудрились зробити з цього бізнес - значить це можливо, це окупляється.
Проводьте якісь прості конференції зі серйозними доповідачами на актуальні теми по технологіях, на які вам треба постійно закривати вакансії - і якісний приток кандидатів високого рівня вам гарантований! І це реально просто і відносно дешево - не треба виписувати зі Sun-а чи Adobe-а крутих євангелістів, чи шукати Scrum сертифікованих гуру за шалені гонорари. В Україні вже достатньо багато професійних ІТ ком'юніті - людей, які на голому ентузіазмі збирають навколо себе професіоналів їх галузі і обмінюються досвідом. Найдіть час і кошти для своїх досвідчених працівників, щоб вони виступали з доповідями, спонсоруйте зустрічі - і все, це не тренінг-центр організувати.
Зараз дуже бракує тусовок тім-лідів і технічних менеджерів - різні тренінги по організації процесу розропки, архітектурі, плануванні дуже дорогі. А потрібно ж небагато - не крутих дорогих доповідачів зі степенями і сертифікатами, а просто тусовку, в якій ліди і піеми могли б збиратись і обмінюватись власним досвідом.

А ганятись за працівниками, які знають якусь дуже конкретну технологію, щей зі строгим набором конкретних фреймворків, часто при тому щей не перевіряючи яким спеціалістом він взагалі є, який його справжній рівень інших (заявлених ним) технологій, як взагалі працюють його мозги, чи здатен він взагалі написати складний алгоритм, і, саме головне - на скільки він комунікабельний і відкитий до нової інформації, як реагує на постійно змінювані обставини - так це ж взагалі самогубство, народ! Найдіть одного-два гуру потрібного фреймворку, а решту просто толкових спеціалістів потрібної технології - вони підтягнуться за пару тижнів-місяців. І думайте весь час про можливість перекинути працівника на іншу технологію/проект, якщо йому це цікаво і якщо це бідьш-менш адекватно по затратах.

Отака в мене вийшла розкидана простиня про роботодавців, HR і навіть політику, звиняйте )))
Наступний пост, сподіваюсь скоро, напишу про київський FlashGamm 2010.

вівторок, 23 листопада 2010 р.

Як правильно писати код

От так глобально, да )))

Скільки про це вже писано-переписано, і толку. Одні кажуть "оптимізуй!" "коментуй!" "рефакторинг!" "ооп!" "інжекція!" "не дублюй", інші - не оптимізуй, не коментуй і так далі - і будь тут мудрий. От а я спробую ))) - бути мудрою )))

Головне в цьому ділі, взагалі-то, пам'ятати: цвяхи треба забивати молотком, ями копати - лопатами, а сокирою рубати дрова.

Давним-давно інтернети були повільні, процесори слабенькі, пам'ять маленька, вінти тісненькі, кожен байт графіки важив як золото, кожен процес треба було оптимізувати - видумуючи як можна хитріші алгоритми і спрощення. Навіть розмір імені змінної в деяких випадках потрібно було враховувати. Малювання кодом, оптимізаційні фішки - це все було актуальним. БУЛО. Ні, ну зараз теж є задачі, в яких потрібно мінімізувати розмір, об'єм, швидкість сортування масива, кількість запитів до сервера... Але раніше це потрібно було робити незалежно від постановки задачі, комп'ютери/інтернети у всіх були однакові. Але ж зараз ситуація змінилась! Самий простенький домашній канал дає можливість дивитись серіали онлайн, паралельно чатитись у всяких аськах/гтоках, перевіряти пошту і коментувати блоги, яка кому різниця, чи буде ваш клієнт важити на 400 кілобайт більше?
Зараз куди не сунься - важливою стала підтримуваність коду, його повторне використання, легка розширюваність, а значить - читабельність, простота і продуманість. Навіть коли тобі потрібно писати маленькі іграшки, або ж і взагалі якісь не подібні один на інший дрібні проекти - там все одно будуть спільні речі, які не потрібно кожен раз робити заново (якщо взагалі потрібно видумувати велосипед) - люба аплікація має дизайн і взаємодію з користувачем, з'єднання зі сервером. Чому тоді не написати один раз якийсь свій фреймворк, в якому чітко розділений дизайн і код, код при тому мінімально зав'язаний на тому, що саме малює дизайнер, наплодити свою бібліотеку стандартних контролів (при чому не обов'язково там зразу писати всі можливі елементи, зі всіма можливими варіаціями) або освоїти вже існуючу, в якій народ вже за роки назбирав всі можливі граблі під різними осями і девайсами. Чому не писати код акуратно, іменувати змінні по-людськи, щоб особливо і коментувати не прийшлось? Ти ж сам вже за місяць уявлення найменшого не будеш мати, що ти там і для чого написав. Не використовуй колбеків, функцій у функціях - заплутаєшся, не дублюй код - замахаєшся його всюди фіксити, розділяй дані, логіку і візуалізацію, не пиши основний функціонал в хендлерах і конструкторах - з ймовірністю 80% цей код потрібно буде викликати ще раз... І так далі і тому подібне. Люди роками писали тонни коду, написали не одну пачку рекомендацій, б'ються над методиками, описують свої граблі - не треба думати, що ти будеш розумніший за всіх них і тобі це не потрібно.

Починати треба зі занудного - код конвеншин. Взяти за основу якийсь стандарт, підкоригувати під себе, банально завести доку і шаблони - класів, подій. Поступово розширювати його правилами.
Про код конвеншин я, мабуть, напишу окремо - і для чого воно і які мої правила напрацювались довгими роками боротьби з граблями ))

Зіткнувся з якоюсь проблемою - гуглани, вже давно існує купа готових ліб для роботи з коліщатком мишки під маками, міні- і повноцінні 3D, криптування даних, обхід адобівських багів, робота зі шрифтами...
При тому, звісно ж, треба розібратись що воно там, як і для чого - але не потрібно тратити час на винайдення велосипеду зараз і його постійний ремонт потім - google oriented programming рулить )))

Читай методи оптимізації, але пам'яй, що одна ініціалізація масива, яка виконається один раз за всю аплікацію, погоди цій аплікації не зробить, а прогон циклу, який викликається всю дорогу, і в який впихнули оголошення тимчасових змінних - ось те місце, яке треба зразу написати чисто. Не фанатично оптимізувати, а просто чисто написати. Не викликати кожен раз один і той самий запит, який протягом всього виконання аплікації нічого нового не викличе, але і не грузити всю аплікацію кешуваннями даних, які всеодно постійно міняються і їх постійно запитують з параметром reload=true. І взагалі просаджує проц складна прозора графіка і меморіліки, в більшості звичайних аплікух всі інші дрібні оптимізації мало на що вплинуть.

Словом, це все можна послухати-подивитись тут, а я ще хіба опишу один з прикладів як писати потрібно, а як - ні.

От є така проста функція:

static public function zerofy(v: int, u: int = 10): String {
  return String(Math.pow(10, String(u).length - String(v).length)).slice(1) + String(
}


Не ясно що, де, як і для чого. А головне - якщо в цю функцію передати число, яке за кількістю символів більше за друге, на виході буде повна абракадабра. А оскільки ця функція захована глибоко в фреймворк і дьоргається в багатьох місцях, то баг з цією абракадаброю хтось би шукав дуже довго.

Вот скажіть мені, для чого так взагалі писати? Чому не написати просто, хоч і не так вичурно:


static public function zerofy(num: int, lenMarker: int = 10): String {
  var result: String = String(num);
  var len: int = String(lenMarker).length;

  while(result.length < len) {
    result = "0" + result;
  }

  return result;
}


Плоско, тупо, зато акуратно, ясно що робить і як, і без непередбачуваних багів.

пʼятниця, 29 жовтня 2010 р.

Як правильно писати своє резюме!

Поставте себе на місце людини, яка шукає нового працівника. Ні, не так. Уявіть: ви працюєте, над проектом, іноді овертаймаєте, іноді фіксаєте баги, часу не вистачає - ну все як завжди. І тут вам кажуть "проведи співбесіду, ось резюме".
А от тепер подумайте, що ви хотіли б побачити в цьому резюме, щоб воно дало вам максимум інформації і при цьому забрало мінімум часу! І не присилайте, блін, суцільну простиню зі сухим переліком місць навчання і праці. Баба Зіна теж працює на великій софтверній фірмі, а часом і не одній - прибиральницею. І при цьому щей вповні могла закінчила не один вуз. З червоним дипломом. З відзнакою.

Будь-кому, хто оцінює ваші робочі можливості, потрібно побачити ваш код і подивитись, що ви РЕАЛЬНО РОБИЛИ.
Вишліть разом з резюме хоч один маленький проект З КОДОМ! Ви точно десь колись для когось робили тестові завдання чи внутрішні проектики на випробувальному терміні, тим більше, якщо ви працюєте з Флешем!

Опишіть в резюме в хронологічному порядку всі свої проекти, згруповані по місцях роботи. Опишіть в проекті технології, які на ньому використовувались (всі, не тільки ті, якими ви працювали), кількість людей, час скільки ви над проектом працювали, і головне, детально - свої обов'язки і досягнення на цьому проекті.

Коротко: досвід важливіший за освіту, його ставимо вище, спочатку стислий перелік знань, тоді - детальний опис проектів. КОМЕРЦІЙНИЙ ДОСВІД, все некомерційне пишем в районі освіти (або в ній же). ВУЗи мало хто знає, опишіть чого для реальної роботи ви таки навчились там, щоб було ясно, чи ви зовсім самоучка, чи мінімальне ООП і розуміння баз даних чи клієнт-сервера вам дали у ВУЗі.
В описі проекту країна замовника важлива, наявність на проекті ПМ-а (ProjectManager) - важлива, кількість людей - важлива! Крім просто опису проекту - роль в тімі, досягнення, нові знання, архітектурні рішення.


Ось вам приблизний шаблон резюме:

Name

Birth date: xx/xx/xxxx

Address xxxxx, Yyyy str., Lviv, Ukraine

Current address: Zzzzz Ave., Kiev, Ukraine

cell phone: +38 0xx xxx xx xx

mail, GTalk: aaaaaaa@gmail.com

ICQ: xxxxxxxxx

Skype aaa

LinkedIn: url

Keywords

Adobe Flash, ActionScript, Game development, Python/Cheetah, J2ME


Business area

Outsource, Software, RIA, web, RPG, mobile games, casual games, E-Commerce


Experience summary

· 8 years of commercial programming experience

· Extensive knowledge of Adobe Flash technology


Skills

Programming language/Technologies

· Flash (ActionScript 1.0, 2.0, 3.0) (5.5 years)

· Flex (1 year)

· Java/J2ME(mobile phone games)/JSP (1.5 years)

· HTML, JavaScript, XML (5 years)

· PHP/MySQL (2.5 years)

Development tools

· Macromedia/Adobe Flash (v 5 – CS3)

· FlashDevelop+FlexSDK, FlaxBuilder/FlashBuilder, IDEA+FlexSDK, Eclipse+MTASC

· Borland C++ Builder

· Microsoft Visual Studio

Source control software

· SVN

· CVS

· Microsoft SourceSafe

Databases

· MySQL

Operating Systems

· Microsoft Windows 95/98/2000/XP

· FreeBSD

Other

· Papervision3D


Work experience

Period:

Nov 2008

till now

Company name and location: AAA, Kiev

Job position: Senior Flash developer/team lead.

Project: BBB

Customer: USA

Project Description: http://BBB.com

AS3 FlexSDK 3.3, AMF, PHP (Zend)/MySQL

Online RPG brauser game.

Duties and Achievements:

· Team leader

· Communication with client

· General flash project architecture

· Development of components

· Code refactoring, optimization, architecture changes

· Jabber chat client (xiff), Twitter authorization, 3D effects

Team Size: 2 flash developers, 1 PHP/MySQL developer (Kiev team), ½ QA, 1 admin (Russia team), 1 flash developer, 1 server/DB developer, 1 QA (USA team).

Environment and Tools: Adobe Flash CS3, FlashDevelop+FlexSDK, SVN

Project: Mosaic (1 week)

Customer: Greek

Project Description: Small entertaining flash site.

User uploads their picture with info and sees mosaic, based on customer`s given picture from all uploaded pictures. Admin can view and manage all uploaded pictures

Duties and Achievements:

· User part (picture/info upload form, generating mosaic from server-given list and pictures, picture small random preview and full view)

· General flash part architecture

Team Size: PM, 1 flash developers, 1 server/DB developer, 1 artist

Environment and Tools: Adobe Flash CS3, FlashDevelop+FlexSDK, SVN


Period:

May 2007

Nov 2008

Company name and location TTTT, Lviv

Job position: Flash game developer

Project: Casual Flash games (2 month)

Customer: Polish

Project Description:

Small casual games

Duties and Achievements:

· Development of games

· Team leader

· Learned AS3, MVC pattern

· Created project architecture for separating graphics and developing process (AS2, AS3 developing tools)

Team Size: 1 developer, 1 artist

Environment and Tools: Adobe Flash 8, CS3, Eclipse+MTASC, FlashDevelop+FlexSDK

Project: Internal reporting system (1 year)

Customer: Internal, Ukraine

Project Description:

PHP/MySQL internal portal

· employees managing and complicated right levels

· employees reporting by project

· projects managing

· bug tracking system

· complicated reports for different level managers

Duties and Achievements:

· general PHP code optimization

· reports development

· universal module for any item modifying history

· bug fixing

Team Size: PM, 3 server developers, 2 Qas

Environment and Tools: Zend Studio, PHPMyAdmin, Apache, CVS


Period:

Jan 2002

Jan 2004

Different freelance projects, demo, effects, non-commercial projects, practical work:

· C++ Builder,

· Java, J2ME,

· PHP/MySQL,

· C++ (for Linux, Symbian), HTML/JS, Flash.


Education

Period:

1999 – 2004

Lviv Ivan Franko National University, department of Applied Mathematics and Informatics, specialty: Informatics, specialist`s degree.

Learned: C++ (4 years), math base for computer graphics (and 3d), HTML/JS, C++ Builder, SQL, Interbase/FireBird, FoxPro, Java 3D, ESRI Map Object, ESRI ArcView.v31

Master's thesis: 3-D visualization of results of mathematic calculations on server-side


Personal data

· Marital status, children: no

· Driving license: no

· Hobbies: Horse riding, snooker, hiking, dog, swimming

· Other: UAFPUG (http://fpug.org.ua/, ) member, speaker.


Certificates

No


Languages

· English – intermediate low

· Spanish – intermediate high

· Ukrainian – native

· Russian – fluent




Це шаблон з мого резюме. На моїх співбесідах переважно не задавали глупих питань типу "а що таке ООП" чи "як у Флеші аплоадати на сервер файл" - питають по проектах, щоб перевірити правдивість написаного і уточнити реальний об'єм роботи і якість отриманих навиків.
Коли в тебе чітко описано, що ти робив (навіть якщо це щось реально бігаючим не можна побачити в мережі), бачили твій код - то ясно, що ти вже ну точно знаєш, як працювати з класами, фільтрами, ефектами, інтерфейсами, серіалізацією, парсерами...

Коротше кажучи - напишіть один раз нормальне резюме! Ззекономите так і собі і людині, яка має проводити вам співбесіду, час і іноді навіть нерви.