Программирование best practices и заметки

  • Не нужно учить синтаксис, будь то программирование или работа с устройствами. Намного важнее понимать технологии и принципы. Синтаксис на практике натаскается или за’tab’ится. 
  • Высшая математика и алгоритмы редко нужны в программировании. Важнее знать существующие инструменты/библиотеки/умение писать. Сложной математики не много в бизнес задачах.


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

Основы VCS на примере Git

https://git-scm.com/ – тут крутые entry видео, документация и прочее.

VCS
Version Control System (VCS) – система контроля версий.
Из названия следует основной кейс применения таких систем – контроль версий систем. VCS сохраняет изменения, которые произошли от одной версии файла к другой.

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

Telegram bot на Ruby c gem telegram-bot-ruby

РЕСУРСЫ, переменные И МЕТОДЫ
  • https://core.telegram.org/bots/api – основной необходимый MAN. Очень крутой, но не хватает примеров
  • https://github.com/atipugin/telegram-bot-ruby – ruby gem telegram, есть пример кода для разных кейсов
  • https://github.com/mustafababil/Telegram-Weather-Bot/blob/master/responseController.py – пример бота в телеграм на python
METHOD
bot.api.send_message - основной метод, отправка сообщений
bot.api.answer_callback_query- ответ на CallBackQuery, отвечать нужно после обработки сообщения, чтобы ошибки ответа на callback не привели к проблемам с самим ответом
bot.api.deleteMessage - удаление сообщений (своих, исходящих от бота)

ID
rqst.from.id - user info id.


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

Немного об Oracle Intelligence Bots

Даже oracle вложился в разработку чат-ботов, а это говорит о многом – такие монстры просто так не дергаются.
В принципе, в их видео ничего относительно нового: бот отвечает на вопросы на основе примерно созданных шаблонных диалогов, выбор конкретного диалога основывается на ai machine learning, если бот не может ответить – автоматически подключается сотрудник.

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

Скрипт на событие логина по SSH

Пришла идея создания скрипта для логгирования события подключения по SSH в таблицу SQL и уведомления о подключении определенных пользователей определенным пользователям:
  • писать всем пользователям о подключении их самих – сами пользователи знают, когда заходят и заход тогда, когда ты это делать не мог – есть повод обеспокоиться
  • админу писать о подключении всех пользователей, имеющих права на sudo
В целом логгирование в linux встроено по умолчанию – утилита last показывает полный лог авторизаций с момента создания файла /var/log/wtmp и продолжительность pts, а в lastlog есть информация о последнем подключении.

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

32-битные счетчики sysUpTime

C 497 дня (4-миллиарда timeticks) обновляется значение Uptime при опросе sysUpTime (DISMAN-EVENT-MIB::sysUpTimeInstance или .1.3.6.1.6.3.10.2.1.3). Такое поведение аналогично на всех устройствах, включая Cisco. 64-битного счетчика timeticks (1/100 секунды), по аналогии с Counter64,  пока не существует. Для Cisco, Alcatel и многих других устройств (даже ZTE, но не D-Link) есть альтернатива – опрашивать количество секунд со старта (не epoch seconds) (SNMP-FRAMEWORK-MIB::snmpEngineTime или .1.3.6.1.2.1.1.3.0) и конвертировать во время самостоятельно скриптом.

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

Динамическое формирование окончания слов во множественном числе

Достаточно для анализа 10 символов чтобы делать правильное окончание.

Метод на ruby:

 def spelling(number)
  last_digit = number.to_s.split(//).last(1).join # identify last digit
  spell = "" if last_digit == "1"
  spell = "а" if last_digit =~ /^([2-4])$/
  spell = "ов" if last_digit =~ /^([0]|[5-9])$/
  two_last_digit = number.to_s.split(//).last(2).join # identify last two digit
  spell = "ов" if two_last_digit =~ /^([1][1-9])$/
  spell
 end

puts "Вы можете подписаться еще на <count> объект#{spelling(<count>)}"

Метод на php – не очень грамотно написан (лучше array и сопоставление, regexp как в случае с ruby или ifelse), но рабочий:

function spelling($number)
{
 $splitted_array = str_split("$number");
 $last_digit = end($splitted_array);
 $penultimate = prev($splitted_array);
 if ($penultimate == "1") {return "ов";}
 if ($last_digit == "1") {return "";}
 if ($last_digit == "2") {return "а";}
 if ($last_digit == "3") {return "а";}
 if ($last_digit == "4") {return "а";}
 if ($last_digit == "0") {return "ов";}
 if ($last_digit == "5") {return "ов";}
 if ($last_digit == "6") {return "ов";}
 if ($last_digit == "7") {return "ов";}
 if ($last_digit == "8") {return "ов";}
 if ($last_digit == "9") {return "ов";}
}

$spell = spelling($res_users);
echo "Влияние: $res_users клиент$spell";

 

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

Редирект на изначально запрашиваемую страницу после авторизации на базе PHP

Redirect делается обычно на основе запрашиваемого URL из переменной $_SERVER[‘REQUEST_URI’], далее назовем это query URL.

Первоначально редиректим на страницу авторизации с указанием запрашиваемого url из query URL в переменной location.

header("Location:login.php?location=" . $_SERVER['REQUEST_URI'] );

Уже на странице авторизации после успешной авторизации делаем тоже самое – забираем query URL.

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

Ruby простая отправка писем

Простая отправка писем в ruby без вложений:
#!/usr/bin/env ruby
#coding: utf-8
 
require 'net/smtp'
 
from = 'login@exmpl.com'
to = [ "mail_to@exmpl.com", "mail_to2@exmpl.com" ]
theme = 'Subj!'
text= "Msg"
message = ""
message<<"From: admin <#{from}>\n"
message<<"To: #{to}\n"
message<<"Subject: #{theme}\n"
message<<text
Net::SMTP.start('smtp.exmpl.com', 25, 'exmpl.ru',
 'login', 'pass', :plain) do |smtp|
smtp.send_message message, from, to
end
gem mail поддерживает отправку с вложениями.


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

Ruby: установка и управление gem в Ruby

www.rubygems.org – основной сайт с гемами

Ubuntu/Centos/Gentoo

Установка ruby/gems:

sudo apt-get/yum/emerge install ruby
sudo apt-get/yum/emerge install rubygems

Гемы обычно ставятся через утилиту gem – она заведует поиском/установкой/удалениями гемов и имеет другие полезные команды. Краткий ман. Утилита поддерживает мультиверсионность гемов – если последняя вышедшая версия используемого вами gem не совместима с той, которую вы используете сейчас, то можно использовать обе версии одновременно. 

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