Доброго времени суток дорогой читатель. Если ты знаком с моей историей переезда в Бангкок, то, я думаю, тебе будет интересно послушать еще один мой рассказ. В начале апреля 2019 года я переехал в самый лучший город на Земле — Сидней. Занимай свое уютное кресло, завари теплый чаек и добро пожаловать под кат, где тебя ждет множество фактов, сравнений и мифов о Австралии. Что же, погнали!
Пользователь
Создание Android Live Wallpapers
Мне нужно отображать на экране телефона техническую информацию о его состоянии, точнее, о его состоянии в составе тестового пула. Видеть эту информацию я хочу всегда, то есть на Home screen, и без дополнительных телодвижений.
Способов, которые никак не повлияют на выполнение других приложения, всего два: Widget или Live wallpaper. Я выбрал Live wallpaper, они же "живые обои", потому что они автоматически попадают на все страницы Home screen, и даже на Lock screen. Эта статья содержит практические рекомендации, как создавать "живые обои".
IT Релокация. Обзор плюсов и минусов жизни в Бангкоке год спустя
Моя история началась где-то в октябре 2016 года когда в голове поселилась мысль «А почему бы не попробовать работать за рубежом?». Сначала были простые интервью с аутсорсинг компаниями из Англии. Было очень много вакансий с описанием «возможны частые командировки в Америку» но место работы находилось все также в Москве. Да, предлагали хорошие деньги, но душа просила переезда. Скажу честно, если бы меня спросили пару лет назад «Кем вы видите себя через 3 года?», я бы никогда не ответил «Буду работать в Тайланде по рабочей визе». После успешного прохождения интервью и получения офера 15 июня 2017 года я сел в самолет Москва — Бангкок с билетом в один конец. Для меня это был первый опыт переезда в другую страну и в данной статье я хочу рассказать про сложности переезда, возможности которые вам открываются. И в конечном итоге главная цель — вдохновить! Добро пожаловать под кат дорогой читатель.
Таиланд без стереотипов
Я уже больше полутора лет (21 месяц, если быть точным) живу в Бангкоке, спасибо моим коллегам за точный расчёт, а так же идею и вступление к этому рассказу :) А рассказ будет о том как поменялась моя жизнь и что я о нового узнала о Таиланде.
Основные тезисы из интервью Илона Маска у Джо Рогана
2,5 часа они общались об ИИ, бессмертии, Neuralink, инновациях, социальных сетях, колонизации космоса, бурении тоннелей, огнемете, летающих автомобилях, возобновляемой энергетике, безопасности автомобилей. Обсудили Porsche и Rolex, коррупцию и суды Tesla, доброту людей, роль Маска в истории человечества. Как уже все знают, покурили траву и выпили виски.
UNIX-подобные системы содержат кучу костылей. Крах «философии UNIX»
В первой части статьи перечислю кучу костылей UNIX, и вообще разных недостатков. Во второй — про «философию UNIX». Статья написана наскоро, «полировать» дальше не хочу, скажите спасибо, что написал. Поэтому многие факты привожу без ссылок.
Костыли в UNIX начали возникать ещё с момента появления UNIX, а это было ещё раньше появления не только Windows, но даже вроде бы Microsoft DOS (вроде бы, мне лень проверять, проверяйте сами). Если лень читать, хотя бы просмотрите все пункты, что-нибудь интересное найдёте. Это далеко не полный список, это просто те косяки, который я захотел упомянуть.
AIDL (Android Interface Definition Language) и коммуникация между процессами (IPC)
В ней содержится пример приложения с сервисом, который запущен в отдельном процессе.
Параллельный парсинг большого количества HTML-страниц с помощью Apache Ignite (GridGain) в 200 строк кода
Попробую рассказать о своем опыте использования на примере простенькой задачи.
Обзор CDN-сервиса CloudFlare
Хотелось бы начать с того, что данным сервисом можно пользоваться бесплатно. В CloudFlare предусмотрены PRO возможности, но лично мне эти возможности не нужны. Стоимость PRO довольна высока — $20 в месяц.
Действительно ли у каждого ядра есть «свой собственный» кэш первого и второго уровней?
Priority inversion – ситуация, когда низкоприоритетный процесс может блокировать или замедлять высокоприоритетный. Обычно имеется в виду очередность доступа к исполнению на ядре для высокоприоритетного кода относительно низкоприоритетного. С этим должно неплохо справляться ядро ОС. Однако помимо вычислительных ядер, которые несложно распределять посредством affinity и MSI-X, в процессоре есть ресурсы, общие для всех задач – контроллер памяти, QPI, общий кэш третьего уровня, PCIe устройства. В вопросы PCIe я углубляться не буду, т.к. не являюсь экспертом в данной теме. Priority inversion на почве доступа к памяти и QPI я давно не наблюдал – пропускной способности современного многоканального контроллера как правило хватает и высокоприоритетным, и низкоприоритетным задачам. Остановлюсь на кэшах.
Управление миграциями БД с Liquibase
Хотя миграция схемы базы данных кажется довольно простой задачей изначально, задача становится сложнее после того, как появляется желание откатывать изменения схемы без ее создания заново.
Кроме схемы и операций DDL, Liquibase позволяет мигрировать данные приложения, с поддержкой наката изменений данных и их отката.
Рубин на рельсах: продакшен и деплой для чайников
Команда разработчиков Rails рекомендует использовать Phusion Passenger, он что-то вроде mod_php — установил, разместил файлы и полетел. На момент изучения вопроса на форумах хватало баталий о производительности решений; Passenger в них фаворитом не значился.
Совета относительно альтернативы я спросил у техдиректора сайта с миллионом уников в сутки — тот отправил меня гуглить на тему Nginx и Unicorn. Инструкция по настройке продакшена, найденная на Хабре, датировалась 2009 годом. Помимо прочего, ее просто переполняли изъяны уроков «Как нарисовать сову».
Отдельные составляющие процесса кое-где разжеваны по-английский, но монолитный tutorial на глаза так и не попался. В традициях рельсового сообщества лежит принцип, предписывающий делиться результатами и опытом решения проблем.
Классические паттерны проектирования на Scala
Pavel Fatin работает над Scala plugin'ом для IntelliJ IDEA в JetBrains.
Введение
В этой статье будут представлены примеры того, как реализуются классические паттерны проектирования на Scala.
Содержание статьи составляет основу моего выступления на JavaDay конференции (слайды презентации).
Работа с реляционными базами данных в Scala
В качестве основы взяли Apache DbUtils и сделали для него простую обёртку на Scala. Ниже я расскажу, как возможности Scala, особенно её последней версии 2.10, помогли упростить работу с базой данных.
А пытливых читателей, кто дочитает до конца, ждёт сюрприз.
Реализуем RESTful Web Service на Scala
Подготовка
За основу возьмём задачу из предыдущей статьи, но постараемся решить её так, что бы код решения умещался на экран. Хотя бы на 40-дюймовый и пятым шрифтом. В конце концов, в XXI веке должна быть возможность решать простые задачи без мегабайтов xml-конфигов и десятков абстрактных фабрик.
Для тех, кто не хочет ходить по ссылкам уточню: мы собираемся реализовать простейший RESTful сервис для доступа к базе данных клиентов. Из необходимой функциональности — создание и удаление объектов в базе, а также постраничная выдача списка всех клиентов с возможностью сортировки по разным полям.
В качестве кирпичиков, из которых мы будем строить дом, возьмём:
- Scala — даже не кирпичик, а скорее фундамент,
- Unfiltered — отличная библиотека для обработки HTTP-запросов,
- Squeryl — библиотека для запросов к базе данных,
- Jackson — библиотека для работы с JSON, изначально написанная для Java, но на ура справляющаяся и со Scala-типами,
- Scalaz — библиотека, позволяющая писать в коде разные забавные символы типа ⊛, ↦ или ∃, а заодно реализующая такие полезные абстракции, как аппликативные функторы, моноиды, полугруппы и стрелки Клейсли. Последние, правда, мне пока не приходилось использовать, но скорее всего это объясняется тем, что я ещё не достиг нужной степени функционального просветления.
По ходу статьи я постараюсь давать достаточно пояснений, что бы код был понятен людям не знакомым со Scala, но не обещаю что у меня получится.
Squeryl — простота и изящество
Решил написать небольшой обзор с примерами на легковесный ORM для Scala — Squeryl 0.9.5
Начнем с основных достоинств данного фреймворка.
1) Squeryl предоставляет DSL для SQL запросов. К примеру
def songs = from(MusicDb.songs)(s => where(s.artistId === id) select(s))
def fixArtistName = update(songs)(s =>
where(s.title === "Prodigy")
set(
s.title := "The Prodigy",
)
)
Синтаксис напоминает C# LINQ. Как вы могли заметить в запросах используются лямбда выражения, что значительно сокращает объем кода.
В данном примере метод songs возвращает объект Query[Song] который реализует интерфейс Iterable, что позволяет работать с ним как с обычной коллекцией.
Также стоит отметить, что запросы можно будет использовать в качестве подзапросов, для этого достаточно указать запрос в конструкции from вместо таблицы.
Scala. Всем выйти из сумрака!
—Цитаты великих
И здравствуйте!
Сегодня мы поговорим о неявном в языке Scala. Кто еще не догадался — речь пойдет об implicit преобразованиях, параметрах, классах и иже с ними.Все новички, особенно любители питона с зеновским Explicit is better than Implicit, обычно впадают в кататонический ступор при виде подкапотной магии, творящейся в Scala. Весь компилятор и принципы в целом охватить за одну статью удастся вряд ли, но ведь дорогу осилит идущий?
Курс молодого бойца для Spark/Scala
Команда Retail Rocket использует узкоспециализированный стек технологий Hadoop + Spark для вычислительного кластера, о котором мы уже писали обзорный материал в самом первом посте нашего инженерного блога на Хабре.
Готовых специалистов для таких технологий найти довольно сложно, особенно, если учесть, что программируем мы исключительно на Scala. Поэтому я стараюсь найти не готовых специалистов, а людей, имеющих минимальный опыт работы, но обладающих большим потенциалом. Мы берем даже людей с частичной занятостью, чтобы было удобно совмещать учебу и работу, если кандидат — студент последних курсов.
Что такое большие данные, часть 2
В первой части этой серии статей вы узнали о данных и о том, как можно использовать компьютеры чтобы добывать смысловое значение из крупных блоков таких данных. Вы даже видели что-то похожее на большие данные у Amazon.com середины девяностых, когда компания запустила технологию для наблюдения и записи в реальном времени всего, что многотысячная аудитория клиентов одновременно делала на их сайте. Довольно впечатляюще, но назвать это большими данными можно с натяжкой, пухлые данные — больше подойдёт. Организации вроде Агентства национальной безопасности США (NSA) и Центра правительственной связи Великобритании (GCHQ) уже собирали большие данные в то время в рамках шпионских операций, записывая цифровые сообщения, хотя у них и не было простого способа расшифровать их и найти в них смысл. Библиотеки правительственных записей были переполнены наборами бессвязных данных.
То, что сделал Amazon.com, было проще. Уровень удовлетворённости их клиентов мог быть легко определен, даже если он охватывал все десятки тысяч продуктов и миллионы потребителей. Действий, которые клиент может совершить в магазине, реальный он или виртуальный, не так уж много. Клиент может посмотреть что в доступе, запросить дополнительную информацию, сравнить продукты, положить что-то в корзину, купить или уйти. Всё это было в пределах возможностей реляционных баз данных, где отношения между всеми видами действий возможно задать заранее. И они должны быть заданы заранее, с чем у реляционных баз данных проблема — они не так легко расширяемы.
Заранее знать структуру такой базы данных — как составить список всех потенциальных друзей вашего неродившегося ребенка… на всю жизнь. В нём должны быть перечислены все неродившиеся друзья, потому что как только список будет составлен, любое добавление новой позиции потребует серьезного хирургического вмешательства.
Intro to RxJava
Лекция 1
В лекции рассказано про:
- Общие идеи фреймворка RxJava, зачем это нужно и как с этим работать
- Способы создания различных Observable и самые основные операции над ними
- Основных операторов преобразования Observable, а также о методе cache
- Операции соединения Observable и их последовательного / параллельного выполнения.
Презентация.
Информация
- В рейтинге
- Не участвует
- Зарегистрирован
- Активность