понедельник, 29 апреля 2019 г.

пятница, 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 за время этой итерации.