пятница, 22 марта 2013 г.

Написання клієнта для snake dojo на node.js

Одного разу спробувавши coding dojo не можливо відірватись. Хочеться внести якийсь свій вклад в розвиток проекту. Клієнт для JavaScript надасть змогу програмістам використовувати усі перевани динамічнох типізації.

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

Отже, що ми маємо? Сервер гри розсилає зараєстрованим гравцям HTTP GET запити, в яких міститься властивість "board" з інформацією про ігровий світ, а у відповідь на цей запит отримує text/plain, в якому у рядковому вигляді міститься інформація про напрям при наступній операції.
Порядок дій:
1.  Створюєм веб - сервер, який буде слухати усі запити, на стандартному порту, перевіряєм запити на адекватість:
  • Чи містить запит властивість "board".
  • Чи  "board" є пропорційною визначеному розміру поля.
  • Якщо перевірки не проходять, арвертаєм відповідь, що все погано.
var http = require('http');
var BOARD_SIZE = 15;

http.createServer(function (req, res) {
  
    var request = require('url').parse(req.url, true);
    board = request.query.board;
 
    if(!board){
      res.writeHead(400, {'Content-Type': 'text/html'});
      res.end("
No board parameter!");
      return;
    };
    if(board.length % BOARD_SIZE) {
      res.writeHead(400, {'Content-Type': 'text/html'});
      res.end("
Bad board parameter!");
      return;
    };
  
  });

}).listen(8888, '127.0.0.1');
2.  Спочатку був застосований тривіальний синхронний підхід, але оскільки node.js дозволяє неблокуючі операції вводу - виводу - асинхронні самураї не можуть цим не скористатися.
  • В тілі нашого "сервлета" звертаємось до функції , яка форматує ігровий світ - "board",  асинхронно виводить цей ігровий світ у консоль, а коли буде отримана відповідь, її буде записано у відповідь нашого клієнта.
  split(board, function(board) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(answer.getAnswer(board));
  });
3.  А ось і сама функція яка буде займатись вище зазначеними діями:

  var split = function (board, callback) {
  var splitBoard = function(board, callback) {
    var result = '';
    var temp = board;
      for(var i = 0; i < BOARD_SIZE; i++) {
        result = result + temp.substring(0,BOARD_SIZE) + '\n';
        temp = temp.substring(BOARD_SIZE);
      } 
    callback(result);
    return result;
  }
  //Anonymous function for asynchronous printing formatted board to console;
  board = splitBoard(board, function(board) {
    console.log(board);
  });
  callback(board); 
}
4.  Відповідь для розвантаження підключаєм з іншого файлу, базово реалізуємо повороти в різних напрямах:
answer.js
  
var direction = require('./direction');
//implementation of simple random response
exports.getAnswer = function (board) {
 var random = Math.floor(Math.random()*4)+1;
 if (random === 1) {
  return direction.RIGHT;
 } 
 if (random === 2) {
  return direction.LEFT;
 } 
 if (random === 3) {
  return direction.UP;
 } 
 if (random === 4) {
  return direction.DOWN;
 } 
}

5.  Константи зберігаєм у файлі:
directions.js 
  
//Directional constants;
exports.UP = "UP";
exports.DOWN = "DOWN";
exports.LEFT = "LEFT";
exports.RIGHT = "RIGHT";


Результатом нашого дійства ствло отаке от представлення.*


От і все, дякую за увагу, програма працює, цілісні ресурси можна знайти на github:  snake-dojo-jsclient

*в залежності від налаштувань командного рядка можуть бути різні картини.

понедельник, 18 марта 2013 г.

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

"Жодну систему неможливо зрозуміти, не вийшовши за її межі" 
Вчитель хімії, 11 клас.
Як не парадоксально, але не можна систему зрозуміти і ззовні, не побувавши всередині. Тренінг GL, як не крути, є візуалізацією системи - не чорного ящика, а біологічним організмом, зі своєю лінню, героями, планетами та риторичними запитаннями.

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

Хотілось би показати як відбувається знайомство з тренінгом для новачка і на що їм звернути увагу:
  1. Після додаванняння менторів (сим. означення)  у skype, в нас з'явився чудовий email та пароль до нього, а отже і доступ до репозиторію, куди можна заливати код на конструктивний аналіз.
  • через web-інтерфейс неможна завантажувати файли, тільки створювати папки.
  • web-інтерфейс для перегляду, клацати по дивним не зрозумілим посиланням немає сенсу.
  • на даному етапі саме головне не спішити і не хвилюватись тим, хто вперше бачить google code.
      2.  Перш за все потрібно зайти на пошту і згадати все подивитись листи, все що там є - було колись  надіслано вашим і нашим попередникам.
  • найголовніше подивитись відео в перших листах, яке відразу відкриє вам на все очі та позбавить сотні запитань для менторів.
  • старий code review спочатку можна не дивитись, але взагалом дуже конкретний навчальний матеріал.
     3.  Читати вчасно роздані методички.
  • методички є дуже потужним матеріалом для саморозвитку, кожне слово несе важливий зміст та викинути його неможна.
  • як поводитись з репозиторієм, ссилки на матеріали теж тут.
  • текст методичок краще занотовувати і передавати дітям у спадок перечитувати через деякий час для кращого запам'ятовування.
     4. Писати свій і читати чужий код для рев'ю,  рев'ю,  рев'ю,   рев'ю...
  • продуктивніше почитати чужого коду, потім взяти ручку та зошит і придумати свою архітектуру з блек-джеком та дівчатами.
     5.  Спробуйте писати на блозі тренінга, який з самого початку буде вам відомий!

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

пятница, 19 октября 2012 г.

Игрались в Snake Dojo

На этот раз мы встретились, чтобы поуправлять змейкой.

Собралась не вся команда, но это не страшно. Те ребята, которые были с нами расскажут своим коллегам как им было, и я уверен, на следующий раз соберутся все.

А ще мы договорились, что доджо на следующей неделе пройдет только, если будет готово то, о чем мы договаривались в прошлый раз - рабочий покемон. Утром Demo вечером Dojo.

Но вернемся к игре. На этот раз мы учили змейку собирать яблочки, но при этом не кушать себя.


2 часа работы в паре. Вот они - эмоции!  


А вот и другая пара - тут игра более спокойная.


С нами играли даже наши преподаватели!


А я фиксил баги :)

Спасибо ребята за участие!

воскресенье, 30 сентября 2012 г.

Новая итерация

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



В любом случае у нас есть незаконченное дело - наш проект-покемон. Он сейчас некомпилируем. Ребята, которые знали о том, как работают некоторые важные модуля уже не учатся с нами. Что делать? Настроение команды "все бросить и начать заново", но где гарантия, что через два месяца у нас снова не будет в репозитории какой-то другой некомпилируемый проект?

А ведь это реальная задача из реального коммерческого проекта - есть какой-то проект (скорее модуль) которй ты видишь впервые. Его писал неизвестно кто, которого уже давно нет на прокте (или есть но он уже не помнит, что там и как). Документации нет. Тесты хоть и есть, но доверять им пока страшно. С чего начать непонятно. Есть только команда.

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


Так же разбились на пары. Получилось очень даже складно - 4 пары (новенький + бывалый).

Я заметил, что ребята, которые уже "бывалые" более смелые, чем новенькие, больше проявляют лидерские задатки, хотя пару месяцев назад были "новенькими" и боялись слова сказать. Это очень радует, ведь следующий этап - собеседование, а потом хардкор тренинг на котором либо пан либо пропал. За софтскилзами ребят  будут смотреть очень пристально, так что наша задача научиться не только Java но и прокачаться в soft skills как можно сильнее. Потому ребятам сразу была поствлена задача - через неделю привести код к компилируемому виду и каждой паре знать про назначение каждого класса системы, уметь поднимать его и провести демо. И делать они это будут самостоятельно - нет мы будем конечно же рядом, чтобы не дай Бог никто не утонул.

И пусть у Ребят все получится. Успехов!

воскресенье, 15 июля 2012 г.

Второе демо

Второе демо прошло успешно. На этот раз органов у покемона стало больше и приложение превратилось из консольного в полноценное web. Даже базу данных прикрутили!

Еще, на собрании мы рассмотрели несколько тем, касающихся планирования - http://planningpoker.com/




 и несколько burndown chart, которые мы разбирали как пример


Второй особенно наглядный :)

Кушали пиццы, говорили про будущее программиста.

Кстати, очень хорошее видео рекомендю посмотреть, буквально каждому айтишнику (взято с сайта jeeconf).




Т.к. нас собралось не много, то полноценный planning мы решили перенести на другой раз, а сегодня просто пообщались.

суббота, 23 июня 2012 г.

Первое демо

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



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

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

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

Какие фичи "господин" хотел бы увидеть на этот раз?
- Количество органов увеличить: сердце, желудок, легкие - ворпросы влияют на эти органы, и по ним так же выдаются советы
- Консультант будет выдавать корректные советы в зависимости от того, какой орган больше всего страдает.
- Я могу работать с прилождением через web (можно захостить его на google apps)потому что не хочу набирать текст - номер варианты ответа, а хочу кликнуть на страничке в браузере.
- Все ответы хранятся в базе данных, а не захордкоджены в коде. (ребята очень хотели :) )
- История жизни покемона, логгируется и сохранятеся текущее состояние - то есть я могу приходить к программе еще раз и еще раз, и если я веду нездорвый образ жизни, то моему покемону будет все хуже и хуже...

Мы решили, что заведем бэклог и на следующий раз попробуем пленнинг поккер. А посему книжечка "Скрам: заметки с передовой" must read за время этой итерации.

среда, 20 июня 2012 г.

Отзывы наших выпускников

Мне java тренинг понравился. Понравилось то, что была "куча" полезного материала - можно, конечно, этот материал и самому найти, но тут уже найден, разложен по полочкам, а ты сиди и учись просто, а если что-то непонятно всегда моожешь спросить у преподавателей или у кураторов. Понравилось их желание научить, возможно не все получилось что запланировали, но видно было желание научить - это очень хорошо.

Одним из самых запоминающихся событий тренинга был сбор на coding dojo. В ходе которого, мы поделились на команды из 2 человек и соревновались между собой. Дух соперничества очень ускоряет мысли в голове, все идеи как-то структуризируются и ты примерно знаешь как делать задание. И надо его быстро делать :) Вначале мы даже вышли вперед по очкам, но в итоге нас ребята обогнали. Зато остались не последние:) Было интересно и полезно. Спасибо GlobalLogic за это.
Тимур 

Итак, отзыв. В общем и целом курсы очень хороши, причины следующие:

1) Если треннинг по Java, то он действительно по этому языку. Я участвовал в Java-тренинге, где прожили на С, С++ и Пайтоне, при чем не используя здравый смысл в выборе заданий.

2) Есть программа, есть четкая структура и отобраные материалы. В целом подход "вот задание, а вот тут лежит инфа" для меня самый действенный. Также толковый ментор, и митинги с обсуждением каких-то не книжных аспектов это очень хорошо. Чем глубже, тем меньше или менее толково пишут в книгах/гугле.

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

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

Очень понравилось кодинг доджо, соревнование это всегда хорошо, а если против своих же преподавателей-то вдвойне. Хочу еще :)
Василий 

Тренинг по Java Core в КПИ мне очень понравился. С самого начала приятно удивила нормальная организация процесса - в начале тренинга каждый учасник получил свой аккаунт для доступа к репозиторию, email.

Второй и одной из самый прятных неожиданностей стала сама организация материала. Полезные ссылки, статьи, список книжек с указанием глав и СТРАНИЦ, которые можно почитать - я, тогда уже студентка 5-го курса, с таким столкнулась впервые. ))) Вообщем, все на блюдечке. Осталось только написать код и ждать код ревью от менторов или своих напарников. Плюс все непонятные моменты можно уточнить на встречах вживую или в скайп-группе.

В итоге, я осталась очень довольна, что не поленилась вовремя записаться. Плюс для меня этот тренинг стал старт-площадкой для JEE тренинга уже в GLOBALLOGIC.

Тренинг в Глобале ориентиован на изучение enterprise-технологий, а хорошую опорную базу для него может дать именно тренинг по кору в КПИ. На нем я поняла много важных моментов о паттернах проектирования, рефакторинге кода, TDD, которые помогли мне делать новые таски намного быстрее.

Вообщем, спасибо всем, кто приложил руку к тому, что на ФПМ теперь появились такие полезные курсы. ))) 
Антонина