|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik Dimitry Sibiryakov пропущено... Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Не надо никуда PID писать. Вдруг твой процесс скоропостижно упал не стерев PID из файла, а другой запустился с этим же PID. Виндавс может выдать тот же PID другому процессу. Просто перебери все процессы и смотри каким EXE они созданы. Найдешь свой, значит оно. Затем перебираешь окна внутри процесса. Но проще сразу искать нужное окно FindWindowEx() ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 07:13 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dima T didgik пропущено... Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Не надо никуда PID писать. Вдруг твой процесс скоропостижно упал не стерев PID из файла, а другой запустился с этим же PID. Виндавс может выдать тот же PID другому процессу. Факт того что кто-то держит эксклюзивные права на запись является подтверждением того, что PID актуальный. Dima T Просто перебери все процессы и смотри каким EXE они созданы. Найдешь свой, значит оно. Кстати, да. Наверное, это самое простое. Перебрать все процессы и посмотреть полные пути к файлу .exe. Правда отсутствует некий функционал атомарности. Что будет если из одной папки практически одновременно будет дважды запущен один exe? Скорее всего они оба завершат свою работу. Ну и это не сработает если в будущем нужно будет «блокировать» не по папке где находится exe, а по некоторой другой папке куда конкурирующие процессы хотят получить эксклюзивные права на запись. В данном случае блокировка файла в этой папке гораздо лучше. Dima T Но проще сразу искать нужное окно FindWindowEx() Поиск по заголовку окна? Ну это никуда не годится. Еще можно подумать про создание разделяемой области памяти куда что-то будем писать — pid, например. Ну и вроде есть функционал временных файлов. Файлов, которые удаляет ОС при завершении процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 12:12 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
petravПоиск по заголовку окна? Обычно ищут по классу окна, а не заголовку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 12:58 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgik Dimitry Sibiryakov пропущено... Ага. Прочитать PID из файла, который не удалось открыть. Отличный план. Может, не стоит маяться дурью с файлом, а сразу искать окно?.. Прочитать PID из файла, который не удалось открыть на запись. Читать можно. Я так понял. А поиск окна я не осилил пока что. В этом и проблема. Там не нужны эксклюзивные права. Если запускать в поддереве %USER_PROFILE% то нам скорее всего хватит обычных файловых прав. И нужны будут парочка ОС API функций которые 1) берут свой собственный PID, 2) проверяют что среди списка процессов нету заданного кастомного PID. Можем попробовать набросать алгоритм. Против семафоров я не имею ничего против но они должны быть именованные, чтобы структура запускаемых процессов имела связи 1:1 семафор с user_dir текущего процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
FindWindow не подошло. Если окон данного класса больше одного, то оно возвращает первый попавшийся хендл. Соответственно надо перебирать все окна и опять вычислять есть ли нужное. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:24 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikСоответственно надо перебирать все окна и опять вычислять есть ли нужное. Да. В чём проблема? На две строчки больше кода написать - пальцы боишься стереть?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:40 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikСоответственно надо перебирать все окна и опять вычислять есть ли нужное. Да. В чём проблема? На две строчки больше кода написать - пальцы боишься стереть?.. FindWindow тут не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:42 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikFindWindow тут не нужен. Это самый простой из способов "активировать прогу уже запущенную из этой папки". Но смелые эксперименты молодых сурков не остановить... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikFindWindow тут не нужен. Это самый простой из способов "активировать прогу уже запущенную из этой папки". Но смелые эксперименты молодых сурков не остановить... Я тоже так думал. Но оказалось, что это не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:48 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikЯ тоже так думал. Но оказалось, что это не так. Оказалось, что ты просто и этого не сумел. Но хочу тебя огорчить: остальные способы не только сложнее, но ещё и не работают. В современных Windows программа неспособна активизироваться самостоятельно, без внешней помощи. И это правильно. PS: Хотя, конечно, твоё "активироваться" может отличаться от моего "вывести окно на передний план". ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 13:57 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov didgikЯ тоже так думал. Но оказалось, что это не так. Оказалось, что ты просто и этого не сумел. Но хочу тебя огорчить: остальные способы не только сложнее, но ещё и не работают. В современных Windows программа неспособна активизироваться самостоятельно, без внешней помощи. И это правильно. Вопрос не в том, как активизировать программу, а в том, чтоб найти нужную. И да, с помощью FindWindow я не сумел. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 14:01 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
didgikГлавный вопрос - активировать прогу didgikВопрос не в том, как активизировать программу didgikа в том, чтоб найти нужную. И да, с помощью FindWindow я не сумел. RTFM: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getwindowthreadprocessid https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-getmodulefilenameexa Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 14:17 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
В продолжение пятницы-субботы. По мотивам https://www.sql.ru/forum/1334409/tshark-bencode Решил писать события протокола DHT в Apache Cassandra. Задача без особого смысла. Так. Бесконечно играющая. Я ее думаю в выходные дни. И когда жене от меня ничего не нужно. И в целях изучения таких ... распределённых и децентрализованных штук. Но для начала - понаблюдать статистику. Сколько я вижу активных узлов в течение дня. Сколько они ищут. Что они публикуют. Первая идея была - фиксировать UDP-пакеты типа "поиск ноды" (уже декодированый пакет). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
И фиксировать количество таких find-s по каждому таргету. Я предполагал что популярные раздачи тогда выйдут в некую неравномерную гистограмму. Первый вариант таблицы был таков (это синтаксис CQL Apache Cassandra. Не-SQL!) Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Далее поля счетчики *_requests я планировал обновлять одним update-ом. Типа Код: sql 1. 2.
Не вышло. Cassandra не позволяет инкремент полей за 1 dml операцию если они не являются типом counter. Окей. Переделал под счетчики. Но не тут-то было. Таблица со счетчиками не может содержать поля смешанного типа. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 18:51 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? Проще говоря, делать классическую звезду (и снежинку как ее развитие) намного выгоднее с точки зрения производительности, и обновления и выборок, для задач подсчета количества. Это уже с точки зрения выдачи результата проще писать запрос к одной таблице чем помнить что у тебя их две и правильно делать связку таблиц на каждый запрос, но это обычно решается вьюшками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 21:02 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Получается что для такого использования мне надо держать аж 2 таблицы. С одиаковыми ключами но с разными атрибутами. Одни для счетчиков - а другие просто для вариативных типов данных. Вот такой он этот жестокий и коварный No-SQL. Интересно бы узнать мотивацию к такому разделению? Возможно это были требования жестокой атомарности? Или какие-то другие ограничения distributed систем? Проще говоря, делать классическую звезду (и снежинку как ее развитие) намного выгоднее с точки зрения производительности, и обновления и выборок, для задач подсчета количества. Это уже с точки зрения выдачи результата проще писать запрос к одной таблице чем помнить что у тебя их две и правильно делать связку таблиц на каждый запрос, но это обычно решается вьюшками. Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. Joins не поддерживается. Консистетность между таблицами - слабая. Она есть на уровне eventual consistency. Тоесть грубо говоря каждая таблица лежит в своём собственном времени. Почему я взял cassandra? Не знаю. Просто так захотелось. Инженерное любопытство. У нее другие плюшки. Но тема пока не об этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 22:00 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. От технической стороны организации базы данных, принципы организации данных не исчезают и не меняются. NoSQL даже более удобен для организации звезд, и сильнее напоминает о пользе нормализации чем реляционные БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 23:47 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Какие снежинки? Какая нормализация? Cassandra - это махровый NoSQL. От технической стороны организации базы данных, принципы организации данных не исчезают и не меняются. NoSQL даже более удобен для организации звезд, и сильнее напоминает о пользе нормализации чем реляционные БД. Я думаю что о нормализации пока говорить раненько. Хотя-бы по той причине что в этом домене никто "дупля не отсреливает". Я имею в виду DHT, KAD, Chord e.t.c. И я пока поставил простую задачу - учесть количество запросов на публикацию контента от "id". По сути сделать 1 таблицу-лог которая просто фиксирует число интеракций по id. По мере поступления информации я буду эту модель нормализовывать. Но пока еще рано говорить о нормализации. Я просто не знаю как связаны между собой атрибуты id, target, token. Как только уясню - сможем нормализовать. Обычная бизнесовая проблема. Нехватка знаний по домену. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2021, 23:53 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton Я думаю что о нормализации пока говорить раненько. Денормализация будет полезна на этапе выборок из базы. Вот когда будешь делать отчетную систему на свою базу - тогда и надо заниматься денормализацией, а во всех остальных этапах и особенно на этапе проектирования БД - нормальзованные данные это необходимо. mayton И я пока поставил простую задачу - учесть количество запросов на публикацию контента от "id". По сути сделать 1 таблицу-лог которая просто фиксирует число интеракций по id. И тут действительно nosql база будет хорошо работать и любые объемы съест не подавившись. mayton Я просто не знаю как связаны между собой атрибуты id, target, token. Как только уясню - сможем нормализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 04:52 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Я думаю что о нормализации пока говорить раненько. Впервые слышу такое прочтение понятия нормализации. Это NoSQL так на людей влияет? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 12:08 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
В NoSQL нормализацию заменяют на агрегацию. Это по сути наружение 1НФ и включение в один data-row целой коллекции других типизированных data-row или документов. Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. В середине 2010х мне один Моного-разработчик плакался. Жаловался что много информации хранится безо всякого смысла в ихних базах. Не хватает схем (видимо создавали schema-less). И вообще - лучший способ потерять какой-то атрибут навсегда - это положить его в документ Mongo. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 16:52 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
mayton В NoSQL нормализацию заменяют на агрегацию. Это по сути наружение 1НФ и включение в один data-row целой коллекции других типизированных data-row или документов. То что NoSQL обычно удобнее для агрегации, не значит что надо заменять нормализацию. Кушать плюшки не требует переходить на плюшечную диету. mayton Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Вся остальная разница чисто косметическая. Другой язык запросов, другие возможности-ограничения на конкретные плюшки (в смысле что именно движок БД способен автоматизировать). Но и только. Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. А еще чтобы сделать автоматическую нумерацию записей ораклистам надо создать sequence. А mssql-овцам не надо, им хватает просто определить поле как autoincrement. А sqlite-овцам нет нужды определять текстовое это поле или числовое, чрезвычайно удобно, очень непривычно и может привести к потерям производительности, но очень удобно. А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. Это все плюшки, уникальные и местами загадочные, но плюшки конкретных движков и технических решений примененных в них. Но разве это отменяет принципы организации данных? Ты в любой базе можешь сделать как 0nf простынь, так и снежинку в 5nf (которая теоретический идеал, но никто не видел на практике). Не, я конечно понимаю что некоторые местные люди считают что data structures в java и data structures в c++ это очень разные data structures и читать книжки использующие "вражеский язык" для понимания самих data structures это уголовно наказуемое деяние. Но ... mayton В середине 2010х мне один Моного-разработчик плакался. Жаловался что много информации хранится безо всякого смысла в ихних базах. Не хватает схем (видимо создавали schema-less). И вообще - лучший способ потерять какой-то атрибут навсегда - это положить его в документ Mongo. Мало ли ты встречал приложений завязанных на Oracle/MSSQL/etc которые сами следят за связностью данных в разных таблицах? А ведь это типичные RDBMS используемые в модели NR-DBMS и то что они используют язык запросов наследованный от SQL-92 не делает их реляционными. С другой стороны, я сейчас работаю с nosql базой (разработанной в начале 80-х), совершенно другой язык запросов, таблицы называют файлами и хранят структуру таблиц во внешних текстовых файлах... Но при этом весь доступ к БД организован через одну единственную билиотеку, которая читает те текстовые файлы и самостоятельно следит за целостностью ссылок. Так что несмотря на то что это "библиотека" - на практике получается классический embedded rdbms. При этом она считается и описывается как nosql, потом что там нет вообще ни грамма от sql :) Там конечно тоже не мало странностей и идиотизмов (в первую очередь из-за "встроенности" с которой надо уметь работать), но... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:21 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl mayton Но в NoSQL - на самом деле технический долг еще более силён чем в реляционках. Если в Oracle ты можешь по ходу развития доменной модели "подбрасывать" новые связи или даже поменять роли первичных ключей или расширить их, то в NoSQL системе как один раз сделал дизайн ключей - так они и будут навсегда. Исправлять - принципиально невозможно. Можно просто пересоздавать таблицы заново (делать CTAS) и причем ОДНОВРЕМЕННО с изменением семантик. А делать CTAS в продуктовой работающей БД - это смерти подобно. И диска не хватает обычно и времени регламента нету. Я имел в виду следующее. Стоимость поддержки изменений в реляционной БД ~ равна некой условной величине. Назовем ее 1 story point. Добавить внешний ключ. 1 единица. Проиндексировать поле - тоже 1 единица. Порезать таблицу вдоль на 2 суб-таблицы типа родитель-потомок - тоже 1 единица. Я утрирую конечно - но объем работ примерно одинаков с точки зрения рисков. А в не-реляционных идет так. Сделать плюшку - 0.5 поинтов. Потом еще плюшка - 0.5 поинтов. А потом прилетает плюшка которая стоит аж 100500 поинтов. Или ее сделать нереально или архитекторы просто ее не хотят делать по причине того что модель уже настолько далека от желаемого что проще создать новую систему. При том что в реляционной эта-же плюшка стоила бы ну 3-5 поинтов. Вот это я имел в виду. Непрогнозируемые затраты. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:40 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Разница между реляционной и не-реляционной базой на самом деле очень маленькая. И заключается она всего-лишь в том, что в "реляционной" можно определить связи (внешние ключи которые) и сам движок БД будет отслеживать их целостность при изменении данных. А в не-реляционной такой возможности нет, там за целостностью данных надо следить на уровне приложения. И все. Ну ты даёшь блин. Ну возьми бухгалтерскую учебную бд и втащи ее в не-реляционную с сохранением целостности денег на транзакциях и отчотах. Кстати перечисли те системы из класса не-реляционных на которые ты ссылаешся. Тема - это размытая. Тут - каждый сам себе что-то имеет в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 20:46 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl Вот смотри, ты сейчас используешь Кассандру которая хочет держать счетчики в отдельных таблицах и не мешать их с полями другого типа. Это плюшка. А Оракл вообще не имеет счетчиков, нет у него такой плюшки в движке, поэтому ораклисты вынужденны использовать обычное целочисленное поле. Разве в Оракле я не могу сделать такое? Код: plsql 1.
Ровно тоже самое я хотел от Cassandra но она отказала мне в декларации таблиц а вовсе не в реализации этого чудесного DML. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:08 |
|
С пятницей всех.
|
|||
---|---|---|---|
#18+
White Owl А в IQ нет нужды делать индексы, там каждое поле автоматически индексировано потому что у БД колоночный метод хранения таблиц - очень тормознуто на обновлениях, но для выборок - конфетка. А вот с этого момента - поподробнее. Column-oriented это не про индекс а про форму хранения. Не знаком c IQ но идеология column-oriented это не про обновления а про выборки-агрегации. Разворот на 90 градусов data-row по сути. Хотя может мы о разных вещах говорим? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2021, 21:25 |
|
|
start [/forum/topic.php?fid=57&msg=40055477&tid=2017244]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 391ms |
0 / 0 |