Практически во всех проектах, которыми я занимался, приходилось отображать список элементов (ленту), и эти элементы были разного типа. Часто задача решалась внутри главного адаптера, определяя тип элемента через instanceOf в getItemViewType(). Когда в ленте 2 или 3 типа, кажется, что такой подход себя оправдывает… Или нет? Что, если завтра придет требование ввести еще несколько типов да еще и по какой-то замысловатой логике?
В статье хочу показать, как паттерн DelegateAdapter позволяет решить эту проблему. Знакомым с паттерном может быть интересно посмотреть реализацию на Kotlin с использованием LayoutContainer. Читать дальше ->
Представляем интервью с ведущими экспертами в области безопасности: Владимиром Кочетковым (руководителем отдела исследований анализа защищенности приложений в Positive Technologies) и Михаилом Щербаковым (независимым разработчиком и консультантом в области информационной безопасности).
О чем эта статья? Процитирую одну из реплик Михаила:
“Разработка защищенного приложения – это частный случай разработки приложения, не содержащего ошибок вообще. Кроме этого ваше приложение использует сторонние библиотеки, защищенность которых тоже не гарантируется, далее оно выполняется на ОС и железе. Часто мы даже не можем сказать, на какой именно ОС и на каком железе. И все это со временем изменяется!”
Как известно из функциональных интерфейсов в Stream API нельзя выбрасывать контролируемые исключения. Если по каким-то причинам это необходимо (например, работа с файлами, базами данных или по сети), приходится оборачивать их в RuntimeException. Это неплохо работает если ошибки игнорируются, но если их необходимо обрабатывать, то код получается громоздкий и трудночитаемый. Я заинтересовался можно ли объявлять интерфейсы и методы с generic исключениями и неожиданно для себя узнал, что можно.
Зададим такой функциональный интерфейс, от стандартного интерфейса Function он отличается только наличием третьего generic-типа для бросаемого исключения.
public interface ThrowableFunction{
B apply(A a) throws T;
}
И объявим простенький метод, который преобразует коллекцию используя этот интерфейс, у этого метода также объявлен generic-тип для бросаемого исключения (совпадающий с типом исключения которое может выбросить функциональный интерфейс).
Некоторое время назад я начал изучать возможность использования Go в некоторых своих сторонних проектах и был просто поражен красотой этого языка программирования.
Думаю, что его разработчикам удалось найти баланс между простотой использования, обычно свойственной интерпретируемым языкам с динамической типизацией, и производительностью вкупе с безопасностью (типобезопасность, безопасность использования памяти), которые характерны для компилируемых языков со статической типизацией.
Есть еще две особенности языка, которые делают его идеальным вариантом для разработки современных систем. Я на них остановлюсь подробнее в разделе статьи под названием «Сильные стороны».
Одна из них — первоклассная поддержка конкурентности (concurrency) (с помощью горутин (goroutines) и каналов, рассмотрено ниже). Конкурентность по своему определению позволяет эффективнее использовать всю доступную мощь CPU, даже если у процессора всего одно ядро. В Go на одной машине могут одновременно выполняться сотни тысяч горутин (легковесных потоков). Каналы и горутины крайне важны при построении распределенных систем, поскольку они абстрагируют механизмы, связанные с передачей сообщений в рамках концепции поставщика-потребителя (producer-consumer messaging paradigm).
Магическая сила слова способна на многое. В руках умелого копирайтера словосочетания превращаются, превращаются словосочетания в емкий и информативный текст, способный подтолкнуть пользователя к принятию решения о покупке. Как проверить себя и отличить качественный текстовый контент от «водяного» текста, способного выгнать потенциального клиента с сайта после прочтения первых двух абзацев. Читать дальше ->
Данная статья посвящена реальному опыту эксплуатации кластеров на базе Virtuozzo Storage.
За год активного внедрения и использования платформы на серверах нашего хостинга, а также при создании кластеров для наших клиентов, у нас собралось достаточно много советов, замечаний и рекомендаций. Если вы задумались о внедрении этой платформы, вы сможете учесть наш опыт при проектировании своего кластера. Читать дальше ->
Реферат: Эта статья посвящена разработке высокоскоростного ведического умножителя, использующего технику древнееиндийской ведической математики, модифицированной для улучшения быстродействия.
Ведическая математика — это древняя система математики с уникальной системой вычислений, основанной на 16-и сутрах. В статье показана эффективность Урдхва Триагбхайам (Urdhva Triyagbhyam) — ведического метода умножения, и выделяется разница с обычным умножением. Метод основан на параллельной генерации независимых произведений, устранении шагов с нулевым результатом и масштабировании к старшим битам с использованием алгоритма Карацубы (Karatsuba), совместимого с различными типами данных. Сутра Урдхва Триагбхайам является самым эффективным алгоритмом, дающим минимальную задержку для умножения всех типов чисел, и больших, и малых. Далее приводится код алгоритма на Verilog HDL для умножения 32х32 бита и реализация на FPGA с помощью Xilinx Synthesis Tool на Spartan 3E с выводом результата на LCD. Синтез результата показывает, что время вычислений для произведения 32х32 бита равно 31.526 ns. Ключевые слова: ведическая математика, сутра урдхва триагбхайам, алгоритм Карацубы-Офмана Читать дальше ->
Я думаю, каждый разработчик на Unity3D рано или поздно сталкивается с необходимостью локализации приложения на несколько языков. В любом случае, лучше заранее заложить это в архитектуру, даже если на старте приложения несколько языков и не требуется.
В данной статье я опишу разработку простого плагина для локализации UI Text-компонентов с возможностью динамической смены языка и редактирования текста в редакторе. Читать дальше ->
В марте 2015 года Epic Games повернулась лицом к Open Source сообществу, предоставив бесплатный доступ к своему движку Unreal Engine версии 4 (установив лимит на прибыль от использования движка в 3000$ за квартал). Более того, еще в 2014 году компания говорила о том, что поддержка свободных операционных систем, в частности Linux, является для неё одной из приоритетных задач.
Стоит отметить, что эти слова не стали пустым звуком, и на сегодняшний день движок достаточно уверенно работает в среде Linux. Существует достаточное количество официальной документации, повествующей о том, как установить и настроить движок в среде этой ОС.
Однако, при кажущейся прозрачности процесса развертывания рабочего окружения, существует ряд мелких, но неприятных нюансов, затрудняющих жизнь поклонникам пингвинов. Под катом краткое и вольное описание особенностей установки движка, с которыми столкнулся автор, призванное разрешить некоторые из трудностей, с которыми сталкиваются новички.
23 сентября в Москве прошла конференция RailsClub. Под катом — много видео, немного фотографий, ссылки на презентации. Начнем с отчетного ролика — в нем коротко о том, как все было.
Robots.txt указывает веб-краулерам мира, какие файлы можно или нельзя скачивать с сервера. Он как первый сторож в интернете — не блокирует запросы, а просит не делать их. Интересно, что файлы robots.txt проявляют предположения веб-мастеров, как автоматизированным процессам следует работать с сайтом. Хотя бот легко может их игнорировать, но они указывают идеализированное поведение, как следует действовать краулеру.
По существу, это довольно важные файлы. Так что я решил скачать файл robots.txt с каждого из 1 миллиона самых посещаемых сайтов на планете и посмотреть, какие шаблоны удастся обнаружить.
Последние пару лет у меня не проходит ощущение, что веб стремительно уступает место чему-то, что мне не нравится. Чему-то чем он быть не должен. Ощущение вполне субъективное, но на прошлой неделе я натолкнулся на статью Андре Стальца (Andr'e Staltz) под заголовком "Веб начал умирать в 2014. И вот как", которая подтверждает мои ощущения фактами. И вот что я думаю о причинах.
Уважаемые коллеги, представляю вашему вниманию и на ваше осуждение контейнер для управления состоянием React приложения xstore. Он определенно является таким маленьким детским велосипедом рядом с большим и сверкающим мотоциклом Redux. Все мы программисты JavaScript являемся такой большой и не сбавляющей обороты фабрикой по производству велосипедов.
Для более менее просто начинающих или начинающих свое знакомство с React JavaScript программистов Redux может показаться несколько сложной штукой, которая иногда непонятно как работает и к которой сложно "законнектиться", хочется чего-то попроще, чего-то похожего на данный маленький велосипед.
Иногда может возникнуть вопрос: чьих этот файл, откуда вообще взялась эта библиотека? Удобный менеджер пакетов решает очень многие проблемы ОС. Можно с уверенностью сказать, что если вы подружитесь с МП, то подружитесь и с дистрибутивом как таковым. Причем важно освоить именно набор основных команд, и знать где найти дополнительную информацию.
Далее следует джентльменский набор необходимых для повседневной рутины команд основных Linux дистрибутивов: установить, обновить и удалить пакет, накатить обновления, проверить зависимости, установить принадлежность файла пакету и пр.
DotNet-коммьюнити снова на связи. Спешу сообщить, что коммьюнити .NET по-прежнему живут и развиваются! Поскольку все уже и так знают про наши .NET сообщества, не будем растекаться мыслью по древу, а перейдём сразу к делу!
Преждем чем проанонсировать новые меропириятия MskDotNET и SpbDotNet, хотелось бы сказать несколько слов о связи старшего брата — DotNext и локальных коммьюнити. Поехали! Читать дальше ->
Законы, которые направлены на регулирование работы в интернете, существуют во многих государствах. Согласно официальной статистике, 1,72 млрд людей сталкиваются с цензурой в Сети каждый день.
Правительства при этом руководствуются самыми разными соображениями: от блокирования запрещенного контента до поддержки «отечественных» компаний. В сегодняшнем материале говорим о причинах ограничения доступа к интернет-сервисам в разных странах.
Издание Bloomberg описало историю крупнейшего падения акций одной компании, мы приводим ее краткий пересказ.
В чем проблема
Если первоначальная стоимость компании PetroChina в момент IPO на шанхайской бирже составляла $800 млрд — сумму, достаточную, например, для покупки всех публичных компаний в Италии, то спустя десять лет после триумфа, нефтяной гигант потерял около 600 миллиардов долларов на рынке: сейчас его стоимость составляет чуть больше 200 миллиардов. Читать дальше ->