«Это не то…» или почему мы не работаем по «фиксу»
Основываясь на собственном опыте и опыте коллег, мы собрали копилку причин, почему не стоит выбирать «фикс» при разработке мобильного приложения.
Всем нравится предсказуемость, особенно в бизнесе. Потому неудивительно, что, подготовив «детальное» техническое задание, Заказчик требует четкие сроки и стоимость и ждет реализации приложения своей мечты. Возможно ли это на деле?
Что написано пером, не вырубишь и топором. Все будет сделано именно так, как написано в ТЗ (не будем брать случаи, когда подрядчик упустил, не заметил требования), но чувство необъяснимого разочарования посещает практически всех заказчиков, кто выбрал схему “фикса”: предоплата-результат-постоплата.
Что такое «фикс»?
Это схема, при которой подрядчик заранее, согласно ТЗ, рассчитывает точную стоимость и срок разработки мобильного приложения перед стартом работ. Обычно заказчик вносит предоплату в размере 30%-50%, а через несколько месяцев получает готовый результат «под ключ», вносит постоплату (не будем брать в расчет разного рода акции, которые нацелены на завоевание клиентов). Данная схема подойдет для установки окон, изготовления дивана, но далеко не для любого программного обеспечения.
Если на полную реализацию приложения требуется меньше одного месяца, «фикс» вполне подойдет. Во всех остальных случаях mobile.SimbirSoft рекомендует работать по повременной или поэтапной моделям.
Основываясь на собственном опыте и опыте коллег, мы собрали копилку причин, почему не стоит выбирать «фикс» при разработке мобильного приложения.
Причина 1: Теорема Гёделя о неполноте в действии
Согласно теореме Гёделя любое высказывание неполно. Значит, как бы детально ни составлялось техническое задание, в нем всегда будут упущения, как фактического, так и эмоционального характера. Читая одну и ту же строчку, подрядчик и заказчик умудряются по-разному ее понять и вложить разный смысл. Несложно предположить результат.
Причина 2: Всё течет, всё изменяется
Так устроены люди, что нам может не нравиться то, что нравилось еще вчера, цели и задачи становятся иными в мгновение, одним словом, всё меняется. Изменению не поддается лишь разрабатываемое по “фиксу” мобильное приложение. Ибо по ТЗ. Изменения в проекты со стороны заказчика вносятся в 9 случаях из 10, и это легко объяснимо нашей человеческой натурой: всегда стремиться к лучшему. Допустим, ваше видение продукта немного поменялось, пришла в голову «новая фишка», а вы выбрали “фикс” для разработки. Неприятно, но скорее всего вы услышите: «Этого не было в ТЗ, нам придется кое-что переделать. Мы оценим и скажем сколько дополнительно это будет стоить».
Причина 3. Есть контакт?
При фиксированной схеме разработки устные контакты между подрядчиком и заказчиком, как правило, минимальны. О чем говорить? Все же решено, ждем результат. Но в этом и кроется большая опасность. Чем меньше встреч, созвонов и обсуждений, тем больше расходится видение результата мобильного приложения у клиента и подрядчика.
Дабы наши доводы были еще более убедительны, обратимся к статистике. По данным 2015 года, только 11% проектов были успешно завершены, а треть проектов не была закончена вовсе. Печально, не правда ли? Интересна закономерность: чем меньше проект, тем больше вероятность закончить его вовремя. Опять же, это объясняется изменениями и новыми функциями в проекте по желанию заказчика. В итоге — недовольны обе стороны: и заказчик, и подрядчик. И у каждого своя правда. Однако мобильное приложение все же разрабатывается для потребностей заказчика, а чаще — для его клиентов или сотрудников.
Как же сделать заказчика счастливым?
Для того, чтобы мобильное приложение точно отвечало требованиям и просто нравилось заказчику, мы, в mobile.SimbirSoft, рекомендуем выбирать поэтапную разработку. Это сочетание гибкости и предсказуемости, когда стоимость и срок определены на этап (чаще всего 2-3 недели).
Надеемся, что пролили свет, почему фиксированная схема не всегда хороша для разработки заказного мобильного приложения. Выбирайте гибкие схемы взаимодействия, и пусть ваши приложения соответствуют вашим ожиданиям.
Словарик айтишника или Что? Где? Куда? Часть 2
Scrum-терминология
От англ. Definition of Done (дословно — критерии готовности) — список требований, по которым можно считать, что цель выполнена. Например, набор задач, которые должны быть завершены к определенной дате.
Майлстоун
От англ. milestone (дословно — веха) — запланированная дата окончания работ по выборочным задачам. Проставление таких «дат» позволяет не сбиваться с графика и отслеживать процесс работы и понимания выполнения целей.
Сторя
От англ. story (дословно — история) — корневая задача с описанием требований для разработки, она содержит в себе подзадачи, назначенные на разработчиков разных должностей. Это точка входа при разработке какого-либо функционала.
Фасилитатор
От англ. facilitator (дословно — координатор) — человек, берущий на себя обязанности ведущего. Он обеспечивает успешную коммуникацию внутри команды, пытается упростить общение и создает понимание между всеми участниками команды. Термин может использоваться и как существительное, и как прилагательное, и как глагол.
Разработка
Ассайнить
От англ. assign (дословно — поручать) — назначать задачу на человека в качестве исполнителя.
От англ. bug (дословно — жук) — ошибка в коде, проблема, недоработка. Слово уже давно в лексиконе разработчиков, но интересно то, как меняется форма термина. Калька «баг» превратилось в слово женского рода — «бага». В такой форме согласование в предложениях проще. А если ошибка или проблема совсем маленькая, то это багуля.
Грумить
От англ. groom (дословно — чистить) — приводить в порядок. Относится к коду, бэклогу, организации работы. В том же значении используется и русский аналог — «причесать».
Деплой
От англ. deploy (дословно — разворачивать) — процесс интеграции кода из разработческих веток в продуктовую (мастер) ветку. Термин также употребляется и как существительное, и как глагол, и как прилагательное.
Компилить
От англ. compile (дословно — составлять) — собирать написанный код воедино, конвертировать его из одного формата в другой, преобразовывать в требуемый вид для работы в браузере.
Костыль
Временная «подпорка» в коде, которая приводит к нужному результату, но само решение является идеологически неверным.
Лагать
От англ. lag (дословно — отставание) — плохая производительность, притормаживание, работа с ошибками.
Легаси
От англ. legacy (дословно — наследие) — код, написанный определенное время назад и считающийся морально устаревшим. Он всё ещё работает, но вызывает неприятие у разработчиков.
Мерджить
От англ. merge (дословно — слияние) — соединять свою часть работы с частями работы других разработчиков в рамках одной ветки. Сливать всё воедино.
Нативный
От англ. native (дословно — родной) — первоначально заложенное поведение или внешний вид элемента или кода.
Стоимость задачи
Пришедшее из скрама выражение, означающее суммарное количество затрат разработчика на задачу. Вопрос про стоимость задачи буквально означает оценку времени и усилий на неё. Соответственно дорого — долго и сложно, дешево — быстро и легко.
Фейлить
От англ. fail (дословно — неудача) — терпеть поражение, проваливать планы, заваливать что-либо. Чаще используется в разговорной, не технической речи.
От англ. fix (дословно — чинить) — решение проблемы, устранение бага. Термин употребляется и как существительное, и как глагол, и как прилагательное.
Должности
От англ. junior (дословно — новичок) — специалист любой должности, которая предусматривает градацию по уровню знаний. Джун находится на первой (нижней) ступеньке. Человек, знаний, которого хватает для выполнения рабочих обязанностей и разработки в целом, но не обладающий глубиной и широтой знаний.
От англ. lead, сокращенно от TeamLead (дословно — глава команды) — специалист высшей градации, обладающий широтой и глубиной знаний, является лидером команды. Он руководит процессами и помогает решать спорные технические вопросы.
Секопс
От англ. SecOps, сокращенно от Security Operations (дословно — интеграция безопасности) — специалист, занимающийся обеспечением безопасности при имплементации новых решений и безопасностью в целом.
Организационное
Апрув
От англ. approve (дословно — одобрять) — еще одна вариация для одобрения, утверждения или подтверждения чего-либо.
Валидный
От англ. valid (дословно — правильный) — в разговорной речи вариации слова означают согласие с оппонентом, одобрение его результата. Означает правильность решения. Часто заменяет слово «идет» в значении «подходит».
Инпут
От англ. input (дословно — вклад) — в разговорной речи используется в значении внимание, отклик.
Капиай
От англ. KPI, сокращенно от Key Performance Indicator (дословно — ключевой показатель результативности) — единица измерения, которая требуется для того, чтобы понять эффективность какой-либо деятельности.
Пинговать
От англ. ping (дословно — ударяться со стуком) — напоминать кому-либо о чем-либо, давать знать.
Эскалировать
От англ. escalate (дословно — обострять) — поднимать вопрос или проблему на обсуждение, привлекать внешние ресурсы, принимать меры.
И напоследок.
Райкер
От англ. wrike-er — человек, который работает в Wrike и является частью команды компании.
Как считаете, проще ли бы было новичкам, если при выходе на работу им давали расшифровку незнакомых терминов, которые обрушиваются уже в первый день работы? Дают ли ясность подобные расшифровки или только больше запутывают? Поделитесь своим мнением в комментариях.
Изучаю FIX протокол с нуля. Разбор протокола, первый код на c#
Вступление
Никогда не увлекался скоростным трейдингом. Всегда хватало терминала. Изучать этот протокол меня побудил набор вакансий. Надо отметить, что я неспешно перебираю хорошие вакансии на рынке. Частному трейдеру очень сложно развиваться в одиночку — психологически, эмоционально, физически. Создавать и развиваться постоянно хочется, поэтому принял решение вливаться в коллектив. За несколько месяцев, мне удалось провести несколько собеседований. На втором этапе я проваливался именно из за не знаний протокола. Предметную область я примерно представлял. Ну что там сложного? Соединился с биржей по сокетам и начинай обмен сообщениями. Надо отметить, что в этой области есть уже готовые разработки в виде quickfix или готового API от StockSharp (правда платные). Но я принял решение разбираться с нуля, чтобы вникнуть в детали.
Технические аспекты протокола
Организационные вопросы
К бою. Немного теоретической практики
Если говорить образно. То, чтобы отправить сообщение на сервер, нам просто нужно сформировать нужную строку со всеми данными и отправить ее на биржу. Ну например:
8=FIX.4.4 ; 9=78 ; 35=A ; 49=FG ; 56=tgFhcfx901U05 ; 34=1 ; 52=20160212-11:42:51.812 ; 98=0 ; 108=30 00 ; 141=Y ; 10=047 ;
Если быть внимательным, то мы увидим, что кол-во символов в строке у нас 100, а в заголовке сообщения мы передаем, что 78 (9 = 78). По правилам протокола FIX, длину сообщения нужно считать без учета концовки и первых двух полей заголовка. А именно:


Зачеркнул свой идентификатор, прошу понять правильно. Ну а перехват сообщения выглядит так: 

К бою. Начало программирования

Класс создания сообщения на подключение (инициализация сессии) 
Класс создания концовки сообщения
Попробую привести код консольной программы для теста в виде цитаты. Картинки вставляются плохого качества. Подробно комментирую.
//Получаем ip сервера
IPAddress ipAddr = IPAddress.Parse(server);
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);
//Создаем заголовк
HeaderMessage msHeader = new HeaderMessage
<
BeginString = «FIX.4.4»,
MsgType = «A», //Тип сообщения на установку сессии
SenderCompID = «»,
TargetCompID = «FG»,
MsgSeqNum = 1
>;
//Создаем сообщение на подключение onLogon
LogonMessage msLogon = new LogonMessage
<
EncryptMethod = 0,
HeartBtInt = 3000,
ResetSeqNumFlag = true
>;
//Вычисляем длину сообщения
msHeader.BodyLength = msHeader.GetHeaderSize() + msLogon.GetMessageSize();
//Создаем концовку сообщения
TrailerMessage msTrailer = new TrailerMessage(msHeader.ToString() + msLogon.ToString());
//Формируем полное готовое сообщение
string fullMessage = msHeader.ToString() + msLogon.ToString() + msTrailer.ToString();
Console.WriteLine(«Сообщение для отправки <0>»,fullMessage);
//Создаем сокет для подключения
sSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
//Подключаемся
sSender.Connect(ipEndPoint);
Console.WriteLine(«Сокет соединился с <0>», sSender.RemoteEndPoint.ToString());
byte[] msg = Encoding.UTF8.GetBytes(fullMessage);
//Отправляем сообщение
int bytesSent = sSender.Send(msg);
Console.WriteLine(«Отправил <0>байт», bytesSent.ToString());
//Получаем ответ от сервера
byte[] bytes = new byte[1024];
int bytesRec = 0;
bytesRec = sSender.Receive(bytes);
Console.WriteLine(«Ответ от сервера: <0>», Encoding.UTF8.GetString(bytes, 0, bytesRec));
Все таки приложу и в виде картинок. Так наглядней. Кликабельно. 

В результате мы запросили у сервера подключение с нашим логином. И получили от него ответ. 
По мере развития, буду продолжать с теоретической частью. Если модераторы перенесут в раздел «Алго», я не против.
Cпособы передачи финансовых данных: протокол FIX
Фондовый рынок является высокотехнологичной отраслью — помимо физической ИТ-инфраструктуры и технологичных торговых роботов игроки этого рынка занимаются развитием технических стандартов протоколов передачи данных. Сегодняшним материалом мы открываем серию топиков о протоколах передачи финансовой информаци. В первом выпуске представлена информация об одном из старейших протоколов — Financial Information eXchange или сокращенно FIX.
Немного истории
Создание протокола FIX было инициировано рядом финансовых организаций США в 1992 году — брокеры и инвестфонды хотели ускорить процесс осуществления торговых операций на бирже. В то время значительная часть торговых операций совершалась с помощью телефона, а протокол FIX позволил перевести взаимодействия в электронный вид.
В результате родился открытый стандарт передачи информации в электронном виде, который не контролирует ни одна из крупных организаций. Сегодня FIX стал отраслевым стандартом, который используется участниками финансового рынка разных стран для связи своих продуктов.
Как это работает
В настоящий момент протокол определен на двух уровнях — сессии (работа над доставкой данных) и приложения (описание содержимого данных). Существует два варианта синтаксиса протокола — традиционный, вида Tag=Value и в формате XML (FIXML). Рассмотрим каждый из них.
Синтаксис Tag Value
Сообщения протокола FIX обычно содержат заголовок и, собственно, тело сообщения. Каждое сообщение представляет собой поток полей =, отделенных друг от друга специальными символами — в спецификации FIX для разделения данных использован ASCII-символ SOH (#001, 0x01).
Тело сообщения обычно состоит из заголовка, тела сообщения и завершающего элемента (трейлера). Первым полем сообщения всегда является обозначение начала строки (BeginString, тег #8), затем указывается длина тела сообщения (BodyLength тег #9) и тип сообщения (MsgType, тег #35). Последним символом трейлера всегда является контрольная сумма (тег #10).
Часто сообщения содержат, как зашифрованную часть, так и символы, переданные в текстовом виде — данная схема обычно используется для валидации и верификации данных. Например, передача зашифрованного значения SenderCompID, указывающего на отправителя, является устаревшим способом валидации.
Для обеспечения большей гибкости FIX протокол содержит так называемые пользовательские поля — User Defined Fields. Они используются при передачи данных между сотрудничающими финансовыми организациями. Номера тегов с 5000 до 9999 были зарезервированы под пользовательские поля — зарезервировать их можно было на официальном сайте стандарта. В дальнейшем эти номера были израсходованы, поэтому был выделен новый интервал — с 20000 до 39999.
Сообщения в формате Tag Value выглядят следующим образом (символ ^ — это разделитель SOH):
8=FIX.4.2^9=251^35=D^49=AFUNDMGR^56=ABROKER^34=2^52=20030615-01:14:49^11=12345^ 1=111111^63=0^64=20030621^21=3^110=1000^111=50000^ 55=IBM^48=459200101^22=1^54=1^60=2003061501:14:49 38=5000^40=1^44=15.75^15=USD^59=0^10=127
Синтаксис FIXML
Работы по созданию синтаксиса в формате XML начались в 1998 году, а первая версия FIXML появилась в январе 1999 года.
Новая заявка на совершение операции в формате FIXML описывается следующим образом:
Здесь ClOrdID — id-ордера, side=”2” означает заявку на продажу, далее указывается время транзакции, тип заявки (2 соответствует Limit-ордеру) и его цена pX. Поле Acct означет номер счета пользователя.
Далее в сообщении указывается информация о ценной бумаге и число ценных бумаг, которые нужно купить или продать. В итоге простое сообщение будет выглядеть примерно так:
В начале пути XML-версии FIX использовался только механизм определения синтаксиса DTD. В дальнейшем организация W3C разработала новый механизм — XML Schema, что заставило разработчиков FIX адаптировать стандарт для использования этого варианта синтаксиса.
Этот шаг позволил добиться улучшения XML-версии протокола FIX, в частности, пользователи получили возможность добавления в сообщения атрибутов и контекстных сокращений.
Базовая организация схемы XML предполагает наличие типов данных, используемых в полях, которые содержатся в отдельном файле. Поля FIX определяются в специальном shared-файле, а компоненты и элементы синтаксиса FIXML в специальных файлах компонентов. Сообщения FIXML определяются с помощью специальных файлов, указывающих категорию.
Пример сообщения об отправке заявки на FIXML (Schema):
Сообщения FIX
Каждое сообщение, отправленное в формате протокола FIX, состоит из обязательных, необязательных и условно обязательных (в зависимости от значения других частей сообщения) полей.
FIX на российских биржах
C помощью протокола FIX любой желающий может напрямую подключиться к «Московской бирже». Кроме того, биржа работает над унификацией доступа по FIX для всех доступных рынков (акции, срочный, валютный).
ITinvest также предоставляет своим клиентам доступ к рынкам «Московской биржи» с помощью прямого подключения по протоколу FIX. Кроме того, для высокочастотных торговцев и алготрейдеров созданы специальные ИТ-услуги от колокации серверов в дата-центре M1 до предоставления доступа к виртуальным машинам для размещения торгового робота.
Другие протоколы
Для получения рыночной информации (Market Data) используется протокол FAST (Fix Adapted for STreaming) — стандарт, разработанный создателями протокола FIX, который позволяет добиться значительных возможностей компрессии данных для передачи больших объемов рыночной информации с минимальными временными задержками. Помимо Московской биржи, используется на NYSE, Nasdaq-OMX и многих других мировых площадках.
Также для прямого подключения используются так называемые нативные протоколы, которые возникли еще до объединения бирж ММВБ и РТС в «Московскую биржу».
Так на рынках относившихся к бирже РТС (FORTS – фьючерсы и опционы, Standard), для прямого совершения операций и получения данных в режиме подключения используется протокол Plaza II. Для выполнения торговых операций и получения биржевых данных на площадках, ранее относившихся к бирже ММВБ (валютный и фондовый рынки) используется двунаправленный шлюз MICEXBridge (TEAP).
Об этих протоколах пойдет речь в наших следующих статьях. На сегодня все, спасибо за внимание, будем рады ответить на вопросы в комментариях.
Что значит «пофиксить» и «фиксить» в интернет-сленге?
В разговорах геймеров, программистов и других продвинутых юзеров мышки и клавиатуры часто проскакивают непонятные слова: фича, лаги, баги, фиксить… При этом человеку, далёкому от сферы, трудно сориентироваться в теме. Tакая терминология озадачивает, в то же время подогревая интерес и желание так же лихо форсить айтишным арго, как это делают профессионалы. Так давайте разберёмся!
Происхождение и значение
Основная часть интернет-сленга – результат русификации английских слов, и «фиксить» не стало исключением.
В переводе с английского, «tofix» означает «чинить». Среди русскоязычной аудитории прижился вариант «фиксить» или «пофиксить».
Английский язык, а также всевозможные русифицированные производные от английских слов или фраз, наполняют интернет-сленг. Что же касается общих чатов в MMORPG играх, то там сленг превалирует, и нубу (в том же сленговом выражении – «зелёному» новичку или неудачнику), не понятно ни единого слова. И в тех же играх это слово, кстати, имеет двоякое толкование.
Как «фиксят баги» в MMORPG
Помимо общепринятого, «пофиксить» может иметь негативный характер. Зачастую это значит, что определенную категорию лишат значительной части умений. Для примера, возьмем World of Warcraft с его многомиллионной армией подписчиков и почитателей по всему миру. Бывает, очередные обновления приносят не только улучшения и решения по самой игре, но и отдельные решения по игровым классам.
Так, в последнем обновлении игры разработчики сочли нужным «пофиксить» вопросы, связанные с превалированием одного из ведущих составляющих игры, а именно Орды, над Альянсом. И такое решение разработчиков полностью изменило игру! Игроки, которые годами играли за одну из фракций, стали покидать ее из-за того, что разработчики «пофиксили баги» – внесли изменения, убирающие преимущества одной из противодействующих сторон.
Мировая паутина не ограничивается одними играми, есть и более серьезные, уж простите нас, геймеры, занятия, в которых фиксить необходимо.

Как фиксить системные баги?
Интернету на днях исполнилось 30 лет. Представить современный мир без него невозможно. Все, от мала до велика, начинают день с просмотра новостной ленты, свежих фотографий у друзей в Instagram или обновления статуса в «Одноклассниках». Всё привычно, никто не задумывается о том, что нужно залогиниться, войти в программу, каждое действие обыденно и производится автоматически. Всё идет хорошо, пока вместо привычной стартовой страницы экран не начинает показывать системные сообщения об ошибках.
Чтобы «починить», пофиксить, сбои приходится обращаться к профессионалам, для которых понятие «курить мануал» – не просто смешное словосочетание, а образ жизни. Невидимый для простого пользователя мир программного обеспечения довольно хрупок, и зачастую, достаточно внести небольшое изменение в системе, чтобы нарушить весь отлаженный рабочий цикл. Для восстановления же нормальной рабочей среды порой приходится затратить большие усилия, фикся, исправляя пустяшные, казалось бы, баги.
Значительная часть сбоев происходит на уровне реестра ОС, для корректировки которого идеально подходит небольшая утилита Hijackthi.

Это знакомая и привычная утилита для всех, кому понятие «админка» не режет слух. Фиксить сбои в среде Windows с её помощью удобно, и при понимании дела, абсолютно безопасно. Однако, если написание поста в Facebook – предел знаний IT-технологий, фиксить сбои самому лучше не браться, а обратиться к специалистам.






