develop.16: Обсуждение вопросов программирования


1 2 . . . 6
From: Difrex (mira, 14) 01.12.15 09:55 UTC
To: All
Subject: develop.16
Обсуждение вопросов программирования.

From: Difrex (mira, 14) 02.12.15 08:47 UTC
To: All
Subject: LISP
Я тут подумал, что надо бы написать что-то на чем-то отличном от перла или питона.
Руби не хочу, ноджс тащить в систему ваще не хочется, С не люблю с института.

Глянул на CL -- это прямо то, что нужно! Синтаксис еще долбанутей перла, я такое люблю! Начал читать Practical Common Lisp. Но это все нудно. Я люблю учить что-то новое через реальные задачи, а не базу ЦД.

Такой вот очень нубский вопрос: как скомпилить файл в нативный бинарь? Как запустить файл в интерпретаторе(не в REPL (load "filename"))?
:D

Reply to: 54zdoAQRckPdJU9Q0cuP
From: Difrex (mira, 14) 02.12.15 08:49 UTC
To: Difrex
Subject: Re: LISP
Да, поставил SBCL.

Reply to: 54zdoAQRckPdJU9Q0cuP
From: Andrew Lobanov (station13, 1) 02.12.15 09:39 UTC
To: Difrex
Subject: Re: LISP
Difrex> Глянул на CL -- это прямо то, что нужно! Синтаксис еще долбанутей перла, я такое люблю! Начал читать Practical Common Lisp. Но это все нудно. Я люблю учить что-то новое через реальные задачи, а не базу ЦД.

Базу ЦД из PCL рекомендую всё таки разобрать. Хорошее погружение, так сказать.

Difrex> Такой вот очень нубский вопрос: как скомпилить файл в нативный бинарь? Как запустить файл в интерпретаторе(не в REPL (load "filename"))?

Нативный бинарь у лиспа это очень своеобразная штука. По крайней мере у SBCL. Это по своей сути упакованная в один файл лисп-машина и core dump всего загруженного на момент "компиляции". В итоге бинари толстые.

На примере SBCL это выглядит так:

====
* (sb-ext:save-lisp-and-die "bin-name" :executable t :top-level 'function-name)
====

Всё, что выполняется вне функций упихиваешь в функцию (например (defun main () ...)). Тогда :top-level 'main будет. А :executable отвечает за конечный результат: бинарь дампа или лисп-машину туда присобачить.

Я долго разбирался с этим вопросом, но похоже свободные реализации не умеют компилировать нативный байт-код.

А загрузка осуществляется посредством (load "filename") да =)

Ещё рекомендую посмотреть https://www.quicklisp.org/ это очень годная штука для подгрузки и обновления систем (что-то типа библиотек). Очень удобно.

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

Reply to: VXUPfamNh2CjkyfVfKXz
From: Andrew Lobanov (station13, 1) 02.12.15 09:41 UTC
To: Difrex
Subject: Re: LISP
AL> Я долго разбирался с этим вопросом, но похоже свободные реализации не умеют компилировать нативный байт-код.

Зато ты можешь подгрузить и запустить swank и подключаться к этому толстому бинарю после запуска с помощью SLIME как к удалённой лисп-машине. Баги удалённо на горячую править или ещё чего.

Reply to: VXUPfamNh2CjkyfVfKXz
From: Difrex (mira, 14) 02.12.15 10:10 UTC
To: Andrew Lobanov
Subject: Re: LISP
>Базу ЦД из PCL рекомендую всё таки разобрать. Хорошее погружение, так сказать.
Да я читаю это все. Просто хотелось параллельно писать полезный говнокод :)

>Нативный бинарь у лиспа это очень своеобразная штука.
Спасибо, попробую разобраться с этим.

Reply to: cHkdhQL0AJptSOaNI9Th
From: Difrex (mira, 14) 02.12.15 11:05 UTC
To: Difrex
Subject: Re: LISP
О, compile-file делает, то, что мне нужно :)

Reply to: MD8AGRcOAhH2Szq7MB12
From: Andrew Lobanov (station13, 1) 02.12.15 11:17 UTC
To: Difrex
Subject: Re: LISP
Difrex> О, compile-file делает, то, что мне нужно :)

Так оно же fasl компилит. Или я тебя не понял просто?

Reply to: MD8AGRcOAhH2Szq7MB12
From: Andrew Lobanov (station13, 1) 02.12.15 11:27 UTC
To: Difrex
Subject: Re: LISP
Difrex> О, compile-file делает, то, что мне нужно :)

Кстати, если разберёшься как подружить fasl и quicklisp (я просто не копал в эту сторону), то черкни сюда пару строчек о решении.

// Если я разберусь раньше, то отпишусь тоже да =)

Reply to: MD8AGRcOAhH2Szq7MB12
From: Difrex (mira, 14) 02.12.15 11:34 UTC
To: Difrex
Subject: Re: LISP
>О, compile-file делает, то, что мне нужно :)
Не, не совсем то. Зато sbcl --script точно, то, что нужно.

Теперь есть такой вопрос: как обрабатывать исключения? По типу eval в perl, ну или try/except в python?

Reply to: eJ0ALIqMOwzQAuCTAkzA
From: Andrew Lobanov (station13, 1) 02.12.15 11:36 UTC
To: Difrex
Subject: Re: LISP
Difrex> Не, не совсем то. Зато sbcl --script точно, то, что нужно.

Ещё есть полезняшка в виде sbcl --eval.

Difrex> Теперь есть такой вопрос: как обрабатывать исключения? По типу eval в perl, ну или try/except в python?

PCL глава 19. Сам ещё толком не разбирался.

Reply to: VXUPfamNh2CjkyfVfKXz
From: vit01 (mira, 1) 02.12.15 14:51 UTC
To: Andrew Lobanov
Subject: Re: LISP
На прошлой неделе тоже пытался немного пощупать сабж. Уж так ты его нахваливал, аж попробовать захотелось :)

Хотел бы узнать, какие биндинги/API/стандартные либы общие у всех диалектов. А то по синтаксису общие моменты есть, но в остальном всё у всех своё.

AL> Нативный бинарь у лиспа это очень своеобразная штука. По крайней мере у SBCL. Это по своей сути упакованная в один файл лисп-машина и core dump всего загруженного на момент "компиляции". В итоге бинари толстые.

Embeddable Common Lisp умеет переводить свой код в сишные файлы, компилируемые GCC. Хотя сколько не пытался, всё сегфолты и ошибки линковки.

Reply to: p2Qf3WDzCtopcI8hLJcO
From: Andrew Lobanov (station13, 1) 02.12.15 16:44 UTC
To: vit01
Subject: Re: LISP
vit01> На прошлой неделе тоже пытался немного пощупать сабж. Уж так ты его нахваливал, аж попробовать захотелось :)

Как оказалось, в PCL дело написано в первой главе: разные языки действительно различны не взирая на формальное равенство по Тьюрингу. Но у Lisp есть и некоторые неудобства в виде достаточно тяжёлой lisp-машины, например.

vit01> Хотел бы узнать, какие биндинги/API/стандартные либы общие у всех диалектов. А то по синтаксису общие моменты есть, но в остальном всё у всех своё.

Дело в том, что по факту разные диалекты лиспа это разные языки со схожими или одинаковыми принципами. Лично я рекомендую Common Lisp, так как он стандартизирован (ANSI). По факту даже разные реализации того же Common Lisp несколько различны, но у них одинаковое ядро и всегда можно написать код совместимый с большим числом реализаций.

Common Lisp сильно отличен от прочих языков. Здесь нет единой линии партии, единой реализации. К вопросу о разных реализациях, кстати, тот же C, я уж молчу про C++, может работать по разному с разными компиляторами. Так что трагического ничего нет.

vit01> Embeddable Common Lisp умеет переводить свой код в сишные файлы, компилируемые GCC. Хотя сколько не пытался, всё сегфолты и ошибки линковки.

То есть по факту таки нет.

PS: Я рекомендую почитать первую главу PCL (Practical Common Lisp). Лучше всего взять русский перевод тут https://github.com/pcl-ru/pcl-ru или я могу скинуть уже готовую pdf-ку. Если первая глава заинтригует, то почитать хотя бы главы 2 и 3. После этого уже можно что-то писать (я clii написал, имея за плечами только этот багаж).

Reply to: gVE2NrkD82fMxUDT0XqX
From: vit01 (mira, 1) 03.12.15 16:10 UTC
To: Andrew Lobanov
Subject: Re: LISP
> PS: Я рекомендую почитать первую главу PCL (Practical Common Lisp).

Спасибо за направление. Взял PDF в другом месте, буду читать теперь.

From: Difrex (mira, 14) 10.12.15 09:51 UTC
To: All
Subject: node.js
Кто пишет под это?

Может кто объяснить, как мне собрать метрики с процесса? Ну, там Garbage Collector вот это все.

From: vit01 (mira, 1) 19.12.15 15:47 UTC
To: All
Subject: Читаю тут PCL
Сабж вполне подробный и нескучный.

Как прочитал "историю про макросы" отсюда https://github.com/pcl-ru/pcl- ru/blob/master/chapter-08.tex , впервые за день искренне улыбнулся =)

А функциональный подход лиспа всё-таки ломает неокрепшие мозги.
Кстати, а почему в Common Lisp есть общие макросы and, or, not, но при этом xor доступен только через logxor и подобные ему?

From: vit01 (mira, 1) 27.12.15 15:55 UTC
To: Andrew Lobanov
Subject: split-sequence
Вопрос Андрею, как знатоку CL.

Заглянул тут в код iicl и задумался: а зачем же использовать сабж? Для нужд ii вполне можно взять какую-нибудь самописную функцию и не тянуть лишние зависимости через quicklisp.
Или дело в каких-нибудь заморочках с производительностью?

Reply to: Czz6gLwVwtQtDu8BCE8A
From: Andrew Lobanov (station13, 1) 30.12.15 05:18 UTC
To: vit01
Subject: Re: split-sequence
vit01> Вопрос Андрею, как знатоку CL.

Я не знаток CL, к сожалению. Катострофически не хватает времени на всё. Так что знаю его весьма поверхностно.

vit01> Заглянул тут в код iicl и задумался: а зачем же использовать сабж? Для нужд ii вполне можно взять какую-нибудь самописную функцию и не тянуть лишние зависимости через quicklisp.

iicl - мой учебный проект, на котором я учился писать хоть что-нибудь на CL. Там многое сделано очень плохо и криво. split-sequence я взял потому что проще взять готовое. Вот если бы отказаться от drakma или hunchentoot это да, в split-sequence маленький и не критичный.

vit01> Или дело в каких-нибудь заморочках с производительностью?

Дело в ламерстве =)

Reply to: kKbXV5KoAxD5k04rnGJW
From: vit01 (mira, 1) 30.12.15 08:02 UTC
To: Andrew Lobanov
Subject: Re: split-sequence
// ура, наконец-то кто-то из "своих" появился в ii =)

AL> split-sequence я взял потому что проще взять готовое. Вот если бы отказаться от drakma или hunchentoot это да, в split-sequence маленький и не критичный.

hunchentoot, насколько слышал, присутствует в репозиториях дебиана (и, скорее всего, других дистрибутивов). Так что чем меньше посторонних зависимостей, тем проще будет отказаться именно от quicklisp, а не от самого нужного.

Reply to: RARq1AMzFMW0vO0zjbxd
From: Andrew Lobanov (station13, 1) 30.12.15 08:41 UTC
To: vit01
Subject: Re: split-sequence
vit01> // ура, наконец-то кто-то из "своих" появился в ii =)

Суета в виде фарша из работы (конец года это жесть), учёбы и предновогодней подготовки отняла всё время.

AL>> split-sequence я взял потому что проще взять готовое. Вот если бы отказаться от drakma или hunchentoot это да, в split-sequence маленький и не критичный.

vit01> hunchentoot, насколько слышал, присутствует в репозиториях дебиана (и, скорее всего, других дистрибутивов). Так что чем меньше посторонних зависимостей, тем проще будет отказаться именно от quicklisp, а не от самого нужного.

Я противник в данном случае завязывания на систему. quicklisp это вполне себе штатное уже решение, которое даёт гарантию простого запуска на любой системе, где есть лисп-машина и интернет.

Reply to: kKbXV5KoAxD5k04rnGJW
From: vit01 (mira, 1) 02.01.16 04:28 UTC
To: Andrew Lobanov
Subject: Re: split-sequence
Так или иначе, попробовал набросать подобную функцию сам.
Скорее всего, это г...код, но всё же:

====
(defun split (str delimiter &key (save-empty nil))
	(setq delimiter (coerce delimiter 'character))
	(let ((result nil) (len (length str)) (j 0) (toappend ""))
		(dotimes (i len)
			(if (char= (char str i) delimiter)
				(progn
					(setq toappend (subseq str j i))
					(setq result (append result (list toappend)))
					(setq j (1+ i))
					; если разделитель в конце, добавляем пустоту
					(if (= i (1- len)) (setq result (append result (list "")))))
				(if (= i (1- len))
					(setq result (append result (list (subseq str j len)))))))
	
		(if (equal save-empty nil) ; убираем пустые строки, если они не нужны
			(setq result (loop for s in result when (not (string= s "")) collect s)))
		result))

(defun dotest (vals)
	(dolist (s vals) (print (apply #'split (eval s)))))

(dotest '((list "/x/features/" "/") ; проверяем, что всё верно работает
			(list "/ffggg/kikj//kjjj///" "/" :save-empty t)
			(list "x/features" "/")))
====

// укажите кто-нибудь на недочёты, пожалуйста

From: vit01 (mira, 1) 12.01.16 14:32 UTC
To: All
Subject: Bash и Python развращают мозг
К такой мысли я пришёл, когда в очередной раз помирал от скуки.

Как известно, лень - двигатель прогресса. И именно поэтому часто приходится писать всяческие скрипты и полезные штуки, чтобы уменьшить количество рутинных действий за компьютером.
Казалось бы, имеется куча интересных языков программирования, с помощью которых можно хорошо повеселиться, получить удовольствие и необычный опыт в процессе написания скриптов. Но нет же: лень диктует своё, поэтому руки невольно тянутся к тому, что сразу работает. А с помощью чего можно быстро сделать всё, что угодно? Правильно - с помощью баша и питона. Пять строк простого, незамысловатого кода, и результат достигнут!
В этом месте лень начинает работать против человека. Зачем переписывать (и, главное, начинать писать) эти штуки на других языках, если всё и так работает? Зачем лишний раз напрягать мозг? Вот здесь и начинается разврат.
Путь к излечению трудный и долгий; придётся иметь дело с ломками, как у наркоманов. Надо каким-то образом загонять себя в жёсткие рамки используемых ресурсов и отказываться от привычных технологий в пользу самообразования. Создать себе на ЭВМ аскетичное рабочее окружение без всяких "плюшек" и пытаться в нём выживать.
В общем, перестать себя баловать всякими фичами и реализовать эти фичи самому.

P.S. Извините за такой душевный выброс, но просто не получается держать это внутри

Reply to: BpBCO4AzG4o3IiooZ3EX
From: Andrew Lobanov (station13, 1) 13.01.16 07:34 UTC
To: vit01
Subject: Re: Bash и Python развращают мозг
vit01> P.S. Извините за такой душевный выброс, но просто не получается держать это внутри

На самом деле bash это хорошо (потому что нет смысла писать на C/Pascal/Fortran/указать свой вариат то, что можно уместить в пайп). Пайтон же хорош для небольших скриптов (на худой конец для ii-ноды или ii-клиента =).

Действительно нет смысла переписывать то, что и так хорошо работает. Лучшее - враг хорошего.

В тему вспоминается старый анекдот про программиста и его сына:

- Пап, почему солнце встаёт на востоке и заходит на западе?

Отец, не отрываясь от монитора:

- Ты проверял?

- Да.

- Точно?

- Да.

- Тогда не трогай ничего.

Reply to: 9pneMArnqSDgSksiHKlW
From: vit01 (mira, 1) 13.01.16 13:26 UTC
To: Andrew Lobanov
Subject: Re: Bash и Python развращают мозг
AL> На самом деле bash это хорошо
AL> Пайтон же хорош для небольших скриптов
vit01>> руки невольно тянутся к тому, что сразу работает. А с помощью чего можно быстро сделать всё, что угодно? Правильно - с помощью баша и питона.

Хотел выразить предыдущим сообщением всё-таки немного другое. Суть не в том, что баш и питон плохие (сабж слишком провокационный), а то, что мне уже надоело писать скрипты/ноды/клиенты для ii (всё равно они уже юзабельные и хорошо работают), хочется чего-то нового и другого, не на этих языках.

И ещё то, что излишний комфорт препятствует самообразованию.

Когда все баги исправлены, нужные софтины и скрипты работают, как часы, фичи все необходимые есть, тогда vit01 становится скучно, и начинается депрессняк. Думаю подыскать какой-нибудь опенсурс-проект и идти пилить, но не знаю, куда податься =(

Reply to: JOGVXosDhblnzHckGLpi
From: vit01 (mira, 1) 14.01.16 12:26 UTC
To: vit01
Subject: Re: Bash и Python развращают мозг
Всё, решено, буду делать велосипеды в большом количестве =)
Обнаружил пробелы в знаниях в области параллельного программирования и асинхронных запросов в вебе.

From: vit01 (mira, 1) 03.02.16 04:16 UTC
To: All
Subject: Wine и Python
Запустил питон под вайном. Еле-еле он работает. PyQt, как ни странно, тоже работает. И клиент запустился. Правда, там сообщения все в кракозябрах (и дефолт-редактор не работает), но всё же.

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

====
>C:\Python34\Scripts\pip.exe
Fatal error in launcher: Job information querying failed
====

Пришлось убрать (или поменять) в нескольких местах вызовы locale.setlocale, иначе выдавалась ошибка.

Reply to: M2A1XxLcgssekBLaj9Qr
From: Difrex (mira, 14) 03.02.16 07:56 UTC
To: vit01
Subject: Re: Wine и Python
Нужен человек с виндой.

Reply to: zKSzhW8djdwXuDLZChuB
From: vit01 (mira, 1) 03.02.16 10:52 UTC
To: Difrex
Subject: Re: Wine и Python
Difrex> Нужен человек с виндой.

Это ясно, но разве у нас такие водятся?

Reply to: M2A1XxLcgssekBLaj9Qr
From: vit01 (mira, 1) 03.02.16 14:13 UTC
To: vit01
Subject: Re: Wine и Python
Хорошие новости. Удалось завести pip и PyInstaller. Удалось скомпилировать всё в ехе-шники. Дефолтный редактор работает. Даже кракозябры теперь ясно, как убрать, в ближайшие дни этим займусь.

Остаётся только небольшая проблема со значками. Сейчас клиент их подцепляет из дефолтной темы DE и, естесственно, в винде ничего не работает. Попробую взять где-нибудь сторонние.

А, и да, ещё как-то установщик сделать и ярлык в меню "Пуск". Здесь я даже не знаю, в какую сторону копать.

Reply to: ZWPxFeD93kaGD26tzPdj
From: btimofeev (station13, 13) 03.02.16 21:21 UTC
To: vit01
Subject: Re: Wine и Python
vit01> А, и да, ещё как-то установщик сделать и ярлык в меню "Пуск". Здесь я даже не знаю, в какую сторону копать.

Я когда-то давно пользовался установщиком nsis, попробуй его, он один из самых популярных. Пишешь простенький скрипт на встроенном языке, скармливаешь его программе, она тебе создает установщик.

Так же могу помочь с тестированием на winxp, у меня есть одна на нетбуке.

Reply to: NkLHxLOWNckxm2DZBV69
From: vit01 (mira, 1) 04.02.16 00:48 UTC
To: btimofeev
Subject: Re: Wine и Python
Спасибо, попробую на выходных сделать готовую сборку и отчитаюсь.

From: vit01 (mira, 1) 04.02.16 14:18 UTC
To: All
Subject: Черновая сборка для Qt-клиента на винду
Сделал через NSIS самым простым способом, какой только был. Это просто для теста, что оно работает.

Посмотрите, пожалуйста, что оно вообще запускается.

http://ii-net.tk/files/iiclient.exe

Reply to: fcWq4Kq3wvry3YQ6Q41y
From: btimofeev (station13, 13) 04.02.16 16:34 UTC
To: vit01
Subject: Re: Черновая сборка для Qt-клиента на винду
vit01> Посмотрите, пожалуйста, что оно вообще запускается.

Устанавливается и программа работает.

Reply to: HnXEcI6Y7YognlezcuyS
From: vit01 (mira, 1) 04.02.16 23:21 UTC
To: btimofeev
Subject: Re: Черновая сборка для Qt-клиента на винду
А как работает? Может быть, есть какие-нибудь баги?

И да, ещё можно пожелания высказать.

Reply to: Q2GqUAGNoZuCbP4ZhhZn
From: Andrew Lobanov (station13, 1) 05.02.16 02:05 UTC
To: vit01
Subject: Re: Черновая сборка для Qt-клиента на винду
vit01> И да, ещё можно пожелания высказать.

Кстати, может сделать получение не полной эхи? А то вчера под виндой запускал (8.1 полёт нормальный), так кое как дождался загрузки эх из стандартного конфига.

Ну и окно терминала бы скрыть ещё.

Reply to: mW9tTquKxegGcutPScmN
From: vit01 (mira, 1) 05.02.16 02:29 UTC
To: Andrew Lobanov
Subject: Re: Черновая сборка для Qt-клиента на винду
AL> Кстати, может сделать получение не полной эхи? А то вчера под виндой запускал (8.1 полёт нормальный), так кое как дождался загрузки эх из стандартного конфига.

Если ты включишь в настройках "Поддержку расширенного /u/e", то клиент будет скачивать только последние N.

AL> Ну и окно терминала бы скрыть ещё.

Точно, забыл. Но это с PyInstaller'ом связано, а не с самим клиентом, починю. Ты же имеешь в виду чёрную консоль питона, да?

Reply to: 6LQKnFn6iAYrnXJbztA8
From: Andrew Lobanov (station13, 1) 05.02.16 04:15 UTC
To: vit01
Subject: Re: Черновая сборка для Qt-клиента на винду
vit01> Если ты включишь в настройках "Поддержку расширенного /u/e", то клиент будет скачивать только последние N.

Ух ты. Не доглядел =)

// А я в итоге без расширенного /u/e это сделал =) Теперь вот репу чешу: зачем предлагал =)

vit01> Точно, забыл. Но это с PyInstaller'ом связано, а не с самим клиентом, починю. Ты же имеешь в виду чёрную консоль питона, да?

Да. Его. Клиент мне очень глянулся на самом деле. Классный такой. Некоторые шороховатости, конечно, есть (например, окно получения эх я бы сделал с двумя прогресс барами: кол-во эх и кол-во скачиваемых сообщений, но это сугубо моё видение и не факт что так надо делать), но пользоваться уже можно и он уже няшен.

Reply to: RSmpKY8zwla8AcAw8nIN
From: vit01 (mira, 1) 05.02.16 05:01 UTC
To: Andrew Lobanov
Subject: Re: Черновая сборка для Qt-клиента на винду
AL> // А я в итоге без расширенного /u/e это сделал =) Теперь вот репу чешу: зачем предлагал =)

На самом деле расширенный /u/e - это более правильный подход, потому что клиенту не надо скачивать весь индекс.

При твоём способе клиент получает полный список сообщений и отсекает N локально, а при моём он сразу получает N в индексе (отсечка идёт на ноде).

На больших эхах вроде lor-opennet.15 расширение /u/e очень помогает.

AL> например, окно получения эх я бы сделал с двумя прогресс барами: кол-во эх и кол-во скачиваемых сообщений

Я рассматривал вариант помещения прогрессбара в получение эх, но отказался от такой затеи.
Во-первых, потому что юзер должен полностью контролировать процесс фетча (а прогрессбар - это штука сама по себе ненадёжная), во-вторых, потому что алгоритм фетча слишком оптимизирован (как у Ромы), и не определишь, к какой эхе какое сообщение относится. В-третьих, потому что придётся избавиться от модульности в ii-шном движке (а это скажется негативно на будущих поделках).

Сейчас и фетчер, и мейлер, и blacklist, и сам ii_functions.py полностью совместимы с любыми другими реализациями. Например, с tk-версией. Также к iicli-modular можно без проблем прикрутить консольную или текстовую морду, и он будет работать со всеми фичами.
Фантазировал даже как-то раз прикрутить Цезий на свой движок.
Более глубокая интеграция может порушить всю эту гармонию.

Кстати, а как тебе всякие дополнительные плюшки вроде получения списка эх, блэклиста, чистки и прочего? Пробовал /x/c включать на своей ноде?

AL> но пользоваться уже можно и он уже няшен.

Спасибо, рад стараться =)

Reply to: BAQz5rdiOrJ8PPKvqAIc
From: Andrew Lobanov (station13, 1) 05.02.16 05:10 UTC
To: vit01
Subject: Re: Черновая сборка для Qt-клиента на винду
vit01> Я рассматривал вариант помещения прогрессбара в получение эх, но отказался от такой затеи.
vit01> Во-первых, потому что юзер должен полностью контролировать процесс фетча (а прогрессбар - это штука сама по себе ненадёжная), во-вторых, потому что алгоритм фетча слишком оптимизирован (как у Ромы), и не определишь, к какой эхе какое сообщение относится. В-третьих, потому что придётся избавиться от модульности в ii-шном движке (а это скажется негативно на будущих поделках).

А. Ну я ж со своей колокольни. У меня лютый монолит, завязанный узлом сам на себя.

vit01> Кстати, а как тебе всякие дополнительные плюшки вроде получения списка эх, блэклиста, чистки и прочего? Пробовал /x/c включать на своей ноде?

Пока не успел. Надо на слаке попробовать. На винде я его потыкал просто, так как машинку не на долго смог у жены отбить (курсач пишет). В ближайшие дни устрою стресс-тест твоего клиента и попробую пожить без запуска цезия (очень тяжко, кстати, это оказалось; как никак клиент мечты и прикипел к нему всей душой). О результатах эксперимента отпишусь к следующей неделе.

PS: А где глянуть алгоритм получения сообщений? Например, у меня включена поддержка расширенной /u/e и оно получает последние 50 сообщений. Я, например, неделю не получал новых сообщений и в эхе на ноде их скопилось больше 50. Как поведёт себя клиент в такой ситуации?

Reply to: mSk4S9kK11zYgmIAz1Bo
From: vit01 (mira, 1) 05.02.16 05:27 UTC
To: Andrew Lobanov
Subject: Re: Черновая сборка для Qt-клиента на винду
AL> А. Ну я ж со своей колокольни.

Мой клиент сделан для таких людей, у которых прописано 5 и более станций, а на каждой станции по 40 эх =)
Так что ради производительности иногда приходится жертвовать удобством.

AL> PS: А где глянуть алгоритм получения сообщений?

Файл webfetch.py (и ещё network.py, если интересна работа с прокси).

AL> Как поведёт себя клиент в такой ситуации?
Он зафетчит 50 последних. Да, я знаю, что это неправильно и собираюсь пофиксить в будущем, но руки пока не доходят.
Поэтому по-умолчанию поставил лимит 200, чтобы наверняка такого не было.

Reply to: Q2GqUAGNoZuCbP4ZhhZn
From: btimofeev (station13, 13) 05.02.16 07:44 UTC
To: vit01
Subject: Re: Черновая сборка для Qt-клиента на винду
vit01> А как работает? Может быть, есть какие-нибудь баги?

vit01> И да, ещё можно пожелания высказать.

По установщику: он предлагает установку по-умолчанию в ту же директорию откуда запускаешь, а не в Program Files. В установленной папке лежат .git и какой-то tossedit.exe

В клиенте у меня не открывается редактор при нажатии кнопок "Ответить" или "Новое". В консоль пишет: "." не является внутренней или внешней командой, исполняемой программой или пакетным файлом. В настройках выставлен редактор Leafpad (которого у меня конечно нет) и стоит галочка на Использовать встроенный редактор.

Reply to: WQdI2PsBOvlVmDLtmfdW
From: vit01 (mira, 1) 05.02.16 08:39 UTC
To: btimofeev
Subject: Re: Черновая сборка для Qt-клиента на винду
tossedit.exe - это и есть тот самый внутренний редактор. Насчёт точки, видимо, специфично для винды; попробую починить, спасибо.

Попробуй вместо leafpad поставить notepad и снять галку

From: vit01 (mira, 1) 05.02.16 15:39 UTC
To: All
Subject: Вторая сборка клиента
Учёл некоторые замечания, подправил установщик ещё и для создания ярлыков.

Доступна по той же ссылке:
http://ii-net.tk/files/iiclient.exe

// увы, установщик работает, а деинсталлятор пока не доделал; так что если клиент мусорит, то я не виноват =)

И да, теперь сборка идёт прямо из гита, т.к. я закоммитил все изменения для совместимости.

Reply to: NAf1hFe1h7z6gWvIrV6B
From: btimofeev (station13, 13) 05.02.16 16:44 UTC
To: vit01
Subject: Re: Вторая сборка клиента
Теперь у меня редактор начал открываться, но выдает ошибку что мол не может открыть файл "C://Documents". Видимо не может обработать путь с пробелом. Ставлю gvim редактором, он просто создает и открывает файл "c://documents"

Reply to: P4GHXoUzhbiCfsfZyZsa
From: vit01 (mira, 1) 06.02.16 07:12 UTC
To: btimofeev
Subject: Re: Вторая сборка клиента
Хорошо, пересоберу вечером с экранированием пробелов.

Reply to: 5oaeg75H0JPNo8uUt4gL
From: vit01 (mira, 1) 06.02.16 15:45 UTC
To: vit01
Subject: Re: Вторая сборка клиента
В общем, у меня проблемы теперь. Решил пересобрать exe-шники, и питон всё время падает.

====
22033 INFO: Processing pre-find module path hook   PyQt5.uic.port_v3
22094 INFO: Processing pre-find module path hook   PyQt5.uic.port_v2
23074 INFO: Looking for import hooks ...
23140 INFO: Processing hook   hook-PyQt5.uic.py
23214 INFO: Processing hook   hook-PyQt5.QtGui.py
wine: Unhandled page fault on read access to 0x44874150 at address 0xb74a8b66 (thread 0027), starting debugger...
Traceback (most recent call last):
  File "C:\Python34\lib\runpy.py", line 170, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Python34\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python34\lib\site-packages\PyInstaller\__main__.py", line 97, in 
    run()
  File "C:\Python34\lib\site-packages\PyInstaller\__main__.py", line 90, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "C:\Python34\lib\site-packages\PyInstaller\__main__.py", line 46, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "C:\Python34\lib\site-packages\PyInstaller\building\build_main.py", line 755, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "C:\Python34\lib\site-packages\PyInstaller\building\build_main.py", line 701, in build
    exec(text, spec_namespace)
  File "", line 16, in 
  File "C:\Python34\lib\site-packages\PyInstaller\building\build_main.py", line 212, in __init__
    self.__postinit__()
  File "C:\Python34\lib\site-packages\PyInstaller\building\datastruct.py", line 183, in __postinit__
    self.assemble()
  File "C:\Python34\lib\site-packages\PyInstaller\building\build_main.py", line 432, in assemble
    imphook_object = ImportHook(imported_name, hook_file)
  File "C:\Python34\lib\site-packages\PyInstaller\building\imphook.py", line 182, in __init__
    self._module = importlib_load_source(hook_modname, self._filename)
  File "C:\Python34\lib\site-packages\PyInstaller\compat.py", line 490, in importlib_load_source
    return mod_loader.load_module()
  File "", line 539, in _check_name_wrapper
  File "", line 1614, in load_module
  File "", line 596, in _load_module_shim
  File "", line 1220, in load
  File "", line 1200, in _load_unlocked
  File "", line 1129, in _exec
  File "", line 1471, in exec_module
  File "", line 321, in _call_with_frames_removed
  File "C:\Python34\lib\site-packages\PyInstaller\hooks\hook-PyQt5.QtGui.py", line 17, in 
    binaries.extend(qt5_plugins_binaries('accessible'))
  File "C:\Python34\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 334, in qt5_plugins_binaries
    pdir = qt5_plugins_dir()
  File "C:\Python34\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 296, in qt5_plugins_dir
    "from PyQt5.QtCore import QCoreApplication;"
  File "C:\Python34\lib\site-packages\PyInstaller\utils\hooks\__init__.py", line 127, in eval_statement
    return eval(txt)
  File "", line 1
    Unhandled exception: page fault on read access to 0x44874150 in 32-bit code (0xb74a8b66).
                      ^
SyntaxError: invalid syntax
====

From: vit01 (mira, 1) 07.02.16 07:47 UTC
To: All
Subject: Третья сборка клиента
* Решил (надеюсь) проблему с пробелами в пути к файлу.
* Exe-шники снова собираются.
* Наконец-то работает деинсталлятор.
* Русский язык в установщике.

exe доступен по той же ссылке, просьба протестировать.

Reply to: 38q4YhiAEZ1JCQuh2PNd
From: btimofeev (station13, 13) 07.02.16 13:13 UTC
To: vit01
Subject: Re: Третья сборка клиента
У меня работает. Пара незначительных моментов:

1. Когда загружаются сообщения процесс загрузки выводится сразу в двух окнах: основном и окне отладки. Нужно ли последнее пользователю?

2. Когда чищу базу сообщений окно отладки находится позади окна "дополнительные полезности" и на передний план его нельзя переместить.

Reply to: 38q4YhiAEZ1JCQuh2PNd
From: btimofeev (station13, 13) 07.02.16 13:18 UTC
To: vit01
Subject: Re: Третья сборка клиента
Еще при вводе неправильного пароля при отправке сообщения не выводит ошибки. Пишет просто отправлено 0 сообщений. А, к примеру, при помытке скачать список файлов ноды выводит Error: no auth.

Reply to: nSNIVBfrlz2lKWjSi1wd
From: vit01 (mira, 1) 07.02.16 13:39 UTC
To: btimofeev
Subject: Re: Третья сборка клиента
> 1. Когда загружаются сообщения процесс загрузки выводится сразу в двух окнах: основном и окне отладки. Нужно ли последнее пользователю?

Если у пользователя медленный интернет (или он через прокси сидит), то окно отладки даёт понять, что клиент не висит, а работает. Особенно во время начальных запросов индекса.

И ещё: когда нода выдаёт необычную ошибку, то можно сделать скриншот этого окна, и сисоп быстрее разберётся, в чём причина.

> 2. Когда чищу базу сообщений окно отладки находится позади окна "дополнительные полезности" и на передний план его нельзя переместить.

Про эту особенность уже знаю, но пока не задумывался, что она может мешать =)
Это как-то связано с модальностью окон, попробую с этим разобраться.

1 2 . . . 6