четвер, 28 грудня 2017 р.

Acme

Как вы думаете, каким текстовым редактором пользуются разработчики языка программирования Go Роб Пайк и Расс Кокс, разработчик Unix Кен Томпсон? Чем пользовался Деннис Ритчи? Emacs? Vim? Какая-то IDE? А вот и нет. Ответ: Acme. Да-да, представьте себе, есть такой редактор. Его написал еще в девяностых Роб Пайк для операционной системы Plan9 на языке Alef. Позже редактор портировали на C.

Если кратко, то это такая среда для программистов. Упор сделан на текстовое взаимодействие и управление мышкой. Любой фрагмент текста может быть исполнен как команда. Редактор полностью тайловый, однако это отдельное приложение, а не полноценный оконный менеджер как i3 или Awesome.

середу, 27 грудня 2017 р.

API Docs

Как вы пишете доки к API приложения? Какие средства используете? Документация актуальна? Часто для документирования HTTP API используется swagger, простой и понятный инструмент, но сегодня мы поговорим о чем-то чуть более сложном, о чем-то чуть более продвинутом, а именно о Spring REST Docs. Довольно удивительно, что в разных кругах REST обозначает не сколько стиль архитектуры, сколько, в принципе, использование HTTP для построения API приложения. Spring Rest Docs (SRD) - это один из проектов Spring, который позволяет писать документацию к вашим REST сервисам и вот каким образом. Знакомы с TDD? Успели полюбить написание тестов? Здесь это пригодится. Документация в проекте SRD генерируется на основе написанных вами тестов. Как это выглядит?

середу, 20 грудня 2017 р.

Новая платформа для адаптивного обучения – Stepik ALT

Команда Stepik рада представить вам прототип новой платформы для адаптивного обучения – Stepik ALT! Первая версия построена вокруг обучения программированию на Java (правда на английском ¯\_(ツ)_/¯), а построенный ими граф знаний содержит уже более 100 тем, 300 тестов и 700 практических задач по Java.

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

Внимание, это всего лишь бета-версия новой платформы Stepik ALT, и планируется её публичный релиз в первой половине 2018 года. Поэтому команда Stepik будем очень рада получить ваш фидбек о работе системы и ваших впечатлениях от неё — там в комментариях, либо на почту команды alt@stepik.org. Тогда сделаем Stepik ALT ещё лучше, в том числе и для вас!

Спасибо и удачи!

вівторок, 19 грудня 2017 р.

Kotlin-native & iOS

Дождались обновления kotlin-native v0.5. Теперь можно дергать кроссплатформенный код из Swift/Objective C. Подробнее здесь. Как Вы смотрите на появление курса Kotlin для iOS?

понеділок, 18 грудня 2017 р.

Атрибуты файлов

Вы знаете, что в Linux можно задать файлу расширенные атрибуты? Например, можно сделать файл нестираемым так, что даже root не сможет удалить его.

Делается это с помощью команды sudo chattr +i <filename>. i здесь обозначает immutable. Посмотреть атрибуты файла можно с помощью команды lsattr. К слову, не все файловые системы поддерживают этот и другие атрибуты. Примером таких файловых систем является tmpfs (хотя я слышал про патчи в ядро, которые разрешают, вроде даже есть конфиг ядра CONFIG_TMPFS_XATTR). Но на остальных "стандартных" ФС такое работать будет: ext2, ext3, ext4, XFS, ReiserFS и другие.

пʼятницю, 24 листопада 2017 р.

Go

Расскажу немного о языке программирования Go, его философии и интересных особенностях, которые мне нравятся в нем.

Начну с того, что это достаточно минималистичный язык, разработанный внутри компании Google. Соответственно, нужно понимать, что они разрабатывали его в первую очередь для своих внутренних нужд. Многое в Go до боли напоминает мне их знаменитый Google C++ Style Guide.

середу, 22 листопада 2017 р.

Преимущества FreeBSD

Главным преимуществом FreeBSD, безусловно, считается ее стабильность. По данным компании Netcraft, изучавшей сайты с самым продолжительным календарным временем беспрерывной работы, из 50 первых в ее списке сайтов 47 функционирует под управлением FreeBSD. С момента последней перезагрузки веб-сервера №1 прошло уже более 10 лет! И, конечно же, он работает под FreeBSD.

вівторок, 31 жовтня 2017 р.

Генетический алгоритм: эволюция помогает подросткам

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

вівторок, 12 вересня 2017 р.

JUnit 5 released

Пишите тесты? Стандарт дефакто для большинства функциональных тестов это JUnit. Многие из нас уже привыкли к 4.12 и тут произошло невообразимое. Спустя 2 года работы вышел JUnit 5!

Релиз раcсчитан на Java 8 или выше. В отличии от предыдущих этот релиз состоит из 3 подпроектов: JUnit Platform, JUnit Jupiter, JUnit Vintage. Первый - это целая платформа для запуска тестов, цель такой платформы - большая гибкость в подготовке настройке запуска тестов. Вообще, видно какую работу ребята проделали в сторону гибкости фреймворка, появились лаунчеры и TestEngin'ы, благодаря которым теперь можно еще больше настраивать всё вокруг запуска тестов. Второй проект Jupiter - это куча новых аннотаций и переход на новый виток эволюции от Rules и Runners к концепции расширений Extensions. Почитать про модель расширений можно вот здесь. JUnit Vintage, третий подпроект, предоставит вам возможности запуска тестов Junit 3 и 4 на основе TestEngine. В общем отлично! Технологии развиваются, становятся более гибкими, а я как раз приступил к разработке инфраструктуры для тестирования библиотеки для создания телеграм ботов. Отличный момент, чтобы проверить возможности JUnit 5.

вівторок, 29 серпня 2017 р.

Прекратите проверять на NULL

Рано или поздно в программах на C/C++ приходится использовать передачу аргументов в функцию по указателю. Примером может служить хотя бы тот же const char* при использовании библиотек доступа к базам данных:

void Execute(const char* sql_statement);

Бывают и случаи передачи объектов и примитивных типов по указателю.

Проверка параметров на NULL

Мне хотелось бы рассказать про то, что наверняка делают многие программисты на C и C++: проверяют входной параметр-указатель на NULL (nullptr):

void Execute(const char* sql_statement) {
    if (sql_statement == nullptr) {
      throw std::invalid_argument("Null SQL Statement");
    }

Кроме варианта с исключением есть так же вариант с assert(sql_statement).

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

Причина здесь проста: указатель может содержать множество «невалидных» значений. Если вы считаете, что указатель невалиден только когда его значение NULL (nullptr), то вы ошибаетесь.

Mediator

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

понеділок, 28 серпня 2017 р.

Корни, ссылки, достижимость в Java

Как сборщик мусора в Java определяет, что объект пора уничтожить? В общем случае, объект должен оказаться "недостижим" из "корневых" объектов, но всегда ли это так? Если мы говорим о жестких ссылках, то да. Однако в Java существует 4 вида ссылок:

  • жесткие;
  • мягкие (SoftReference);
  • слабые (WeakReference);
  • фантомные (PhantomReference).

Что-то много непонятного, давайте разберемся чем они отличаются, что значит "недостижим" и кто такие эти "корневые" объекты.

пʼятницю, 25 серпня 2017 р.

Facade

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

К примеру, чтобы пойти в кино нам надо:

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

И все это для того, чтобы просто посмотреть фильм, который нам, очень вероятно, не понравится.

Или же возьмем пример Amazon – покупка с одного клика – как много систем задействовано в операции покупки? И проверка Вашей карточки, и проверка Вашего адреса, проверка товара на складе, проверка или возможна доставка даного товара в даную точку мира... В результате очень много действий которые происходят всего по одному клику.

Для таких вот процесов был изобретен паттерн – Фасад (Facade) который предоставляет унифицированный интерфейса к большому количеству интерфейсов системы, в следствии чего систему стает гораздо проще в использовании.

Bridge

Представьте себе, что у нас есть что-то однотипное, к примеру у нас есть телефон и куча наушников. Если бы у каждого телефона был свой разъем, то мы могли бы пользоваться только одним типом наушников. Но Бог миловал! Собственно таже штука и с наушникам. Они могут выдавать различный звук, иметь различные дополнительные функции, но основная их цель – просто звучание:) И хорошо, что во многих случаях штекер у них одинаковый (я не говорю про различные студийные наушники:) ).

Собственно, Мост (Bridge) позволяет разделить абстракцию от реализации, так чтобы реализация в любой момент могла быть поменяна, не меняя при этом абстракции.

вівторок, 22 серпня 2017 р.

Adapter

Тяжело найти более красочно описание паттерна Адаптер, чем пример из жизни каждого, кто покупал технику из США. Розетка! Вот почему не сделать одинаковую розетку всюду? Но нет, в США розетка с квадратными дырками, в Европе с круглыми, а в некоторых странах вообще треугольные. Следовательно – потому вилки на зарядный устройствах, и других устройствах питания тоже различные.

Представьте, что Вы едете в коммандировку в США. У Вас есть, допустим, ноутбук купленный в Европе – следовательно вилка на проводе от блока питания имеет круглые окончания. Что делать? Покупать зарядку для американского типа розетки? А когда вы вернетесь домой – она будет лежать у Вас мертвым грузом?

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

Так и с Адаптером – он конвертит интерфейс класса – на такой, который ожидается.

суботу, 5 серпня 2017 р.

Kotlin. Часть 5. Пишем DSL

Вот и пришла пора для заключительной статьи в основном цикле о Kotlin. Что это значит? Пользуясь знаниями из предыдущих статей (Введение, Незнакомые конструкции, Мигрируем из Java, Неловкие моменты) ниже мы с вами напишем собственный DSL (domain-specific language), обсудим что это такое и чем Kotlin, как язык, способствует написанию предметно-ориентированных языков, а также как это упрощает разработчикам жизнь, я расскажу о собственном опыте в разработке DSL и о проблемах, которые возникают. Статья может показаться довольно большой, так и есть, я постарался уместить в неё основной концентрат собственных знаний о построении DSL в Kotlin.

четвер, 27 липня 2017 р.

Kotlin. Часть 4. Неловкие моменты

По заголовку становится ясно, что мы проделали уже очень большой путь. В серии Kotlin вышло целых три статьи из пяти (Введение, Незнакомые конструкции, Мигрируем из Java) и это четвертая в которой я хотел бы рассказать вам о том, как не выстрелить себе в ногу, применяя этот язык и как понять причину странного поведения программы. В следующей заключительной статье мы будем обсуждать как реализовать свой DSL (проблемно-ориентированный язык) с помощью Kotlin на примере библиотеки для создания Telegram ботов.

Если вдруг вам не знакомо что-то, что я использую без объяснений, то рекомендую прочитать предыдущие статьи цикла

неділю, 23 липня 2017 р.

Kotlin. Часть 3. Мигрируем из Java

Ранее вышло две статьи по языку Kotlin. В первой статье мы с вами познакомились с языком, а во второй рассмотрели популярные конструкции, которые могут быть не очевидны для типового Java разработчика.

Цели миграции

Прежде чем внедрять Kotlin в ваш проект давайте определимся каким целям вы следуете. Естественно вы хотите улучшить качество кода, ускорить написание и поддержку части или всей системы. Прежде всего, следует определить о каких масштабах идет речь:

  1. Вас интересуют только тесты.
  2. Вас интересует только новая функциональность или часть старого кода.
  3. Вас интересует полная замена старого кода и дальнейшая разработка.

Чем ниже позиция, тем больше масштаб трагедии.

четвер, 20 липня 2017 р.

Руководство по Java 9: компиляция и запуск проекта

Команды java и javac редко используются Java-программистами. Такие инструменты, как Maven и Gradle делают их почти не нужными. Однако Maven и Gradle до сих пор не предоставляют полную поддержку для Java 9, поэтому, если вы хотите начать использовать её уже сейчас или просто хотите узнать некоторые полезные тонкости до официального релиза, стоит научиться вызывать java, javac и jar для управления своим кодом.

Kotlin. Часть 2. Незнакомые конструкции

Вот и наступил тот момент, когда вы познакомитесь с незнакомыми конструкциями в Kotlin. Эта статья является логическим продолжением Kotlin. Часть 1. Введение и её задача познакомить вас с конструкциями языка, которые могут быть крайне не привычны Java программисту. Нужно отметить, что если вы работали, например, с Groovy, то какие-то моменты вам могут быть до боли знакомы, но мы их всё равно рассмотрим. Те вещи, которые мы рассмотрели в предыдущей статье, затрагивать не будем. Если вы не прочитали предыдущую статью, рекомендую, для начала, прочитать её.

вівторок, 18 липня 2017 р.

Kotlin. Часть 1. Введение

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

вівторок, 27 червня 2017 р.

Singleton

Кто вообще бы мог подумать, что Singleton такой не самый просто паттерн в iOS? Вернее, что есть столько версий. Собственно, в .NET, помнится, наблюдалась точно такая же штука, но там в основном были просто апдейты к самой простой версии паттерна. Я вообще считаю, что сколько людей - столько и версий синглтона.

Итак, давайте начнем с простого – с описания.

пʼятницю, 23 червня 2017 р.

Builder

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

вівторок, 20 червня 2017 р.

Abstract Factory

Абстрактная фабрика – еще один очень популярный паттерн, который как и в названии так и в реализации слегка похож на фабричный метод.

Итак, что же делает абстрактная фабрика: Абстрактная фабрик дает простой интерфейс для создания объектов которые принадлежат к тому или иному сеймейству объектов.

понеділок, 19 червня 2017 р.

Factory Method

Еще один порождающий паттерн, довольно прост и популярен. Паттерн позволяет переложить создание специфических объектов, на наследников родительского класса, потому можно манипулировать объектами на более высоком уровне, не заморачиваясь объект какого класса будет создан. Частенько этот паттерн называют виртуальный конструктор, что по моему мнению более выражает его предназначение.

неділю, 18 червня 2017 р.

Паттерны GoF на Objective C

  1. Prototype
  2. Factory Method
  3. Abstract Factory
  4. Builder
  5. Singleton
  6. Adapter
  7. Bridge
  8. Facade
  9. Mediator
  10. Observer
  11. Composite
  12. Iterator
  13. Visitor
  14. Decorator
  15. Chain of responsibility
  16. Template Method
  17. Strategy
  18. Command
  19. Flyweight
  20. Proxy
  21. Memento

Prototype

Прототип – один из самых простых паттернов, который позволяет нам получить точную копию необходимого объекта. То есть использовать как прототип для нового объекта.

понеділок, 8 травня 2017 р.

Талисманы открытых проектов. Часть 3

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

Начало серии - Талисманы открытых проектов. Часть 1.

HyperComments for Blogger

comments powered by HyperComments