И это всё МОЁ

Как при использовании org-capture гарантированно оставлять 1 пустую линию между предыдущей записью и последующим заголовком? То есть, если у меня два события-шаблона, которые пишут в один файл, но для разных тем-заголовков, вроде такого


("N" "Задача N" entry
(file+headline "/path/to/org/file" "Задачи";)
...


и


("M" "Событие M" entry
(file+headline "/path/to/org/file" "События";)
...


После заполнения нескольких задач+событий, даже если я предварительно вручную поставил даже 100 пустых строк между последней записью в задачах (оно выше) и заголовком событий (оно ниже), между ними не остается пустых строк, а иногда получается так, что заголовок * События вообще залезает на последнюю строку для последней записи из задач, вроде такого


* Задачи
...
** Последняя задача
DEADLINE: [...]*События
...


Как это пофиксить? Нашел на реддите один похожий пост без ответов и все. Или никто не пользуется org-capture в один файл, или у меня одного такая проблемы. Я попробовал с чистым профилем, где только настройка org-capture произведена. Там точно так же воспроизводится. Emacs 27.1.









 ,








И это всё МОЁ

Настроил бэкап mssql базы, подключил плагин mssqlvdi. С одной базой все работает бэкап делается, но как сделать бэкап всех баз, которые созданы в MSSQL?

 Plugin = "mssqlvdi:serveraddress=192.168.xxx.4:instance=default:database=TEST:username=bareos:password=bareos"  








 








И это всё МОЁ
Представлен первый альфа-выпуск пользовательского окружения GNOME 40. Релиз намечен на 24 марта 2021 года. Напомним, что проект перешёл на новую нумерацию версий, в соответствии с которой вместо 3.40 будет опубликован выпуск 40.0, что даст возможность избавиться от первой цифры "3", которая при текущем процессе разработки потеряла актуальность.



И это всё МОЁ

Народ, а кто мне расскажет в чём глубинное отличие между systemd.scope и systemd.slice? А то я это понимаю только на уровне рефлексов, глядя на вывод systemd-cgls, а формализовать не могу. Может быть @intelfx поможет?









 , ,








И это всё МОЁ

Сабж



Популярность мессенджера ICQ резко взлетела среди жителей Гонконга. Его стали скачивать в 35 раз чаще, чем раньше: количество недельных загрузок IM-клиента (с 5 по 12 января) возросло с двухсот до семи тысяч. Об этом пишет The Wall Street Journal со ссылкой на данные Sensor Tower.




Представитель ICQ подчеркнул, что объём загрузок в Гонконге за указанный период превысил число скачиваний за весь четвёртый квартал прошлого года. Кроме этого, поисковые запросы «ICQ» достигли рекорда за последние 10 лет. Как отмечает издание, пользователям из Гонконга «не нравятся попытки Facebook выслужиться перед властями Китая». В ICQ пояснили, что сообщения своих пользователей они никому не передают, кроме как по решению суда.




Журналисты связали рост популярности с анонсом изменений правил конфиденциальности в WhatsApp. Они позволят мессенджеру передавать данные о пользователях в Facebook, включая сведения об учётной записи, транзакциях, IP-адресах и многое другое.




Сервис ICQ был основан в 1996 году израильской компанией Mirabilis. Он стал одной из первых программ по мгновенному обмену сообщениями. В 1998 году её купил конгломерат America Online за $287 миллионов. В 2010 мессенджер приобрела Mail.ru Group за 187,5 млн долларов США, а в 2020-м компания перезапустила сервис. В нём появились быстрые ответы и возможность создания ботов. Общее количество активных пользователей ICQ не раскрывается.



Гонконг сошёл с ума…









 , , , ,








И это всё МОЁ

Я использую fabric Но в данном случае фреймворк не важен


Например такой алгоритм
grid = 100 / 16


for i = 0; i < (canvasWidth / grid); i++
Line([ i * grid, 0, i * grid, canvasHeight
Line([ 0, i * grid, canvasWidth, i * grid


При этом получим сетку с шагом 6,25


И надо еще линиями другого цвета разбить эти 6,25 / 5


Не получается ровно Ровно 6,25 делится на 1,25 и на 5


Но квадратов другого цвета в ячейке высотой и длиной 6,25 получается 4 а не 5









 ,








И это всё МОЁ
Состоялся релиз редактора дисковых разделов Gparted 1.2 (GNOME Partition Editor), поддерживающего большинство файловых систем и типов разделов, применяемых в Linux. Кроме функций управления метками, редактирования и создания разделов, GParted позволяет уменьшать или увеличивать размер существующих разделов без потери размещённых на них данных, проверять целостность таблиц разделов, восстанавливать данные с потерянных разделов и выравнивать начало раздела по границе цилиндров.



И это всё МОЁ

Привет. У меня пара вопросов по GLPI:

1. У меня для устройств прописаны местоположения Здание-Этаж-Кабинет. Как мне вывести список устройств по местоположениям, примерно в таком виде

Здание1
Этаж1
Кабинет1
Устройство10
Устройство22
Кабинет2
Устройство2
Устройство12
...

Может кто-то уже делал что-то подобное?

2. Не нашёл плагин, но может кто-то делал возможность для GLPI FAQ форматировать блоки программного кода, как здесь








 








И это всё МОЁ

Теперь в своём профиле там где квадратики вы можете не только писать УХЙ и прочие прелестные слова, но и писать музыку!


Для этого пока кушал супчик (вкусный между прочим) был написан генератор музыки на основе таблицы активности в профиле. Он извлекает зелёную составляющего цвета дня их таблицы и далее по правилам построения мелодии выполняет сборку в виде языка abc.


Таблица проходится с лева на право сверху вниз, тоесть по порядку дней. Сейчас начиная с февраля 2020 до января 2021 включительно.


Если в общих чертах то так


в зависимости от количества сообщений цвет блока имеет 4 градации + пустой блок итого 5 нот из 7 доступно, с понедельника по пятницу включительно каждый день вы выбираете какую ноту сыграть, нота зависит от цвета чем зеленее тем выше по нотам до ре ми фа со без ля си. В суботу вы играете ноту тональность которой определяет то какой тональности будут ноты на следующей неделе,суботняя нота проигрывается в текущей неделе, в воскресенье вы выбираете 1 из 4 типов того как мелодии будут проигрываться на следующей неделе, нота воскресенья также проигрывается в текущей неделе. Итого 5 дней вы нажимаете ноту в день и ещё 2 в субботу и воскресенье, две последние определяют стиль следующей. Нет сообщений стиль сбрасывается на начальный.


Я старался, но не особо подобрать переключение стилей.


Я старался, но не особо в остальном поэтому abc транслятор ругается, ну и пофиг.


Вам нужно:



  • 1 установить cutycapt для взятия скрина профиля пользователя

  • 2 установить abc2midi для компиляции midi из abc языка

  • 3 установить gcc

  • 4 иметь любую хрень которая умеет играть MIDI (gnome плеер например дефолтный)

  • 5 Положить sсript.sh и ololo.c в один каталог


Запускать так:


./sсript.sh www.linux.org.ru/people/LINUX-ORG-RU/profile энтер (с 37 секунды прям уххх)


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


В каталоге появится скрин профиля + abc файл + midi файл который можно прослушать.


sсript.sh


#!/usr/bin/env bash

cutycapt --url=$@ --out=lortomidi.tga --javasсript=on --delay=2000 &&
gcc ololo.c && ./a.out lortomidi.tga lortomidi.abc && abc2midi lortomidi.abc -o lortomidi.midi


В коде, мусор и лишнее, но мне лень убирать и править. Всё всем пока. Меня тут не было. И я тут вообще не причём. Оно само.


ololo.c


#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

static const int h_bloks = 7;
static const int w_bloks = 6;
static const int blocksize = 10;
static const int num_months= 12;
static const int H = h_bloks;
static const int W = ((w_bloks * (blocksize)) * num_months) / (blocksize) + 1;
static const int num_blocks = H*W;

static struct coord
{ uint16_t x;
uint16_t y;
} * coord2k21 = {NULL};

static struct color
{ uint8_t r;
uint8_t g;
uint8_t b;
} * color2k21 = {NULL};

static struct coord image_size = {800,673};
static struct coord offset_coord = {13, 668};

static struct color color_false_day = {46,52,54};
static struct color color_empty_day = {65,65,65};

enum qlor {Q0,Q1,Q2,Q3,Q4};
/*5 green color gradation == 5 notes of 7*/
static char * abc_language_table[4][5] =
{/* TABLE0 TABLE1 TABLE2 TABLE3 */
[0][0] = "C", [1][0] = "C,", [2][0] = "c", [3][0] = "'c",
[0][1] = "D", [1][1] = "D,", [2][1] = "d", [3][1] = "'d",
[0][2] = "E", [1][2] = "E,", [2][2] = "e", [3][2] = "'e",
[0][3] = "F", [1][3] = "F,", [2][3] = "f", [3][3] = "'f",
[0][4] = "G", [1][4] = "G,", [2][4] = "g", [3][4] = "'g",
/*[0][5] = "A", [1][5] = "A,", [2][5] = "a", [3][5] = "'a",
[0][6] = "B", [1][6] = "B,", [2][6] = "b", [3][6] = "'b",*/
};


enum q_lor_gradation_table
{
COLOR_Q0 = 63, // C or TABLE 0
COLOR_Q1 = 109, // D or TABLE 1
COLOR_Q2 = 143, // E or TABLE 2
COLOR_Q3 = 176, // F or TABLE 3
COLOR_Q4 = 210, // G or TABLE 4
};

enum week_mode{MODER,MODE1,MODE2,MODE3,MODE4};

uint8_t get_table_from_green(uint8_t green)
{
switch(green)
{
case COLOR_Q1: return Q1; break;
case COLOR_Q2: return Q2; break;
case COLOR_Q3: return Q3; break;
case COLOR_Q4: return Q4; break;
}
return Q1;
};

uint8_t get_note_from_green(uint8_t green)
{
switch(green)
{
case COLOR_Q0: return Q0; break;
case COLOR_Q1: return Q1; break;
case COLOR_Q2: return Q2; break;
case COLOR_Q3: return Q3; break;
case COLOR_Q4: return Q4; break;
}
return Q0;
}

uint8_t get_week_mode_from_green(uint8_t green)
{
return get_table_from_green(green);
}


const char * get_note_from_table(uint8_t table, uint8_t note)
{
return abc_language_table[table][note];
}


enum days{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};

int generate_week(FILE * file, uint8_t curr_week_data[7],uint8_t pre_week_data[7])
{
uint8_t mode = get_week_mode_from_green(pre_week_data[Saturday]);
uint8_t table = get_table_from_green(pre_week_data[Sunday]);
switch(mode)
{
case MODER:
{
fprintf(file, "\"C\"%s %s %s %s %s %s %s\n",
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE1:
{
fprintf(file, "\"%s\" %s%s | \"%s\" %s%s \"%s\" | %s %s %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE2:
{
fprintf(file, "\"%s\" [%s %s] | \"%s\"[%s %s] | \"%s\" [%s %s] %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE3:
{
fprintf(file, "\"%s\" [%s %s %s] | \"%s\" [%s %s %s]| \"%s\" %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE4:
{
fprintf(file, "\"%s\" %s | %s | %s | %s | \"%s\" %s %s %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

default : return 42;
}
return 0;
}



int calculate_days_abc_midi(struct color * cl,const char * filename)
{
FILE * file = fopen(filename, "w";);
if (file == NULL)
{
return 42;
}

fprintf(file,"X:46\nQ:2/8\nM:4/4\nL:1/4\nK:G\n";);

uint8_t cur_day[7] = {0};
uint8_t pre_day[7] = {63,63,63,63,63,63,63};

for (uint16_t i=0,day = 0; i < num_blocks; i++)
{
if(cl[i].r == color_false_day.r &&
cl[i].g == color_false_day.g &&
cl[i].b == color_false_day.b )
{

continue;
}

if((day) > 6)
{
generate_week(file,cur_day,pre_day);
for (int i = 0; i < 7; ++i)
{
pre_day[i]=cur_day[i];
};
day=0;
}else{
cur_day[day++]=cl[i].g;
}
}

return 0;
}

static int calculate_days_coord(struct coord ** cr, const char * filename)
{
FILE * file = fopen(filename, "rb";);
if (file == NULL)
{
return 42;
}

uint16_t height = 0;
fseek(file, 14, SEEK_SET);
fread(&height, sizeof(uint16_t), 1,file);
fclose(file);

if(height < image_size.y)
{
return 42;
}

cr[0] = malloc(sizeof(struct coord) * (num_blocks));

if(!cr[0])
{
return 42;
}

struct coord new_coord = {0,0};
struct coord new_offset_coord = {offset_coord.x,(height - offset_coord.y)};

for (uint16_t w = 0, c = 0; w < W; ++w)
{
new_coord.x = (blocksize * w) + new_offset_coord.x;

for (uint16_t h = 0; h < H; ++h)
{
new_coord .y = (blocksize * h) + new_offset_coord.y;
cr[0][c++] = new_coord;
}
}
return 0;
}

static int calculate_days_color(struct color ** cl,struct coord * cr,const char * filename)
{

FILE * file = fopen(filename, "rb";);
if (file == NULL)
{
return 42;
}

uint16_t width = 0;
uint16_t height = 0;
uint8_t depth = 0;
fseek(file, 12, SEEK_SET);
fread(&width, sizeof(uint16_t),1, file);
fseek(file, 14, SEEK_SET);
fread(&height, sizeof(uint16_t), 1,file);
fseek(file, 16, SEEK_SET);
fread(&depth, sizeof(char),1, file);

if(height*width < image_size.x*image_size.y)
{
return 42;
}

int size = height * width * 4;
unsigned char* image = malloc(sizeof(unsigned char) * size);

fseek(file, 18, SEEK_SET);
fread(image, sizeof(unsigned char) * size, 1,file);
fclose(file);

if (depth != 32)
{
free(image);
return 42;
}

cl[0] = malloc(sizeof(struct color) * (num_blocks));

if(!cl[0])
{
free(image);
free(cl[0]);
return 42;
}

struct color new_color = {0,0,0};
uint16_t d = 0;

for (uint16_t i = 0; i < num_blocks; ++i)
{
new_color.r = image[cr[i].x * 4 + cr[i].y * width * 4 + 2];
new_color.g = image[cr[i].x * 4 + cr[i].y * width * 4 + 1];
new_color.b = image[cr[i].x * 4 + cr[i].y * width * 4 + 0];

cl[0][d++] = new_color;

};

free(image);
return 0;
}


int main(int argc, char *argv[])
{
enum arguments
{ img_in = 1,
abc_out = 2,
};

if(argc < 3)
{
return 42;
}

if(calculate_days_coord(&coord2k21,argv[img_in]) != 0)
{
return 42;
}

if(calculate_days_color(&color2k21,coord2k21,argv[img_in]) != 0)
{
free(coord2k21);
return 42;
}

if(calculate_days_abc_midi(color2k21,argv[abc_out]) != 0)
{
free(coord2k21);
free(color2k21);
return 42;
}

for (int i = 0; i < num_blocks; ++i)
{
printf("%d %d %d\n",coord2k21[i].x,coord2k21[i].y,i);
}

for (int i = 0; i < num_blocks; ++i)
{
printf("%d %d %d %d\n",color2k21[i].r,color2k21[i].g,color2k21[i].b,i);
}

free(coord2k21);
free(color2k21);
return 0;
}

```









 , , , ,








И это всё МОЁ

Теперь в своём профиле там где квадратики вы можете не только писать УХЙ и прочие прелестные слова, но и писать музыку!


Для этого пока кушал супчик (вкусный между прочим) был написан генератор музыки на основе таблицы активности в профиле. Он извлекает зелёную составляющего цвета дня их таблицы и далее по правилам построения мелодии выполняет сборку в виде языка abc.


Таблица проходится с лева на право сверху вниз, тоесть по порядку дней. Сейчас начиная с февраля 2020 до января 2021 включительно.


Если в общих чертах то так


в зависимости от количества сообщений цвет блока имеет 4 градации + пустой блок итого 5 нот из 7 доступно, с понедельника по пятницу включительно каждый день вы выбираете какую ноту сыграть, нота зависит от цвета чем зеленее тем выше по нотам до ре ми фа со без ля си. В суботу вы играете ноту тональность которой определяет то какой тональности будут ноты на следующей неделе,суботняя нота проигрывается в текущей неделе, в воскресенье вы выбираете 1 из 4 типов того как мелодии будут проигрываться на следующей неделе, нота воскресенья также проигрывается в текущей неделе. Итого 5 дней вы нажимаете ноту в день и ещё 2 в субботу и воскресенье, две последние определяют стиль следующей. Нет сообщений стиль сбрасывается на начальный.


Я старался, но не особо подобрать переключение стилей.


Я старался, но не особо в остальном поэтому abc транслятор ругается, ну и пофиг.


Вам нужно:



  • 1 установить cutycapt для взятия скрина профиля пользователя

  • 2 установить abc2midi для компиляции midi из abc языка

  • 3 установить gcc

  • 4 иметь любую хрень которая умеет играть MIDI (gnome плеер например дефолтный)

  • 5 Положить sсript.sh и ololo.c в один каталог


Запускать так:


./sсript.sh www.linux.org.ru/people/LINUX-ORG-RU/profile энтер (с 37 секунды прям уххх)


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


В каталоге появится скрин профиля + abc файл + midi файл который можно прослушать. На сем всё, всем пока. :D


sсript.sh


#!/usr/bin/env bash

cutycapt --url=$@ --out=lortomidi.tga --javasсript=on --delay=2000 &&
gcc ololo.c && ./a.out lortomidi.tga lortomidi.abc && abc2midi lortomidi.abc -o lortomidi.midi


ololo.c


#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

static const int h_bloks = 7;
static const int w_bloks = 6;
static const int blocksize = 10;
static const int num_months= 12;
static const int H = h_bloks;
static const int W = ((w_bloks * (blocksize)) * num_months) / (blocksize) + 1;
static const int num_blocks = H*W;

static struct coord
{ uint16_t x;
uint16_t y;
} * coord2k21 = {NULL};

static struct color
{ uint8_t r;
uint8_t g;
uint8_t b;
} * color2k21 = {NULL};

static struct coord image_size = {800,673};
static struct coord offset_coord = {13, 668};

static struct color color_false_day = {46,52,54};
static struct color color_empty_day = {65,65,65};

enum qlor {Q0,Q1,Q2,Q3,Q4};
/*5 green color gradation == 5 notes of 7*/
static char * abc_language_table[4][5] =
{/* TABLE0 TABLE1 TABLE2 TABLE3 */
[0][0] = "C", [1][0] = "C,", [2][0] = "c", [3][0] = "'c",
[0][1] = "D", [1][1] = "D,", [2][1] = "d", [3][1] = "'d",
[0][2] = "E", [1][2] = "E,", [2][2] = "e", [3][2] = "'e",
[0][3] = "F", [1][3] = "F,", [2][3] = "f", [3][3] = "'f",
[0][4] = "G", [1][4] = "G,", [2][4] = "g", [3][4] = "'g",
/*[0][5] = "A", [1][5] = "A,", [2][5] = "a", [3][5] = "'a",
[0][6] = "B", [1][6] = "B,", [2][6] = "b", [3][6] = "'b",*/
};


enum q_lor_gradation_table
{
COLOR_Q0 = 63, // C or TABLE 0
COLOR_Q1 = 109, // D or TABLE 1
COLOR_Q2 = 143, // E or TABLE 2
COLOR_Q3 = 176, // F or TABLE 3
COLOR_Q4 = 210, // G or TABLE 4
};

enum week_mode{MODER,MODE1,MODE2,MODE3,MODE4};

uint8_t get_table_from_green(uint8_t green)
{
switch(green)
{
case COLOR_Q1: return Q1; break;
case COLOR_Q2: return Q2; break;
case COLOR_Q3: return Q3; break;
case COLOR_Q4: return Q4; break;
}
return Q1;
};

uint8_t get_note_from_green(uint8_t green)
{
switch(green)
{
case COLOR_Q0: return Q0; break;
case COLOR_Q1: return Q1; break;
case COLOR_Q2: return Q2; break;
case COLOR_Q3: return Q3; break;
case COLOR_Q4: return Q4; break;
}
return Q0;
}

uint8_t get_week_mode_from_green(uint8_t green)
{
return get_table_from_green(green);
}


const char * get_note_from_table(uint8_t table, uint8_t note)
{
return abc_language_table[table][note];
}


enum days{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};

int generate_week(FILE * file, uint8_t curr_week_data[7],uint8_t pre_week_data[7])
{
uint8_t mode = get_week_mode_from_green(pre_week_data[Saturday]);
uint8_t table = get_table_from_green(pre_week_data[Sunday]);
switch(mode)
{
case MODER:
{
fprintf(file, "\"C\"%s %s %s %s %s %s %s\n",
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE1:
{
fprintf(file, "\"%s\" %s%s | \"%s\" %s%s \"%s\" | %s %s %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE2:
{
fprintf(file, "\"%s\" [%s %s] | \"%s\"[%s %s] | \"%s\" [%s %s] %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE3:
{
fprintf(file, "\"%s\" [%s %s %s] | \"%s\" [%s %s %s]| \"%s\" %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

case MODE4:
{
fprintf(file, "\"%s\" %s | %s | %s | %s | \"%s\" %s %s %s\n",
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(pre_week_data [Saturday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Monday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Tuesday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Wednesday])),
get_note_from_table(table, get_note_from_green(curr_week_data[Thursday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Friday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Saturday ])),
get_note_from_table(table, get_note_from_green(curr_week_data[Sunday ])));
}break;

default : return 42;
}
return 0;
}



int calculate_days_abc_midi(struct color * cl,const char * filename)
{
FILE * file = fopen(filename, "w";);
if (file == NULL)
{
return 42;
}

fprintf(file,"X:46\nQ:2/8\nM:4/4\nL:1/4\nK:G\n";);

uint8_t cur_day[7] = {0};
uint8_t pre_day[7] = {63,63,63,63,63,63,63};

for (uint16_t i=0,day = 0; i < num_blocks; i++)
{
if(cl[i].r == color_false_day.r &&
cl[i].g == color_false_day.g &&
cl[i].b == color_false_day.b )
{

continue;
}

if((day) > 6)
{
generate_week(file,cur_day,pre_day);
for (int i = 0; i < 7; ++i)
{
pre_day[i]=cur_day[i];
};
day=0;
}else{
cur_day[day++]=cl[i].g;
}
}

return 0;
}

static int calculate_days_coord(struct coord ** cr, const char * filename)
{
FILE * file = fopen(filename, "rb";);
if (file == NULL)
{
return 42;
}

uint16_t height = 0;
fseek(file, 14, SEEK_SET);
fread(&height, sizeof(uint16_t), 1,file);
fclose(file);

if(height < image_size.y)
{
return 42;
}

cr[0] = malloc(sizeof(struct coord) * (num_blocks));

if(!cr[0])
{
return 42;
}

struct coord new_coord = {0,0};
struct coord new_offset_coord = {offset_coord.x,(height - offset_coord.y)};

for (uint16_t w = 0, c = 0; w < W; ++w)
{
new_coord.x = (blocksize * w) + new_offset_coord.x;

for (uint16_t h = 0; h < H; ++h)
{
new_coord .y = (blocksize * h) + new_offset_coord.y;
cr[0][c++] = new_coord;
}
}
return 0;
}

static int calculate_days_color(struct color ** cl,struct coord * cr,const char * filename)
{

FILE * file = fopen(filename, "rb";);
if (file == NULL)
{
return 42;
}

uint16_t width = 0;
uint16_t height = 0;
uint8_t depth = 0;
fseek(file, 12, SEEK_SET);
fread(&width, sizeof(uint16_t),1, file);
fseek(file, 14, SEEK_SET);
fread(&height, sizeof(uint16_t), 1,file);
fseek(file, 16, SEEK_SET);
fread(&depth, sizeof(char),1, file);

if(height*width < image_size.x*image_size.y)
{
return 42;
}

int size = height * width * 4;
unsigned char* image = malloc(sizeof(unsigned char) * size);

fseek(file, 18, SEEK_SET);
fread(image, sizeof(unsigned char) * size, 1,file);
fclose(file);

if (depth != 32)
{
free(image);
return 42;
}

cl[0] = malloc(sizeof(struct color) * (num_blocks));

if(!cl[0])
{
free(image);
free(cl[0]);
return 42;
}

struct color new_color = {0,0,0};
uint16_t d = 0;

for (uint16_t i = 0; i < num_blocks; ++i)
{
new_color.r = image[cr[i].x * 4 + cr[i].y * width * 4 + 2];
new_color.g = image[cr[i].x * 4 + cr[i].y * width * 4 + 1];
new_color.b = image[cr[i].x * 4 + cr[i].y * width * 4 + 0];

cl[0][d++] = new_color;

};

free(image);
return 0;
}


int main(int argc, char *argv[])
{
enum arguments
{ img_in = 1,
abc_out = 2,
};

if(argc < 3)
{
return 42;
}

if(calculate_days_coord(&coord2k21,argv[img_in]) != 0)
{
return 42;
}

if(calculate_days_color(&color2k21,coord2k21,argv[img_in]) != 0)
{
free(coord2k21);
return 42;
}

if(calculate_days_abc_midi(color2k21,argv[abc_out]) != 0)
{
free(coord2k21);
free(color2k21);
return 42;
}

for (int i = 0; i < num_blocks; ++i)
{
printf("%d %d %d\n",coord2k21[i].x,coord2k21[i].y,i);
}

for (int i = 0; i < num_blocks; ++i)
{
printf("%d %d %d %d\n",color2k21[i].r,color2k21[i].g,color2k21[i].b,i);
}

free(coord2k21);
free(color2k21);
return 0;
}

```

В коде, мусор и лишнее, но мне лень убирать и править. Всё всем пока. Меня тут не было . ::)









 , , , ,








И это всё МОЁ

Сабж собственно в заглавии.

Подробности: Я купил Creative Play! 3, а там негодяи, видимо чтобы спрятать шумы на выходе поставили 82-омные резисторы.

Ну понятно что звук в наушниках очень тихий, я хочу их поменять на 10-омные или иное значение которое обеспечит комфортное звучание в моих 18-омных наушниках.


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


Награда: поломанные комплектующие на разборку или длинный DVI кабель(сколько он точно не помню, может метров пять).

При вашем желании могу сделать ролик где мы будем менять резисторы и размещу его на своём канале.









 , , , ,








И это всё МОЁ

У всех так? В почте\погоде появилась реклама, раньше не было. Как выключить? Firefox + ublock orign.









 








И это всё МОЁ

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


Но такое вот нечто мне бы пригодилось: есть distgit пакетов, которые мне нужны, они локально собираются в chroot-ах либо nspawn, после чего складываются в репозиторий на сетевом диске.


Ну и все это с минимальным участием с моей стороны, разумеется.


Причина — в COPR qt5-qtwebengine, например, собирается 12 часов, а у меня локально — полчаса. И он там не один такой.


Есть на это готовые решения или надо самому городить костыли?









 , ,








И это всё МОЁ

у меня Ubuntu 20.04, i3wm с i3status, где сидят значки от другого софта


требуется любой апплет для значка в трее и гибкого управления сетью - вифи/шнур с статикой и dhcp/модемы


newtork-manager-gnome - тянет за собой вагон всего и ломает wm


nm-plasm - что это вообще такое? не знаю как запустить


nm-tray - работает некорректно без lubuntu-default-settings, которое тянет за собой openbox


все апплеты ставились с помощью apt –no-install-recommends install


подскажите ещё варианты, пожалуйста









 , ,








И это всё МОЁ

Иcпользую PostreSQL, есть рекурсивный запрос в таблице Document для получение записей вниз по иерархии, идентификатор в таблице @Document.
Поле Hierarchy ссылка на идентификатор родительской записи.

EXPLAIN (ANALYZE,BUFFERS)
WITH RECURSIVE
hier_down AS(
SELECT
h."@Document",
h."Hierarchy",
h."Hint"
FROM "Document" h
WHERE
"@Document" = 13
UNION all
SELECT
"Document" ."@Document",
"Document" ."Hierarchy",
"Document"."Hint"
FROM hier_down, "Document"
WHERE "Document"."Hierarchy" = hier_down."@Document"
)
SELECT *
FROM hier_down

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

"CTE Scan on hier_down  (cost=783.59..861.41 rows=3891 width=44) (actual time=0.008..0.748 rows=5 loops=1)"
" Buffers: shared hit=281"
" CTE hier_down"
" -> Recursive Union (cost=0.28..783.59 rows=3891 width=76) (actual time=0.007..0.745 rows=5 loops=1)"
" Buffers: shared hit=281"
" -> Index Scan using "pDocument" on "Document" h (cost=0.28..8.29 rows=1 width=76) (actual time=0.006..0.006 rows=1 loops=1)"
" Index Cond: ("@Document" = 13110)"
" Buffers: shared hit=3"
" -> Hash Join (cost=0.33..69.75 rows=389 width=76) (actual time=0.044..0.143 rows=1 loops=5)"
" Hash Cond: ("Document"."Hierarchy" = hier_down_1."@Document";)"
" Buffers: shared hit=278"
" -> Seq Scan on "Document" (cost=0.00..62.66 rows=766 width=76) (actual time=0.003..0.061 rows=766 loops=5)"
" Buffers: shared hit=275"
" -> Hash (cost=0.20..0.20 rows=10 width=4) (actual time=0.002..0.002 rows=1 loops=5)"
" Buckets: 1024 Batches: 1 Memory Usage: 9kB"
" -> WorkTable Scan on hier_down hier_down_1 (cost=0.00..0.20 rows=10 width=4) (actual time=0.000..0.000 rows=1 loops=5)"
"Planning time: 0.336 ms"
"Execution time: 0.786 ms"

Хочется избавиться от seq scan
Есть индекс по полю Hierarchy - он не используется
Есть составной индекс (Hierarchy, @Document ) - он не используется

сделал индекс

CREATE INDEX "Hier"
ON "Document" USING btree
("Hierarchy" NULLS LAST, "@Document" NULLS LAST, "Hint" NULLS LAST);

он используется, но перестает использоваться когда добавляется новое поле в SELECT, приходится добавлять новое поле в индекс.

Как бы создать индекс, на который не влиял бы набор полей в SELECT?








 ,








И это всё МОЁ
Компания Mozilla учредила организацию Open Web Docs, нацеленную на продолжение поддержания проекта MDN (Mozilla Developer Network), как единой площадки для публикации документации для web-разработчиков, охватывающей поддерживаемые в современных браузерах технологии, включая Javasсript, CSS, HTML и различные Web API. В августе 2020 года в ходе сокращения штата сотрудников Mozilla под увольнения попала вся команда MDN. С тех пор внесение исправлений и дополнений в документацию производилось отдельными энтузиастами.



И это всё МОЁ

Собственно, в результате не собирается ни один сторонний модуль ядра, включая nvidia.
И это продолжается с июня!
Назревает вопрос: зачем вообще мантейнеры пыжились собирали эти пакеты, если всё псу под хвост, и надо собирать самому?

Собственно,собрал по-быстрому последнее ядро и, о чудо, всё закомпилировалось.

А ведь ядро я не собирал с 2012 года...

Зато сраные гибибайты везде повтуляли, это да, без этого никак.

К чему я это... Может, местные гуру знают какую-то тайну, а я просто рукожоп?








 , ,








И это всё МОЁ

Например, нету xfeatures2d из opencv_contrib
Назревает вопрос: зачем вообще мантейнеры пыжились собирали эти пакеты, если всё псу под хвост, и надо собирать самому?

Ну и мой последний шанс: может, я рукожоп и что-то делаю не так и местные гуру мне помогут?








 ,








И это всё МОЁ

Вот так да.
Поставил Debian (Bullseye), перезагрузил.
Пароль не вводится!
Точнее, его нельзя ввести, так как всё по-русски, даже экранная клавиатура.

Что деать-то?








 ,








И это всё МОЁ

Добрый день!


Поломался телефон. Китайцы прислали новую мамку но под нее дрова не встают под Винду.


В Федоре она определилась. Но чтобы прошить телефон нужной прошивкой, мне нужно привязать usb к com. Тогда его увидит программа прошивальщик SP Flash Tool


сейчас прога не видит телефон подключенный в порт usb
[r1a1@localhost SP_Flash_Tool_v5.1836_Linux]$ sudo ./flash_tool.sh
[sudo] password for r1a1:
QObject::moveToThread: Cannot move objects with a parent
support_dl_cert_to_storage: 0
Connecting to BROM…
Scanning USB port…
Search usb, timeout set as 3600000 ms


Подскажите если возможно поподробнее как это сделать?
Телефон Blackview 9600 2019 года. Mediatek MT6771T 2.1Ghz


lsusb
Bus 003 Device 019: ID 0e8d:20ff MediaTek Inc.


usb-devices
T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 19 Spd=480 MxCh= 0
D: Ver= 2.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=20ff Rev=02.23
S: SerialNumber=0123456789ABCDEF
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#=0x0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid


dmesg
[82047.903166] usb 3-1: new high-speed USB device number 19 using xhci_hcd
[82048.030075] usb 3-1: New USB device found, idVendor=0e8d, idProduct=20ff, bcdDevice= 2.23
[82048.030091] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[82048.030094] usb 3-1: SerialNumber: 0123456789ABCDEF
[82048.031705] hid-generic 0003:0E8D:20FF.000E: No inputs registered, leaving
[82048.031835] hid-generic 0003:0E8D:20FF.000E: hidraw2: USB HID v1.01 Device [HID 0e8d:20ff] on usb-0000:00:14.0-1/input0