Pull to refresh
1
0

User

Send message

Немецкая карта шансов и другие малоизвестные возможности уехать

Level of difficultyEasy
Reading time4 min
Views7.6K

Мы, конечно, ещё не в ситуации последнего корабля, но вчера, говорят, легли даже хорошие VPN'ы (не рекомендую пользоваться этими сервисами, потому что с их помощью вы можете узнать, сколько раз борец за приватность переписки Дуров ездил в РФ после своего отъезда) и мы оказались уже почти в изоляции со всякими Гурулёвыми, Пучковыми-Гоблинами и прочими великолепными людьми, компании которых мы вряд ли достойны.

Все знают схемы, когда ты получаешь предложение от работодателя и радостно топаешь в консульство за визой. И все, конечно, понимают, что и раньше зарубежные работодатели не особо горели желанием ждать месяц-два, а теперь, когда сроки ожидания увеличились в разы, этот вариант совсем труднореализуем. Однако есть страны, которые выдают визы для поиска работы на своей территории без (!) предложения от работодателя. Наиболее известные из них - это Австрия, Дания, Германия, Португалия, Испания и Швеция (простенький обзор тут).

Прежде всего про Германию, так как у них этот вариант кажется самым интересным. Виза для поиска работы, Arbeitsplatzsuche, у Германии существовала давно. По какой-то причине про неё никто не говорил и даже скрывали её существование, но тем не менее она была. Требования были вполне разумные: бакалавр или магистр университета, который есть в базе ANABIN, 5 лет опыта работы по специальности, страховка здоровья, примерно 1100 евро на каждый месяц проживания в Германии, и знание немецкого на уровне B1. И всё: получаете визу, едете в Германию и там уже ищете работу в благоприятных условиях. И вам не надо говорить работодателю, чтобы он прислал вам предложение и ждал вас пол года: вы можете выйти на работу немедленно.

Читать далее
Total votes 66: ↑39 and ↓27+25
Comments165

Expression Problem и Объектные алгебры

Level of difficultyMedium
Reading time8 min
Views2.3K

Expression Problem (EP) — это классическая задача в программировании на совмещение несовместимого.

Автор задачи (Philip Wadler) формулирует следующие цели: создать такую абстракцию, что позволяла бы расширять иерархию в двух направлениях: добавлять новые классы и добавлять новые методы для обработки иерархии, сохраняя при этом строгую статическую типизацию и не требуя изменений существующего кода.

В динамически типизируемых языках мы бы могли добавить или переопределить метод на лету с помощью трюка, ставшего известным под неказистым названием monkey patching (хоть первоначально речь шла совсем не про обезьян, а про партизан — guerrilla).

А вот какие трюки применяют в статически типизированных языках рассмотрим под катом.

Читать далее
Total votes 7: ↑7 and ↓0+11
Comments13

systemD с 0 до 1: библия сисадмина

Level of difficultyMedium
Reading time27 min
Views24K


Что бы кто не говорил, systemD становится стандартом систем инициализацией в линуксе. И с 80% вероятностью все сервера будут с systemD. Не факт, конечно, есть и личные сервера, на которых может стоять хоть Gentoo, хоть Devuan, хоть NixOS.

Некоторые дистрибутивы хотят даже перейти с загрузчика Grub на systemd-boot! Потому знать, как работать с данной системой инициализации, должен каждый сисадмин и просто программист, ибо сейчас он практически везде.

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

А также напишем небольшой скрипт на Python для автомизации некоторых задач. Приятного чтения, господа линуксоиды и просто пользователи!
Читать дальше →
Total votes 51: ↑46 and ↓5+53
Comments11

Как я настраивал платежи и реферальную систему продаж «Приведи друга» в Telegram боте

Level of difficultyMedium
Reading time7 min
Views4.7K

Всем привет! Я прошёл сложный путь от создания бота до получения первых платежей, поэтому, как порядочный разработчик, хочу поделить информацией, за которую, я уверен, кто-то кому-то платит большие деньги, а ваши полезные труды пылятся на задворках интернета.

Читать далее
Total votes 15: ↑7 and ↓8+1
Comments33

Postgres Pro Shardman: горизонтальное масштабирование реляционных СУБД

Level of difficultyMedium
Reading time24 min
Views6.9K

Последние несколько лет мы в Postgres Professional активно занимаемся разработкой своего решения для горизонтального масштабирования PostgreSQL. Пользователям нужен был простой способ увеличить производительность путем добавления узлов. Традиционно для веба в таких случаях просто брали NoSQL базы или шардировали вручную, позже появились распределенные SQL-решения с поддержкой ACID-транзакций. Тем не менее терялась часть возможностей и достоинств PostgreSQL. Корпоративный рынок тяжелых вертикальных решений также сильно ограничен как ценой, так и доступностью. Поэтому исследованиями в области распределенных СУБД в компании занимались еще с 2017 года, а в 2020 началась работа над коммерческим продуктом. 

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

Читать далее
Total votes 28: ↑28 and ↓0+37
Comments8

Создаём свою стример-тян из зефира и палок

Level of difficultyMedium
Reading time127 min
Views15K

Наверняка вы слышали о нашумевшей в своё время ИИ стримерше NeuroSama. Однако мое внимание привлекало не само шоу и эти нашумевшие самые «крутейшие» моменты стримов, а сам факт того, что нейросеть реально может полностью автономно и полноценно вести стрим, удерживая внимание зрителей! Меня очень заинтересовала такая задумка, и я решился её повторить!

В этой статье я расскажу о попытке создать свою нейро-тян для русского сегмента, которая сможет автономно и без перерывов играть и вести трансляции на различных стриминг-платформах и буллить кожаных мешков конечно же развлекать зрителей и игроков, не получая баны! В результате получился самый настоящий гомункул киборг-убийца (мозгов) квадратных людей, поэтому запасайтесь бочкой кваса и ванной попкрона, как и в прошлый раз, приключение обещает быть жарким, но не только потому, что скоро лето, а ещё потому, что сейчас весна (и сопутствующее весеннее обострение), ведь мы с вами будем создавать настоящую (виртуальную) девушку-стримера!

Может, немного опоздал с трендом, но не пропадать же добру просто так! Кому-нибудь да пригодится (хотя бы для того, чтобы посмеяться или кринжануть с человека, который год занимался никому не нужной фигнёй).

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

Будет весело, сложно и очень интересно как опытному «бойцу», так и простому обывателю!

Читать далее →
Total votes 50: ↑49 and ↓1+61
Comments17

Quansheng UV-K5/K6: трансивер, из которого можно сделать что угодно

Reading time7 min
Views29K

Дядюшка Ляо не перестаёт удивлять. Мы хорошо помним, какую революцию совершили USB-донглы на микросхемах Elonics E4000 и Rafael Micro R820T, изначально предназначенные для просмотра телевидения на экране компьютера. С заменённым драйвером они превращались в универсальный SDR-радиоприёмник, принимавший в диапазоне от 25 MHz до 1 750 MHz, отображая при этом спектр шириной 2.4 MHz. И стоило это удовольствие долларов 5, может, чуть больше.

Вторым важным событием стало появление дешёвой народной «шарманки» — Baofeng UV-5R. Это простенький двухдиапазонный трансивер с заявленной выходной мощностью 5W. Но недавно китайцы вновь превзошли сами себя и выпустили нечто, что стало ещё более интересным — Quansheng UV-K5 и улучшенные версии, обозначаемые UV-K5(8) и UV-K6. Что это за трансивер и почему он стал так популярен — читайте под катом.

Читать далее
Total votes 51: ↑51 and ↓0+76
Comments43

Шардирование баз данных и проектирование систем

Reading time6 min
Views8.3K
image

Шардирование базы данных — это процесс её разделения на несколько машин, что способствует масштабируемости приложения. Механизм шардирования предполагает разбиение данных на два или более мелких фрагмента, называемых логическими шардами. Затем логические блоки распределяются по отдельным узлам базы данных, называемым физическими блоками, каждый из которых может содержать несколько логических блоков.

Такой подход позволяет избежать проблем с производительностью, возникающих, когда одна из машин работает в условиях перегрузки, и обеспечивает более экономичное и грамотное масштабирование. По мере увеличения объема данных и трафика все чаще возникает необходимость горизонтального масштабирования путем добавления новых машин, а не вертикального путем модернизации одного большого сервера.
Читать дальше →
Total votes 11: ↑10 and ↓1+15
Comments3

Разбираемся с динамической памятью (кучей) в приложениях Java

Reading time8 min
Views6.9K
Начнём с простого вопроса. В самом ли деле каждый Java-разработчик понимает, как в Java работает память? Одна из обязанностей любого Java-разработчика — гарантировать, что в результате тонкой настройки приложения на Java из него получится выжать такую производительность, какую только возможно. Требуется время, чтобы научиться управлять памятью в Java и понять этот процесс, это касается всех, кто имеет дело с Java. В этой статье попробую объяснить, как овладеть этими умениями.
Читать дальше →
Total votes 13: ↑12 and ↓1+18
Comments6

Использование resilience4j со Spring Boot

Level of difficultyEasy
Reading time10 min
Views8.7K

resilience4j библиотека, предоставляющая набор инструментов для повышения надежности и отказоустойчивости java приложений прежде всего в микросервисной архитектуре

Рассмотрим какие в ней есть инструменты, как их использовать в Spring Boot приложении с помощью аннотаций, как настраивать и есть ли в них подводные камни

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments0

Гексагональная Архитектура и Spring Boot

Level of difficultyMedium
Reading time5 min
Views11K

Всем привет!

Хочу рассказать про опыт применения гексагональной архитектуры в одном из наших микросервисов. С чем столкнулся и какие выводы сделал.

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments15

Внутренний мир: Java NIO

Level of difficultyMedium
Reading time15 min
Views10K

Привет, Хабр!

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

Неблокируемый ввод/вывод был реализован в пакете java.nio Java SE 1.4. К сожалению, в ежедневной практике нечасто приходится иметь дело с низкоуровневым I/O, и намного чаще при необходимости используются стримы из java.io. В этой статье будет описано содержание Java NIO, несколько примеров и принцип работы неблокируемого I/O.

Читать далее
Total votes 11: ↑10 and ↓1+11
Comments7

Как создать свой Spring Boot 3 — стартер?

Level of difficultyEasy
Reading time8 min
Views9.9K

Допустим, Вы разрабатываете несколько приложений или микросервисов на Java. Каждое из них уникальное, и содержит свою собственную бизнес логику. Однако, в каждом из них может быть необходимость использовать общую логику. Например, логику аутентификации, как это часто бывает в мире микросервисов.

Spring Boot starter'ы - отличный способ управлять созданием, развитием и поставкой общей кодовой базы. О том как создать свой Spring Boot 3 стартер и поговорим в этой статье.

Читать далее
Total votes 13: ↑12 and ↓1+12
Comments8

REST API сервер на Bash с использованием сокетов и Apache

Level of difficultyMedium
Reading time14 min
Views7K

Всем привет! Ранее рассказывал о том, как создать REST API и Web-сервер на PowerShell для Windows, а также упоминал, что подобный сервер будет работать и в системе Linux, благодаря кроссплатформенной версии PowerShell Core. Безусловно, для подобных целей лучше используются специализированные серверные фреймворки или библиотеки, такие как Flask или Django в Python, но меня не покидала идея реализации похожего сервера, где описание логики будет производиться на языке одного только Bash. Приведу примеры, с помощью которых можно создать такой сервер используя сетевые сокеты netcat , socat и ncat, а также веб-сервера Apache с использованием встроенных модулей.

Читать далее
Total votes 17: ↑15 and ↓2+16
Comments3

Отладка Spring-микросервиса в контейнере

Level of difficultyEasy
Reading time4 min
Views5.1K

Когда речь заходит о микросервисах, на ум обычно приходят контейнеры. Разумеется, встречаются микросервисные архитектуры, в которых компоненты запускаются без контейнеров. На мой взгляд, сопровождение таких систем получается намного сложнее, так как требует более глубоких знаний в администрировании Linux, скриптинге и различных инструментах автоматизации. В то же время, порог вхождения (дисклеймер: подразумевается именно минимально необходимый набор знаний для начала работы с инструментом) для вещей вроде docker-compose существенно ниже, и работать с ними могут даже начинающие разработчики.

Иногда для оперативной локализации ошибки проще всего воспользоваться отладчиком. Я думаю, каждый разработчик так или иначе применял подход DDD (DDD - шут. Debug Driven Development) при локальной разработке или в поисках бага на удаленном стенде. Но что делать, если удаленное приложение в контейнере? В этой заметке я бы хотел поделиться Dockerfile-ом, к которому пришел в свое время, решая проблему отладки контейнеризированного приложения.

Читать далее
Total votes 4: ↑2 and ↓2+2
Comments6

Я в благородство играть не буду: как производители дешевых смартфонов закладывают срок службы в свои устройства

Level of difficultyEasy
Reading time12 min
Views75K
image

Во все времена существования мобильных телефонов, дешевый сегмент всегда оставался одним из самых прибыльных и массовых направлений мобильного бизнеса. Помимо «простозвонилок» в духе Nokia 1100 или 1202, на рынке есть огромный спрос к ультрабюджетным смартфонам ценой до 10 тысяч рублей. И если с дешевыми девайсами у локальных ритейлеров всё понятно (чипсеты 5+ летней давности, минимальный объём ОЗУ и ПЗУ, простенькие TN-матрицы низкого разрешения), то китайские магазины готовы предложить по этой цене устройства с небывало щедрыми характеристиками — и 8Gb RAM, и 512Gb ROM, и Snapdragon 888+. Для большинства покупателей неочевидно, что эти характеристики — обман, а девайс будет обладать лишь базовыми параметрами. Но что самое обидное, производитель закладывает программный и аппаратный срок службы в такие устройства, из-за чего более половины смартфонов выходят из строя через 4-5 месяцев после покупки, а в СЦ за ремонт просят половину цены от нового. Около года назад я купил почти новую китайскую реплику Huawei P30 Pro с родной коробкой и заводской плёнкой всего за 400 рублей, которая уже была не рабочей. Сегодня мы с вами: узнаем о том, как производители экономят и закладывают срок службы в бюджетные мобилки, на практике отремонтируем подобный девайс своими руками (причём ремонт обойдется нам в 70 рублей) и посмотрим, можно ли пользоваться таким бюджетником за 470 рублей на в 2023 на практике. Интересно? Тогда добро пожаловать под кат!
Читать дальше →
Total votes 138: ↑128 and ↓10+152
Comments167

Глубокое погружение в Java Memory Model

Reading time53 min
Views151K


Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.


В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.

Читать дальше →
Total votes 109: ↑109 and ↓0+109
Comments60

Пишем свой spring-boot-starter

Reading time5 min
Views65K
Большинство java-разработчиков уже познакомились с проектом Spring Boot, позволяющим быстро написать приложение, использующее различные компоненты Spring Framework (Spring MVC, Spring Data и многие другие).

Всё удобство Spring Boot основано на использовании так называемых Starter, которые позволяют получить набор сконфигурированных бинов, готовых к использованию и доступных для конфигурации через properties-файлы. Но что делать, если для нужной технологии еще не написано стартера?
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments0

Garbage Collection и JVM

Level of difficultyEasy
Reading time17 min
Views30K

Привет, Хабровчане!

JVM работает как хорошо отлаженный механизм, автоматически распределяя и освобождая память. Это и есть суть Garbage Collection. Это процесс, который автоматически находит и удаляет объекты, которые больше не используются вашим приложением. Благодаря этому, разработчики могут сосредоточиться на логике приложения, не беспокоясь о ручном управлении памятью.

Знание того, как работает GC и JVM, необходимо каждому Java-разработчику. Правильное управление ресурсами напрямую влияет на производительность и стабильность приложений.

Читать далее
Total votes 24: ↑21 and ↓3+21
Comments7

CompletableFuture. Глубокое погружение

Level of difficultyHard
Reading time20 min
Views31K

java.util.concurrent.CompletableFuture - класс не новый. Он предстал перед нами во всём своём величии в 2014-м году вместе с выпуском Java 8. Много лет с тех пор прошло, а проще он не стал.

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

Читать далее
Total votes 36: ↑36 and ↓0+36
Comments27
1
23 ...

Information

Rating
Does not participate
Registered
Activity