Как стать автором
Обновить
114
0.1

Software architect

Отправить сообщение

AI Code Reviewer: автоматизация код ревью

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров2.4K

Мы, в компании Anymaint, сделали скрипт для код ревью с помощью ChatGPT или Gemini.

Это Python-скрипт с открытым исходным кодом, который использует ChatGPT или Gemini для анализа пул-реквестов на GitHub.

Он умеет рассказывать о чем вообще пул реквест, выявлять проблемы или автоматически добавлять комментарии в PR. Скрипт доступен на github.com/AnyMaint/code-reviewer под лицензией BSD 3-Clause.

О компании AnyMaint

AnyMaint — стартап, который занимается созданием веб-системы управления техническим обслуживанием (CMMS) с применением машинного обучения. Мы ориентированы на такие отрасли, как фармацевтика и производство медицинских устройств, где автоматизация мониторинга оборудования и рабочих процессов играет ключевую роль. Разработка требует значительных усилий, и часть задач мы передали автоматическим инструментам, включая AI Code Reviewer.

Вручную или через GitHub Actions

Скрипт можно запускать через GitHub Actions, но я думаю, что основное использование - ручное. Во первых можно проверить свой PR перед тем, как посылать коллегам, во вторых перед оценкой чьего то PR полезно посмотреть на мнение ChatGPT о чем он вообще и в третьих лучше отсеять вручную комментарии скрипта, которые не релевантны или не интересны.

Где взять скрипт?

Скрипт доступен на github.com/AnyMaint/code-reviewer под лицензией BSD 3-Clause. Можно скачивать, изменять, использовать.

Примеры использования

AI Code Reviewer поддерживает несколько режимов работы и параметров. Для запуска вам будут нужны переменные окружения GITHUB_TOKEN для доступа к PR и OPENAI_API_KEY или GOOGLE_API_KEY (смотря какой LLM будете пользоваться)

Читать далее

Китайские ракеты «Великий Поход»

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.7K

Захотелось разобраться в китайских ракетах серии Великий Поход ( “Чанчжэн”, Long March).

Начнем с того, что в Китае ракеты делают государственные организации и частные фирмы. Про частные фирмы отдельный разговор, а сейчас поговорим про государственные:
Китайская аэрокосмическая научно-техническая корпорация (CASC) -  является ведущим государственным подрядчиком в области космических технологий и отвечает за основную часть ракетных запусков в Китае.

Именно она делает ракеты серии Великий Поход ( “Чанчжэн”, Long March) 

Китайская аэрокосмическая научно-промышленная корпорация (CASIC) -  была образована в результате реформы ВПК и занимается разработкой как гражданских, так и военных ракетных систем. Разработанные ей ракеты носители называются Куайчжоу (Kuaizhou)

Китайский космос, как положено, начался с добавления ступеней на баллистические ракеты. Ракета DF-4 была разработана в 1960-1970х, ей добавили еще одну ступень и получилась ракета Чанчжэн-1, которая вывела первый китайский спутник в 1970 году. Слетала всего два раза, оба успешно.

Читать далее

Космические ракеты Ирана

Время на прочтение3 мин
Количество просмотров11K

Захотелось самому разобраться чем Иран запускает спутники.

Иранская космическая программа началась в 2004 году с создания Иранского космического агентства (ISA).

Читать далее

Предсказание красоты заката

Время на прочтение3 мин
Количество просмотров15K
TL;DR: Из чего состоит красивый закат? Как предсказать эти элементы заката? Откуда взять данные для предсказаний?

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

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

Элементы заката


1. Небо в том месте, где солнце заходит за горизонт.

Если небо в этом месте чистое — это красиво.
Если чистая полоска неба, а над этим облака — еще красивее.
Если есть небольшая облачность и Солнце заходит посреди облаков — тоже неплохо.
Если всё небо возле горизонта в облаках — плохо.

Примеры:


Солнце заходит без облаков на горизонте
Читать дальше →

Генерация кода для бекенда. Что генерировать, как и зачем?

Время на прочтение11 мин
Количество просмотров9.3K
Я хочу показать в этой статье как у нас в фирме генерируется бекенд (и немного фронтенд) код, зачем вообще это нужно и как это лучше делать.

Что именно будем генерировать — не так важно.
Важно что мы опишем 3 вида объектов на основе которых сгенерируем взаимодействие фронтенда с бекендом, а кое где и полностью реализацию бекенда

Эти типы объектов:
1. Messages — объекты, которые будучи сериализoванными в JSON участвуют в обмене информации между фронтендом и бекендом
2. Endpoints — URI, который вызывает фронтенд вместе с описанием HTTP метода, параметров запроса, типа Request Body и типа респонса
3. Entities — Это такие messages, для которых них есть стандартные endpoints для Create/Update/List/Delete (может быть не все), они хранятся в базе данных и для них есть Data Access Object, или Spring JPA repository — вообщем зависит от технологии, но какой то доступ к базе данных

Фронтендом я не занимаюсь вообще, но
1) Знаю, что он пишется на Typescript, поэтому мы генерируем и классы тайпскрипта
2) Большая часть требований к бекенду приходит от разработчиков фронтенда.

Требования к коду



Читать дальше →

Три парадигмы асинхронного программирования в Vertx

Время на прочтение7 мин
Количество просмотров6.4K
Я хочу показать три парадигмы асинхронного программирования — callbacks, futures, coroutines на примере простого веб приложения на фрейморке Vertx. Код будем писать на Котлине.

Допустим у нас есть приложение, которое получает некую строку в HTTP запросе, по ней ищет URL в базе данных, идет по этому URL и его содержимое отправляет обратно клиенту.
Vertx задуман как асинхронный фрейворк для высоконагруженных приложений, использует netty, new IO, event bus

Читать дальше →

Вычисление логических выражений в строке внутри Java/Scala/Kotlin кода

Время на прочтение3 мин
Количество просмотров10K
Мне нужно было в рантайме вычислять истинность выражений типа

a>10 && b<c+5 && (a+b)<c*4

находящихся в строке Скалы.

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

Я оценивал разные библиотеки на то 1) могу ли они сделать то, что надо 2) скорость исполнения

Были проверены

  • интерполяция строк
  • Js Engine
  • javaluator
  • exp4j
  • evalEx
  • mxparser
  • MathEval
  • Groovy
  • Jexl

Результаты


Время пробега в мс для 1000 выражений (вернее одно и тоже выражение для 1000 разных набoров 3х переменных):

js 239 ms
mxParser 56713 ms
evalex 35 ms
groovy 118 ms
Jexl 62 ms

Остальные способы/библиотеки не сработали.

Под катом подробности:

Читать дальше →

Бюджетная (и городская) deep sky астро фотография

Время на прочтение2 мин
Количество просмотров22K

Андромеда. Не из города, но и без телескопа.

Для того, чтобы фотографировать deep sky объекты нужна и дорогая техника (телескопы с большим зеркалом, маунт с двигателем и т.д.) и выезд за город — там, где нет засветки.

А что делать тем, у кого нет денег на дорогую технику, нет места на хранение 10 дюймовых рефлекторов и нет времени регулярно ездить в пустыню?

Я вот и пытаюсь понять, что делать в таком случае, когда снимать Deep Sky (т.е. туманности, галактики звездные скопления) очень хочется.

Во первых нужны длинные выдержки, для этого я взял Skytracker экваториальный маунт для фотоаппарата (в продаже появилось уже следующее поколение этого маунта).

Skytracker надевается на штатив, а уже на него надевается штативная головка.
Ориентируешь его на полярную звезду, включаешь двигатель и он поворачивает камеру на штативной головке так, как вращается Земля.
Читать дальше →

Лунная гонка: SpaceIL заключила контракт на запуск

Время на прочтение1 мин
Количество просмотров6.1K
Слушал беседу с участниками проекта SpaceIL — посадка израильского аппарата на Луну в рамках Google Moon X Prize

1. Идея участвовать в соревновании пришла при посиделках с виски
2. Масса маленькая, поэтому нет разгонной и посадочной ступени — все в одном аппарате
3. Они первые из участников Google Moon X Prize заключили контракт на пуск — на 2017, попутная нагрузка у SpaceX (я тоже пожертвовал на это деньги)
4. Более 30 человек работают над проектом не считая добровольцев, из них 20 на полную ставку
5. Деньги от израильких бизнесменов и фирм, некоторые фирмы помогают не деньгами, а оборудованием. Гос деньги не участвуют (условие Google Moon X Prize)
Читать дальше →

Spring bean custom scope

Время на прочтение5 мин
Количество просмотров38K
Я попробую привести пример, когда бывает нужен Spring custom scope.

Мы — компания B2B и SAAS, и у нас бегут по таймеру некие долгие процессы для каждого из клиентов.
У каждого из клиентов есть какие то свойства (имя, тип подписки и т.д.).
Раньше мы делали наши сервисы prototype бинами и передавали каждому из них в конструкторе все необходимые свойства клиента и запущенного процесса (flow — имеется ввиду логический процесс, job, а не процесс ОС):
Как плохо было и как хорошо стало, когда мы сделали свой spring bean scope

SpaceIL — участник «Google Lunar X PRIZE»

Время на прочтение1 мин
Количество просмотров8.8K
SpaceIL — израильская некоммерческая организация, участник соревнования Google Lunar X Prize.

Напомню, что Google обещала приз в 20 миллионов долларов тому, кто сможет без помощи государства посадить аппарат на Луну, проехать не менее 500м и передать видео высокого разрешения.

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

Идея SpaceIL состоит в том, что будет гораздо дешевле преодолеть 500м (нужные по условиям X Prize) взлетев и сев опять, чем везти с собой ровер.

Запуск должен быть попутным (т.е. на ракете с основной полезной нагрузкой) в мае 2015

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

Время на прочтение1 мин
Количество просмотров7.1K
Мне нужно синхронизировать директорию между несколькими компьютерами, причем это может быть два комьпютера, а может быть и больше.

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

Ну, как пример — есть кластер из нескольких веб или application серверов и пользователь делает аплоад файлу. Если тот же пользователь через 5 минут зайдет на сайт с другого компьютера и лоад балансер ему даст другой сервер из кластера, он должен всё равно увидеть загруженный им файл.

Как это можно сделать?

Я смотрел на простой NFS — но там получается есть single point of failure — компьютер, на котором этот диск родной
Я смотрел на xtreemeFS — но просто не получается его настроить работать с replication

Какие еще есть решения?

Спасибо

Обзор систем управления проектами

Время на прочтение3 мин
Количество просмотров166K
Мне пришлось за последние пару дней просмотреть много систем управления проектами и хочется поделиться тем, что я нашел…

Мы искали варианты с хостингом у создателя софта, чтобы не возиться с инсталяцией у себя (поэтому, например, тут нет Redmine в чистом виде).
Мне была важна интеграция с Google calendar и github.

Также хотелось чего то большего чем Bug tracking — еще и управление фичерами, требованиями и т.д.

Прошу прощения за много терминов на английском.

Картинки по клику открываются в полный размер

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

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

Приложения для Sony NEX-6

Время на прочтение1 мин
Количество просмотров37K
В камере Sony NEX-6 можно покупать приложения, ну так же как вы покупаете для своих смартфонов.

Полный список приложений тут: https://www.playmemoriescameraapps.com/portal/

Я сначала скачал бесплатное приложение, дающее возможность управлять камерой со смартфона — камера начинает работать как Wifi spot, к ней подключается телефон и вы видите на нем то, что видит камера, можете ввести экспокоррекцию, нажать на спуск, посмотреть результат. Очень прикольно. Можно поставить в женскую баню и смотреть из за стенки

Затем я купил следующие приложения (купить было непросто, т.к. официально в Израиле их не продают):

1. Time lapse.

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

Вот результат:



Еще приложения: Multishot, Multiframe NR ...

Веб разработка с Gaelyk

Время на прочтение6 мин
Количество просмотров4K
Меня давно волновал вопрос — на чём проще всего сделать веб приложение ява программисту неискушенному в веб разработке.

Меня смущали несколько вещей — во первых — регистрация пользователей, логин, права доступа и так далее. Не хотелось с этим много возиться. Решение здесь я нашел в Grails с плагином Spring Security.

Во вторых — хостинг. Если писать на Яве (а мне так комфортнее всего, я на Яве с 1996 года), то хостинг дорогой. Платить по 15-20 долларов в месяц за сайты-эксперименты не хотелось.

И вот, наконец я нашел решение. Это — Gaelyk. Groovy фреймворк для Google App Engine.

Чтобы понять что он даёт и как его использовать давайте посмотрим на простейший проект.

Простейший проект можно сделать скачав template project или воспользовавшись maven archetype

Однако же первый из них использует gradle, а не maven и оба используют стандартный groovy компилятор, а не экслипсовский, который позволяет не создавать стабы, и оба не создают пример работы с Google datastore

Поэтому я создал свой maven archetype. Давайте с его помощью и создадим Gaelyk проект:

Читать дальше →

Backdoor в вашем приложении на Java

Время на прочтение2 мин
Количество просмотров7.3K
Я недавно наткнулся на статью, описывающую простейший грувлет, позволяющий исполнить любой код на Groovy у Вас на сервере. Мне это показалось очень удобным для организации отладочного бэкдора.

Проблема в то, что грувлеты — это всё таки сервер, а у нас есть еще толстый клиент на Swing. Для него мне хотелось бы сделать нечто похожее, но встраивание какого нибудь embedded Jetty или Tomcat только для этого в клиент выглядело как то слишком.

По счастью, мне попалась на глаза и другая статья — про наличие в стандартной библиотеке Java простейшего веб сервера. Вот им то я и решил воспользоваться.
Читать дальше →

Интеграционные тесты с Maven, JUnit и Spring

Время на прочтение7 мин
Количество просмотров84K
Юнит тесты это штука хорошая, но, на мой взгляд, полагаться лишь на них нельзя. Иногда очень важно проверить как работают несколько классов, а иногда и слоёв приложения вместе.

У нас приложение активно использует Спринг, а значит и такие интеграционные тесты должны работать с контекстом спринга.

Часто подобные тесты могут занимать много времени, даже если использовать in-memory базу данных (я, кстати проверял почему — у нас много JPA entities с множеством свойств в каждом и инициализация Hibernate, имено она, занимает десятки секунд!)

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

Так что план такой:
1. Пишем сервисы, разбитые на два слоя приложения
2. Соединим их Спрингом
3. Напишем тест пользуясь JUnit для взаимодействия этих сервисов (настоящих, без всяких mock)
4. Делаем так, чтобы этот тест не бежал по умолчанию во время билда
5. Profit!
Читать дальше →

Groovy как лучшая Java

Время на прочтение1 мин
Количество просмотров20K
Groovy можно использовать по разному — для скриптов, для Grails, для быстрого написания прототипов, для DSL и т.д.

Меня же Groovy всегда привлекал как улучшенная Java. В самом деле — почти любой Java код будет валидным кодом Groovy — т.е. если не помнишь как что то делать в Groovy-way, можно всегда писать так, как принято в Java, а если помнишь — вот тебе и Closures, и удобные списки, и много других замечательных вещей.

Единственное, что мешало использовать Groovy для разработки production кода — отсутствие ошибок компиляции в большом числе случаев. Например если вызываешь несуществующий метод, обращаешься к несуществующей переменной и т.д.

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

Так вот, наконец в Groovy 2.0 появилась возможность сказать — проверяй в этом классе типы, существование методов и переменных!

Возьмем, например, такой класс:

Прекрасное (о взаимодействии языков)

Время на прочтение1 мин
Количество просмотров1.9K
Наш проект мы пишем с индусами.

Общую архитектуру я задал как архитектор проекта — Java, Spring и т.д.
Но в тех областях, в которых им надо было писать они сами решали что и как будет.
А привыкли они всё делать на C/C++.

В итоге родился такой монстр:

У нашей программы есть command line клиент.
Он работает с командами и скриптами на Tcl (потому что так привыкли клиенты).
Используется native Tcl Interpreter (а не JTcl) (потому что так решили наши индусы).
Команды реализованы на Java, но часть команд обращается к коду на C++ (legacy code)
Однако же система сообщений об ошибках и предупреждениях реализована на Java.
Индусы писали используя JNI, а я связь Java с С делал на JNA

Как выглядит работа команды набранной в коммандной строке?

Читать дальше →

Создание spring beans из обычных классов и юнит тесты

Время на прочтение3 мин
Количество просмотров7.1K
У нас и rich client, и сервер активно используют Spring. И очень быстро возникла проблема — как использовать спринг бины из обычных классов (которые сами — не бины).

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

Вскоре я нагуглил в интернетах такой красивый вариант:
Читать дальше →
1

Информация

В рейтинге
3 273-й
Откуда
Израиль
Зарегистрирован
Активность