Рубрика «Программирование» - 754

Я разрабатываю бесплатную библиотеку StreamEx, которая расширяет стандартное Java 8 Stream API, добавляя туда новые операции, коллекторы и источники стримов. Обычно я не добавляю всё подряд, а всесторонне рассматриваю каждую потенциальную фичу. Например, при добавлении новой промежуточной (intermediate) операции встают такие вопросы:

  1. Будет ли она действительно промежуточной, то есть не будет трогать источник до выполнения терминальной операции?
  2. Будет ли она ленивой и вытаскивать из источника не больше данных, чем требуется?
  3. Сработает ли она на бесконечном стриме? Требует ли она ограниченный объём памяти?
  4. Будет ли она хорошо параллелиться?

Минусик по любому из этих пунктов заставляет серьёзно задуматься, добавлять ли такую операцию. Минусик по первому — это сразу нет. Например, у конкурентов в jOOλ есть операция shuffle(), которая выглядит как промежуточная, но на самом деле прямо сразу потребляет весь стрим в список, перемешивает его и создаёт новый стрим. Я такое не уважаю.

Минусики по остальными пунктам не означают сразу нет, потому что есть и стандартные операции, которые их нарушают. Второй пункт нарушает flatMap(), третий — sorted(), четвёртый — всякие limit() и takeWhile() (в JDK-9). Но всё-таки я стараюсь этого избегать. Однако на днях я открыл для себя операцию, которая плохо параллелится и в зависимости от использования может не сработать на бесконечном стриме, но всё же слишком хороша. Через неё удаётся буквально в несколько строчек выразить как практически любую существующую промежуточную операцию, так и кучу несуществующих. Я назвал операцию headTail().
Читать полностью »

Тема отличий таких понятий как Entity (Сущность) и Value Object (Объект-Значение) из Domain-Driven Design не нова. Тем не менее, я не смог найти статью с полным списком их отличий, так что решил написать свою.
Читать полностью »

Linux в кармане — на службе у фотографа - 1Так получилось, что фотография, это мой основной профессиональный вид деятельности, а программирование — хобби, которое иногда позволяет размять мозг. Кроме непосредственно разминки для мозга, программирование помогает и в работе. Например, писал полезные штуки, такие как это или это, или это.

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

Это рассказ, о том, как мне удалось сделать для себя инструмент, который с минимальным моим участием и минимальным дополнительным весом в рюкзаке, помогает сделать красивые слайдшоу. И конечно же рассказ о python, ffmpeg и linux на android.

Читать полностью »

Ершов Андрей Петрович программист — пионер, его влияние на развитие советской школы программирования и вычислительной техники нельзя переоценить. Он ввел в научный оборот термин информатика для обозначения науки, связанной со способами обработки, хранения и передачи информации с помощью ЭВМ. Стал первым программистом, избранным в Академию наук по Отделению информатики, вычислительной техники и автоматизации.

Андрей Петрович Ершов — пионер отечественного программирования - 1

Жизненный путь Андрея Петровича начался 9 апреля 1931 года. Ершов родился в Москве, в семье потомственных интеллигентов. Двоюродный прадед Ершова по материнской линии – Федор Иванович Успенский, ординарный академик Российской академии наук, основатель и директор Русского археологического института в Константинополе. Прадед, Алексей Иванович Успенский служил военным врачом на Кавказе и в Закаспийской области и был женат на дворянке Евдокии Васильевне Скрыльник. Дед Андрея Петровича, Константин Николаевич Малинин — выпускник Московского университета, был членом партии большевиков с 1904 год, позже заведовал отделом в Агитпропе ЦК ВКП (б). Мать, Татьяна Константиновна Малинина, окончила Академию коммунистического воспитания им. Н.К. Крупской в Москве. Отец, Петр Николаевич Ершов закончил аспирантуру в Научно-исследовательском институте полупродуктов и красителей (НИОПИК), работал в Москве, Донбассе, затем заведовал отделом Центральной лаборатории на Кемеровском анилинокрасочном заводе.
Читать полностью »

Экосистема российского ПО. Вступление
Экосистема российского ПО. Термины и классификация

Здравствуйте.

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

Так например, вчера, 19 января, с небольшой задержкой получила таки общественный резонанс тема обновлений в Стратегии национальной безопасности РФ. Наряду с традиционной риторикой о статусе мировой державы в доке появляются новые цели, например, такие как:

  • создание условий для развития личности;
  • устранение структурных дисбалансов в экономике;
  • повышение эффективности и качества государственного управления экономикой;
  • стимулирование малого и среднего предпринимательства в производственной сфере.

Эти изменения важны, как мне кажется, и вот почему.Читать полностью »

Несколько интересностей и полезностей для всех - 1

Доброго времени суток, уважаемые читатели! Обычно мои подборки ориентированы сугубо на веб-разработку, но этот выпуск охватывает все сферы программирования. Но самое главное, что интересность и полезность каждого материала имеет социальное доказательство, благодаря замечательному сервису Slant.co. Это некий аналог Quora, сфокусированный сугубо на разработчиков.

Коллекция из почти 200 ответов в Slant на вопросы «Какие лучшие...»

Читать полностью »

Защита утилиты шифрования Scrypt с помощью Intel® Tamper Protection Toolkit - 1В нашей статье мы покажем, как Intel Tamper Protection Toolkit позволяет защитить критически важные участки кода и ценные данные в утилите шифрования Scrypt против статического/динамического реверс-инженеринга и изменений. Scrypt – наиболее новая и безопасная функция выработки ключа по паролю, широко применяемая на практике. Однако существует угроза фальсификации параметров функции scrypt, что приведет к появлению уязвимостей пароля пользователя. Инструментарий позволяет уменьшить эти угрозы. Мы определяем модель угроз для рассматриваемого приложения, объясняем как провести его рефакторинг для дальнейшей защиты, учитывая особенности применения инструмента Tamper Protection к приложению.
Основной целью этой статьи является демонстрация возможностей Intel Tamper Protection Toolkit по защите от атак на критически важные участки кода и ценные данные, находящиеся в реальных приложениях. Инструментарий позволяет противодействовать статическому и динамическому реверс-инженерингу путем обфускации и препятствовать внесению изменений в защищаемое приложение путем контроля целостности во время выполнения.
Читать полностью »

Продолжаем

Хорошо. Давайте теперь попробуем подключить в main.rs ещё один модуль — number2. И в нём мы определим функцию one2(), которая возвращает не «one», а «one2».
Подключаем:

use num::number;
use num::number2;

Читать полностью »

Прочитал статью коллеги Andrey2008 о добавлении, а точнее сопротивлении добавлению в проект библиотек и решил описать «чек-лист» который я использую в работе со сторонними компонентами. Пока соотношение решений в пользу готовых/написанных с нуля за последние лет 10 примерно укладывается в пресловутые 80/20, может это мне просто везет.
Читать полностью »

Чуть-чуть о статье

В этой статье будет идти речь о самых основных способах использования модулей в данном языке (используемая ОС: Linux). Всем известно, что лучший способ запомнить информацию надолго — это предоставить её кому-либо в виде лекции. Для этого и была написана данная статья — чтобы помочь самому себе, но буду очень рад, если она поможет и тебе, читатель.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js