Pull to refresh
62
Karma
0
Rating
Павел Тайкало @Kilew

Пользователь

Создание архитектуры программы или как проектировать табуретку

Website development *System Analysis and Design *Designing and refactoring *
Sandbox
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3 +82
Views 627K
Comments 45

2D->3D in Augmented reality

AR and VR
Sandbox
image

В данной статье я расскажу как в приложениях Augmented reality по найденому расположению объекта в сцене построить 3D-пространство. Для этого необходимо получить две матрицы – проекционную (GL_PROJECTION) и модельную (GL_MODELVIEW) для работы, например, в OpenGL. Делать это мы будем средствами библиотеки OpenCV.

Недавно приходилось решать эту задачу, но ресурса, где просто поэтапно объяснялось как это сделать я не нашел (может плохо искал), а подводных камней в данной проблеме хватает. В любом случае, статья на хабре описывающая эту задачу не повредит.
Читать дальше →
Total votes 59: ↑59 and ↓0 +59
Views 25K
Comments 9

Топ 10 видов сопротивлений при развитии IT

Lumber room
Пользуясь регулярно подходом ABC of ICT обнаружил что информации об этом крайне мало (сам познакомился благодаря ссылке где-то в комментариях). Под руки попалась неплохая статья по методике и решил ее перевести, возможно кто-то после захочет ближе познакомиться с этим подходом к развитию и управлению процессами в компаниях.



Оригинал опубликован на сайте GamingWorks (создатели наиболее популярных бизнес-симуляций для IT всего мира)


Много текста
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Views 5.7K
Comments 6

Ричард Фейнман «В ПОИСКАХ НОВЫХ ЗАКОНОВ»

Physics
image
Перевод седьмой лекции из курса «Характер физических законов», самого яркого ученого двадцатого века Ричарда Фейнмана.

Лекция называется «В поисках новых законов».
Читать дальше →
Total votes 81: ↑79 and ↓2 +77
Views 10K
Comments 47

Дизайн интерфейсов в эпоху Больших Экранов

Interfaces *Usability *
Translation


Несмотря на годы сопротивления, Apple наконец-то сдалась, и недавно представленный iPhone 6 теперь тоже может похвастаться (или «похвастаться») большим экраном. Всего лишь в течение прошедшего понедельника, 15 сентября, Apple продала более четырёх миллионов новых смартфонов по предзаказам. Всего лишь за одну ночь они продали почти половину от общего количества iPhone 5s и 5c, проданных за первые выходные в прошлом году.

Всё говорит о том, что устройства с дисплеями 3,5-4 дюйма неизбежно и очень быстро уходят в прошлое. Согласно Adobe 2014 Mobile Benchmark Report количество просмотров со смартфонов с 4-дюймовыми дисплеями снизилось на 11%.



А это означает, что разработчикам, привыкшим создавать приложения и веб-сайты под дисплеи этих форм-факторов, пора адаптироваться к новому мощному тренду.
Читать дальше →
Total votes 61: ↑52 and ↓9 +43
Views 33K
Comments 59

Khan Academy разработала быструю JavaScript-библиотеку для работы с математическими формулами

Нордавинд corporate blog JavaScript *LaTeX *
Фактическим стандартом для работы с математическими формулами в вебе, записанными в формате TeX, является библиотека MathJax. Платформа онлайн-обучения Khan Academy имеет в своём арсенале множество курсов, посвящённых математике. Один из важных пунктов миссии академии — сделать качественное образование доступным всем, независимо от географического и материального положения, поэтому для Khan Academy очень существенна быстрая работа сайта на слабых старых компьютерах и мобильных устройствах. Именно поэтому разработчики академии решили написать собственную библиотеку для рендеринга TeX в HTML, которая в перспективе могла бы полностью заменить MathJax и работала бы гораздо быстрее.

Библиотека KaTeX пока ещё довольна молода (текущая версия — 0.1.0) и пока ещё не может сравниться с MathJax по функциональности. Текущий список поддерживаемых функций доступен в вики проекта. KaTeX поддерживает меньше выходных форматов по сравнению с MathJax, которая умеет рендерить формулы в HTML+CSS, SVG и MathML. В КаТеХ реализован вывод в HTML, поддержка MathML планируется в будущем. KaTeX не поддерживает старые (старше 8.0) версии IE.


Ключевое преимущество KaTeX - скорость
Total votes 49: ↑49 and ↓0 +49
Views 19K
Comments 31

10 главных выводов, которые я сделал за Год Изучения Продуктивности

GTD *
Translation
Предисловие переводчика: В мире написано столько книг по личной эффективности и тайм-менеджменту, что берясь за этот перевод я безусловно задавал себе вопрос: «А есть ли здесь вообще что-то новое, ради чего эту статью стоит переводить, и главное читать»? Сначала мне казалось, что я ответил на этот вопрос «да», однако реальность оказалась несколько сложнее. 

Сейчас я думаю, что сказать что-то новое человеку, который прочитал хотя бы 2-3 книги по тайм-менеджменту и личной эффективности практически невозможно. Однако существует огромная пропасть между тему, что люди знают, и тем, что люди делают. Поэтому если у вас уже есть какой-то багаж знаний по личной эффективности, я советую вместо вопроса «это что-то, чего я не знаю?» задавать другие вопросы:

1. Согласен ли я с написанным?
2. Если да, поступаю ли я так?
3. Если нет, почему и что я могу сделать чтобы начать поступать правильно? 

Уверен, так статья принесет вам гораздо больше пользы.

Должен сказать, что я с огромным удовольствиям ходил по ссылкам в этой статье, особенно по тем, которые описывают эксперименты Криса (такие как переключение между 90-часовой и 20-часовой рабочими неделями). Поэтому я принял решение сохранить все эти ссылки в переведенной статье.

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

В качестве последнего пожелания – это довольно длинная статья, поэтому читайте продуктивно: не переключайтесь между задачами в процессе чтения; делайте перерывы если ощущаете усталость и потерю концентрации; записывайте полезные мысли, не надеясь на память.

Приятного чтения!
Читать дальше →
Total votes 79: ↑70 and ↓9 +61
Views 191K
Comments 68

Кросскомпиляция библиотек под iOS, делаем это правильно

Development for iOS *
Во время разработки большого проекта наступает такой момент, когда надо встроить в приложение библиотеку из мира open source с подходящей лицензией. Например, вам захотелось ускорить декодирование картинок, или понадобился sqlite3 с fts4, или нужны какие-то плюшки из libicu, которых нету в системной libicucore.

Для этого библиотеку, которая понадобилась, нужно будет собрать для 5 архитектур: armv7, armv7s, arm64, i386, x86_64. С кросскомпиляцией есть много подводных камней, на которые не хотелось бы наткнуться, когда есть уже проверенные решения. В этом коротком посте я расскажу об автоматизации сборки библиотек на примере protobuf и sqlite3.
Читать дальше →
Total votes 38: ↑35 and ↓3 +32
Views 11K
Comments 4

Лучший мир с ReactiveCocoa

Development for iOS *Objective C *Functional Programming *
Sandbox
Большинство приложений тратят много времени на ожидание событий и их обработку. Они ожидают взаимодействия пользователя с интерфейсом. Ожидают ответа на сетевой запрос. Ожидают завершения асинхронных операций. Ждут изменения зависимого значения. И только потом они реагируют.

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

Именно поэтому мы решили сделать общедоступной часть волшебства, стоящей за GitHub for Mac: ReactiveCocoa (RAC). RAC — это framework для компоновки и преобразования последовательностей значений.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Views 36K
Comments 27

Дизайн и архитектура в ФП. Часть 2

Designing and refactoring *Haskell *Functional Programming *
Tutorial
Восходящее проектирование в ФП. Идея — основа хорошего дизайна. Антипаттерны в Haskell.

Немного теории

В прошлой части мы построили высокоуровневую архитектуру приложения. Мы определили подсистемы и их связи, а также разделили программу на три слоя: Application, Game Logic, Views. По логике, следующий этап — дизайн приложения. По важности этот этап не уступает предыдущему, так как именно в ходе дизайна мы должны поддержать все функциональные требования, определить фактическую структуру подсистем, описать основные технические проблемы, применить какие-либо типовые решения или придумать другие. Но прежде попробуем ответить на вопрос: каков он, хороший дизайн ПО? По каким критериям мы определяем «хорошесть» дизайна?
Читать дальше →
Total votes 32: ↑28 and ↓4 +24
Views 12K
Comments 5

Вы можете развить свой интеллект: 5 способов максимально улучшить свои когнитивные способности

Project management *Popular science Brain
Translation
Не стоит преследовать цели, которые легко достичь. Стоит нацеливаться на то, что удается сделать с трудом, приложив немалые усилия — Альберт Эйнштейн

Несмотря на то, что Эйнштейн не был нейробиологом, он точно знал все, когда говорил о способности человека добиваться чего-либо. Он интуитивно догадывался о том, что лишь сегодня нам удалось подтвердить с помощью данных, а именно: что заставляет когнитивные способности работать на максимально высоком уровне. По существу: То, что тебя не убивает, делает тебя умнее.
Читать дальше →
Total votes 167: ↑135 and ↓32 +103
Views 491K
Comments 108

Разбор задач финала чемпионата мира про программированию ACM ICPC 2013

Яндекс corporate blog Sport programming *Algorithms *
На прошедшем неделю назад чемпионате мира по командному программированию ACM ICPC 2013 было 11 задач, одну из которых за отведённое время не смогла решить правильно ни одна из команд.

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

В этом году на ACM ICPC был 21 аналитик из Швеции, Нидерландов, США, Словакии, Беларуси и России. И 10 из них были из Яндекса. Все они в разные годы были призёрами ICPC. Специально для Хабра они разобрали все задания чемпионата.

Разбор задачи «Матрёшка» во время трансляции ACM ICPC 2013
Читать дальше →
Total votes 113: ↑110 and ↓3 +107
Views 120K
Comments 14

Управление временем на личном примере: 10 тезисов

GTD *
Одним из самых дорогих и невосполнимых ресурсов, которым обладаем мы все, является время. В среднем у нас есть 66,29 лет, что эквивалентно 24212 дням, или 34865280 минутам, или 2091916800 секундам. Учитывая, что треть времени человек тратит на сон, а у большинства читателей этой статьи целая треть этого ресурса уже потрачена, драгоценного времени не так уж и много остаётся, чтобы им разбрасываться. Время — это деньги, время — это жизнь.

Не бывает избытка и недостатка времени — его лишь надо ценить и уметь пользоваться его течением, словно потоком рек — благодаря которому человек перемещается на судах и использует силу воды в мельницах. Делать это следует также правильно, чтобы не грести против течения. Даже самые маленькие потоки точат скалы, и секунды могут складываться в года полезных дел и успехов.



Читать дальше →
Total votes 68: ↑55 and ↓13 +42
Views 201K
Comments 38

Полезные штуки для iOS-разработчика #1

Development for iOS *
На Хабре в свое время было несколько статей «Очень много полезных штук для AS3». Автор попытался собрать ссылки на самые полезные и интересные библиотеки. И т.к. в последнее время я разрабатываю под iOS, решил последовать его примеру и сделать то же самое, но для своей платформы. Описания почти прикладывать не буду, все есть на страничках проектов.
Читать дальше →
Total votes 114: ↑109 and ↓5 +104
Views 82K
Comments 80

Еще немного о TDD и модульных тестах

TDD *
Sandbox
На хабре полно адептов TDD, и уже не раз всплывали статьи про разработку методом тестирования. Хочу внести и свои пять копеек статьей про этот замечательный инструмент.

При взгляде новичка на тесты сразу возникает вопрос: а зачем вообще писать лишний код? Вроде как преимущества TDD никто не отрицает, но находятся какие нибудь причины: «да, я слышал что TDD полезен в больших проектах, но у нас проект маленький», «в нашем проекте слишком много изменений, поэтому тесты для нас слишком большая обуза» и так далее. Попробую рассказать как модульные тесты помогают мне в работе и поделиться опытом использования.
Читать дальше →
Total votes 27: ↑23 and ↓4 +19
Views 3.6K
Comments 29

Как Google тестирует ПО

Website development *
Прослушав вебинар «How Google Tests Software» я был так вдохновлен, что решил записать некоторые тезисы. Эта статья и есть мой конспект. Прежде всего, я должен внести ясность относительно ее содержания. Это не дословный перевод. Здесь описаны только те вещи, которые показались мне важными. Проще говоря, здесь описано не все, что прозвучало в вебинаре. Так же существует вероятность, что я понял что-то не до конца или даже понял неправильно. Поэтому горячо рекомендую прослушать вебинар самостоятельно.
Его ведет Джэймс Витакер, который в данный момент занимает пост технического директора по тестированию ПО в Google. Джэймс совместно с коллегами готовится выпустить одноименную книгу. В ней можно будет получить исчерпывающую информацию о том, как проводят тестирование GoogleMaps, Google+, ChromeOS, Android и т.д…
Читать дальше →
Total votes 224: ↑217 and ↓7 +210
Views 39K
Comments 52

The Art of Unit Testing

.NET *


Есть некоторые категории знаний, которые профессиональный разработчик познает в процессе своей работы, не прилагая к этому особенных дополнительных усилий. Вот, например, мало кто из нас читал замечательную книгу по регулярным выражениям Джеффри Фирддла, чтобы познакомиться с одноименной темой. Безусловно, есть масса людей, для которых «регвыры» стали смыслом жизни и без подобных фундаментальных знаний никак не обойтись. Но в большинстве случаев пары мелких статей и справки в соответствующем разделе документации будет достаточно для более или менее комфортной работы с регулярными выражениями (если такое понятие, как «комфортная работа» с регулярными выражениями вообще существуетJ).

Аналогичным образом мы обычно относимся и к изучению юнит тестирования. Ведь юнит-тесты – это же не rocket science; для их изучения не требуется многолетняя подготовка и множество бессонных ночей проведенных за изучением толстенных «талмудов» от гуру юнит-тестирования. Концепцию автоматизированного тестирования кода можно объяснить за 10 минут, а познакомившись с одним из тестовых фреймворков семейства xUnit (еще 15 минут), вы сможете работать с любым другим фреймворком практически сразу же. Затем нужно будет потратить еще 20 минут на изучение какого-нибудь изоляционного фреймворка, типа Rhino Mocks, и, вуаля, у нас есть еще один профессионал в области юнит-тестов.

Читать дальше →
Total votes 42: ↑34 and ↓8 +26
Views 55K
Comments 19

Unit-тестирование от начинающего начинающим

PHP *
Sandbox
Здравствуйте.

На написание статьи меня сподвигнул этот пост. В нём приведено описание инструментов и некоторая теоретическая информация.

Сам я только начинаю разбираться в unit-тестировании и тестировании вообще, поэтому решил поделиться некоторой информацией касательно этого дела. А также систематизировать свои знания и навыки. Далее постараюсь объяснить процесс тестирования по шагам простым обывательским языком, так как нигде в интернете не нашёл разжёванного описания, по шагам так сказать. Кому интересно и кто хочет попробовать всё-таки разобраться, добро пожаловать.
Читать дальше →
Total votes 47: ↑40 and ↓7 +33
Views 78K
Comments 46

Легкий способ начать тестировать

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

Итак, первый совет. Забудьте всё что вы знаете о юнит-тестах. Швырните табуреткой в человека, который сказал вам, что без них не обойтись. Попробуем разобраться, в каких случаях нужно их использовать, а в каких — нецелесообразно.
Читать дальше →
Total votes 83: ↑61 and ↓22 +39
Views 50K
Comments 54

Интеграция iCloud на примере игры Cut the Rope

ZeptoLab corporate blog
Привет хабра-житель. Сегодня я хотел бы поведать тебе о своем опыте интеграции iCloud в игру Cut the Rope.

На этот пост меня вдохновил отзыв одного пользователя, пришедший на почтовый адрес технической поддержки:
«I do not need any help, I just wanted to ask you something… How did you
run iCloud Cut the Rope even if it is not a universal application? I
alternate with iPhone and iPad without problems, and it is extraordinary.
Unfortunately, no other developer does this, it is only with universal
applications, so I wonder… you are a magician you or others are not
willing to do anything? You are number one for me, thank you for your
beautiful game and support it for long. Hello».

Не знаю насколько экстраординарно то, что для iPad и iPhone версии приложения используется один игровой прогресс, но сегодня я расскажу как этого добиться. Тем более, что это очень просто. Также я расскажу о некоторых проблемах и их решениях, с которыми мы столкнулись при интеграции.
Читать дальше →
Total votes 34: ↑30 and ↓4 +26
Views 19K
Comments 18
1

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Date of birth
Registered
Activity