Pull to refresh
-10
0

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

Send message

Разбираемся в Go: пакет io

Reading time8 min
Views84K

Перевод одной из статей Бена Джонсона из серии "Go Walkthrough" по более углублённому изучению стандартной библиотеки в контексте реальных задач.


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


Пакет io является одним из самых фундаментальных во всей стандартной библиотеке. Он предоставляет набор интерфейсов и вспомогательных функций для работы с потоками байтов.


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

Читать дальше →
Total votes 39: ↑36 and ↓3+33
Comments31

Чат на Go (часть 1)

Reading time4 min
Views40K

Начинаем разработку чата на Go. Со стеком технологий пока не определились, но для начала сделаем каркас на Go. Берем за основу стандартный пример и пробуем разобраться, что здесь к чему:


https://github.com/golang-samples/websocket/tree/master/websocket-chat


Структура


Вводим 3 структуры Message, Client, Server, которые определяют сервер, клиента со стороны сервера и сообщение.


Message


Сообщение определено структурой:


type Message struct {
    Author string `json:"author"`
    Body   string `json:"body"`
}

func (self *Message) String() string {
    return self.Author + " says " + self.Body
}

С сообщением все совсем просто… Так, что перейдем сразу к клиенту.

Читать дальше →
Total votes 33: ↑28 and ↓5+23
Comments7

Основы реактивного программирования под Android на практическом примере

Reading time8 min
Views41K

1. Введение в реактивное программирование


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

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

RxJava — реализация ReactiveX с открытым исходным кодом на Java. Базовыми строительными блоками реактивного кода являются Observables и Subscribers. Подробнее с базовой основой можно ознакомиться в статье Грокаем* RxJava, часть первая: основы.

RxAndroid — расширение к RxJava, которое позволяет планировщику запускать код в основном и дополнительных потоках Android приложения и обеспечивает передачу результатов из созданных дополнительных потоках в основное для агрегации и взаимодействия с интерфейсом пользователя.
С целью более полного понимания основных принципов реактивного программирования рассмотрим практический пример для платформы Android. И начнем с настройки окружения для разработки.
Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments23

Управление Docker проектом со множеством git репозиториев

Reading time4 min
Views35K

Команда, в которой я работаю, использует микросервисную организацию в проектах.
У каждого микросервиса свой репозиторий. Каждый микросервис это docker контейнер.
Для среды разработки, чтобы запустить все вместе, мы используем docker-compose.


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


Мы столкнулись с двумя проблемами:


  1. При первоначальном разворачивании среды разработки, приходится обьяснять программисту, либо писать скрипт инициализации, который склонирует и создаст необходимую иерархию папок из нескольких репозиториев.
  2. docker-compose не может собрать приложение, а потом упаковать в идижд. он умеет только запускать docker build.

Для решения этих проблем мы сделали управляющий скрипт docker-project, который оказался очень удобным в работе.
Чем мы и хотим поделиться с open-source сообществом.

Далее
Total votes 17: ↑17 and ↓0+17
Comments40

Сказ о том, как сделать Гаусс пушку за семь дней

Reading time5 min
Views56K
image

Когда я учился в университете на втором курсе, мне пришел весьма необычный заказ — трехступенчатая Гаусс пушка. Сроки на ее создание были очень короткими: на все про все была лишь неделя. Кроме того, пушка была с физически нереализуемой изюминкой: переполюсовкой магнитного поля катушек, что должно было, по мнению автора пушки, повысить ее КПД. Тем не менее, поскольку я любил Гаусс пушки и мечтал начать зарабатывать деньги любимым делом, я согласился на выполнение заказа.

Читать дальше →
Total votes 33: ↑26 and ↓7+19
Comments40

Почему у нас никогда не исчезнут рабочие места

Reading time13 min
Views22K
Беседа Тима О’Райли о безусловном доходе с Джоном Мейнардом Кейнсом [John Maynard Keynes], и Полом Бучхейтом [Paul Buchheit]

В начале Великой Депрессии Джон Мейнард Кейнс написал удивительное экономическое предсказание: несмотря на угрожающий шторм, окутывающий весь мир, человечество оказалось на пороге решения «экономической задачи» – поисков средств к существованию.

Мир его внуков – тот, в котором мы сегодня живём – он представлял так: «впервые со дня сотворения человек столкнется с реальной, всеобщей проблемой: как использовать свою свободу от насущных экономических нужд, чем занять досуг, обеспеченный силами науки и сложного процента, чтобы прожить свою жизнь правильно, разумно и в согласии с самим собой».

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

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


Технологии и свободная торговля уменьшили мировую нищету, но создали экономические трудности для рабочих в развитых странах.
Читать дальше →
Total votes 16: ↑14 and ↓2+12
Comments64

Простые сладкие приложения с Kivy

Reading time12 min
Views106K

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


Возможно, для вас будет новостью, но разрабатывать мобильные приложения с функционалом, который доступен Java разработчикам, под Android с помощью фреймворка Kivy не просто просто, а очень просто! Именно этого правила я придерживаюсь, создавая свои проекты с Python + Kivy — разработка должна быть максимально простой и быстрой. Как щелчок пальцами.


На новичков подаваемая информация не расчитана, я не буду на пальцах объяснять, что, откуда и куда. Думаю, те, кто читает данную статью, обладают достаточными для понимания материала, знаниями. К тому же, Kivy, как я уже только что написал, очень простой фреймворк и вся документация с примерами использования находится в исходниках!

Читать дальше →
Total votes 22: ↑16 and ↓6+10
Comments35

Как я стал паяльником

Reading time6 min
Views59K
Работал один товарищ техническим специалистом у областного интернет-провайдера под Питером. Днём на телефоне у себя дома (техподдержка), вечером – выезды к клиентам. Будучи человеком любознательным, подкованным в электронике и вообще гиком, он, настраивая интернет у клиентов, иногда брался и починить клиентский ноутбук. Знакомо? Думаю, многим здесь. Постепенно он научился чинить не только компьютеры, но и смартфоны, и прочее железо. И стало понятно, что может появиться ещё одна профессия, приносящая даже больший доход, чем основная работа.



В статье палятся профессиональные фишки от сервисного инженера или в народе «паяльника», который работает дома в тапочках на своём аппарате, выбирает клиентов на свой вкус и забирает всю выручку себе.
Читать дальше →
Total votes 47: ↑33 and ↓14+19
Comments145

Настройка Nginx с Let's Encrypt на CentOS 7

Reading time6 min
Views82K
Наверно, многие уже в курсе, что компания Let's Encrypt раздает бесплатные SSL-сертификаты на https://letsencrypt.org. Как же его получить и настроить на своем сервере под управлением CentOS 7 и Nginx?

image
Читать дальше →
Total votes 15: ↑11 and ↓4+7
Comments23

Арестован владелец крупнейшего торрент-трекера в мире

Reading time3 min
Views35K

Власти США планируют разделегировать ряд доменов KickassTorrents, а владельца экстрадируют в Америку





Сейчас крупнейшим торрент-трекером в мире является ресурс KickassTorrents. Посещаемость сайта составляет более миллиона человек в день. Месячная аудитория проекта превышает 50 миллионов человек. По этому показателю ресурс превосходит The Pirate Bay. Понятно, что популярные «пиратские» ресурсы раздражают правоохранителей и владельцев авторских прав на распространяемые при помощи торрентов материалы. С торрент-трекерами пытаются бороться власти многих стран, и некоторым это удается лучше других. Так, власти США заблокировали уже не один домен торрент-трекеров, и сейчас принялись за KickassTorrents.

Причем в этом случае дело не обошлось блокировкой или разделегированием доменов. Был арестован владелец ресурса — 30-летний гражданин Украины Артем Ваулин (зарегистрирован в Харькове). Иск в отношении Ваулина был подан в Чикаго США. Его уже арестовали — причем не в США, а в Польше. Теперь США будет добиваться экстрадиции владельца KickassTorrents.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments120

Проброс USB-принтера в контейнер LXD

Reading time4 min
Views8.1K
Хочу поделиться найденным решением по пробросу принтера HP LaserJet 1000 в контейнер, созданый при помощи LXD.

Немного предыстории


Есть домашний сервер на базе старого ноутбука Acer Aspire 5520G, который используется для всяких экспериментов. На нем была установлена Ubuntu 14.04 и создано несколько контейнеров при помощи LXC, один из которых использовался как принт-сервер.

Проброс принтера был осуществлен путем добавления в файл конфигурации гостя следующих строк:

lxc.cgroup.devices.allow = c 189:* rwm
lxc.mount.entry = /dev/bus/usb/003 dev/bus/usb/003 none bind,optional,create=dir
lxc.mount.entry = /dev/usb/lp0 dev/usb/lp0 none bind,optional,create=file

Все работало отлично, но захотелось обновиться до Ubuntu 16.04 и попробовать LXD.

Оказалось, что старые файлы конфигурации не работают и нужно искать новое решение. Вот им-то и хочу поделиться.
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments15

Текстовые редакторы vs IDE

Reading time5 min
Views16K
В последнее время наблюдается тенденция бессмысленных, с моей точки зрения, дискуссий относительно того, что лучше, — текстовый редактор или IDE. При этом, в темах, где обсуждается данный вопрос, зачастую 400 и более комментариев. Значит, людей этот вопрос интересует. Значит, надо писать статью.

Итак, какие цели статьи?
1. Что же лучше для программирования: текстовый редактор или IDE
2. Vim и Emacs — не текстовые редакторы
Читать дальше →
Total votes 36: ↑6 and ↓30-24
Comments129

C--. Первое знакомство

Reading time4 min
Views44K

Процесс портирования и создания средств разработки программ для KolibriOS продолжается. По наиболее активно используемым языкам программирования мы публикуем статьи. Сегодня мы начинаем рассказывать о языке С--, вокруг которого сложилось активное сообщество в 2000-е годы. Подробности под катом.

Читать дальше →
Total votes 37: ↑36 and ↓1+35
Comments61

Бюджетный стартовый набор Arduino

Reading time3 min
Views47K
У меня более 10 лет стажа в IT-индустрии, но как радиолюбитель — я полнейший нуб. Как и многих в последнее время, меня заинтересовали возможности Arduino. Но не в качестве крутого устройства по управлению всем вокруг, а больше в качестве программируемого конструктора и развлечения.

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

Итак, если вы хотите собрать бюджетный набор с ардуинкой, пригодный для прохождения большинства уроков, а времени для изучения рынка нет, то последующий текст для вас.
Читать дальше →
Total votes 24: ↑16 and ↓8+8
Comments39

Строим ВАХ на Arduino

Reading time2 min
Views27K
У вас когда-нибудь было такое, что есть элемент с двумя выводами по типу таких…



… но вы не понимаете:
  • Что это?
  • Оно рабочее?
  • Какие у него параметры?

У меня бывало, а вчера случилось много…
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments31

Принцип Доверия (Trust) в HTTPS

Reading time8 min
Views33K

Сейчас уже, наверное, больше половины серверов перебрались с http на https протокол. Зачем? Ну, это мол круто, секъюрно.


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


Почему решил написать


Я, вообще, по специальности Android разработчик, и не особо шарю в криптографии и протоколах защиты информации. Поэтому когда мне пришлось столкнуться с этим непосредственно, я был немного в шоке от размера пропасти в моих теоретических знаниях.


Я начал рыться в разных источниках, и оказалось, что в этой теме не так просто разобраться, и тут недостаточно просто прочитать пару статей на Хабре или Вики, при чем я нигде не встретил абсолютно исчерпывающего и понятного источника, чтобы сослаться и сказать — "Вот это Библия". Поэтому у меня это "немного разобраться" заняло кучу времени. Так вот, разобравшись, я решил поделиться этим, и написать статью для таких же новичков, как и я, или просто для людей, которым интересно зачем в строке URL иногда стоит https, а не http.

Читать дальше →
Total votes 32: ↑22 and ↓10+12
Comments42

Шлюз для почтового сервера

Reading time7 min
Views37K
Не так давно посчастливилось сменить место работы. Попал в компанию, которая, в принципе, заслуживает отдельной статьи по ряду причин и, возможно, появится здесь позже. Если совсем вкратце о структуре нашего отдела: заниматься чем-то, кроме своей основной деятельности, не возбраняется, так что взор мой упал на наш почтовый сервер, доставляющий много хлопот.

У компании имеются удаленные партнерские филиалы, равномерно распределенные по всей Западной Европе, использующие один почтовый сервер. К сожалению, бюджет IT-отдела не очень большой, а пользователей достаточно много (около 700 почтовых аккаунтов). Использовался, да и сейчас используется для почты Exchange 2010 с последними обновлениями и более-менее настроенными правилами фильтрации спама, а вот с антивирусом как-то не заладилось. Купленное решение отказывалось нормально работать, раздувая очередь входящей корреспонденции до неприличных размеров и вешая намертво всю почту. (Да, я знаю, что все best practice говорят о необходимости и edge-сервера, и отдельно сервера архивации, но что было на тот момент, то и было.)

Берем инициативу в свои руки. К большому своему удивлению, найти развернутый мануал по решению такой проблемы сходу не удалось, так что возникла идея поделиться своими пробами и ошибками в рунете.
Читать дальше
Total votes 13: ↑12 and ↓1+11
Comments24

Как твои дела, Gogoro?

Reading time5 min
Views15K


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

А сегодня я бы хотел поговорить о другой компании, которая делает свою электрическую микро-революцию но уже среди двухколесного транспорта.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments77

Путь Go: как ускорялась сборка мусора

Reading time10 min
Views17K
Язык Go в Twitch используется во многих нагруженных системах. Простота, безопасность, производительность и читабельность делают его хорошим инструментом для решения проблем, с которыми сталкиваются сервисы, например при стриминге видео и обслуживании переписки миллионов пользователей.

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

Это история о том, как улучшение runtime’а с Go 1.4 по Go 1.6 дало нам 20-кратное уменьшение пауз при работе сборщика мусора, как мы получили ещё 10-кратное уменьшение пауз в Go 1.6 и как, передав наш опыт команде разработчиков, работающей над runtime’ом Go, обеспечили 10-кратное ускорение в Go 1.7 без дополнительных ручных настроек с нашей стороны.
Читать дальше →
Total votes 47: ↑42 and ↓5+37
Comments10

Используем RxJava и Retrofit на Android, учитывая поворот экрана

Reading time11 min
Views55K

Решил я однажды таки попробовать дико популярный нынче Rx. А заодно и Retrofit. И посмотреть, как с их помощью реализовать стандартную задачу: получить с сервера набор данных, отобразить их и при этом ничего не терять при поворотах экрана и не делать лишних запросов. Первый вариант у меня получился сразу почти — просто взял и вызвал cache() на Observable, получаемый из синглтона, но он меня не устраивал — для принудительного обновления приходилось, по какой-то причине, пересоздавать экземпляры классов Retrofit и его же реализации моего интерфейса для API. Пересоздание же самого Observable эффекта не давало — всегда возвращались старые данные вместо запуска нового сетевого запроса и получения новых данных.


После долгих мучений с новой для себя технологией выяснил, что во всём был виновен cache() (точнее, наверное, моё неправильное оного понимание). В итоге сделал так: фрагмент запускает метод, подписывающий Subscriber синглтона на Observable retrofit-a, коий запускает onNext и onError BehaviorSubject-a, на который подписывается уже Subscriber фрагмента. Код на GitHub тут, подробности — под катом.

Читать без регистрации и СМС
Total votes 9: ↑8 and ↓1+7
Comments35

Information

Rating
Does not participate
Registered
Activity