Здравствуйте, temnik, Вы писали:
S>>Да, действительно, если эту работу свалить на ОС, можно сильно сэкономить. T>Установите PuntoSwitcher и не страдайте ерундой
Какой дурак, интересно, поставит себе добровольно PuntoSwitcher, который с поличным поймали на отправке логов в Яндекс?
Здравствуйте, autopsist, Вы писали:
A>>>Поэтому файл реестра (на пример NTUSER) копируется на компьютер, который может загрузиться и восстанавливается там. A>A>>Ну или на том же компе, путем загрузки с другого носителя.
_>>Обычно приносят ноут который просто не грузится, и файлы реестра никто естественно не копировал. В таких ситуациях быстрее и дешевле винду переставить чем восстанавливать средствами винды. Хотя достаточно привести реестр в божеский вид и всё снова работает.
A>Что мешает загрузиться с флэшки и восстановить реестр предложенной программой?
Вчера хотел попробовать. Но не срослось. Оказался полудохлый ssd. Пришлось заменить и накатить всё с нуля. Вот и скажите мне что мешает винде иметь средства диагностики оборудования?
n+1) Так что не хватает uefi набора для диагностики железа.
Здравствуйте, Евгений Музыченко, Вы писали:
m2l>>Ctrl+P > Save as PDF
ЕМ>Думаю, под "оформлением" понимался тот же HTML, но чистый, без мусора.
Это навроде Ctrl+U (View page source) > Ctrl+P > Save as PDF ?
Если нет, то я наверное неправильно понимаю вопрос....
m2l>>STDU Viewer ЕМ>Только для просмотра — хорош, а вот если нужно скопировать текст, отличный от ANSI — сразу ужас, ибо они как-то ухитрились обойтись без Unicode.
Сталкивался, но чаще документ такой, а не STDU фейлится. Вот, даже перепроверил в версии 1.6.361. Но конкретно для PDF мне последнее время нравится работа MS Edge — он их ощутимо шустрей переваривает другого ПО, и в некоторых вещах кажется удобней (вроде скрывающейся панели оглавления — когда у тебя PDF-ки и с ним и без него это просто спасение).
Про генератор инвойсов:
M>У меня почти такое есть. Правда, нет возможности включать условно фрагменты, но это можно допилить. И если что-то встречается в разных падежах, то сорян, но надо самому все варианты забить. Шаблоны с оформлением создаются в формате RTF. Макросы вида $(BlaBla). Описания (читаемые названия) макросов хранятся а) для наиболее общих случаев — в самой проге в текстовом файлике рядом, б) в свойствах RTF-шаблона, можно было править в ворде, вроде в меню "Файл" пункт типа "Свойства документа", но точно не помню.
Вдохновился вашей идеей и тоже сделал
Но шаблон на html
Результат тоже html
Можно делать #include, чтобы большие договоры на части разбить
Можно делать #style, чтобы указать из какого файла взять шрифты и для Word'a настройки
Константы хранятся в текстовом файле
В теле html указываются так: [дата договора]
Word умеет открывать такие html файлы
Для него там даже можно указать margins страницы. И чтобы он сразу открывал вид — разметка страницы
Дальше можно на печать отправлять
С rtf не заладилось
Он русское [поле] очень сильно коверкает. Сложно найти и заменить
И генерировать его сложно. Формат переусложнённый
Здравствуйте, m2l, Вы писали:
ЕМ>>Думаю, под "оформлением" понимался тот же HTML, но чистый, без мусора.
m2l>Это навроде Ctrl+U (View page source) > Ctrl+P > Save as PDF ?
На мой взгляд, это текст с атрибутами шрифтов, абзацев и прочего форматирования, но без баннеров и прочей шелухи.
m2l>чаще документ такой, а не STDU фейлится.
Мне попадалось немало документов на русском, немецком или французском, из которых в STDU было невозможно нормально скопировать фразу, а Chrome или Firefox копировали нормально.
Здравствуйте, TailWind, Вы писали:
TW>Можно делать #include, чтобы большие договоры на части разбить TW>Можно делать #style, чтобы указать из какого файла взять шрифты и для Word'a настройки
M>>У меня почти такое есть. Правда, нет возможности включать условно фрагменты, но это можно допилить. И если что-то встречается в разных падежах, то сорян, но надо самому все варианты забить. Шаблоны с оформлением создаются в формате RTF. Макросы вида $(BlaBla). Описания (читаемые названия) макросов хранятся а) для наиболее общих случаев — в самой проге в текстовом файлике рядом, б) в свойствах RTF-шаблона, можно было править в ворде, вроде в меню "Файл" пункт типа "Свойства документа", но точно не помню.
TW>Вдохновился вашей идеей и тоже сделал
TW>Но шаблон на html TW>Результат тоже html
У меня вообще любой текстовый формат поддерживается. RTF — тоже текстовый, но pretty printable и wysiwyg. Из поддержки RTF я делал только кодирование кириллицы и, ЕМНИП, что-то по поводу поддержки таблиц — что бы можно было таблицы генерить, там от маркера нужно было назад отыскать начало строки таблицы — маркер я помещал в первую ячейку строки. И для HTML тоже что-то такое было сделало.
TW>С rtf не заладилось TW>Он русское [поле] очень сильно коверкает. Сложно найти и заменить
Не коверкает, а просто кодирует. Но всё довольно тривиально
TW>И генерировать его сложно. Формат переусложнённый
Я и генерил его, нет особых проблем. Но вообще для той тулзы шаблоны я в ворде подготавливал, со всем нужным оформлением
Здравствуйте, Евгений Музыченко, Вы писали:
m2l>>Это навроде Ctrl+U (View page source) > Ctrl+P > Save as PDF ?
ЕМ>На мой взгляд, это текст с атрибутами шрифтов, абзацев и прочего форматирования, но без баннеров и прочей шелухи.
Ну печать в PDF с включенным uBlock так и делает вроде. Можно ещё убрать флаг Background graphics. На худой конец тыкаешь в ненужный тебе раздел и через Developer Tools удаляешь эту ветку DOM дерева.
Здравствуйте, Shtole, Вы писали: S>Здравствуйте, m2l, Вы писали: _>>>6. переключения с любой раскладки клавиатуры в случае бездействия в течении некоторого времени обратно на латинскую. m2l>>Это делается программой буквально в 10 строк, через штатный вывоз API прогой установленной в качестве заставки. Ну реально как-бы минут 40 на разработку. S>Ну, не 10. Побольше. Бездействие как определять будем? Из LL-хуков таймер перезапускаем? А ещё плюс сам код переключения. S>Но за пару часов наколхозить можно.
Наколхозил
// ubuntu-kbd-layback.c#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <gio/gio.h> // pkg-config --cflags --libs gio-2.0#include <X11/Xlib.h> // pkg-config --cflags --libs x11#include <X11/XKBlib.h>
static int gshell_run_script(const gchar *script,gchar **result) {
enum { timeout=500 }; GDBusConnection *con=0; GVariantBuilder builder[1];
GVariant *vres=0,*vscript=0,*param=0; gboolean success; int rc=0;
const gchar *bus_name="org.gnome.Shell", *object_path="/org/gnome/Shell",
*interface_name="org.gnome.Shell", *method_name="Eval";
con=g_bus_get_sync(G_BUS_TYPE_SESSION,0,0); if (!con) { rc=1; goto leave; }
g_variant_builder_init(builder,G_VARIANT_TYPE_TUPLE);
vscript=g_variant_parse(0,script,0,0,0); if (!vscript) { rc=2;goto leave; }
g_variant_builder_add_value(builder,vscript);
param=g_variant_builder_end(builder); if (!param) { rc=3; goto leave; }
vres=g_dbus_connection_call_sync(con,bus_name,object_path,interface_name,
method_name,param,0,G_DBUS_CALL_FLAGS_NONE,timeout,0,0);
if (!vres) { rc=4; goto leave; }
if (!g_variant_is_of_type(vres,G_VARIANT_TYPE("(bs)"))) {rc=5;goto leave;}
g_variant_get(vres,"(bs)",&success,result);
if (!success ) { rc=6; goto leave; }
leave:
if (rc!=0) { g_free(*result); *result=0; }
if (vres) { g_variant_unref(vres); vres=0; }
if (vscript) { g_variant_unref(vscript); vscript=0; }
if (con) { g_object_unref(con); con=0; }
return rc;
}
static int kbd_get_layout_index(int index_if_error) {
gchar *result=0; int res=index_if_error,ret;
const char* js="\"imports.ui.status.keyboard.getInputSourceManager()"
".currentSource.index\"";
ret=gshell_run_script(js,&result);
if (result) { res=atoi(result); g_free(result); }
return res;
}
static int kbd_set_layout_index(int index) {
const char* jst="\"imports.ui.status.keyboard.getInputSourceManager()"
".inputSources[%d].activate()\"";
enum { js_size=100 }; char js[js_size]; sprintf(js,jst,index);
return gshell_run_script(js,0);
}
static int kbd_get_layout_index_old(int index_if_error) {
int rc=index_if_error; GSettings *gs; GVariant *v;
gs=g_settings_new("org.gnome.desktop.input-sources");
if (gs) {
rc=g_settings_get_uint(gs,"current");
g_object_unref(gs);
}
return rc;
}
static int kbd_set_layout_index_old(int index) {
int rc; GSettings *gs;
gs=g_settings_new("org.gnome.desktop.input-sources"); if (!gs) return 1;
rc=g_settings_set_uint(gs,"current",index);
g_object_unref(gs);
g_settings_sync();
return rc ? 0 : 2;
}
enum { kbm_map_size=32 };
typedef struct KbdMonitor {
Display *display; XkbDescRec* kbd;
char map[2][kbm_map_size];
int tmr1,tmr1_en,tmr1_limit;
int quit;
int (*set_layout)(int idx);
int (*get_layout)(int idx_if_err);
} KbdMonitor;
static void kbmon_done(KbdMonitor* p) {
if (p->kbd) { XkbFreeKeyboard(p->kbd,0,True); p->kbd=0; }
if (p->display) { XCloseDisplay(p->display); p->display=0; }
p->quit=1;
}
static int kbmon_init(KbdMonitor* p) {
int rc=0;
Atom sym_name;char *layoutString;
p->kbd=0;
p->tmr1=0;
p->tmr1_en=1;
p->tmr1_limit=50; // 5sec
p->quit=0;
p->set_layout=kbd_set_layout_index;
p->get_layout=kbd_get_layout_index;
p->display=XOpenDisplay(0); if (!p->display) { rc=1; goto leave; }
p->kbd=XkbAllocKeyboard(); if (!p->kbd) { rc=2; goto leave; }
if (kbd_get_layout_index(-1)<0) {
p->set_layout=kbd_set_layout_index_old;
p->get_layout=kbd_get_layout_index_old;
}
XQueryKeymap(p->display,p->map[1]);
leave:
if (rc) kbmon_done(p);
return rc;
}
static void kbmon_step(KbdMonitor* p) {
int idx;
memcpy(p->map[0],p->map[1],kbm_map_size);
XQueryKeymap(p->display,p->map[1]);
if (p->tmr1_en) p->tmr1++;
if (memcmp(p->map[0],p->map[1],kbm_map_size)!=0) {
p->tmr1=0; p->tmr1_en=1;
}
if (p->map[1][15]&128) { p->quit=1; } // pause keyif (p->tmr1_en && p->tmr1>=p->tmr1_limit) { p->tmr1_en=0;
idx=p->get_layout(0);
if (idx) {
printf("set default layout\n");
p->set_layout(0);
} else {
p->tmr1=0; p->tmr1_en=1;
}
}
}
static void set_echo(int en) {
struct termios term;
tcgetattr(fileno(stdin), &term);
if (en) term.c_lflag |= ECHO;
else term.c_lflag &= ~ECHO;
tcsetattr(fileno(stdin), 0, &term);
}
int main(int argc,char** argv) {
KbdMonitor km[1];int rc;
rc=kbmon_init(km); if (rc) return rc;
if (argc>1) {
int x=atoi(argv[1]);
if (x>0 && x<=3600) km->tmr1_limit=x*10;
else { fprintf(stderr,"invalid value\n"); return -1; }
}
printf("start monitoring keyboard tau=%.1fs - press PAUSE to exit\n",
km->tmr1_limit*0.1);
set_echo(0);
while(!km->quit) {
kbmon_step(km);
usleep(100000);
}
set_echo(1);
kbmon_done(km);
printf("stop monitoring keyboard\n");
return 0;
}
Здравствуйте, m2l, Вы писали:
m2l>Здравствуйте, temnik, Вы писали:
T>>Установите PuntoSwitcher и не страдайте ерундой
m2l>А где у него в настройках время до переключения на дефолтный язык?
m2l>Мы же конкретный кейс обсуждаем: m2l>
_>>6. переключения с любой раскладки клавиатуры в случае бездействия в течении некоторого времени обратно на латинскую.
Ну, кейс-то сам по себе бредовый. Явно же есть какая-то дальнейшая цель в таком переключении. Если она есть, то надо ее и обсуждать, тогда будет проще подобрать решение.
_>>>6. переключения с любой раскладки клавиатуры в случае бездействия в течении некоторого времени обратно на латинскую.
T>Ну, кейс-то сам по себе бредовый. Явно же есть какая-то дальнейшая цель в таком переключении. Если она есть, то надо ее и обсуждать, тогда будет проще подобрать решение.
Отвлеклись, подошли к компу -- всегда известно что латинская раскладка и не надо отвлекаться на поиск индикатора текущего языка который прячется где-то в углу монитора.
ps: испытания прототипа показали что это просто удобно.
_>Отвлеклись, подошли к компу -- всегда известно что латинская раскладка и не надо отвлекаться на поиск индикатора текущего языка который прячется где-то в углу монитора.
Ну я и сказал, что есть пунтосвитчер, при котором пофигу какая раскладка, и не надо отвлекаться на поиск индикатора текущего языка. но, можно, конечно, и велосипед поизобретать, если очень хочется. Только этот велосипед не переключит раскладку, если не прошло 10 (или сколько там?) минут, а пунто переключит.
Здравствуйте, no_ise, Вы писали:
_>Здравствуйте, DiPaolo, Вы писали:
DP>>Можно посмотреть в сторону KODI — там много всего есть, в том числе огромное количество плагинов, а также форум, где могут подсказать.
DP>>Вот, например, штука, которая может подойти: https://www.youtube.com/watch?v=s1DPRk1W0-U
_>Ага, спасибо, вроде требованием соответствует! Нужно будет проверить как она на самом деле
В общем, недавно обнаружил что у ютюб есть Add-to-queue/playlist. Более-менее удобно и приблизительно соответствует тому что мне нужно.
Не знаю, было ли это два года назад... Или они догадались где искать хорошие ТЗ...
Здравствуйте, LuciferSaratov, Вы писали:
LS>Мне сейчас нужно решить задачу разбиения набора многогранников на набор выпуклых многогранников, пока не нашел.
Здравствуйте, vsb, Вы писали:
vsb>1. Карточки для запоминания. Должно быть онлайн-приложение и оффлайн нативное приложение для iOS. Должны быть изучены научные источники данных по правильному алгоритму, вроде SuperMemo публиковал такие. Без всяких готовых коллекций, именно для самостоятельного заполнения.
Anki + куча других вариантов. Ключевые слова — spaced repetition.
Здравствуйте, wantus, Вы писали:
vsb>>1. Карточки для запоминания. Должно быть онлайн-приложение и оффлайн нативное приложение для iOS. Должны быть изучены научные источники данных по правильному алгоритму, вроде SuperMemo публиковал такие. Без всяких готовых коллекций, именно для самостоятельного заполнения.
W>Anki + куча других вариантов. Ключевые слова — spaced repetition.