Швидкий повнотекстовий пошук у Redmine

image redmine-logo
image elastic-logo
У нас використовується система управління проектами і завданнями Redmine. Ми продовжуємо допілівать її під свої потреби, щоб підвищити зручність роботи і розширити функціонал. Черговий завданням стало прискорення пошуку.

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

Читати далі →

Історія одного плагіна


Все почалося з того, що у мене перестав працювати tagbar. Плагін падав з помилкою, нібито моя поточна версія Процвітаючими Ctags зовсім не Процвітаючими. Покопавшись трохи в исходниках, я зрозумів, що остання зовнішня команда завершувалася з помилкою, а v:shell_error видавав -1, що говорить про те, судячи з документації vim'a, що "the command could not be executed". Я не став копати далі і встановив fzf. Fzf, як і ctrlp, дозволяє проводити нечіткий пошук файлів, тегам, буферам, ..., але на відміну від останнього, працює набагато спритніше, однак, не без мінусів. Програма працює безпосередньо з терміналом і кожен раз затирає мені історію введених команд. Це також означає, що ми не можемо відобразити результати пошуку в буфері (neovim, судячи за деякими скринкастам, може, наприклад, праворуч від основного буфера, коли шукаємо потрібний тег. На відміну від sublime, fzf не надає більшу вагу імені файлу, із — за чого я часто отримував в топі зовсім не ті результати, які очікував побачити. До всього іншого, відсутність повної свободи в налаштування колірної схеми, що в загальному-то не дуже важливо для звичайного користувача, але тільки не для мене, з моїм підвищеною увагою до дрібниць. Під свободою я розумію, як мінімум, розмежування кольору для звичайного (нормального) тексту і рядок запиту.
Все це підштовхнуло мене до написання свого плагіна, зовнішній вигляд якого нагадує стандартний переглядач директорій netrw. Я опишу проблеми, з якими стикався, та шляхи їх вирішення, вважаючи, що цей досвід може бути комусь корисний.
Читати далі →

Автоматизоване тестування плагінів Redmine

За минулий рік ми розробили чотири плагіна для зв'язки Redmine + Telegram раз, два, три чотири).
Потихеньку виробляються свої Best Practices щодо них. У цій замітці ми розповімо про тестування та інтеграції з Travis CI.

Чому вирішили розповісти про тестування? Тому що тестування плагіна для Redmine — той ще квест.

Читати далі →

Двофакторна аутентифікація в Redmine

З давніх пір для другого кроку аутентифікації ми використовували одноразові паролі надсилаються через СМС. Такий функціонал з'явився в Redmine 2013, коли ми розробили плагін redmine_sms_auth. Про це ми писали в давньої статті.
Але час не стоїть на місці. Ми активно впроваджуємо Telegram в бізнес-процеси компанії (раз, два, три).
У зв'язку з цим вирішили зробити аутентифікацію через Telegram в Redmine. Заодно з цим переписати старий плагін про СМС і додати підтримку Google Authenticator.

Далі ми розповімо про те як встановити, налаштувати і використовувати цей плагін.
Читати далі →

Новий плагін від Stepik.org для IntelliJ IDEA

У вересні ми випустили плагін для IntelliJ IDEA з підтримкою Python і Java. Про процесі розробки, і про те, чому плагін спростить життя учнів програмування на Stepik.org розповімо в цій статті.



Читати далі →

Валідація JSON з командного рядка Linux

Внаслідок синтаксичної простоти і гнучкості, JSON (JavaScript Object Notation, Об'єктна Нотація JavaScript став стандартом де-факто, використовуваним для обміну даними в багатьох веб-додатках. У зв'язку з тим, що JSON широко використовується для представлення структурованих даних з високим ступенем гнучкості, виникає необхідність мати можливість «валідувати» JSON-подання.

Таким чином з'явилася так звана схема JSON (зараз 4-я версія чернетки IETF), яка визначає структуру даних JSON в декларативному форматі, так само, як схема бази даних визначає логічну структуру і взаємовідносини записів бази даних. Сама схема JSON записана в JSON. Схема JSON може бути досить корисна не тільки для генерації правильно форматованих даних JSON, але також для перевірки коректності структури даних JSON.



Це керівництво торкнеться два аспекти валідації JSON з дотриманням схеми JSON. По-перше, ви можете валідувати дані JSON за схемою JSON, тобто, перевіряти, щоб дані JSON відповідали специфікації зі схеми JSON. Інший аспект валідації — це валідація схеми, коли ви перевіряєте, щоб сама схема JSON була правильно оформлена відповідно з Інтернет-чернеткою схеми JSON. В обох випадках я покажу вам, як зробити необхідну валідацію з командного рядка Linux.

Читати далі →

Як зберігати складну ієрархію налаштувань в проектах Redmine

Протягом останніх двох місяців працював над плагіном redmine_intouch для компанії Centos-admin.ru.

Після завершення робіт вирішив поділитися деякими нюансами, з якими довелося зіткнутися в процесі розробки.

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

Насамперед хочу обмовитися. Ця стаття про реалізацію логіки зберігання налаштувань проекту в плагіні для Redmine.

Т. к. це плагін, то використовувати сторонні геми, в яких даний функціонал реалізований вкрай небажано, щоб уникнути конфліктів з логікою самого Redmine.

Тому в цій публікації мова йтиме про реалізацію з нуля системи зберігання налаштувань зі складною ієрархією.

image

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

Читати далі →

Captain Awesome мовить: BrowserSync Angular Template

Ліга! Сьогодні наш світ може стати трішки спокійніше.

Нова зброя проти сил зла чекає перевірки Радою. Зброя — BrowserSync Angular Template (bsAt) покликане прискорити кожного з нас, звичайно не до швидкості Флеша, але хто відмовиться бути хоч на секунду швидше ворога?



Читати далі →

Створення плагіна для Intellij IDEA. Замітки і дрібні поради

Півроку тому або близько того я загорівся-таки ідей написати свій плагін для Intellij IDEA. Згідно із задумом, він повинен був вважати, скільки часу розробник витратив на проект (всього, за день, за сеанс) і відображати результат на діаграмі. Ніякої магії, але така функція здорово допомогла б мені розраховувати час роботи.



Читати далі →

Ізометричний плагін для Unity3D



Оповідь про те, як написати плагін для Unity Asset Store, поламати голову над вирішенням відомих проблем ізометрії в іграх, та ще й трохи грошей на каву з цього поиметь, а так само зрозуміти на скільки Unity має розширюваний редактор. Картинки, реалізації, графіки і думки під катом.

Читати далі →