Обновить

Все потоки

Сначала показывать
Порог рейтинга

Интерактивность в разработке.

Брэт Виктор отлично презентует своё видение мира. Попутно он затрагивает вопрос о необходимости моментального визуального отклика на изменения в исходном коде. Рассказывает о том, как интерактивность позволяет получить совсем иной опыт разработки. Более динамичный.

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

Поменял параметр, прогнал цепочку событий, посмотрел на результат. Конечно, это не по-настоящему моментальный отклик, но уже достаточно близко.

Впрочем, всегда есть, куда стремиться.

Презентация на Vimeo: https://vimeo.com/906418692

Теги:
0
Комментарии0

С 1 марта 2026 года работодатели смогут отправлять сотрудников на психиатрическое освидетельствование, если во время медосмотра врачи выявят отклонения.

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

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

Освидетельствование включает прием (осмотр, консультацию) врача-психиатра, сбор жалоб и анамнеза (объективный и субъективный) в психиатрии, психопатологическое обследование.

Теги:
0
Комментарии1

Поиск по вкладкам

В моём браузере постоянно открыто 20-30 вкладок, связанных с текущими проектами. И это не какие-то мусорные вкладки, которые я забыл закрыть, а рабочие документы: планы, отчёты, задачи. При таком количестве вкладок названия уже не влезают, и панель превращается в ряд безымянных квадратиков.

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

  1. Нажимаю какое-то сочетание клавиш.

  2. Начинаю вводить любое слово из заголовка вкладки.

  3. Жму Enter — переключаюсь на эту вкладку.

Выяснилось, что первые два пункта в том или ином виде реализованы во всех популярных браузерах. Правда, сочетания клавиш для активации поиска у всех разные:

  • Chrome, Edge: Shift + Ctrl + A (Shift + ⌘ + A)

  • Яндекс Браузер: Shift + Ctrl + E (Shift + ⌘ + E)

  • Safari: Shift + ⌘ + \

  • Firefox: Ctrl + L (⌘ + L), далее ввести знак процента и пробел

А вот с третьим (казалось бы, самым логичным) пунктом не так всё просто. Из перечисленных браузеров только Chrome переключается на найденную вкладку по нажатию Enter. В остальных браузерах приходится использовать мышку. Впрочем, проблема решается плагинами вроде Lightweight Tab Search и Tab Search.

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

Теги:
+1
Комментарии8

Открытый проект iCloud Photos Downloader на Python позволяет в командной строке выполнять загрузку фотографий из iCloud. Работает в Linux, Windows и macOS; на ноутбуках, настольных компьютерах и сетевых накопителях. Решение доступно в виде исполняемого файла для прямой загрузки и через менеджеры пакетов /экосистемы (Docker, PyPI, AUR, npm).

Возможности решения:

  • три режима работы:

    • копирование - загрузка новых фотографий из iCloud (режим по умолчанию);

    • синхронизировать - загружать новые фотографии из iCloud и удалять локальные файлы, которые были удалены в iCloud (опция автоматического удаления);

    • переместить - загружать новые фотографии из iCloud и удалять фотографии в iCloud (опция сохранить в icloud за последние дни).

  • поддержка Live Photos (изображения и видео в виде отдельных файлов) и RAW-изображений (включая RAW + JPEG);

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

  • однократная загрузка и возможность постоянного отслеживания изменений в iCloud;

  • оптимизация для инкрементных запусков (параметры --until-found и --recent);

  • обновления метаданных фотографий (EXIF) (опция --set-exif-datetime).

Теги:
0
Комментарии0

IT-компании и их основатели покидают Силиконовую долину в Калифорнии: доля штата в общем объёме занятости в технологическом секторе США снизилась до 15,9% – самого низкого уровня с 2013 года. За последний год в штате сократили более 16 тыс. сотрудников.

Сооснователь Google Сергей Брин покинул Калифорнию на фоне массового оттока самых богатых жителей штата из-за опасений, что для них введут налог на богатство. Брин перевёл в Неваду более десятка организаций. Его компаньон Ларри Пейдж также покинул штат. Брин ищет жильё в Майами – городе, который облюбовали технологические миллиардеры, которые бегут из Калифорнии. Пейдж купил два особняка в Майами за $173,4 млн.

Пейдж и Брин основали Google в 1998 году. Брин ушёл в отставку в 2019 году, но два года назад вернулся в компанию, чтобы помочь ей развивать искусственный интеллект на фоне опасений, что она теряет позиции по отношению к конкурентам. Уход этой пары означает, что никто из пяти самых богатых людей мира не живёт в Калифорнии, несмотря на то, что четверо из них основали здесь свои компании.

Самый богатый человек мира Илон Маск и пятый по этому показателю Ларри Эллисон тоже покинули штат. Мультимиллиардер Джефф Безос основал Amazon в Сиэтле, но большую часть времени живёт во Флориде. Лишь Марк Цукерберг, шестой по богатству человек в мире с состоянием в $229 млрд, продолжает жить в Калифорнии. В штате набирает обороты движение за введение единовременного налога на богатство в размере 5% для всех, чьё состояние превышает $1 млрд. Если этот сбор введут, Брину придётся платить $13 млрд.

Теги:
0
Комментарии0

Апскейлим видео без регистрации через сервис video2x. Проект использует модели Super-Resolution и не требуют больших мощностей. Можно запускать на слабом компе. Устанавливается за один клик. Никаких лишних сервисов и программ — только апскейлер. Работает только локально, никто не получит доступ к сведениям о видео.

Теги:
+2
Комментарии0

Генерация ссылок на оплату через фирменный Tg-бот

Обратился заказчик, ему нужно принимать предоплату за бронь падел-кортов.

  • Создавать платёжную ссылку из ЛК Тинькофф неудобно — заказчик не хотел давать доступ к счёту всем менеджерам.

  • Статичный QR-код не подходит — нужно же понимать, за какую бронь пришла оплата.

  • Каких-то других готовых решений без дополнительных комиссий не нашли.

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

На этом варианте и остановились.

Механика работы

  1. Менеджеру даём ссылку на бот с секретным ключом вида t.me/name_of_bot?start=secret_key

  2. Когда менеджер переходит по ней, он автоматически получает право создавать ссылки на оплату для заданного терминала. Это такой очень простой и надёжный вариант авторизации.

  3. Менеджер нажимает "Создать ссылку", указывает номер брони, email клиента (он требуется для отправки чека) и сумму.

  4. Бот через API Тинькофф создаёт ссылку и присылает её менеджеру.

  5. Менеджер пересылает клиенту.

  6. Клиент по ссылке попадает на платёжную страницу Тинькофф, там оплачивает через приложения банков, картой или по СБП.

  7. Менеджеру приходит уведомление, что бронь с таким-то номером оплачена.

Элементарно, работает как часы, заказчик доволен.

Как создаются платёжные ссылки в боте
Как создаются платёжные ссылки в боте

Занятный денежный факт

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

Зачем я это написал

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

Теги:
+3
Комментарии5

Только ленивый не написал новость о запуске Doom на очередной мультиварке или утюге.

Главный вопрос: кто-то прошел Doom с берданкой на утюге или кофеварке? На каком уровне сложности?

Хочется увидеть walkthrough. Или уже найти что-нибудь иное. Dangerous Dave, Another World или хотя бы Jet Set Willy.

Теги:
+4
Комментарии3

Энтузиаст запустил игру Doom на умной мультиварке Krups Cook4Me с сенсорным дисплеем, 128 МБ встроенной и оперативной памяти, Wi-Fi-модулем ESP32 и микропроцессором Renesas R7S721031VZ. Доступ к основному процессору мультиварки исследователь получил через интерфейс SWD. Подключив программатор к сервисным контактам, энтузиаст скопировал содержимое встроенной памяти и на его основе собрал модифицированную прошивку, позволившую запустить Doom. Из-за нестандартного расположения сенсорных элементов управления играть на скороварке в Doom оказалось не особо неудобно.

Теги:
-1
Комментарии0

Демо Smalltalk-76.

Иногда просто поражает масштаб того, что разрабатывали в Xerox PARC.

На этом видео Дэн Инголлс презентует Smalltalk-76, объединённую интерактивную среду исполнения и сам язык программирования. Два в одном! И это в 1976 году!

Smalltalk исторически повлияет на большое количество современных ЯП с ООП. Отдельно стоит отметить яркое влияние на ЯП, где в основе лежит модель акторов.

В то время ООП было не столь про термины "инкапсуляция", "полиморфизм" и "наследование". Скорее про то, что всё есть "объект", а объекты общаются между собой исключительно путём обмена сообщениями.

Это — основа современной акторной модели.

Да, Smalltalk сейчас — довольно нишевый и редкий язык, но в прошлом это был аналог и прямой конкурент молодого, только появившегося Java...

Презентация на YouTube: https://youtu.be/NqKyHEJe9_w

Теги:
+1
Комментарии8

Решил сегодня почитать, что пишут в Ангуляр комьюнити Хабра, и увидел сильно популярный пост с аж 51 лайком и 71 закладкой.

Начал читать и был удивлен примерами. Автор с уверенностью говорит, как писать на Ангуляр грамотно, и при этом приводит плохие практики в качестве примеров. Я дошел до примера с RxJS, который меня немного триггернул.

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

Автор условно говорит, что у нас есть плохой пример использования:

this.http.get('/api/data').subscribe((data) =>; {
  this.data = data; // Что если запрос не вернётся?
});

и затем приводит хороший пример с сигналами и RxJs:

readonly data = signal([]);
readonly error = signal(null);

loadData() {
  this.http.get('/api/data').pipe(
    tap(() =>; this.error.set(null)), // Сбрасываем предыдущую ошибку перед загрузкой
    catchError((err) =>; {
      this.error.set('Не удалось загрузить данные');
      return of([]); // Возвращаем пустой массив, чтобы поток не прерывался
    })
  ).subscribe((result) =>; {
    this.data.set(result);
  });
}

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

interface State<T = object> {
  data: T[];
  error: string | null;
}

@Component({...})
export class BestRxJs {
  private http = inject(HttpClient);
  private loadDataAction$ = new Subject<void>();

  private state$ = this.loadDataAction$.pipe(
    switchMap(() => 
      this.http.get<State[]>('/api/data').pipe(
        map((result) => ({ data: result, error: null })),
        catchError(() => of({ data: [], error: 'Не удалось загрузить данные' })),
        startWith({ data: [], error: null })
      )
    ),
    shareReplay({ bufferSize: 1, refCount: true })
  );

  readonly private state = toSignal(this.state$, {
    initialValue: { data: [], error: null } 
  });

  readonly protected data = computed(() => this.state().data);
  readonly protected error = computed(() => this.state().error);

  protected loadData(): void {
    this.loadDataAction$.next();
  }
}

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

Теги:
+2
Комментарии6

HR, простите, но у меня не было выбора - Как я потратил несколько сотен часов на ИИ-ассистента для поиска работы

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

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

Кандидатов фильтруют автоматические системы, отклики закрываются автоотказами, при этом от соискателя ожидается ручная и максимально персонализированная работа: десятки однотипных откликов и сопроводительных писем.

В какой-то момент я понял, что трачу больше времени на клики и формальные действия, чем на развитие как инженера. Это и стало отправной точкой.

Что не так с процессом поиска

Проблема не в самом поиске, а в том, как он реализован.

1. Массовая рассылка вместо выбора.
Осознанный подбор вакансий быстро превращается в пролистывание списков и надежду на статистику.

2. Отклики как механика.
Сопроводительные письма отличаются формально: поменять название компании, чуть переписать вводную — и так десятки раз.

3. Неэффективные затраты времени.
Квалифицированный специалист тратит часы на задачи с минимальной ценностью, причём этот цикл повторяется при каждом новом поиске.

Инженерный взгляд

Если абстрагироваться, поиск работы — это:

  • входные данные (резюме, требования вакансии),

  • правила сопоставления,

  • повторяемые действия,

  • измеримые результаты.

С инженерной точки зрения — кандидат на автоматизацию.
Так появилась идея проекта OfferMate, который берёт на себя рутинную часть процесса.

Коротко о разработке

Проект мы начали с друзьями, столкнувшимися с той же проблемой.

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

За 4+ месяца разработки мы:

  • несколько раз пересобрали архитектуру,

  • получили жёсткий фидбек,

  • убедились, что это не история про «просто прикрутить LLM».

Технические детали осознанно опускаю — при интересе разберу отдельно.

Что получилось в итоге

Сейчас OfferMate — это ассистент, который:

  • ищет релевантные вакансии на hh.ru и в Telegram,

  • автоматизирует отклики,

  • формирует сопроводительные письма под конкретные вакансии,

  • работает в фоне, минимально вовлекая пользователя.

Им пользуются кандидаты разного уровня — от начинающих до опытных специалистов.

Про сопроводительные письма

Корректнее говорить не «ИИ пишет письма», а что система:

  • анализирует резюме,

  • разбирает требования вакансии,

  • ищет пересечения,

  • и на их основе формирует текст.

Это не делает письмо идеальным, но делает его релевантным, что на практике влияет на отклик.

Куда дальше

Сейчас мы работаем над следующей версией проекта.

Рынок нестабилен: ограничения и API меняются, поэтому тестируем архитектуру без жёсткой зависимости от официальных интерфейсов и с упором на устойчивость.

Вместо вывода

Этот пост — попытка взглянуть на поиск работы как на инженерную задачу и попробовать решить её соответствующими методами.

Если интересно последить за проектом, все новости публикуем в этом Tg-канале:

👉 https://t.me/offermatecrew

Также буду рад вопросам и обсуждению в комментариях.
Если тема зайдёт — сделаю отдельный технический разбор.

Теги:
-3
Комментарии11

Эти три открытый проекта по ИБ позволяют анализировать и изучать беспроводные сети Wi‑Fi:

  • Wi‑Fi‑autopwner — моделирование взлома сетей Wi‑Fi с простой защитой. Работает в консоли.

  • Wi‑Fi Exploitation Framework — сервис, который поможет проверить и пробить безопасность беспроводной сети, а также протестировать на ней различные виды тестовых атак: от простых до комплексных.

  • Freeway — Python‑сервис, который показывает механизм работы беспроводных сетей и их уязвимостей, помогает выявить способы перегрузки сети и смоделировать атаки с нарушением аутентификации.

Теги:
-2
Комментарии0

Ближайшие события

Оперативный постмит

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

Недавно подсмотрел, как мой коллега во время встречи сразу шарит экран и на ходу фиксирует постмит: решения, экшн-поинты, ответственных, сроки.

Это оказалось супер удобно:

  • Сразу видно, что записывается, а участники могут поправить, уточнить, добавить

  • Все сразу понимают, кто на ком стоял, кто за что отвечает

  • Не нужно тратить время после встречи и что-то дооформлять

  • Шаблон постмита позволяет ускорить процесс ещё больше

Теги:
0
Комментарии0

Шаблонный сервис

Я всячески люблю, когда разработка идёт предсказуемо – и многое для этого делаю.  

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

Так зачем же нужен шаблонный сервис?

Легко ориентироваться в других сервисах. Иногда нужно залезть в сервис коллег, или поддерживаешь несколько сервисов. Никаких проблем – структура везде одинаковая, всё знакомо, не нужно тратить время на раскопки.

Быстрый старт. Стартуете новый сервис? Полчаса – и он готов. Никаких лишних приседаний.

Единые практики. Шаблон определяет, не только структуру, но и то, как мы, например, делаем ретраи, какие у нас зависимости. как устроен circuit breaker, обработка ошибок и т.д.    

Лучшие практики – в одном месте. Если появляется что-то классное, мы добавляем это в шаблон и новые сервисы сразу это наследуют.     

Обсервабилити, логирование, работа с секретами – готово из коробки. И меньше шансов, что кто-то забьёт на логирование до лучших времён»:)    

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

Просто экспериментировать. Создал веточку от шаблона – и прикручиваешь свою новую махарайку, не тратя время на базовую структуру.

Унификация линтинга. Конфиги линтеров лежат в шаблоне. Ничего настраивать не нужно, а код-ревью идёт быстрее – обо всём уже однажды договорились и зафиксировали.

Базовый CI/CD. Для шаблонного сервиса существует шаблонный ci/cd – и это очень удобно.

Мы активно использовали шаблонный сервис в микросервисной архитектуре, но и для монолитных решений он тоже отлично зашёл – стартовали с ним несколько проектов.

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

В общем – заходите, смотрите, ставьте звездочки. И если с чем-то не согласны – пишите в комменты, автор обязательно ответит 🙂

Теги:
+1
Комментарии0

Впечатления от RoadCraft.

Добрался на выходных до демо-версии RoadCraft. Прохождение заняло (по цифрам Steam) около 4 часов.

Впечатления смешанные. Как и в случае с Expeditions, разработчики захотели сделать SnowRunner, но не совсем SnowRunner. Получилось так себе, как и с тем же Expeditions.

Самая большая проблема — они берут всего один аспект SnowRunner и выкручивают его на максимум. В Expeditions — это исследования местности, в RoadCraft — ремонт инфраструктуры. Но формула SnowRunner в таком случае рассыпается и играть становится не так интересно.

Чести ради, в RoadCraft было проще втянуться, чем в Expeditions, там я не продержался и пары часов. А тут демку до конца прошёл.

К слову, в отличие от SnowRunner, RoadCraft можно купить в ру-регионе Steam. Но смотрю на цены... Уф. Сейчас игра стоит 1749 рублей (30% скидка от 2499 руб.) Нет уж, я лучше пойду в классику какую-нибудь поиграю...

Теги:
+1
Комментарии3

Работаем из Java с устройствами с serial-интерфейсом (COM и USB) без JNI — по TCP.

Раньше пользовались rxtx, затем jssc. После очередных крэшей JVM в коде нативных библиотек решил не выбирать замену, а отказаться от них полностью.

В качестве прокси serial-TCP можно взять ser2net или поэкспериментировать с socat, но я запилил свое простое (Rust, mio), под конкретную задачу:

  1. Запускается из основного приложения, свой процесс для каждого устройства

  2. Конфигурация через аргументы запуска и переменные окружения

  3. Завершает работу при отсутствии или отключении устройства (для USB), отключении или отсутствия подключения TCP-клиента

В качестве TCP-клиента Netty. Для интеграции с легаси данные читаются в кольцевой буфер ( OneToOneRingBuffer из agrona), а оттуда уже используются по месту в удобное время.

За счет неблокирующего чтения и использования epoll в mio и Netty минимальные задержки, моментальное оповещение о наличии данных (без Thread.sleep) и об отключении USB-устройства.

Задержки настолько меньше, что пришлось адаптировать кривой код, который не был готов к тому, что драйвер железного serial-порта в Linux отдает данные порциями по 8 байт. Решилось реализацией ByteToMessageDecoder, где возможно, а где нет — буферизацией на стороне прокси и отправкой по таймеру.

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

Бонус: можно работать с устройством, подключенным к другому системному блоку (например, для разработки) и использовать TCP-эмуляторы вместо реальных устройств без изменения кода интеграции.

Теги:
+2
Комментарии0

10 января 2006 года Стив Джобс представил первый MacBook Pro на выставке Macworld в Сан-Франциско. Это был первый ноутбук Apple на базе процессора Intel. В честь этого события в компании провели ребрендинг. Ранее ноутбуки Apple для профессионалов назывались PowerBook и работали на чипах PowerPC. Первый MacBook Pro был представлен только с экраном 15 дюймов. Базовая конфигурация стоила $1999 и оснащалась процессором Intel Core Duo 1,67 ГГц, 512 МБ ОЗУ DDR2 с частотой 667 МГц и жёстким диском на 80 ГБ. Запись презентации первого MacBook Pro 2006 года.

Теги:
0
Комментарии2

Представлен «Тамагочи» для растений Senso. Съемные модули и зарядное устройство позволяют оставлять небольшой электронный зонд на горшке с возможностью получать данные через щупы из почвы. Освещенность, температура, влажность в комнате и влажность почвы отображаются на дисплее небольшого блока для понимания, как себя чувствует растение.

Теги:
0
Комментарии0

В Китае в округе Цзиньюн появился геймерский отель Master-K. За $50/сутки можно получить апартаменты для двоих пользователей с топовыми ПК, а также к лобби с игровым клубом и общению с другими фанатами игр.

Теги:
-1
Комментарии0