Message Reactions in Telegram

Ok, I was looking where to share, and recall I still pay for this blog’s hosting monthly. So I deceided to drop it here, just in case someone will ever find this via Google and say thanks.

Situation: I have a Telegram bot created 5-6 years ago for testing and I’ve used it to develop some logic. It works. I register new bot for production run via BotFather, put all same settings and new bot is not getting any message reactions, despite it get all other notifications – topics created, files uploaded, etc…
I am using Telegram via Python library, so I am not polling updates manually, but have a thread loop which callbacks my handlers on each message received by bot. I start reading API docs and discover that

Specify an empty list to receive all update types except chat_member, message_reaction, and message_reaction_count (default). If not specified, the previous setting will be used.

Looks like this is default behaviour and I need find a way to pass at least message_reaction to getUpdates to start polling those. I even forked the library, when another idea came to my mind: I can quickly update the last settings:


$ ipython

import telepotpro
from server.settings import BOT_TOKEN
bot = telepotpro.Bot(BOT_TOKEN)
needed_updates = [ "message", "edited_message", "channel_post", "message_reaction", "message_reaction_count", "chat_member", ]
bot.getUpdates(allowed_updates=needed_updates)

This made my bot set to receive only specific set of updates, but more important – it started to receive message_reaction type of events, which I was interested in.

Project Management Step 1

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

Сейчас популярно стали всякие Management-ы. Прямо как грибы после дождя растут: то time management, то money management, даже офис management встречается. А что люди в это понятие вкладывают? Просто умение организовать что либо – процесс работы, финансы. На мой взгляд всем этим management-ам адекватнейшим переводом будет “управление”. Вот и я столкнулся с проблеммой управления. Хоть у нас и не очень большая фирма, мы связаны с заказчиками, freelancer-ами, внешними сотрудниками, а значет без эффективного управления проектами организация данной связи может создать узкое место в построении бизнеса.
Вот сегодня, я и решил слегка улучшить внутриофисную коммуникацию. Ну, вернее не сразу улучшить, а посмотреть на перспективы. Для управления большинством проектов достаточно ручки и листочка бумаги, однако если в офисе люди работают в разное время, то короткими записками не обойтись, а цеплять к почте файлы по 60Мб достаточно муторно. Обратив свой взор на рынок програмного обеспечения для управления проектами, я понял что подобные приложения сейчас непишут лишь ленивые. Рынок переполнен разнородной информацией по данному вопросу и поэтому я обратился к ручке с бумажкой, чтобы сформулировать свои требования. Итого вышло:

  • Поддержка любого количества проектов (отличного от 1)
  • Возможность устанавливать статус проекта, раздавать задачи по конкретным пользователям
  • Возможность прицеплять файлы разного типа

Посоветовавшись с коллегами-программистами, я выяснил что есть хороший пакет написанный на языке C# для MS SQL Server-a. Gemini отличается от многих подобных продуктов тем, что предлагает не “вомпу в мешке”, а вполне лицензионную версию с ограничением на 10 пользователей. Чего нам в принципе достаточно на первое время.
Потратив кусочек своего рабочего времени на установку компонент: версия 2.1.1 потребовала .NET Framework 2.0 и MS SQL Server 2000, я принялся за борьбу с инсталлятором. Не смотря на то, что само приложение полностью локализованно, инсталлятор отличается исключительной англоязычностью, как интерфейса, так и мануала. Без бубнов конечно не обошлось, но в конце концов – все заработало очень сносно.

Дата написания: 27 Июня 2007 года.

MongoDB for Developers

Я пишу этот пост, потому что нахожусь в некотором экстазе от онлайн курса M101: MongoDB for Developers. Если вы вообще смотрите в мир NoSQL, то думаю это самое то, что нужно для того чтобы идти в ногу со временем. Вообще, я заметил что за прошедшие пару лет с окончания вуза я отучился учиться… чтоже Coursera, Udacity и другие ресурсы с Class Central помогут мне вернуться в строй.

Иногда они возвращаются

Привет, народ!

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

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

Как считать jpg из папки на Ruby on Rails

Было дело, надо в одном проекте выводить список файлов лежащих в определенной директории, с возможностью их скачать, как говориться в натуральную величину. Это был мой первый кусочек кода написанный на ruby, а поскольку rails и их идеология для меня тогда еще были не вновинку, то реализовывал я это в самой view.

Надеюсь, этот код будет полезен тому человеку, который вот уже 3 месяца ходит на мой блог из поиска Google с запросом “ruby on rails jpg из папки считать”.

Кусок который исполняется, но не отображается. Все наши файлы лежат в папке public/files. Красиво было бы его вынести в соответсвующий контроллер в нужный метод.


<%
vendors = Hash.new { |hash, key| hash[key] = Array.new }
Dir.open('public/files').each do |file|

    # Заполняем хэш vendors файлами из директории, 
    # перебирая по очереди каждый из них
    next if file[-4..-1] != '.pdf'
    next if file =~ /^..?$/
    file.gsub!('.pdf', '')
    f = file.split(' ')

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

    model = f[-1] # Пробельчик чик-чик
    vendor = f[0..-2].join(' ')
    vendors [vendor] << model
end
%>

Кусок, который отвечает за вывод на экран. Тут уж и форматирование можно подставить, и оформить как следует.


<% for v in vendors.keys.sort do %>
<!-- Впечатываем производителя-->
<h2><%= v ></h2>
    <ul>
    <% for m in vendors[v].sort do %>
    <!-- Заполняем список названиями моделей-->
    <li>
<a href="/files/<%= v + ' ' + m + ' .jpg' %>" target="_blank"><%= m %></a>
</li>
    <% end %>
    </ul>
<% end %> 

В ходе написания этого поста, обнаружил, что отвалился плагин Markdown Extra, который у меня раньше изолировал трансляцию всего чего и почему-то в рамках <code> пришлось переменять всякие < на &lt; вручную. Коллеги-программеры, если у кого есть удобное решение для wordpress с оформлением кусков кода, поделитесь в комментариях.

Верстальщикам и веб-программерам в помощь

По причине организации работы мне пришлось заняться несколько несвойственным, хоть и не противным, мне делом – версткой. А именно преобразованием дизайнов в шаблоны HTML и файлы разметки CSS. Версталось все в XHTML 1.0 Transitional, а форматировалось и оформлялось эксклюзивно CSSом как учил Иван Григорьевич. На основании определенных рабочих моментов и родился этот пост. Итак, начну с выражения огромного спасибо Димычу за статью о букмарклетах ибо почерпнутые из нее знания помогли свести обычную “угадайку” где в IE тупой бордер закрался (в смысле в тупом IE лишний бордер прокрался) к систематическому багодавлению. Если вдруг ваше начальство считает что пользователи IE6 это значительный сегмент посетителей сайта, то XRay ваш незаменимый помошник.

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

Тогда после этого вам становиться доступен такой удобный инструмент как Web Inspector, что не может не радовать. Кроме того, что он отслеживает валидность HTML, показывает наглядное применение стилей CSS к разным элементам страницы, он еще представляет возможности по запуску скриптов. В общем, адекватный заменитель Firebug для Safari. Это не просто JavaScript Debugger вызывающийся в Google Chrome по нажатию Alt+~, а полноценная консоль, позволяющая понять чего ждать от ваших функций под WebKit.

Кроме того, как и Firebug Safari Web Inspector умеет рисовать вот такие симпатичные картинки, которые позволяют определить почему страница грузиться дольше чем вы расчитывали.

В общем, если вдруг вам надо разбираться с версткой под Safari, пожалуйста, пользуйтесь и наслаждайтесь! Да, если вдруг вы все об этом знали, то не надо “боянов” – для меня и моих коллег этот инструмент – открытие, которое заставляет задуматься о возможности миграции с FF на Safari. За последнее голосует скорость обработки JS последним, а так же красивый рендеринг шрифтов, чем под Windows не многие программы могут похвастаться.