• Java рисует фигуры в документах PDF

    Когда я недавно редактировал документ PDF, мне нужно было добавить в документ некоторые графические объекты, такие как многоугольники, прямоугольники, эллипсы и т. Д. После поиска информации и тестирования я обнаружил, что Free Spire PDF для Java может помочь мне в приложениях Java. Завершите эту операцию.

    Сегодня я поделюсь с вами кодом Java, который использовал для рисования фигур в документах PDF, а также для установки цвета кромки фигуры и цвета заливки.

    Конфигурация среды


    Установите бесплатный пакет Spire.Pdf.jar через хранилище Maven и настройте код файла pom.xml следующим образом:

    <repositories>
            <repository>
                <id>com.e-iceblue</id>
                <name>e-iceblue</name>
                <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
            </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.pdf.free</artifactId>
            <version>2.6.3</version>
        </dependency>
    </dependencies>
    
    Читать дальше →
  • Синтаксический сахар для SQL

    image

    Зачем это нужно?


    1. Увеличение скорости backend-разработки.
    2. Создание запросов, простых для чтения и написания.
    3. Создание web-сервисов на чистом SuQL, без необходимости постобработки на каком-либо языке программирования. Вам больше не понадобятся какие-либо backend языки или фреймворки. Представьте что вы уже можете получить данные из базы в том виде, в котором требует клиентское API
    4. Возможность расширить синтаксис самостоятельно, как угодно, выходя за рамки даже SQL. Границ просто нет.

    Читать дальше →
  • Коротко о this в функциях javascript

    Предисловие


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

    Недавно я все же, как мне кажется, сделал это и хотел бы поделиться с вами.

    Без лишних слов


    Мы разберем как простые, так и сложные примеры — так что всем будет интересно.

    Два основных тезиса, которые мы рассмотрим:

    (1) Для функций, объявленных через function(){}, this вычисляется в момент вызова.
    (2) Для стрелочных функций this определяется в момент создания функции.
    Читать дальше →
  • Аудио ЦАП на AK4393 + PCM2706

    Мое увлечение электроникой началось с такого забавного явления, как «аудиофилия» в худшем понимании этого слова: с верой в волшебные конденсаторы с электролитом из соплей китайских девственниц, публичным отрицанием советских лавсановых К73 и твердым убеждением, что «керамика – убийца звука». Мне хотелось чего-то этакого в смысле аудио, но что для этого нужно я тогда толком не понимал. Мой старший брат притащил откуда-то журнал “AudioVideo” в котором на одной из последних страниц была схема усилителя с входным дифференциальным каскадом на БСИТ транзисторах средней мощности и коряво сделанным источником тока на одном транзисторе, на который этот каскад был нагружен. Не самый лучший вариант, но тогда я этого не знал. Статья называлась «Усилитель с «пентодным» звучанием», а лампы – это же, типа, круто да и брат сказал, что будет круто и надо делать… Короче, один канал усилка я все-таки собрал. Усилитель, несмотря ни на что, издавал кое-какие звуки, большое спасибо автору статьи, некому Жану Цихисели, но шумел как сволочь и второй канал я собирать не стал.
    Читать дальше →
  • Билдеры или конструкторы? Рассуждаем вслух

    Всем привет! Хочу порассуждать над целесообразностью использования билдеров для не сложных объектов.

    Для упрощения буду использовать аннотации lombok'a:

    @Value
    @Builder

    Недолго погуглив, получаем, что builder Отделяет конструирование сложного объекта от его представления так, что в результате одного и того же процесса конструирования могут получаться разные представления. Только ли для сложных объектов?

    Рассмотрим на простом примере:

    @Value
    public class Info {
        @Nullable String uuid;
        @Nullable String email;
        @Nullable String phone;
    }
    

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

    Но, как мы видим, все поля nullable, и создание такие объектов будет выглядеть не очень красиво:

            final Info info1 = new Info(null, "[email protected]", "79998888888");
            final Info info2 = new Info("3d107928-d225-11ea-87d0-0242ac130003", null, null);
            final Info info3 = new Info("3d107928-d225-11ea-87d0-0242ac130003 ", "[email protected]", null);
    ...
    

    Безусловно, есть варианты:

    1. Объекты, где немного полей разных типов, можно завезти несколько конструкторов. Но это не решает проблему класса выше.
    2. Использовать setter'ы — субьективно, нагромождает код.

    Читать дальше →
  • Критическая ошибка загрузчика GRUB2

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

    Обозначенная уязвимость, названная как «BootHole» и отслеженная как CVE-2020-10713, находится в загрузчике GRUB2, который, если его использовать, потенциально может позволить злоумышленникам обойти функцию безопасной загрузки и получить высокопривилегированный постоянный и скрытый доступ к целевым системам.

    Безопасная загрузка — это функция безопасности Unified Extensible Firmware Interface (UEFI), которая использует загрузчик для загрузки критически важных компонентов, периферийных устройств и операционной системы, обеспечивая при этом выполнение только криптографически подписанного кода во время процесса загрузки.

    «Одна из явных целей разработки Secure Boot — не дать неавторизованному коду, даже работающему с правами администратора, получить дополнительные привилегии и постоянство перед ОС, отключив Secure Boot или иным образом изменив цепочку загрузки», — говорится в отчете.
    Читать дальше →
  • Используем PyInstaller для создания exe-файла игры на Pygame

    Я, как и многие новички в создании игр, столкнулся с проблемой как поделиться готовым проектом с друзьями, у которых не установлен Python.

    На недостаток обучалок по созданию игр на Pygame не пожалуешься, но мне не удалось найти подробной инструкции как собрать единый exe-файл, для запуска которого не требуется держать рядом папку с изображениями и игровыми звуками.

    Из множества библиотек, собирающих проекты в exe, выбрал PyInstaller. Его оказалось достаточно, чтобы справиться с задачей. Опишу все пошагово (для Windows).
    Читать дальше →
  • От поисковика на сайте до собственной поисковой системы

    В этой статье хочу обсудить с Вами такую проблему как поиск на сайте и предложить свой вариант ее решения. В сети огромное множество сайтов, которые оснащены отвратительным поиском, еще больше сайтов вообще без этой функции. Даже вошло в привычку не искать на сайте, а вбивать в поисковик «запрос site:domain.com» или просто «запрос domain». Почему такой важной вещи, как поиск, уделяется так мало внимания? Давайте разбираться вместе.


    Давным давно, когда можно было увидеть Pege Rank, а вебмастера играли на ТИЦ в карты, я создал свой первый сайт на тему автомобилей. Работая на простой CMS, он висел на дешевом хостинге без возможности установить базу данных. Тогда впервые мне пришла идея претворить свой первый проект в крупный портал с удобным поиском. Как только я поделился этой идеей со своим другом, который в то время успешно занимался разработкой и продвижением сайтов в поисковых системах (ПС), сразу же получил неутешительный фидбэк. Мол, это возможно, и даже одному клиенту он попытался это сделать, однако это настолько сложно, что проще сделать еще несколько сайтов и добавить их в сапу, чем заморачиваться над одним проектом с туманными перспективами монетизации. Что-то подобное я уже слышал от сварщика дяди Васи, когда пришел к нему с просьбой сварить две алюминиевых детали. Он долго рассказывал о специальных электродах, которых у него нет в наличии, аргоне, и что в молодости он с напарником из алюминия смастерил небольшой летательный аппарат, но в моем случае проще отказаться от алюминия и сделать все из обычного железа.


    С тех пор прошло много апдейтов ПС, и что же мы видим сейчас? Есть ли простое и быстрое решение, дабы сделать поиск на сайте? Так сказать, появилась ли у дяди Васи аргоновая сварка? Расцвели ли яблони на Марсе? Провел ли Илон Маск тест-драйв новой Tesla Mars? Запустили ли Джеймса Уэбба в космос или до сих пор его тёзка переворачивается в гробу?

    Читать дальше →
  • Идеальное резюме IT-рекрутера

    Рекрутер — тот человек, через которого проходят сотни, а то и тысячи резюме. Соответственно, когда открывается вакансия рекрутера, Hiring managers ожидают увидеть в откликах структурированные, понятные и практически идеальные резюме. Ведь кто-кто, а специалист по найму должен уметь «продать себя»‎.

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

    Резюме рекрутера должно быть максимально профессиональным. Так какое же оно — резюме IT-рекрутера? Каждое слово в нем имеет вес и находится на своем месте. Вот ключевые пункты, о которых я расскажу подробнее:

    • Опыт
    • Бизнес-ориентация и Cost Per Hire
    • История успеха
    • Социальные сети
    • Сопроводительное письмо
    Читать дальше →
  • Имитация динамических обоев из macOS штатными средствами Linux-систем

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


    В качестве обоев устанавливается только один файл картинки. Используемый файл обоев является символической ссылкой на другую картинку. Ступенчатая "динамичность" обоев обеспечивается заменой картинки-ссылки на новую в нужные моменты времени. В эти же моменты WM замечает изменение файла обоев и обновляет картинку.


    Таким образом, WM постоянно работает с одним и тем же файлом-картинкой, а вся логика работы обеспечивается обычным сценарием командной строки и простыми файловыми операциями.

    Читать дальше →
  • Как сделать видео на Youtube вирусным

    Привет! Меня зовут Максим Сулимов. Я являюсь создателем Ютуб-каналов бренда Youfact. За более чем 5 лет я собрал более 2,5 млн человек со всего мира на всех своих каналах. Один из них насчитывает более миллиона подписчиков, за что Youtube прислал мне награду в виде Золотой кнопки. Еще пять каналов набрали более 100 тысяч подписчиков, за что Youtube прислал награды в виде 5 Серебряных кнопок. В этой статье я расскажу вам про секреты оптимизации видео, о которых говорят только на платных курсах по Youtube. Поверьте, мне есть чем поделиться!

    1. Превью и заголовок


    Одну из важных ролей в продвижении вашего видео играют заголовок и обложка видео. Для разных тематик подходят разные виды обложек. Давайте разберем пример. Сразу записывайте (из меня сейчас польется мудрость), потому что об этом вам бесплатно никто не скажет.
    Если у вас детский контент:

    — детям не важно, какое у вас название и что будет в ролике. Они кликнут на яркую и заманчивую превью. Чем ярче, тем лучше! Очень хорошо работают обложки, на которых изображены сами дети-авторы. Избегайте темный фон, черные предметы и силуэты. Ребенок хочет попасть в сказку или увидеть что-то мультяшное. Поэтому ярко-розовый, фуксия, голубой, желтый, белый — самые удачные цвета предметов и фонов на обложке. В Фотошопе или Lightroom можно изменить цвет предмета, если он у вас изначально был другого оттенка. Т.е. если у вас на превью есть гигантский чупа-чупс, но он непривлекательного цвета, измените его на фиолетовый, ярко-голубой или салатовый в Фотошопе. Это зацепит внимание! Потому что где в реальной жизни можно такое увидеть? Нигде! Поэтому это и заинтересует маленького зрителя. Поехали дальше.
    Читать дальше →
  • Маркетинг с помощью мобильного кошелька: новый способ получения выгоды

    Мобильные кошельки быстро вытесняют традиционные способы платежей. Большинство, если не все, мобильных устройств имеют встроенные, собственные приложения кошелька, которые люди могут использовать например, наиболее часто используемые приложения Apple Pay, Google Pay и Samsung Pay. В то время как они предлагают большую ценность для брендов в их нынешнем состоянии, маркетинг мобильных кошельков предоставляет возможность извлечь выгоду из этого нового маркетингового канала, который имеет огромный потенциал.


    image


    Мобильные кошельки с каждым днем набирают все большую популярность среди людей. На самом деле, опрос, проведенный компанией Airship, показал, что более половины респондентов (54%) использовали мобильные кошельки в том или ином качестве. Более того, 55% респондентов с большей вероятностью использовали мобильные кошельки для осуществления платежей в регистрах, чем стандартные методы, причем их число возросло до 73% при автоматическом применении купона или скидки.

    Читать дальше →
  • Raspberry pi & Азбука Морзе

    Парусник “NaN” сигналит SOS (See Our Success) Raspberry Pi, азбука Морзе и MQTT: вместе веселее


    Меня зовут Вова Балакин, я из московской школы на Юго-Востоке имени Маршала В.И.Чуйкова (классов “Силаэдр”: vk.com/silaedr), закончил 5 класс, интересуюсь программированием и техникой. Я хочу рассказать, что я делал этой весной. У меня был парусник, он назывался “Not a Number”(“NaN”). Выходить в море без сигнализации опасно, поэтому я подумал, что ему на мачте не хватает сигнальных огней. А лучше — сигнальных огней, которыми можно управлять удаленно. А лучше — удаленно из любой точки мира! У меня был Raspberry Pi — и тогда я придумал…

    Чего мне захотелось (Постановка задачи)


    … что можно прикрепить к мачте светодиод, соединить его с Raspberry Pi и запрограммировать так, чтобы из Интернета было возможно отсылать паруснику любое сообщение — и оно переводилось в код Морзе — и диод на мачте мигал в соответствии с этим кодом. И на ту же мачту закрепить фоторезистор — декодер кода Морзе, чтобы другой компьютер в Интернете мог получить переданный код.

    Что у меня вышло (Результат)


    После двух месяцев проб и ошибок у меня получилось написать программу, которая через MQTT-брокер(http://www.hivemq.com/demos/websocket-client/) позволяет любому человеку в Интернете, знающему Topic — секретный ключ для передачи сообщения клиенту, — отправить абсолютно любое сообщение написанное латиницей — и светодиод на мачте моего промигает его азбукой Морзе! (См. видео: www.youtube.com/watch?v=R1CFHTQZQuo.)
    Вот в целом как это работает: мы пишем сообщение и отправляем его MQTT-серверу, а он в свою очередь отправляет его на Raspberry pi, который переводит его в код Морзе и подмигивает светодиодом в соответствии с кодом.

    Вот код на Node.js на гитхабе.
    Читать дальше →
  • Смотрим полевой транзистор IRF4905 фирмы International Rectifier с технологией HEXFET 5-ого поколения

    Смотрим полевой транзистор IRF4905 фирмы International Rectifier с технологией HEXFET 5-ого поколения

    Читать дальше →
  • Ужасный Блокчейн. Взгляд UX дизайнера

    image

    Вы тоже заметили, что блокчейн продукты, не связанные с торгами криптой, не нашли широкого применения? Обидно, правда? Но, я думаю, эта проблема решаема!

    Финансовые спекуляции — основной рынок для блокчейна. А сообщество крипто-энтузиастов мало. Однако, потенциал технологии гораздо больше, чем используется сейчас!

    Да широкое использование крипты для оплаты за товары развивается в Африканских странах, но — это связано с неустойчивостью банковской инфраструктуры и слабости государства. При наличии сильного государства и банковского сектора криптовалютная активность будет подавляться. Живой пример — TON Павла Дурова.

    Нам пророчили революцию в игровой индустрии. Форбс оценивал рынок игр для блокчейна в 200 миллиардов. Но, революция, о которой говорили “крипто-большевики” не свершилась. Крипто Котики — это хорошо, но очень мало.

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

    В чем загвоздка? Я думаю, профессор Преображенский (из Булгаковского “Собачьего Сердца”) дает ответ: “разруха в головах”.
    Читать дальше →
  • Предиктивная медицина или как дожить до 120 лет: опыт запуска биотех стартапа Longevity InTime Biotech

    В 2018 году я дошел до создания биотехнологической компании. К тому времени я занимался разным бизнесом: инвестициями в кинопроизводство, рекламой, основал сеть кинотеатров в региональных городах. Но в конечном итоге осознал, что хочу вкладывать свое время не просто в деньги, а в продукт, которым потом воспользуюсь сам – контроль за продолжительностью своей жизни и жизни близких. Ниже моя история о том, что удалось построить за полтора года без инвесторов и командой из 11 стран за долю в бизнесе.

    Долголетие как идея продукта


    Я загорелся темой продления жизни еще в 2012 году. Как и любой человек старше 30-35 лет, я испытал страх смерти. До этого в полной мере не осознаешь, что смертен. А потом начинаешь замечать примеры со стороны: Пол Аллен (партнер Билла Гейтса) умер в 65 лет, Стив Джобс – в 56, мать Билла Гейтса – в 64, на самом деле список длинный.

    Я начал погружаться в тему и узнал, что, по мнению ученых, максимальный возраст человека в своем теле – 120 лет. Начал пробовать на себе новые технологии. Попробовав технологию, связанную с осветлением крови с помощью лазера, я вообще не болел несколько лет. А если заболевал, то часов на 18-20.

    И я понял, что не хочу, чтобы мой сын умер в 80-90 лет. Это было одной из мотиваций при создании проекта Longevity InTime. Как говорит один из наших экспертов Вадим Гладышев, директор медицинской школы Гарварда: есть две мотивации, по которым ученые входят в проект. Первая — фундаментальные исследования, которые можно использовать для лабораторных испытаний, чтобы потом переходить на клинические испытания на людях, а вторая – это личная мотивация. Думаю, эти две мотивации можно привести не только в отношении ученых.
    Читать дальше →
  • Проблема Eloquent фреймворка Laravel

    Работая над очередным проектом на фреймворке Laravel мы обнаружили его уязвимое место. Это модель Eloquent, о которой написано немало, и примеров её использования тоже достаточно. Вот что мы разглядели. Возьмём простую модель (не Eloquent) на рисунке 1.


    image


    Видим, что джойнятся несколько таблиц, делается какая-то выборка по определённым свойствам из этого join, а потом апдейтится определённое поле определённой таблицы. Случай ординарный и не заслуживает, чтобы его подробно разбирали.

    Читать дальше →
  • Пишем простую систему регистрации и входа в аккаунт

    Всем привет! Сегодня мы напишем простейшую систему входа и регистрации аккаунта. Данные мы будем хранить в файле. Здесь не будет базы данных, и подобных систем. Заранее говорю, не советую использовать этот код для больших проектов, т.к любой пользователь может открыть файл, и вписывать случайные данные, тем самым попасть в чужой аккаунт. И так, приступим.
    PS: Целый код будет в конце.


    Читать дальше →
  • Адаптивный canvas для видео игр на JavaScript

    Тег canvas


    Я думаю, что все из вас давно осознали, что писать видео игры на DOM это не очень хороший вариант, поскольку взаимодействие с DOM очень сильно нагружает компьютер. Тем более, что html 5 предлагает нам замечательную альтернативу — тег canvas.

    Но, наверное, когда вы начинали на нём что-то писать, вы задавались вопросом: как сделать его адаптивным? Ведь canvas при изменении ширины и высоты не растягивает свою матрицу, а значит, ваш рисунок будет занимать только его часть. Я тоже задался этим вопросом и нашёл два варианта как это сделать.
    Читать дальше →
  • Реализация подрузки информации о клиенте через API

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

    Вариант нашелся сам…

    Так как у нас звёздочка в мир не смотрит, то очевидно что все выполняется на сервере с астериском.

    Итак, нашел библиотеку PHP Tail, спасибо автору Тошио Такигучи.

    Задумка такова, php грепать логи звездочки на предмет входящего звонка, смотреть номер телефона входящего звонка, далее скармливать номер, в нашем случае самописному биллингу.
    Полученный ответ, то ли это инфа о клиенте, то ли что номер не найден ни в одной карточке клиента выводить на экран, приостановить выполнение до нажатия оператором кнопки Далее (для того чтобы он успел поработать с информацией).
    Читать дальше →