Skip to content

Instantly share code, notes, and snippets.

[Unit]
Description=OpenVPN Admin service for %I
After=network-online.target
After=openvpn@%i.service
Wants=network-online.target
Documentation=https://github.com/flant/ovpn-admin
[Service]
Type=simple
User=nobody
set term ^ ;
create or alter procedure split2int (
input_string varchar(8192)),
delimitet varchar(6) = ',')
returns (
column_value integer)
as
declare variable this_pos integer;
declare variable next_pos integer;
@kai3341
kai3341 / maket2016.md
Last active September 20, 2016 13:10
Весёлые истории о макетах и веб-сервисах

#Макеты EnergyControl имеет встроенный механизм генерации макетов 80020. В теории всё радужно и прекрасно, на практике мы столкнулись с серией проблем:

  • EnergyControl создавал макет для всех объектов, которые содержатся в его БД. По нашей просьбе разработчики EnergyControl добавили возможность генерировать макет для списка предприятий
  • Механизм макетов неоперативен и позволяет получить данные только за прошлые сутки
  • Принятие макетов в EMCOS приводило к высокой нагрузке, обработка одного макета происходила более часа. Проблема нерешаема
  • Механизм макетов не позволяет гибко контролировать заполнение дыр. Нет возможности контролировать, какие данные были высланы и какие ещё нет. Решается отправкой макетов за несколько дней, из-за чего время обработки возрастает кратно (умножаем на число дней, по которым генерируются макеты)
  • При принятии макета в EMCOS было обнаружено ограничение на число точек учёта. Ограничение отсутсвует в документации EMCOS и по всей видимости является низкоуровневым: происходило переп
@kai3341
kai3341 / decode48
Last active February 25, 2022 09:15
python: reading float80 values
#!/usr/bin/env python3
import zlib
import base64
import ctypes
import struct
def decode_str64(str64):
taillen = ctypes.sizeof(ctypes.c_longdouble) - 10
if (taillen < 0):
void* read_to_queue(Queue* queue)
{
Reading=1;
Object* pointer;
Object* rqo = (Object*) malloc(sizeof(Object)); //ReadQueueObj
rqo->item = (char*) malloc ((MAXPASSLEN + 1) * sizeof(char));
while (sig == 0 && Reading)
{
if (fgets(rqo->item, MAXPASSLEN + 1, fpin) == NULL)
{