RSS
Pages: 1 ... 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... 80
[>] Re: Еmacs как демон
linux.14
vit01(mira, 1) — btimofeev
2020-09-01 17:50:55


btimofeev> Вместо этого можно грузить через systemd при логине пользователя (в этом случае даже самый первый запуск редактора будет быстрый):

Это интересно, но в моей конфигурации настраивать будет проблематично. Поясняю почему:

Есть 2 линукса и 1 макось, конфиг емакса (и директория emacs.d) лежит в Nextcloud и автоматом синхронизируется между компами. В нужные места на ФС проставлены симлинки. Пусть на линухе и systemd, но на яблоке придётся сооружать свой отдельный костыль, а мне проще держать одинаковый конфиг сразу на всех системах, чтобы избегать нагромождений настроек

btimofeev> А этот скрипт можно заменить одной строкой:
btimofeev> emacsclient -c -a emacs

Всегда было интересно, а как сделать так, чтобы когда через гуй открываешь файл, то он запускался именно через emacsclient, а не просто через emacs. Когда-то я крутил desktop файлы, откуда пункты контекстного меню подцеплялись, но уже давно подзабыл, как это делается.

+++ IDEC Mobile в виртуальной машине
+++ GNU/Linux, Android, physics, MLP:FIM

[>] Re: split-sequence
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-01-02 08:28:07


Так или иначе, попробовал набросать подобную функцию сам.
Скорее всего, это г...код, но всё же:

(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" "/")))

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

[>] Bash и Python развращают мозг
develop.16
vit01(mira, 1) — All
2016-01-12 18:32:36


К такой мысли я пришёл, когда в очередной раз помирал от скуки.

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

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

[>] Re: Bash и Python развращают мозг
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-01-13 17:26:19


AL> На самом деле bash это хорошо
AL> Пайтон же хорош для небольших скриптов
vit01>> руки невольно тянутся к тому, что сразу работает. А с помощью чего можно быстро сделать всё, что угодно? Правильно - с помощью баша и питона.

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

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

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

[>] Re: Bash и Python развращают мозг
develop.16
vit01(mira, 1) — vit01
2016-01-14 16:26:13


Всё, решено, буду делать велосипеды в большом количестве =)
Обнаружил пробелы в знаниях в области параллельного программирования и асинхронных запросов в вебе.

[>] Wine и Python
develop.16
vit01(mira, 1) — All
2016-02-03 08:16:05


Запустил питон под вайном. Еле-еле он работает. PyQt, как ни странно, тоже работает. И клиент запустился. Правда, там сообщения все в кракозябрах (и дефолт-редактор не работает), но всё же.

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

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

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

[>] Re: Wine и Python
develop.16
vit01(mira, 1) — Difrex
2016-02-03 14:52:38


Difrex> Нужен человек с виндой.

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

[>] Re: Wine и Python
develop.16
vit01(mira, 1) — vit01
2016-02-03 18:13:38


Хорошие новости. Удалось завести pip и PyInstaller. Удалось скомпилировать всё в ехе-шники. Дефолтный редактор работает. Даже кракозябры теперь ясно, как убрать, в ближайшие дни этим займусь.

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

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

[>] Re: Wine и Python
develop.16
vit01(mira, 1) — btimofeev
2016-02-04 04:48:06


Спасибо, попробую на выходных сделать готовую сборку и отчитаюсь.

[>] Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — All
2016-02-04 18:18:13


Сделал через NSIS самым простым способом, какой только был. Это просто для теста, что оно работает.

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

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

[>] Re: Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — btimofeev
2016-02-05 03:21:36


А как работает? Может быть, есть какие-нибудь баги?

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

[>] Re: Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-02-05 06:29:33


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

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

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

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

[>] Re: Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-02-05 09:01:31


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

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

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

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

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

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

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

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

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

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

[>] Re: Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-02-05 09:27:30


AL> А. Ну я ж со своей колокольни.

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

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

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

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

[>] Re: Черновая сборка для Qt-клиента на винду
develop.16
vit01(mira, 1) — btimofeev
2016-02-05 12:39:08


tossedit.exe - это и есть тот самый внутренний редактор. Насчёт точки, видимо, специфично для винды; попробую починить, спасибо.

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

[>] Вторая сборка клиента
develop.16
vit01(mira, 1) — All
2016-02-05 19:39:04


Учёл некоторые замечания, подправил установщик ещё и для создания ярлыков.

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

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

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

[>] Re: Вторая сборка клиента
develop.16
vit01(mira, 1) — btimofeev
2016-02-06 11:12:01


Хорошо, пересоберу вечером с экранированием пробелов.

[>] Re: Вторая сборка клиента
develop.16
vit01(mira, 1) — vit01
2016-02-06 19:45:09


В общем, у меня проблемы теперь. Решил пересобрать 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 <module>
    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 "<string>", line 16, in <module>
  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 "<frozen importlib._bootstrap>", line 539, in _check_name_wrapper
  File "<frozen importlib._bootstrap>", line 1614, in load_module
  File "<frozen importlib._bootstrap>", line 596, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 1220, in load
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "C:\Python34\lib\site-packages\PyInstaller\hooks\hook-PyQt5.QtGui.py", line 17, in <module>
    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 "<string>", line 1
    Unhandled exception: page fault on read access to 0x44874150 in 32-bit code (0xb74a8b66).
                      ^
SyntaxError: invalid syntax

[>] Третья сборка клиента
develop.16
vit01(mira, 1) — All
2016-02-07 11:47:21


* Решил (надеюсь) проблему с пробелами в пути к файлу.
* Exe-шники снова собираются.
* Наконец-то работает деинсталлятор.
* Русский язык в установщике.

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

[>] Re: Третья сборка клиента
develop.16
vit01(mira, 1) — btimofeev
2016-02-07 17:39:08


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

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

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

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

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

[>] Re: Третья сборка клиента
develop.16
vit01(mira, 1) — btimofeev
2016-02-07 17:46:08


> Еще при вводе неправильного пароля при отправке сообщения не выводит ошибки. Пишет просто отправлено 0 сообщений. А, к примеру, при помытке скачать список файлов ноды выводит Error: no auth.

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

Теперь есть, с чем ещё поработать =)

[>] Четвёртая сборка клиента
develop.16
vit01(mira, 1) — All
2016-02-10 08:53:53


Исправления и улучшения можно почитать здесь:
ii://ii.14

ii://ek0DKrdqVsZwu4VhQcAf
ii://WrBS7WxjodCn0y2Q2cGv

Установщик находится всё по тому же адресу.
Пакет для дебиана: http://ii-net.tk/files/iicli-modular-0.6.0.deb

[NEW] Portable-версия для винды.
Теперь можно носить клиент вместе с базой на флешке!
http://ii-net.tk/files/ii-portable.zip

[>] Пятая сборка клиента
develop.16
vit01(mira, 1) — All
2016-02-11 10:47:20


Список изменений:
ii://kg020clPuRsXz6UjrJIu
( эха ii://ii.14 )

Виндузятникам рекомендуется сначала удалить предыдущую версию.

Пожалуйста, протестируйте по юзабилити.

[>] "Транспорты" для базы и PHP
develop.16
vit01(mira, 1) — All
2016-02-21 15:36:10


Подумал, что кроме текстовой базы и mysql надо бы прикрутить ещё какие-нибудь возможности для хранения данных.

Поэтому решил реализовать абстрактный интерфейс, через который бы можно было делать любые вещи с любой базой.

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

В планах стоит сделать некую сисоп-панель, через которую можно править/удалять содержимое эх, чистить дубли и.т.д.

[>] Обнаружил проблему 2038 года в ii-php
develop.16
vit01(mira, 1) — All
2016-02-22 13:05:27


Сабж
Проявится, если использовать движок MySQL.
Надо будет поменять там структуру.

[>] Вдохновляющий текст: Write Code Every Day
develop.16
vit01(mira, 1) — All
2016-03-01 16:15:45


Это надо запостить сюда полностью
Источник: http://ejohn.org/blog/write-code-every-day/


Last fall, work on my coding side projects came to a head: I wasn’t making adequate progress and I couldn’t find a way to get more done without sacrificing my ability to do effective work at Khan Academy.

There were a few major problems with how I was working on my side projects. I was primarily working on them during the weekends and sometimes in the evenings during the week. This is a strategy that does not work well for me, as it turns out. I was burdened with an incredible amount of stress to try and complete as much high quality work as possible during the weekend (and if I was unable to it felt like a failure). This was a problem as there’s no guarantee that every weekend will be free – nor that I’ll want to program all day for two days (removing any chance of relaxation or doing anything fun).

There’s also the issue that a week between working on some code is a long time, it’s very easy to forget what you were working on or what you left off on (even if you keep notes). Not to mention if you miss a weekend you end up with a two week gap as a result. That massive multi-week context switch can be deadly (I’ve had many side projects die due to attention starvation like that).

Inspired by the incredible work that Jennifer Dewalt completed last year, in which she taught herself programming by building 180 web sites in 180 days, I felt compelled to try a similar tactic: working on my side projects every single day.

I decided to set a couple rules for myself:

1. I must write code every day. I can write docs, or blog posts, or other things but it must be in addition to the code that I write.
2. It must be useful code. No tweaking indentation, no code re-formatting, and if at all possible no refactoring. (All these things are permitted, but not as the exclusive work of the day.)
3. All code must be written before midnight.
4. The code must be Open Source and up on Github.

Some of these rules were arbitrary. The code doesn’t technically need to be written before midnight of the day of but I wanted to avoid staying up too late writing sloppy code. Neither does the code have to be Open Source or up on Github. This just forced me to be more mindful of the code that I was writing (thinking about reusability and deciding to create modules earlier in the process).

Thus far I’ve been very successful, I’m nearing 20 weeks of consecutive work. I wanted to write about it as it’s completely changed how I code and has had a substantial impact upon my life and psyche.

With this in mind a number of interesting things happened as a result of this change in habit:

* Minimum viable code. I was forced to write code for no less than 30 minutes a day. (It’s really hard to write meaningful code in less time, especially after remembering where you left off the day before.) Some week days I work a little bit more (usually no more than an hour) and on weekends I’m sometimes able to work a full day.

* Code as habit. It’s important to note that that I don’t particularly care about the outward perception of the above Github chart. I think that’s the most important take away from this experiment: this is about a change that you’re making in your life for yourself not a change that you’re making to satisfy someone else’s perception of your work. The same goes for any form of dieting or exercise: if you don’t care about improving yourself then you’ll never actually succeed.

* Battling anxiety. Prior to starting this experiment I would frequently feel a high level of anxiety over not having completed “enough” work or made “enough” progress (both of which are relatively unquantifiable as my side projects had no specific deadlines). I realized that the feeling of making progress is just as important as making actual progress. This was an eye-opener. Once I started to make consistent progress every day the anxiety started to melt away. I felt at peace with the amount of work that I was getting done and I no longer had the over-bearing desire to frantically get any work done.

* Weekends. Getting work done on weekends use to be absolutely critical towards making forward momentum (as they were, typically, the only time in which I got significant side project coding done). That’s not so much the case now – and that’s a good thing. Building up a weeks-worth of expectations about what I should accomplish during the weekend only ended up leaving me disappointed. I was rarely able to complete all the work that I wanted and it forced me to reject other weekend activities that I enjoyed (eating dim sum, visiting museums, going to the park, spending time with my partner, etc.) in favor of getting more work done. I strongly feel that while side projects are really important they should not be to the exclusion of life in general.

* Background processing. An interesting side effect of writing side project code every day is that your current task is frequently running in the back of your mind. Thus when I go for a walk, or take a shower, or any of the other non-brain-using activities I participate in, I’m thinking about what I’m going to be coding later and finding a good way to solve that problem. This did not happen when I was working on the code once a week, or every other week. Instead that time was consumed thinking about some other task or, usually, replaced with anxiety over not getting any side project work done.

* Context switch. There’s always going to be a context switch cost when resuming work on a side project. Unfortunately it’s extremely hard to resume thinking about a project after an entire week of working on another task. Daily work has been quite helpful in this regard as the time period between work is much shorter, making it easier to remember what I was working on.

* Work balance. One of the most important aspects of this change was in simply learning how to better balance work/life/side project. Knowing that I was going to have to work on the project every single day I had to get better at balancing my time. If I was scheduled to go out in the evening, and not get back until late, then I would need to work on my side project early in the day, before starting my main Khan Academy work. Additionally if I hadn’t finished my work yet, and I was out late, then I’d hurry back home to finish it up (instead of missing a day). I should note that I’ve been finding that I have less time to spend on hobbies (such as woodblock printing) but that’s a reasonable tradeoff that I’ll need to live with.

* Outward perception. This has all had the added benefit of communicating this new habit externally. My partner understands that I have to finish this work every day, and thus activities sometimes have to be scheduled around it. It’s of considerable comfort to be able to say “Yes, we can go out/watch a movie/etc. but I have to get my coding in later” and have that be understood and taken into consideration.

* How much code was written? I have a hard time believing how much code I’ve written over the past few months. I created a couple new web sites, re-wrote some frameworks, and created a ton of new node modules. I’ve written so much I sometimes forget the things I’ve made – work from even a few weeks prior seem like a distant memory. I’m extremely pleased with the amount of work that I’ve gotten done.

I consider this change in habit to be a massive success and hope to continue it for as long as I can. In the meantime I’ll do all that I can to recommend this tactic to others who wish to get substantial side project work done. Let me know if this technique does, or doesn’t, work for you – I’m very interested in hearing additional anecdotes!

[>] Re: Вдохновляющий текст: Write Code Every Day
develop.16
vit01(mira, 1) — Difrex
2016-03-02 16:12:32


>> The code must be Open Source and up on Github.
Difrex> Я вот, кстати, не считаю, что надо сразу тащить все на гитхаб.

Конечно, на гитхаб не обязательно: он содержится коммерческой компанией, интересы которой в любой момент могут войти в конфликт с интересами пользователей. + до сих пор помню ту историю с Роскомпозором, когда весь сайт из-за одного txt-шника заблочили.

Но вот насчёт "коммунизм-кода" с автором соглашусь. Если твои труды могут принести кому-то пользу, то лучше ими поделиться. И позже, кстати, они пойдут в репутацию для работодателя.

[>] Упрощение написания скриптов для GIMP
develop.16
vit01(mira, 1) — All
2016-03-28 23:15:22


Возникла на днях задача пакетно обработать 179 JPEG-файлов.

Была мысль сначала взять ImageMagick, но подумал, что мало приятного в его использовании. PIL (Python Imaging Library) использовать тоже не хотелось, потому что многие параметры там надо подкручивать вручную.

И тут вспомнил, что в Гимпе есть свой встроенный Лисп. Воображение сразу разгулялось =)
Открыл встроенную консоль для Script-Fu и нашёл пару статеек на Хабре (например, эта: https://habrahabr.ru/post/111387/ )

Но не тут-то было! Изначально хотелось писать скрипты в своём любимом Vim'e и удобно их отлаживать, но Гимп предлагает только примитивный REPL (который требует запись программы в одну строку) и каталог модулей, запуск которых идёт как будто в "чёрном ящике".

Обнаружил, что можно запустить сервер Script-Fu и подключаться к Гимпу удалённо. Протокол у него предельно простой, но вот нормальных готовых клиентов реализовано практически не было.

Один из них полностью на Perl (и перлом заправляет, т.е. никаких скобочек), другой на неизвестном диалекте Scheme, третий на Питоне (из исходников самого Гимпа) и ничего мне нужного не умеет.

Решил реализовать собственный, на Си, через сокеты. Для скачивания идти сюда: https://github.com/vit1-irk/gimp-exec

Всё, что он делает - это скармливает Scheme-овский исходник запущенному GIMP-серверу, который уже выполняет всю работу. Может быть, кому-нибудь пригодится.

* Запускаете GIMP-сервер (удобнее через меню "Фильтры" => "Script-Fu" => "Запустить сервер")
* Пишете скрипт в вашем любимом редакторе
* Скармливаете его командой gimp-exec your-script.scheme
* Всё

Дополнительные моменты в README.md репозитория.

А для конвертации получилось вот такое вот заклинание:

(gimp-message-set-handler 1)
(let*
	((files (cadr (file-glob "/путь/к/картинкам/*" 1))))
	(while (not (null? files))
		(let (
			(filename (car files))
			(new-filename "")
			(image 0)
			(layer 0)
		)
			(set! image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) 
			(set! layer (car (gimp-image-get-active-layer image)))
			(set! new-filename (string-append filename "-new.png"))

			(gimp-message (string-append "Обрабатываем " filename))

			(gimp-levels-stretch layer)
			(gimp-brightness-contrast layer 0 40)
			(gimp-posterize layer 10)
			(gimp-image-convert-grayscale image)
			(gimp-image-convert-indexed image 2 3 10 FALSE TRUE "colors")
			(file-png-save RUN-NONINTERACTIVE image layer new-filename new-filename 0 9 0 0 0 1 0)
			(gimp-image-delete image)
		)
		(set! files (cdr files))
	)
)

За отступы и оформление кода в целом не ругайте, по-другому читать ЭТО не получается =)

[>] Re: Упрощение написания скриптов для GIMP
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-03-30 09:46:55


AL> Возможно одно из двух: или ты не привык к лиспу

Оно самое.

AL> видно, что писал человек, привыкший к алголоподобному синтаксису =)

Когда знакомился с эстетическими правилами оформления в CL, они мне как-то не понравились. Иногда читаю конкретно твой лиспокод и всё никак не могу с этим смириться.

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

AL> Не знал, что в гимпе есть лисп.

В нём ещё и интеграция с питоном есть (правда питон не встроенный), но для лиспа там есть сервер, а для питона - нет.
Даже забавно с другой стороны.

- Через Emacs можно советоваться с психотерапевтом и играть в тетрис!
- Подумаешь тетрис! Я вон GIMP вместо калькулятора использую :D

[>] Re: Упрощение написания скриптов для GIMP
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-03-30 10:49:30


AL> Тут какое дело. Лиспокод не по скобочкам читают на самом деле. Я скобочки не замечаю даже особо. Блоки отделяются отступом, а синтаксис на скобочки не так уж и завязан при чтении человеком, как бы это странно не звучало.

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

AL> Было бы прикольно подключиться SLIME к гимпу.

Не поверишь, но такой плагин уже существует: https://github.com/pft/gimpmode

[>] Emacs
develop.16
vit01(mira, 1) — All
2016-04-09 20:38:27


Попробовал SLIME. Удобная штука. С Емаксом работать пока сложновато, но буду как-нибудь привыкать.

Как в сабже нормально настроить русскую раскладку? Просто сочетания клавиш работают только на английской.

[>] Re: Emacs
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-04-10 04:15:01


AL> С другой стороны, команды в vim тоже на английской раскладке надо вбивать.

Здесь подход особенный. В vim есть специальный костыль (уже из коробки), который позволяет держать в иксах английскую раскладку (для команд и клавиш), а сам текст документа вводится по-русски.
Думал, что в емаксе что-то подобное, вот и спросил.

[>] Re: Emacs
develop.16
vit01(mira, 1) — vit01
2016-04-10 13:52:14


vit01> В vim есть специальный костыль (уже из коробки), который позволяет держать в иксах английскую раскладку (для команд и клавиш), а сам текст документа вводится по-русски.

Проблема решена. Добавляем в init-файл вот эту строку

(setq default-input-method "cyrillic-jcuken")

и получаем поведение, аналогичное виму. Внутреннее переключение будет по Ctrl+\

[>] Re: Emacs
develop.16
vit01(mira, 1) — btimofeev
2016-04-10 13:52:14


btimofeev> Я сам не пробовал, но говорят там есть неплохой vi-mode. Evil кажется называется.

В этом нет необходимости. Если будет всё так, как привык, тогда лень одолеет и в других вещах.

Помню, как раньше пробовал редактор vile. Что-то среднее между vim и emacs. Забавный, конечно, но не очень удобный.

[>] Re: Emacs
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-04-10 14:03:14


AL> Прикол в том, что Emacs это далеко не только тектосвый редактор. Так что посмотри в сторону других его возможностей при случае.

Про возможности этого комбайна ходят легенды :) Это же как целая ОС.

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

[>] Re: Emacs
develop.16
vit01(mira, 1) — Difrex
2016-04-12 11:47:39


Difrex> Я вот так и не осилил емакс. Для больших проектов использую Sublime Text 2, для мелких скриптиков -- vim.

А в чём фишка Sublime и его клонов?

Вот vim хорош сочетаниями клавиш и минимализмом, емакс - многофункциональностью и интеграцией с Лиспом.

// на десктопе, скорее всего, перейду на емакс, а на телефоне и сервере оставлю вим; вообще не понимаю срачи по этим редакторам

[>] Re: Emacs
develop.16
vit01(mira, 1) — Difrex
2016-04-12 19:36:14


Difrex> * нормальное multiline редактирование

Что под этим имеется в виду?

Difrex> Даже подумываю купить его, хотя можно и так пользоваться - лицензия не запрещает.

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

[>] Re: Emacs
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-04-13 17:00:30


AL> Только вот настройка такого монстра, как Emacs, это дело достаточно индивидуальное. Смотря что ты от него хочешь.

А я вот пока что из настройки в init-файл почти ничего своего не написал. Но зато сделал удобную запускалку редактора, чтобы открывать все файлы в одном и том же окне.

#!/bin/bash

if [ "`pgrep emacs`" = "" ]; then
	emacs --eval "(server-start)" $1 & exit
else
	emacsclient --no-wait $1
fi

Vim, кстати, тоже умеет работать по принципу клиент-сервер, но поддержка этой фичи отсутствует в стандартной версии из репозиториев Арча (а пересобирать лень).

[>] Re: idec.el
develop.16
vit01(mira, 1) — Difrex
2016-04-27 18:02:37


Difrex> Появилась дурная мысль запилить клиент для Emacs :)
Difrex> Кто со мной?

Хоть на десктопе в любом случае я буду ходить через свой клиент, насчёт емакса было бы всё равно прикольно. Готов помочь, потому что скука одолела :)

Можно ещё воспользоваться какими-нибудь наработками Андрея (если они ещё остались, конечно).

Уже есть идеи, как оно будет выглядеть?

[>] Несетевые проекты
develop.16
vit01(mira, 1) — All
2016-04-27 18:40:42


Эта мысль пришла ещё раньше, но предыдущее сообщение Дениса спровоцировало её выход наружу.
Мы частенько пилим все вместе клиенты и стандарты для нашей сетки. И в перспективе будем продолжать это делать.

Но как вам затея сделать или улучшить что-нибудь, что не связано конкретно с IDEC, ii, gk11, и тому подобным?

Вопрос задаётся как в контексте программирования, так и с учётом других видов деятельности, напрямую не связанных с кодом.
// develop в эхотаге, вы знаете, переводится как "развивать", но это так, к слову

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

Во-вторых, сабж позволит поднять взаимодействие на новый уровень, мы сможем получше узнать друг друга и сделать гораздо более интересным наше здесь пребывание.

Что скажете?

[>] Re: Несетевые проекты
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-04-27 20:41:44


AL> // Ещё когда фидонет был очень жив, я и то почти не писал в нём. Как-то плохой из меня писатель.

Необязательно именно что-то просто взять и писать текстом, скорее даже наоборот. Раскрою тогда тему ещё немного.

1. Припомню такой случай, когда Рома меня втянул перевести вместе несколько статей про OpenBSD. Именно вместе. Было интересно.
2. Раньше, когда ещё даже в ii не сидел, иногда заглядывал в имиджборды в скрытосетях. Видел там одно дело, которое меня немного поразило даже. Люди решили совместно записать электронный трек, совсем не зная заранее, что выйдет в конце. Кто-то из анонимов написал небольшую тему, другой - наложил на неё какую-то мелодию, третий - записал барабаны, а четвёртый - свёл вместе. У ребят получилось сделать нечто даже несмотря на то, что они друг друга совершенно не знали.
3. В MLP-сообществах часто практикуются коллективные переводы и переработки различных вещей (в том числе анонимно). Те же русские субтитры на следующий день в пример.

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

Можно делать адаптации разных технических учебных пособий в более понятный и доступный вид (и скидывать в эхи) "по партийному заказу".

Можно пойти по пути товарищей из suckless.org и разработать какую-то стороннюю вещь в рамках нашего сообщества.

Опять же какие-нибудь творческие проекты.

Потенциал огромный открывается, надо только определиться с целью и сделать план.

AL> Хотя вру. Два друга осталось, но с ними получается видеться очень редко и это как правило очень своеобразные междусобойчичи, когда мы отдыхаем каждый от своего, выключая мозг и перекидываясь очень тупыми шутками под большое количество чая.

Знакомое дело. У меня из тех людей, которых точно могу назвать друзьями, остались только гитарист ФПМ, один гентушник и ещё человек, с которым в процессе учёбы пересекаюсь. Есть группа товарищей (см. недавний пост про встречу в mlp.15), но мы недостаточно "интегрированы", чтобы перейти тот самый барьер "чайных посиделок". Барьер, зовущийся "от безделия к деятельности".
Секта Плохих Парней и в целом всё пространство бывшего ii взяло на себя роль нравственного, информационного и деятельного убежища. В глубине мыслительных процессов (душа - плохое слово) у меня зреет надежда, что наша секта перерастёт во что-то большее. И можно попытать шанс это осуществить.

[>] Re: idec.el
develop.16
vit01(mira, 1) — Difrex
2016-04-28 06:13:59


Difrex> Читаем сообщения в эхе

А вот здесь прошу объяснить. Насчёт получения и отправки всё понятно (просто открывается новый буфер, туда льётся текст, а потом press Enter to continue).

Но как именно будет происходить процесс чтения? "Стеной текста" или каким-нибудь хитрым переключением, как в Цезии?

[>] Re: Несетевые проекты
develop.16
vit01(mira, 1) — Difrex
2016-04-28 06:20:07


Difrex> На самом деле, например, у меня много проектов свободных не связанных с ii/idec, только никому они больше не интересны.

А ты расскажи про что-нибудь, может быть желание появится помочь :)
Может быть, мы про них просто не знаем.

// правда, в практической значимости такой штуки, как lotly, я немного сомневаюсь, т.к. для дебиановских репозиториев и так куча софта существует

[>] Re: PM
develop.16
vit01(mira, 1) — Difrex
2016-04-28 16:25:25


Difrex> Вот, например, чем я пользуюсь постоянно - pm https://github.com/Difrex/PM. Консолькный менеджер паролей для X.

Очень любопытная и годная штука.
// Стыдно признать, но сам храню пароли в plain-text

Допиши, кстати, в README:

On Arch-based systems:
yaourt -S perl-dbd-sqlite perl-clipboard

Difrex> У меня много планов на него, но мало времени. Хотя бы версию 0.0.3 зарелизить.

Жаль, что перл, а то бы TODO-шка твоя быстро опустела :) Хотя подозреваю, что там не все планы.
Но сделать что-нибудь попробую, вдруг получится.

[>] Re: PM
develop.16
vit01(mira, 1) — Difrex
2016-04-28 18:39:33


Кстати, решил изучить вопрос по вот этому TODO:

> Store decrypted DB into RAM not in /tmp/

и обнаружил, что ни DBI, ни сам sqlite не поддерживают загрузку бинаря базы данных из RAM.

Единственный быстрый путь решения, который представляется возможным (и который предлагают люди), заключается в том, чтобы создавать пустую базу в памяти и загружать в неё данные из дампа через CREATE TABLE ...

В таком случае БД придётся даже в зашифрованном виде хранить не в виде sqlite-файла, а в виде sql-дампа. Грустно и медленно, но зато 100% безопасно.

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

[>] Re: PM
develop.16
vit01(mira, 1) — Difrex
2016-04-29 17:10:21


Difrex> * Подсунуть базу драйверу sqlite как файл, т.е. через \$bd

И как бы это примерно выглядело? Непонятно, что под этим ты имеешь в виду.

Вместо хранения дампа можно сделать в том числе и Named Pipe, именно так лучше и попробую.

[>] Re: PM
develop.16
vit01(mira, 1) — vit01
2016-04-29 19:12:14


Итак, Named Pipes эта штука так же не поддерживает. А жаль, потому что в MySQL можно было нормально сделать LOAD DATA INFILE, и всё бы пахало, как часы.

Лучше было бы вообще не sqlite использовать, а json какой-нибудь, с ним бы точно проблем не было.

[>] Re: PM
develop.16
vit01(mira, 1) — Andrew Lobanov
2016-04-29 20:53:31


Оно хранится в зашифрованном (через GPG) виде в $HOME. При каждом взаимодействии база расшифровывается, находясь в /tmp, и сразу же удаляется.

Небезопасность заключается в том, что из /tmp расшифрованный файл базы можно позднее восстановить, если этот самый /tmp не примонтирован в виде tmpfs.

// а я тем временем обнаружил, что sqlite-модуль даже текстовые дампы не поддерживает
// надо бы в самом деле на что-то другое переписать

[>] Re: PM
develop.16
vit01(mira, 1) — Difrex
2016-05-01 17:38:34


Форкнул сабж и написал туда чуть-чуть:
https://github.com/vit1-irk/PM

Изменения:
* Теперь можно импортировать БД из файла
* При автогенерации пароля можно при желании задать его длину
* Место расшифрованной БД поменял на /dev/shm

Третий пункт сделал из-за того, что /tmp люди не всегда монтируют, как tmpfs (некоторые просто на диске его держат), а /dev/shm всегда автоматически ставится в tmpfs.

Скажи, что ещё хотел бы сделать. Помогу и сделаю пулл-реквест (или сейчас сделаю, если хочешь).

[>] Re: PM
develop.16
vit01(mira, 1) — Difrex
2016-05-04 14:53:48


Difrex> Да вот красивый вывод в pm -sn all, только хочется. Все руки не дошли до того, чтобы сделать это.

Он разве слишком некрасивый? Там даже цвет есть, насколько видно.

Хотя всё-таки есть, чего улучшить. У меня вот в терминале тема оформления светлая, поэтому поле ID не видно совсем.

Difrex> Еще есть проблема в SQL, там нет уникального ключа по имени.

Ну это на раз-два.

Difrex> Да и вообще, я думаю, что стоит перейти на что-то noSQL, хотябы на perl Storable. + в этом, что избавимся в зависимостях от sqlite.

Попробую почитать что-нибудь на эту тему. А sqlite действительно не очень хорошо здесь смотрится. Скорее, это проблема самой перловой реализации (сделали только самые базовые вещи).

Pages: 1 ... 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 ... 80