[ develop.16 ] 433 newmsg : revert : rss : home

Re: боны поны и прочее : 20/01/23 14:45 : ii.51t.ru to Difrex [#] [reply]

нифига не понял, почему это в develop, но утянул себе develop тоже :)

Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0


Re: боны поны и прочее : 20/01/23 06:41 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Не вижу смысла в новой эхе. Но, на пример, динамик фетчит все из list.txt. Так что новая эха у меня на ноде появится.

Движение ради движения же.

Difrex> ЗЫ: хочу тянуть по 9000 сообщений

Для этого нам нужно начинать пользоваться технологией :)

+++ Caesium/0.4 RC1



Re: боны поны и прочее : 19/01/23 22:13 : Difrex to iiii [#] [reply]

Не вижу смысла в новой эхе. Но, на пример, динамик фетчит все из list.txt. Так что новая эха у меня на ноде появится.

ЗЫ: хочу тянуть по 9000 сообщений



Re: Фантастические консоли и где они обитают : 26/09/20 12:53 : btimofeev to johnbrown [#] [reply]


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

Она реально не существовала. Chip-8 больше похож на Java или современные виртуальные консоли, это была типа виртуальная машина которая проигрывала игры написанные на этом простеньким ассемблере. А распространялось это на несколько разных компьютеров тех лет.

Ассемблер там простой, я писал небольшую статью с примерами и разбором кода как выводить изображения и обрабатывать события клавиатуры, если интересно можешь почитать https://emunix.org/post/writing-chip-8-emulator-part-3/



Re: Фантастические консоли и где они обитают : 26/09/20 11:55 : johnbrown to btimofeev [#] [reply]

> Я когда-то интересовался одной из первых подобных платформ, разработанной еще в 70-х годах - CHIP-8. Там всего два цвета на экране, разрешение 64х32, 16 кнопок клавиатуры, из звуков только "Бииип" и игры пишутся на ассемблере. Но игры конечно простенькие - пинг-понг, арканоиды и подобное. Я учился азам написания эмуляторов на этой системе - вот тут мой эмулятор лежит https://github.com/btimofeev/emuchip

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

У меня когда-то был Микроша, но получалось запускать на нем только бейсик, да ещё какой-то текстовый редактор. Там и ассемблер был, но для меня тогда это было что-то инопланетное.



Re: Фантастические консоли и где они обитают : 26/09/20 07:49 : hugeping to johnbrown [#] [reply]

Если мне захочется "живого" железа, я скорее всего выберу спектрум. В детстве я программировал на БК0010-01, а вокруг были спектрумы. Поэтому, интересно. :) Даже читал книгу по железу спека не так давно. Но реально, не уверен что руки дойдут. Много всего. :) Сейчас вот Plan-9 увлёкся.

А в плане виртуальных консолей, PICO8 для меня лучшая. В ней есть баланс ограничений, которые (на практике проверил) идеально для меня подходят. Жаль, что закрытая только. Но хотя бы формат игр открыт и есть открытые плееры...



Re: Фантастические консоли и где они обитают : 26/09/20 05:36 : btimofeev to johnbrown [#] [reply]

Я когда-то интересовался одной из первых подобных платформ, разработанной еще в 70-х годах - CHIP-8. Там всего два цвета на экране, разрешение 64х32, 16 кнопок клавиатуры, из звуков только "Бииип" и игры пишутся на ассемблере. Но игры конечно простенькие - пинг-понг, арканоиды и подобное. Я учился азам написания эмуляторов на этой системе - вот тут мой эмулятор лежит https://github.com/btimofeev/emuchip



Фантастические консоли и где они обитают : 25/09/20 17:16 : johnbrown to All [#] [reply]

Изучаю, время от времени, консоли из этого списка: https://github.com/paladin-t/fantasy

Приглядываюсь, прицениваюсь, так сказать. Тики, Пики, Лики... Хочется низкоуровневой 8-битной экзотики на асме или чтобы вообще без кода. Думал уже ничего не может быть проще Битси. Оказалось, может.

PIX64. Это такой no-code в "пейнте". А может и не в "пейнте". Ну, то есть, берем мышку, создаем 64x64 png, и оно как-то там само все движется...

Осталось только найти для него удобный редактор. А в идеале - конвертер, чтобы из npp прямо в png, типа как xmp (кстати, кроме гимпа, кто-нибудь может работать с этим форматом?)

А вы себе что присмотрели?




Re: Признание в любви к Го от старого сишника : 11/09/20 11:46 : hugeping to boscholeg [#] [reply]

> Вы его так рекламируете. Что хочется прям почитать про этот ваш Го.

Если нравится Си, то понравится и Go. Хотя я был уже подготовлен Питоном и Lua, но всё-равно, думаю, понравится.



Re: Признание в любви к Го от старого сишника : 11/09/20 11:34 : boscholeg to hugeping [#] [reply]

Вы его так рекламируете. Что хочется прям почитать про этот ваш Го.
Хотя после си, перла, пхп, питона и "богомерзкого" JSа в голове и так полная каша. :(
Жаль мозги прокачать не получается.



Re: Признание в любви к Го от старого сишника : 11/09/20 03:55 : Andrew Lobanov to hugeping [#] [reply]

hugeping> Что бы там не говорили злопыхатели, golang прекрасен! Пока делал ноду, полюбил его ещё больше. Конечно, пока пишу совсем не "идеоматичный" код, но начал постепенно его чувствовать.
hugeping> Лично для меня это что-то вроде "Си" на стероидах. Что-то между низким уровнем (с его простотой) и современными более абстрактными языками. Идеален для написания бекендов!
hugeping> А его кросскомпиляция? Наконец-то я избавился от вороха зависимостей, dependency hellов и избежал унылой участи запускать всё в контейнерах. И всё это благодаря go!
hugeping> Помню, когда читал книжку, чуть не плакал. Везде сквозил дух старого доброго Си, но только переосмысленный.
hugeping> Короче, Роб Пайк рулит! Спасибо за наше счастливое детство!

Когда пробовал go испытал примерно те же чувства. Пайк и Томпсон всё таки молодцы и понимают в языках :)



Признание в любви к Го от старого сишника : 10/09/20 18:45 : hugeping to All [#] [reply]

Что бы там не говорили злопыхатели, golang прекрасен! Пока делал ноду, полюбил его ещё больше. Конечно, пока пишу совсем не "идеоматичный" код, но начал постепенно его чувствовать.

Лично для меня это что-то вроде "Си" на стероидах. Что-то между низким уровнем (с его простотой) и современными более абстрактными языками. Идеален для написания бекендов!

А его кросскомпиляция? Наконец-то я избавился от вороха зависимостей, dependency hellов и избежал унылой участи запускать всё в контейнерах. И всё это благодаря go!

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

Короче, Роб Пайк рулит! Спасибо за наше счастливое детство!



Re: Mutt : 06/11/19 15:38 : jmaks to Andrew Lobanov [#] [reply]

Anotheroneuser>> Не найдётся у кого-нибудь muttrc для mail.yandex? Или ссылки на нормальное руководство.
AL> Ну так mutt это только читалка. Unix-way же. Гуглиться надо, например, про связку mutt + fetchmail + procmail + msmtp.
AL> Mutt для чтения и написания писем, fetchmail скачивает почту с сервера, procmail сортирует её, msmtp отправляет почту.
AL> Если не забуду, тр вечером посмотрю у себя. Где-то должны были остаться конфиги для этого добра.

Лучше написать таки своё; и сабж разберёшь, да и свои таки сделаешь настройки.

https://syslogblog.blogspot.com/2008/10/mutt-fetchmail-exim4-smarthost-debian.html
Вот кстати, одна из статеек в этих ваших интернетах; её таки писал сам gl00my aka Peter.

А так да, ничего не поменялось принципиально за много лет.
Вот тут можно поискать настройки и примеры mutt и прочих, линуксформат крутой был журнал. R.I.P.
Press 'F' просто... Эх, грусть...
http://wiki.linuxformat.ru/

У димы можно посмотреть базисные штуки, дефолтные конфиги, довольно много всяких гайдов напилено...
https://www.dmosk.ru/miniinstruktions.php?mini=mutt

На линуксцентре тож, что-то годное помню почерпнул для себя
http://www.linuxcenter.ru/lib/articles/networking/linuxmail.phtml

Так же как и на опеннете
https://www.opennet.ru/docs/RUS/mutt4users/

+++ Caesium/0.4 RC1



Re: android dev : 03/11/19 17:19 : vit01 to jmaks [#] [reply]

jmaks> vit01, btimofeev
jmaks> Подскажите товарищи, накидайте годной маны, как быстро без регистрации и смс, собрать простую приложуху под сабжевую систему на смартвоне любом, умеющую одной кнопкой --пересобирать мир--, запускать стрим потока в строенный в приложуху радиво плеер?!

btimofeev уже всё объяснил, достаточно лишь разгрести исходники парочки приложений-плееров на F-Droid

jmaks> Ну и вообще, как бы другие советы, на чем/под чем и как лучше, удобнее, современнее собирать apk?!

От себя добавлю, что нынче Qt очень подтянулись в поддержке андроида. Если уже знаешь Qt и умеешь на нём писать, то начать и поддерживать приложение будет нетрудно.

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Re: android dev : 02/11/19 18:36 : btimofeev to jmaks [#] [reply]

jmaks> Ну и вообще, как бы другие советы, на чем/под чем и как лучше, удобнее, современнее собирать apk?!

Проще всего поставить Android Studio https://developer.android.com/studio Программы пишутся на Java/Kotlin/C/C++

Ну а дальше можно начать с изучения документации https://developer.android.com/guide/ или startandroid.ru

Ещё в последнее время становится популярным фреймворк Flutter https://flutter.dev/ Он позволяет писать нативные приложения сразу и для Android и для iOS и для веба. Здесь программы уже пишут на языке Dart. Правда и АПК с хелло ворлдом будет иметь размер мегабайт 10.



Re: android dev : 02/11/19 16:06 : jmaks to btimofeev [#] [reply]

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

Ну и вообще, как бы другие советы, на чем/под чем и как лучше, удобнее, современнее собирать apk?!



Re: android dev : 02/11/19 13:08 : btimofeev to jmaks [#] [reply]

Тебе нужно приложение для проигрывания одной интернет-радиостанции?

Можешь посмотреть исходники приложения Transistor https://github.com/y20k/transistor, оно довольно простое.



android dev : 02/11/19 10:20 : jmaks to All [#] [reply]

vit01, btimofeev
Подскажите товарищи, накидайте годной маны, как быстро без регистрации и смс, собрать простую приложуху под сабжевую систему на смартвоне любом, умеющую одной кнопкой --пересобирать мир--, запускать стрим потока в строенный в приложуху радиво плеер?!



Re: Шуточные песенки про С (Папа может в СИ) : 11/08/19 07:19 : vit01 to Peter [#] [reply]

Peter> Но вторая -- давно известная шутка. А вот "ПАПА МОЖЕТ СИ" первый раз услышал. :)

Это широко известная группа Научно-Технический Рэп. Их самые хитовые песни - это "Делай бэкап", "Тыжпрограммист", "Дедлайн", "Курим мануал"

А вот по их песням про математику (да, такие у них тоже есть) я на первом курсе заучивал теоремы. Очень креативные тексты и "качающая" музыка.

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Шуточные песенки про С (Папа может в СИ) : 10/08/19 20:37 : Peter to All [#] [reply]

Случайно наткнулся на это чудо (Папа может в СИ): https://m.youtube.com/watch?v=cdX8r3ZSzN4

А искал, на самом деле, вот это (Write in C): https://www.youtube.com/watch?v=XHosLhPEN3k

Но вторая -- давно известная шутка. А вот "ПАПА МОЖЕТ СИ" первый раз услышал. :)



Re: Python и магия генераторов : 25/07/19 07:52 : Andrew Lobanov to Difrex [#] [reply]

>> Я правильно думаю, что нет простого способа просто следующее совпадение извлечь?
Difrex> Ага, нету.

Понятно. И даже ожидаемо, так как оно немного противоречит философии питона, насколько я её понимаю =)

Difrex> Скомпиль, кстати, регулярку сначала, будет еще быстрее
Difrex> ====
Difrex> r = re.compile("(.+):(.+)\n")
Difrex> ====

Как раз поигрался вчера с этим немного и собирался в ближайшее время коммитнуть это изменение. Спасибо.



Re: Python и магия генераторов : 25/07/19 06:12 : Difrex to Andrew Lobanov [#] [reply]

> Я правильно думаю, что нет простого способа просто следующее совпадение извлечь?
Ага, нету.

Скомпиль, кстати, регулярку сначала, будет еще быстрее

====
r = re.compile("(.+):(.+)\n")
====




Re: Python и магия генераторов : 25/07/19 04:33 : Andrew Lobanov to Difrex [#] [reply]

>> Я её хочу обработать минимальным количеством кода
Difrex> В тему, что меня бесит -- это питоновые однострочники. Оно работает не быстрее, чем если ты запишешь это в несколько строк,
Difrex> а вот читаемость падает.

Кстати, в итоге сделал вот так вообще. Даёт небольшой прирост в скорости и по идее легче читается.

====
d = {}
for (key, vaule) in re.findall("(.+):(.+)\n", counts):
d[key] = value
====



Кстати, насколько я понял, регулярки в re ложатся в философию питона как родные и всегда есть возможность получить или список или итератор. Или баловаться со смещением в цикле, что навряд ли будет быстро.

Я правильно думаю, что нет простого способа просто следующее совпадение извлечь?



Re: Python и магия генераторов : 25/07/19 04:33 : Andrew Lobanov to Difrex [#] [reply]

>> Я её хочу обработать минимальным количеством кода
Difrex> В тему, что меня бесит -- это питоновые однострочники. Оно работает не быстрее, чем если ты запишешь это в несколько строк,
Difrex> а вот читаемость падает.

А мне наоборот компактность кажется читаемее. По крайней мере в генераторах. К тому же зачастую генератор получается быстрее циклического создания списка или словаря, вроде. Но это вкусовщина, конечно.



Re: Python и магия генераторов : 24/07/19 13:37 : Difrex to Andrew Lobanov [#] [reply]

> Я её хочу обработать минимальным количеством кода
В тему, что меня бесит -- это питоновые однострочники. Оно работает не быстрее, чем если ты запишешь это в несколько строк,
а вот читаемость падает.



Re: Python и магия генераторов : 24/07/19 08:18 : Andrew Lobanov to All [#] [reply]

AL> Продолжаю учиться писать программы на питоне и возник один странный, может быть, вопрос. Есть строка, в которой хранится в "сыром" виде выхлопом x/c. То есть данные в виде
AL> ====
AL> echo.area:messages_count
AL> ====
AL> Я её хочу обработать минимальным количеством кода. Так что решил использовать генератор:
AL> ====
AL> {x.split(":")[0]: x.split(":")[1] for x in x_i.split("\n") if ":" in x}
AL> ====
AL> Но при этом мне очень не нравится дважды вызванный .split(":"). Можно как-то произвести сплит единожды для каждой итерации или придётся городить огород для этого?

Благодаря товарищам из Instead группы в ТГ решил это следующим образом:

====
{y[0]: int(y[1]) for y in (x.split(":") for x in counts.split("\n") if ":" in x)}
====



Если предложите вариант проще и быстрее, то буду рад.



Python и магия генераторов : 24/07/19 06:21 : Andrew Lobanov to All [#] [reply]

Продолжаю учиться писать программы на питоне и возник один странный, может быть, вопрос. Есть строка, в которой хранится в "сыром" виде выхлопом x/c. То есть данные в виде

====
echo.area:messages_count
====



Я её хочу обработать минимальным количеством кода. Так что решил использовать генератор:

====
{x.split(":")[0]: x.split(":")[1] for x in x_i.split("\n") if ":" in x}
====



Но при этом мне очень не нравится дважды вызванный .split(":"). Можно как-то произвести сплит единожды для каждой итерации или придётся городить огород для этого?

Эффективность обработки также играет для меня роль, так как впоследствии наработанные подходы я наверняка буду пытаться применять и для больших объёмов данных.



Re: CI : 13/04/19 08:11 : Difrex to vit01 [#] [reply]

> Дело не в этом. Docker - сам по себе оверхед, жрёт кучу свободного места на диске своими образами
Не сохраняй их. Держи только нужные.

> Да и как-то ради простенького сборочного процесса сохранять отдельный контейнер жирновато.
Сохраняй полученный артифакт, а не новый образ.



Re: CI : 12/04/19 14:21 : vit01 to Difrex [#] [reply]

>>Drone CI тянет за собой Docker и, насколько понимаю, запускает его на каждый чих, при каждой сборке. Это оттолкнуло сразу
Difrex> Почему оттолкнуло? У тебя получаются изолированные повторяемые билды каждый запуск.

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

Difrex> Посмотри на CircleCI - там LISP(Clojure) :)
Difrex> А вообще, если ты хочешь опенсорс собирать, то бери TravisCI и не парься со своими серваками.

CircleCI и Travis не подходят по причине того, что это Software as a Service. Да, это удобно, быстро, прикольно, но надо всегда иметь способы быть независимыми от чужого дяди.

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

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Re: CI : 16/03/19 17:17 : Difrex to vit01 [#] [reply]

>Drone CI тянет за собой Docker и, насколько понимаю, запускает его на каждый чих, при каждой сборке. Это оттолкнуло сразу
Почему оттолкнуло? У тебя получаются изолированные повторяемые билды каждый запуск.
GitlabCI тоже все в докере(dind) собирает.

>В идеале, конечно, хотелось бы что-нибудь подобного с синтаксисом вроде Ansible playbook, но чтобы многие вещи для сборки и развёртки были автоматизированы и был удобный гуй на всякий случай.
Посмотри на CircleCI - там LISP(Clojure) :)

А вообще, если ты хочешь опенсорс собирать, то бери TravisCI и не парься со своими серваками.



Re: CI : 16/03/19 16:32 : vit01 to Difrex [#] [reply]

vit01>> Вот я потому дженкинс и решил попробовать - из-за его тяжёлости и фичастости. Хочется оценить в работе все возможные фишки CI и потом сформировать личные предпочтения.

Difrex> Все возможные фишки все-равно не оченишь. Нужно от задачи отталкиваться. Если задача просто собрать проект и выкатить артифакт, то и писать на груви и динамически генерировать джобы через xml rpc тебе вряд ли понадобиться.

Писать на Groovy мне, конечно же, нафиг не сдалось, но вот в перспективе генерировать билды через xmlrpc - почему бы и нет? Всякое может быть

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

Обновить плагины невозможно, внутренняя обновлялка выдаёт exception-ы.

Да и загружать собранную инфу через SSH дистрибутив тоже нынче отказался. Так что повозился с ним и заменил очередными баш-скриптом.

vit01>> "Может быть, достаточно было ограничиться одним bash-скриптом?"
Difrex> Какие сомнения? Gitlab CI очень фичаст, и его огромный плюс в том, что ты держишь конфигурацию билда прямо в репозитории твоего проекта.

Gitlab CI, может быть, очень фичаст, но для его использования надо пользоваться гитлабом, а на текущем этапе мне это пока нецелесообразно.

Difrex> Еще и всяких гуйней нет, что плюс. Drone CI менее фичаст, но умеет тоже много чего.

Drone CI тянет за собой Docker и, насколько понимаю, запускает его на каждый чих, при каждой сборке. Это оттолкнуло сразу

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

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Re: Emacs. Редактирование одного текста в нескольких местах : 01/03/19 08:57 : Andrew Lobanov to Difrex [#] [reply]

>> Вспомнил. Я его смотрел, но как-то не вкурил его философию. Выглядит круто, возможности прикольные, но пользоваться им я так и не научился.
Difrex> Там фишка в том, что есть демон, который реализует сам WM, и клиент к нему. И весь конфиг клиентом делается.
Difrex> Это позволяет писать конфиг на любом языке.

Примерно как в bspwm, видимо. Есть bspwm и есть bspwmc. Конфиг на чём угодно, что умеет в шелл-вызовы. Для управления исключительно bspwmc юзается. Вкупе с sxhkd очень вкусно получается.

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 01/03/19 07:43 : Difrex to Andrew Lobanov [#] [reply]

> Вспомнил. Я его смотрел, но как-то не вкурил его философию. Выглядит круто, возможности прикольные, но пользоваться им я так и не научился.
Там фишка в том, что есть демон, который реализует сам WM, и клиент к нему. И весь конфиг клиентом делается.
Это позволяет писать конфиг на любом языке.



Re: Emacs. Редактирование одного текста в нескольких местах : 01/03/19 07:45 : Difrex to Anotheroneuser [#] [reply]

> Допустим, мне приходится постоянно что-то набирать, организовывать сведения и прочее. Особенно недостаёт возможности верстать бумажки.
Вот у меня нет таких задач -- я с кодом работаю. 3 основных моих приложения -- это Emacs, Gnome-terminal и Firefox :).

>> У меня брат, например, перешел на GNU Emacs с Vim, переучиваться не стал -- сидит в Evil :)
>Как, кстати, отзывается? Некоторые говорят, что это, как двумя напильниками одновременно работать
Ну, ему нравится, на вим обратно не тянет :)



Re: Emacs. Редактирование одного текста в нескольких местах : 01/03/19 04:20 : Andrew Lobanov to Difrex [#] [reply]

>> Что, кстати, в этой нише есть?
Difrex> herbstlufwm сейчас ковыряю. Выглядит очень неплохо.

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

Difrex> Еще смотрел на xmonad, но он слишком упорот для меня.

Мне он понравился, но Haskell это для меня перебор =)

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 28/02/19 14:45 : Anotheroneuser to Difrex [#] [reply]

Difrex> Ну, я переодически выделяю себе пару часов от рабочего времени на осваивание какого-либо инструмента.
Пару часов..

Допустим, мне приходится постоянно что-то набирать, организовывать сведения и прочее. Особенно недостаёт возможности верстать бумажки.
Тут бы сразу Emacs + LaTeX, чтобы, как автомат Калашникова всё работало и экономило время. Но ограниченный ум не даёт получить всё это сразу.
Поэтому, приходится
1. Набирать текст в Emacs
2. Верстать.. пока не умею. Только оформлять в Writer.
А уж параллельно с этим — изучать.
А как ты выкручиваешься, если тебе тут же надо работать этим инструментом?

Difrex> Вот уже вторую неделю с переменным успехом пытаюсь мигрировать с i3 на что-то со статическим тайлингом :).
Поинтересовался в Сети. Там говорят, что i3 и есть статический. Как разобраться? И почему мигрируешь? А то здесь кручу i3 понемногу.

Difrex> У меня брат, например, перешел на GNU Emacs с Vim, переучиваться не стал -- сидит в Evil :)
Как, кстати, отзывается? Некоторые говорят, что это, как двумя напильниками одновременно работать

+++ Caesium/0.4 RC1



Re: Emacs. Редактирование одного текста в нескольких местах : 28/02/19 13:50 : Difrex to Andrew Lobanov [#] [reply]

>Что, кстати, в этой нише есть?
herbstlufwm сейчас ковыряю. Выглядит очень неплохо.
Еще смотрел на xmonad, но он слишком упорот для меня.



Re: Emacs. Редактирование одного текста в нескольких местах : 28/02/19 11:54 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Вот уже вторую неделю с переменным успехом пытаюсь мигрировать с i3 на что-то со статическим тайлингом :).

Что, кстати, в этой нише есть? На ум приходят только stumpwm и ion3. Первый тяжеленный, а второй мёртв.

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 28/02/19 07:20 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser>> Как-то в процессевсе происходило, когда требоволось сделать что-то
Anotheroneuser> По всей видимости, у нас разная способность воспринимать подобные знания.
Anotheroneuser> Я пробовал и пробую усваивать их в процессе работы, но получаю дополнительный мыслительный процесс, в который погружаюсь, забывая о работе.
Ну, я переодически выделяю себе пару часов от рабочего времени на осваивание какого-либо инструмента.
Вот уже вторую неделю с переменным успехом пытаюсь мигрировать с i3 на что-то со статическим тайлингом :).

Anotheroneuser> Сочетания клавиш, конечно, надо сразу где-то использовать, потому что, находясь без дела, они забываются очень быстро.
Это да.
У меня брат, например, перешел на GNU Emacs с Vim, переучиваться не стал -- сидит в Evil :)

+++ At work. idec.el/0.1



Re: Emacs. Редактирование одного текста в нескольких местах : 27/02/19 08:04 : Anotheroneuser to Difrex [#] [reply]

> Как-то в процессевсе происходило, когда требоволось сделать что-то

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

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



Re: Emacs. Редактирование одного текста в нескольких местах : 26/01/19 09:33 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> Ух ты.
Anotheroneuser> Не видел этого. Да, и это то, что нужно — спасибо.
Походу дела у меня был баг на ноде, из-за чего айдишники сообщений были длины в 19 символов.
Я это фиксил уже, но забыл пересобрать и выкатить бинарь. По-этому другие ноды не приниали
эти сообщения.

Anotheroneuser> Кстати, очень симпатичный внешний вид emacs! Не напрягает глаз. Что это за тема и шрифт?
Тема: solarized dark, Шрифт: Source Code Pro


+++ idec.el/0.1



Re: Emacs. Редактирование одного текста в нескольких местах : 26/02/19 06:08 : Difrex to Anotheroneuser [#] [reply]

> Да, кажется, он
Да, это он =). Весной вернусь на light.

> Щас до такой степени ушёл в чтение руководств Emacs, что уже не замечаю ни тем, ни чего-либо
Я вот таким, кстати, никогда не занимался. Как-то в процессевсе происходило, когда требоволось сделать что-то. Основы за день учатся прямо из Емакса, причем на русском :)



Re: Emacs. Редактирование одного текста в нескольких местах : 26/01/19 09:36 : Difrex to Peter [#] [reply]

Peter> Битая ссылка. 19 символов кажется
Точно. Ты мне помог выбраться из shadow ban в который я сам себя загнал :)

+++ idec.el/0.1



Re: Emacs. Редактирование одного текста в нескольких местах : 26/02/19 05:37 : Anotheroneuser to Andrew Lobanov [#] [reply]

Спасибо)
Да, кажется, он.

Поставлю при случае.
Щас до такой степени ушёл в чтение руководств Emacs, что уже не замечаю ни тем, ни чего-либо. Ужасно много времени уходит на это (всё же по-английскии..). Надеюсь, оно как-то возместится. Например, экономией времени на работу с данными.



Re: Emacs. Редактирование одного текста в нескольких местах : 26/02/19 03:08 : Andrew Lobanov to Anotheroneuser [#] [reply]

Это solarized dark, вроде как.

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 25/01/19 14:30 : Anotheroneuser to Difrex [#] [reply]

Ух ты.
Не видел этого. Да, и это то, что нужно — спасибо.
Кстати, очень симпатичный внешний вид emacs! Не напрягает глаз. Что это за тема и шрифт?
Пользовался wombat до тех пор, пока не понял, что то ли она, то ли DejaVu Sans Mono Book вместе с ней -- напрягают глаза.



Re: Emacs. Редактирование одного текста в нескольких местах : 25/01/19 13:27 : Difrex to Peter [#] [reply]

Вот https://dynamic.lessmore.pw/msg/MmBCteS6yMnC2LZLbRC
:)

+++ картошки хватит на всех



Re: Emacs. Редактирование одного текста в нескольких местах : 25/01/19 10:36 : Peter to Difrex [#] [reply]

> Так и не понял чем тебе мой вариант не подошёл, который я тут показывал ii://APcbWI1obBZ3nr5uZgt[*][*] :)

Битая ссылка. 19 символов кажется



Re: Emacs. Редактирование одного текста в нескольких местах : 25/01/19 10:02 : Anotheroneuser to Difrex [#] [reply]

Я ради Бога прошу простить — впопыхах просмотрел или упустил. Подскажи, как мне открыть это ii://[*][*], пожалуйста.



Re: Emacs. Редактирование одного текста в нескольких местах : 25/01/19 07:13 : Difrex to Anotheroneuser [#] [reply]

Так и не понял чем тебе мой вариант не подошёл, который я тут показывал ii://APcbWI1obBZ3nr5uZgt[*][*] :)

Ну да ладно

+++ картошки хватит на всех



Re: Emacs. Редактирование одного текста в нескольких местах : 22/01/19 04:58 : Anotheroneuser to Andrew Lobanov [#] [reply]

> Довольно странно
Для меня это уже достижение *нервный смех*
Изучение этих программ это всё равно, что тот учёный в одной из игр попал в какой-то инопланетный центр и пытался выбраться из него, разбираясь на ходу )



Re: Emacs. Редактирование одного текста в нескольких местах : 22/01/19 03:48 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Я сейчас пробую работать, как посоветовал btimofeev и не могу вспомнить, что у меня тогда не получалось. Кажется, тогда при перемещении курсора (M-e) оба буфера двигались одновременно. А сейчас я пробую то же самое и всё по-отдельности. То есть, так, как надо.

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

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 21/01/19 18:00 : Anotheroneuser to Andrew Lobanov [#] [reply]

Я сейчас пробую работать, как посоветовал btimofeev и не могу вспомнить, что у меня тогда не получалось. Кажется, тогда при перемещении курсора (M-e) оба буфера двигались одновременно. А сейчас я пробую то же самое и всё по-отдельности. То есть, так, как надо.



Re: Emacs. Редактирование одного текста в нескольких местах : 21/01/19 15:10 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Ого, а я уже смирился)))
Anotheroneuser> Да, это то самое, спасибо тебе!

Офигеть. А я даже не понял задачу тогда. Потому и не писал решение =)

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 21/01/19 11:30 : Anotheroneuser to btimofeev [#] [reply]

Ого, а я уже смирился)))
Да, это то самое, спасибо тебе!



Re: Emacs. Редактирование одного текста в нескольких местах : 21/01/19 11:33 : Andrew Lobanov to btimofeev [#] [reply]

btimofeev> Что бы растянуть одну половину на все окно жми С-х 1

C-x 0 закроет текущее окно (в терминологии имакса).

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Emacs. Редактирование одного текста в нескольких местах : 21/01/19 09:16 : btimofeev to Anotheroneuser [#] [reply]

C-x 2 разделит экран по горизонтали и откроет во второй половине тот же текст. Курсоры в каждом окне будут в разных местах (кажется это то, что ты хочешь).

C-x 3 разделит экран по вертикали.

Что бы переключиться в другую половину нажми С-х о

Что бы растянуть одну половину на все окно жми С-х 1



Re: Mutt : 14/01/19 15:54 : Anotheroneuser to Andrew Lobanov [#] [reply]

Ого! Благодарю тебя. Сейчас попробую...



Re: Mutt : 14/01/19 08:23 : Andrew Lobanov to Anotheroneuser [#] [reply]

>> Гуглиться надо, например, про связку mutt + fetchmail + procmail + msmtp.
Anotheroneuser> Вчера до глубокой ночи занимался этим. Всякий раз приходил к выводу, что люди, которые пишут инструкции, не намерены возиться с нами — непрофессиональными пользователями. Да, там есть объяснения, целые руководства и т.д. В них излагается принцип работы программы и рычаги управления ею. Но представления о программе это не очень-то даёт. Нужен какой-то алгоритм или что-нибудь наглядное.

Вот конфиги мои:

~/.fetchmailrc

====
defaults
#set daemon 120

poll imap.yandex.ru
proto IMAP
user 'username@yandex.ru'
pass 'password' is 'username@yandex.ru' here
mda 'procmail -d %T';
====



Опцию "set daemon 120" можно раскомментировать. Тогда fetchmail будет раз в 2 минуты проверять почту.

Опция "mda 'procmail -d %T';" вызывает procmail, который раскладывает почту по ящикам.

~/.procmailrc

====
MAILDIR=$HOME/Mail
LOGFILE=/dev/null
LOGABSTRACT=no
VERBOSE=off
FORMAIL=/usr/local/bin/formail
DEFAULT=$MAILDIR/default

:0 Whc: .msgid.lock
| $FORMAIL -D 16384 .msgid.cache

:0
* ^From:.*A.Kuronen@*
$MAILDIR/spam

:0
* ^From:.*naumen@urfc.ru*
$MAILDIR/naumen

:0
* ^To:.*username@yandex.ru*
$MAILDIR/mbox
====



Здесь правила для сортировки писем настроены. Письма от A.Kuronen попадают в ящик spam, уведомления от документооборота - в ящик naumen, а письма, написанные мне - в ящик mbox.

Для отправки писем используется программа msmtp.

~/.msmtprc

====
account default
host smtp.yandex.ru
from username@yandex.ru
user username
password password
auth login
====



Ну и для чтения использутся mutt. У меня его конфиг основывался на каком-то файле, найденном в сети.

~/.muttrc

====
# Сброс настроек
ignore *
unignore Date To From: Subject

#
# Здесь оставлено место для цветовой гаммы...
#

# Забиндить на кнопку 'G' прием почты
macro index G "!fetchmail -k -f ~/.fetchmailrc"
macro pager G "!fetchmail -k -f ~/.fetchmailrc"
macro generic G "!fetchmail -k -f ~/.fetchmailrc"

#добавление адреса в адресную книгу
macro index a "|abook --add-email\n" 'add sender to abook'
macro pager a "|abook --add-email\n" 'add sender to abook'
#поиск по адр. книге
set query_command="abook --mutt-query '%s'"

# В mutt нет адресной книги, поэтому мы польземся алиасами
#source "~/.mail_aliases"
#set alias_file="~/.mail_aliases"

# Кириллизация всего и вся ;)
set allow_8bit=yes
set ascii_chars=yes
set charset="utf8"
set send_charset="koi8-r:us-ascii:iso-8859-1:utf-8"
set signature="~/.signature"

# Не пищать!
set beep=no

# Внешний вид просмотрщика ящика
set index_format="%4C %Z %D %-25.25F %s"
set to_chars=" TCF"
set sort=threads

# Что считать за квотирование
set quote_regexp="^([ \t[A-Za-z]*]*[>+])+"

# Какие заголовки отображать
hdr_order Date From To Subject

# Весьма удобная штука
set pager_context=1
set pager_index_lines=6

# Различные предустановки ответов
set include=ask-yes
set fast_reply=yes
set confirmappend=no

# К написанию писем
set edit_headers=yes
set attribution="On %d, %n wrote:"
set date_format="%Y.%m.%d %H:%M"
set indent_string="> "
set editor="mcedit"

# Почтовые ящики
set spoolfile="~/Mail/mbox"
set folder="~/Mail"
mailboxes =mbox
set mbox="~/Mail/default"
set mbox_type=mbox
set postponed="~/Mail/postponed"
set record="~/Mail/sent"
set sort_browser=reverse-size

# Все связанное с отсылкой писем
set realname="Andrew Lobanov"
set from="Andrew Lobanov <A.Lobanov@45.rfc>"
set envelope_from=yes
set sendmail="/usr/bin/msmtp -oi"

# ПЖП пусть отдохнет...
set pgp_verify_sig=no

color header cyan black .
color header yellow black ^From
color header yellow black ^Subject
color body yellow black [_a-z\.\$A-Z0-9-]+@[a-zA-Z0-9\./\-]+
color body yellow black (http|ftp)://[_a-zA-Z0-9\?\=\&\@\%\#\:\,\./~\-]+
color quoted green black
color signature cyan black
color attachment yellow black
color tree white black
color indicator black cyan
color status white blue
color tilde blue black
color normal white black
color index green black ~N

auto_view text/html

set timeout=1 #Прверять через какое число минут почту
set mail_check=1
====



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

+++ Caesium/0.4 RC1
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Mutt : 14/01/19 05:36 : Anotheroneuser to Andrew Lobanov [#] [reply]

> Гуглиться надо, например, про связку mutt + fetchmail + procmail + msmtp.
Вчера до глубокой ночи занимался этим. Всякий раз приходил к выводу, что люди, которые пишут инструкции, не намерены возиться с нами — непрофессиональными пользователями. Да, там есть объяснения, целые руководства и т.д. В них излагается принцип работы программы и рычаги управления ею. Но представления о программе это не очень-то даёт. Нужен какой-то алгоритм или что-нибудь наглядное.
Если разберусь, попробую что-нибудь такое нарисовать ))

> Mutt для чтения и написания писем, fetchmail скачивает почту с сервера, procmail сортирует её, msmtp отправляет почту
Вот прикинь, насколько графические приложения калечат мозг. На собственном примере понимаю, до какой степени сложно въехать в то, что раньше давалось очень легко. Установил Thunderbird и понеслось.
А некоторым и Thunderbird сложно установить. И появляются люди, которые соблазняют возможностью обмениваться данными и вообще ни о чём не задумываться (разные WhatsApp и остальное).
Говорю это без всякого фанатизма, бешеных глаз и дрожащих рук (в которых зажаты свитки с сакральными знаниями)). Просто немного жаль, что раньше не приходило в голову разобраться с этим.



Re: Mutt : 14/01/19 04:15 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Не найдётся у кого-нибудь muttrc для mail.yandex? Или ссылки на нормальное руководство.

Ну так mutt это только читалка. Unix-way же. Гуглиться надо, например, про связку mutt + fetchmail + procmail + msmtp.

Mutt для чтения и написания писем, fetchmail скачивает почту с сервера, procmail сортирует её, msmtp отправляет почту.

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

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Mutt : 13/01/19 20:39 : Anotheroneuser to All [#] [reply]

Не найдётся у кого-нибудь muttrc для mail.yandex? Или ссылки на нормальное руководство.
Ухрюкаться можно, пока разберёшься.



Re: Emacs. Редактирование одного текста в нескольких местах : 24/11/18 11:11 : Anotheroneuser to Anotheroneuser [#] [reply]

Не нашёлся выход. Наверное, самым идейно-верным будет скопировать материал и открывать их ­— один для изменений, другой — для чтения...
Если б можно было хотя бы read only открывать тот же материал .org. Чтобы не плодить копии.



Re: Документация : 23/11/18 12:27 : vit01 to Difrex [#] [reply]

vit01>> Недавно решил попробовать Jenkins потыкать и настроил его для нашего репозитория с документацией. По нажатию пары кнопочек дока компилируется из markdown и заливается на сайт.

Difrex> Дженкинс тяжел, но фичаст.

Вот я потому дженкинс и решил попробовать - из-за его тяжёлости и фичастости. Хочется оценить в работе все возможные фишки CI и потом сформировать личные предпочтения.

Difrex> Я использую Gitea+Drone CI - все легко настраивается и работает, а главное, что и как в Gitlab CI, весь билд описывается в одном ямле.

До сих пор есть небольшие сомнения на счёт всего этого.
"Может быть, достаточно было ограничиться одним bash-скриптом?"

Почитал бы с удовольствием хороший обзор на разные CI в плане юзабилити и имеющихся фич.

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Emacs. Редактирование одного текста в нескольких местах : 22/11/18 17:36 : Anotheroneuser to All [#] [reply]

Наверняка, такое уже случалось у кого-нибудь.
Один текст *.org, который надо видеть и изменять в нескольких местах.
Не подскажете какой-нибудь идейно правильный выход? :) Если делю экран на два, то там всё синхронно происходит, а это неудобно. Если открыть emacs дважды, тоже, кажется, выходит какая-то хрень.



org-mode и Github Projects : 14/11/18 14:36 : vit01 to All [#] [reply]

У Гитхаба есть фича под названием Projects. Это что-то вроде Kanban-списков для составления планов. Каждый Project содержит в себе набор карточек, в каждой из которых можно хранить заметки и отмечать сделанные дела.

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

Давайте это исправим, используя python и org-mode

1. $ pip install PyGithub
Документацию по пакету можно посмотреть здесь: https://pygithub.readthedocs.io/en/latest/introduction.html

2. Получаем access-token для API Гитхаба
Идём сюда: https://github.com/settings/tokens
Получаем Personal Access Token с доступом к вашим репозиториям, копируем

3. Создаём python-скрипт с подобным содержанием:

====
#!/usr/bin/env python3

from github import Github

g = Github("your-access-token")

# 0 - это первый проект, в данном случае он единственный
prj = g.get_user().get_repo("idec-mobile").get_projects()[0]

# вывод форматируется в виде списка org-mode
print("\n+ {" + prj.name + "} <" + prj.html_url + ">")
for column in prj.get_columns():
print("\n\t+ " + column.name)

for card in column.get_cards():
if card.archived:
continue

print("\t\t+ " + str(card.note))
====



4. В файле org-mode прописываем блок для запуска кода
:results output raw ставить обязательно, иначе org-mode будет оформлять вывод скрипта как текст вроде цитаты, а нам надо, чтобы он был в виде org-списка

====
#+BEGIN_SRC shell :results output raw
~/path/to/your/python/script
#+END_SRC
====



5. Если в Emacs не настроен org-babel, то в конфиге прописать вот это (свои языки прописать по желанию)

====
  (org-babel-do-load-languages
'org-babel-load-languages
'(
(shell . t)
(python . t)
(emacs-lisp . t)
(C . t))
)
====



6. Можно запускать. Не забудьте chmod +x для питоноскрипта
Для выполнения кода в org-mode надо лишь навести курсор на блок этого кода и нажать C-c C-c

Список гитхабопроектов появится рядом с меткой #+RESULTS:



Re: org-mode и выход из дома : 07/10/18 03:25 : vit01 to Difrex [#] [reply]

vit01>> Можете подсказать простое и красивое решение?
Difrex> Нужно писать самому =)

Таки заморочился и написал то, что требуется :)

https://github.com/vit1-irk/org-agenda-timeleft

Приятно удивил тот факт, что org-mode умеет перегонять расписание в машиночитаемый CSV

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

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



Re: org-mode и выход из дома : 02/10/18 13:33 : Difrex to vit01 [#] [reply]

vit01> 1. Сделать такие уведомления в org-mode, чтобы напоминали, когда пора выходить
vit01> 2. Таймер обратного отсчёта [время до выхода из дома HH:MM и/или до начала пары]
Посмотри код pomidoro-mode - там есть и таймер и уведомления

vit01> Можете подсказать простое и красивое решение?
Нужно писать самому =)

+++ А небо все точно такое же, как если бы ты не продался



org-mode и выход из дома : 02/10/18 01:52 : vit01 to All [#] [reply]

У меня в org-mode на каждый день есть актуальное расписание занятий в универе и не только

Обычно я выхожу из дома за N минут до начала 1 пары

Задачи

1. Сделать такие уведомления в org-mode, чтобы напоминали, когда пора выходить
2. Таймер обратного отсчёта [время до выхода из дома HH:MM и/или до начала пары]

Если для 1 задачи можно сделать костыль через SCHEDULED, то насчёт обратного отсчёта не знаю, куда копать

Можете подсказать простое и красивое решение?

+++ Отправлено через IDEC Mobile
+++ GNU/Linux, Android, physics, MLP:FIM



JavaFX WebView : 23/09/18 06:00 : Andrew Lobanov to All [#] [reply]

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

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 16/09/18 09:20 : Andrew Lobanov to Anotheroneuser [#] [reply]

AL>> Тогда я не понял изначальную задачу. Откуда брать дату и время, если не из exif?

Anotheroneuser> Из EXIF, больше неоткуда.
Anotheroneuser> Написал про 1980 год (меня тогда на свете ещё не было) просто так. Удивился, что дата такая.

Грубо говоря, это "нулевое значение даты". Хотя странно, что 1980, а не 1970.

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 16/09/18 06:53 : Anotheroneuser to Andrew Lobanov [#] [reply]

AL> Тогда я не понял изначальную задачу. Откуда брать дату и время, если не из exif?

Из EXIF, больше неоткуда.
Написал про 1980 год (меня тогда на свете ещё не было) просто так. Удивился, что дата такая.

+++ А вы пощупайте-пощупайте! В нашем деле главное — пощупать.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 16/09/18 05:38 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Если для этого она берёт данные EXIF, то, конечно, ж... полная там будет с фотографиями )) Посмотрел: почти всё перепутано.


Anotheroneuser> Есть горы снимков, которые вообще не были датированы: указано 1 января 1980 года, но этого не может быть. И есть изображения, которые вообще не содержат какой-либо информации.

Тогда я не понял изначальную задачу. Откуда брать дату и время, если не из exif?

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 15/09/18 18:34 : btimofeev to Anotheroneuser [#] [reply]

Anotheroneuser> Если для этого она берёт данные EXIF, то, конечно, ж... полная там будет с фотографиями )) Посмотрел: почти всё перепутано.

А откуда ей ещё брать эту инфу?

Anotheroneuser> Есть горы снимков, которые вообще не были датированы: указано 1 января 1980 года, но этого не может быть. И есть изображения, которые вообще не содержат какой-либо информации.

Попробуй посмотреть через программу exiftool. Она кстати умеет переименовывать файл по дате https://m.habr.com/post/232267/



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 15/09/18 17:40 : Anotheroneuser to btimofeev [#] [reply]

> Shotwell

Слушай, да, спасибо! Она делает -- только что попробовал.
Она сгребает фото в свою собственную библиотеку и размещает их там хронологически.
Если для этого она берёт данные EXIF, то, конечно, ж... полная там будет с фотографиями )) Посмотрел: почти всё перепутано.

Есть горы снимков, которые вообще не были датированы: указано 1 января 1980 года, но этого не может быть. И есть изображения, которые вообще не содержат какой-либо информации.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 19:54 : btimofeev to Anotheroneuser [#] [reply]

Anotheroneuser> 1. Из всех каталогов рекурсивно переместить в каталоги, классифицируя так:
Anotheroneuser> - ГГГГ
Anotheroneuser> -- ММ
Anotheroneuser> --- ДД

Как минимум это умела делать программа Shotwell. Это менеджер фотографий для гнома. Если не ошибаюсь она по-умолчанию импортирует фотографии в такую структуру директорий.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 12:50 : Anotheroneuser to Andrew Lobanov [#] [reply]

Оказывается, есть много решений.
Например, такое.

====
find /media/vm/Transcend -type f -name '*.jpg *.jpeg *.png' -exec mv -i {} /home/vm/Изображения  \;
====


Сойдёт? Но на Transcend фотографий просто дохренищи. Может, 200 Гб.
Задумка такова:
1. Переместить все:
1.1. Фотографии в Изображения
1.2. Видео в Видео
1.3. Аудиозаписи в Аудиозаписи
2. Классифицировать всё по
2.1. ГГГГ
2.1.1. ММ
2.1.1.1. ДД
3. Переименовать все материалы по дате и времени их получения с точностью до секунды

Остальное -- хлам, в принципе.. Так что, лететь ему в цифровое нигде.
Винт отформатирую в ext4, чтобы не было ограничений на размер загружаемого материала.

Дальше информационная система будет устроена с помощью org-mode, откуда просто буду ссылаться на материалы. Они поступают ежедневно на телефон (фото, аудио, видео) и синхронизируются с ЭВМ через Syncthing.

Как тактика? Наверное, паровоз Черепановых, но у меня больше нет идей ))



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 12:17 : Anotheroneuser to Andrew Lobanov [#] [reply]

> На выходных могу попытаться
Не.. Не хочу напрягать.
Корячусь сейчас сам. Нашёл программу fdupes -- пробую для начала дубликаты вычистить. А потом буду что-нибудь делать. Может, графической программой какой..
Начинаю усваивать, почему люди хвалят консольные программы. Графические приложения, несмотря на свою графичность, иногда так неочевидны, что трандец.
Пользователю нужен обычный алгоритм, который позволяет решение принимать (практически бездумно), а ему ребусы предлагают разгадывать. Лучше уж сразу в консоль залезть и оттуда править миром



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 11:32 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> А, хочу добавить!
Anotheroneuser> Обращаюсь, только если есть у кого готовое решение. Или просто за советом по тактике : правильно или неправильно. Может, что ещё

Готового решения не имею, но можно попробовать написать. На выходных могу попытаться, если раньше никто не поможет.

+++ IDEC-Mobile
+++ Лично я вижу в этом перст судьбы — шли по лесу и встретили программиста.



Re: Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 09:52 : Anotheroneuser to Anotheroneuser [#] [reply]

А, хочу добавить!
Обращаюсь, только если есть у кого готовое решение. Или просто за советом по тактике : правильно или неправильно. Может, что ещё



Разгрёб фото и пр. материалов. Перемещение, классификация : 14/09/18 09:38 : Anotheroneuser to All [#] [reply]

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

Съёмный диск объёмом 1 Тб
На нём кучи каталогов, в которые я годами сваливал каталоги с фото- аудио- видео- и пр. материалами.
Кое-какая классификация есть, но она такова, что приходится постоянно рыться, буквально утопая в воспоминаниях и теряя ценные силы (потому что, ясен хрен, всплывающие образы вызывают эмоции, а это -- штука энергопотребляющая)

Хочется решить вопрос одним-двумя телодвижениями. Начал искать сценарий для следующего плана:

Фотоматериалы
1. Из всех каталогов рекурсивно переместить в каталоги, классифицируя так:
- ГГГГ
-- ММ
--- ДД
2. Переименовать их по времени получения снимка (из EXIF) c точностью до секунды. Чтобы они в каталоге ДД лежали последовательно. Это важно, т.к. иначе теряется смысл: все записи будут спутаны. Они и так спутаются, т.к. я их делал в одно время, а снимал -- в другое. Так была организована система.

Ну и всё, наверное..

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

И ещё вопрос такой.
Если бы вы имели привычку вести записи от руки, а затем оцифровывали бы их и переносили в машину, стали бы вы удалять подлинники?
Сам подлинники уничтожаю.. Хотя, не знаю, правильно ли это. Цифра она что.. а подлинник -- он подлинник.



Re: Emacs: как вставить одно и то же слово : 29/08/18 08:23 : Anotheroneuser to Difrex [#] [reply]

Вот спасибо )

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



Re: Emacs: как вставить одно и то же слово : 29/08/18 06:24 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> Не-не ) Ты сказал, что можно -- это главное. Может попробую написать сам.. Иначе так никогда не начну. То же, блин, и с играми: учиться программированию с нуля слишком долго.

Ок, пиши сам =). Направлю тебя в нужном направлении:
В GNU Emacs есть функция *query-replace-regexp* которая по-дефолту забиндина на C-M-%
Если знаешь регекспы, то там становится вообще просто :).

Только регион выдели, в который будешь вставлять.

*** Sent from my GNU Emacs



Re: Emacs: как вставить одно и то же слово : 29/08/18 06:01 : Anotheroneuser to Difrex [#] [reply]

> Доберусь до работы - напишу

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



Re: Emacs: как вставить одно и то же слово : 29/08/18 05:38 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> Можно ли сделать это одной командой?

Можно. Доберусь до работы - напишу велосипед какой-нибудь 😂



Emacs: как вставить одно и то же слово : 28/08/18 16:15 : Anotheroneuser to All [#] [reply]

Мне понравилась штука под названием list-matching-lines.
С помощью неё можно выводить чуть ли не оглавление документа.

Но хрень в том, что lines не всегда matching и, чтобы этого добиться, надо одновременно добавить слово в начало определённых строк.

Например, строки начинаются с цифры.

====
1. Ляляля.
1.1. Пухом белым укрыта земля.
1.2. За деревней растёт конопля.

2. Тополя.
2.1. По два рубля.
2.2. По три рубля.
====



Чтобы получить нормальный list-matching-lines, надо подставить слово «Пункт» перед каждой цифрой.

Можно ли сделать это одной командой?



Re: Как в Emacs двигать слова : 21/08/18 04:48 : Anotheroneuser to Anotheroneuser [#] [reply]

поспешил..

А из нашего окна площад[]ь Красная видна!

двигаем вправо

А из нашего площадь окна Красн[]ая видна!



Re: Как в Emacs двигать слова : 21/08/18 04:47 : Anotheroneuser to btimofeev [#] [reply]

Хитрó..
То есть, так?

А из нашего окна площад[]ь Красная видна!

двигаем вправо

А из нашего площад[]ь окна Красная видна!



Re: Как в Emacs двигать слова : 21/08/18 04:42 : Anotheroneuser to Difrex [#] [reply]

О! Теперь понял, благодарю.



Re: Как в Emacs двигать слова : 21/08/18 03:53 : Andrew Lobanov to Difrex [#] [reply]

Difrex> ====
Difrex> (defun setup-move-words ()
Difrex> "Move word right or left."

Difrex> (defun move-word-right (arg)
Difrex> "Move word to right."
Difrex> (interactive "*p")
Difrex> (transpose-words 1))

Difrex> (defun move-word-left (arg)
Difrex> "Move word to left."
Difrex> (interactive "*p")
Difrex> (transpose-words -1))

Difrex> (global-set-key [\C-\S-right] 'move-word-right)
Difrex> (global-set-key [\C-\S-left] 'move-word-left))

Difrex> (setup-move-words)
Difrex> ====
Difrex> По ctrl+shift+стрелка вправо двигаем слово на право, со стрелкой влево - влево =)

Всё оказалось даже проще, чем я думал =)

Emacs мощен, блин.



Re: Как в Emacs двигать слова : 21/08/18 03:52 : Andrew Lobanov to btimofeev [#] [reply]

Anotheroneuser>> Ничего не нашёл, кроме -- менять слова местами по M-t
btimofeev> А чем оно тебе не подходит? Судя по справке это то, что тебе и нужно. К примеру C-u 4 M-t передвинет слово вперёд через 4 слова, C-u - 4 M-t назад через 4 слова. Правда довольно объемный кейбиндинг выходит, возможно можно как-то переопределить покороче.

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



Re: Как в Emacs двигать слова : 20/08/18 21:38 : Difrex to Anotheroneuser [#] [reply]

Короче, там курсор в конец нужного тебе слова надо ставить. Если ставишь в начало, то берет предыдущее. Так transpose-word работает, судя по доке.



Re: Как в Emacs двигать слова : 20/08/18 21:36 : btimofeev to Anotheroneuser [#] [reply]

Anotheroneuser> Работает! ) Только пока не до конца понятно.
Anotheroneuser> Вот какое выходит кино:
Anotheroneuser> https://yadi.sk/i/1fvUwhTP3aQWzM

Да, берет предыдущее слово (до курсора) и меняет его со следующим (после курсора), после чего передвигает курсор через слово вперёд. Как-то так.



Re: Как в Emacs двигать слова : 20/08/18 20:43 : Anotheroneuser to Difrex [#] [reply]

Работает! ) Только пока не до конца понятно.
Вот какое выходит кино:
https://yadi.sk/i/1fvUwhTP3aQWzM



Re: Как в Emacs двигать слова : 20/08/18 20:31 : Anotheroneuser to btimofeev [#] [reply]

Да, правда! Работает.
> довольно объемный кейбиндинг
это тоже правда. Но привыкнуть можно.



Re: Как в Emacs двигать слова : 20/08/18 18:03 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> > Ща ноут у жены отберу и попробую накидать :)
Anotheroneuser> Слушай, может не стоит так рисковать?? Фиг с ним. Выйдем из положения))
Да все ок, у нее и свой есть =)
Лови

====
(defun setup-move-words ()
"Move word right or left."

(defun move-word-right (arg)
"Move word to right."
(interactive "*p")
(transpose-words 1))

(defun move-word-left (arg)
"Move word to left."
(interactive "*p")
(transpose-words -1))

(global-set-key [\C-\S-right] 'move-word-right)
(global-set-key [\C-\S-left] 'move-word-left))

(setup-move-words)
====



По ctrl+shift+стрелка вправо двигаем слово на право, со стрелкой влево - влево =)

// Sent from my GNU Emacs



Re: Как в Emacs двигать слова : 20/08/18 17:54 : Anotheroneuser to Difrex [#] [reply]

> Ща ноут у жены отберу и попробую накидать :)
Слушай, может не стоит так рисковать?? Фиг с ним. Выйдем из положения))



Re: Как в Emacs двигать слова : 20/08/18 17:50 : Anotheroneuser to btimofeev [#] [reply]

А-а!
> C-u 4 M-t
а я просто М-t..
Попробую - спасибо.



Re: Как в Emacs двигать слова : 20/08/18 17:51 : Difrex to Anotheroneuser [#] [reply]

Да не, оно довольно просто должно быть. Все функции уже есть в стоковом Емаксе.
Ща ноут у жены отберу и попробую накидать :)



Re: Как в Emacs двигать слова : 20/08/18 16:47 : btimofeev to Anotheroneuser [#] [reply]

Anotheroneuser> Ничего не нашёл, кроме -- менять слова местами по M-t

А чем оно тебе не подходит? Судя по справке это то, что тебе и нужно. К примеру C-u 4 M-t передвинет слово вперёд через 4 слова, C-u - 4 M-t назад через 4 слова. Правда довольно объемный кейбиндинг выходит, возможно можно как-то переопределить покороче.



Re: Как в Emacs двигать слова : 20/08/18 16:00 : Anotheroneuser to Difrex [#] [reply]

> Извини
Да я ничего )) Если всё правильно понимаю, в Emacs есть собственный морг убитых слов, откуда он, в случае чего, может их доставать. Единственно, пару раз я этот как-то морг уничтожал и после этого уже ничего нельзя было сделать.

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

Фраза: Ни двора ни кола.
Действие: Сдвинуть "кола" влево
Фраза: Ни двора кола ни.
Действие: Сдвинуть "кола" влево
Фраза: Ни кола двора ни.
Действие: Сдвинуть "двора" вправо
Фраза: Ни кола ни двора.

Вот так. Но это -- блажь, подозреваю... Или нет?



Re: Как в Emacs двигать слова : 20/08/18 15:20 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> Нажал по неопытности -- херак! -- полтекста исчезло. Слава Богу, помнил C-x u
Anotheroneuser> Потом вспомнил, что это просто копировать-вставить.
Извини, надо было рассказать что это просто копипаст.

Anotheroneuser> Вот просто ради интереса: там везде говорится up и down, но нигде не сказано right и left )
Anotheroneuser> В right и в left слова можно двигать?
Ну, мне не надо было никогда двигать вправо и влево. Но написать можно :). Попробую что-то написать похожее.
Тебе же как-то так слова двигать нужно?

====
            Before C-S-right

+----------+ +----------+ +----------+
| word A | | word B | | word C |
| +-----+-----+ +---------+ |
+----------+ | +----------+ +----------+
|
|
|
After C-S-right |
|
+----------+ | +----------+ +----------+
| word B | | | word A | | word C |
| +-----+-----+ +---------+ |
+----------+ +----------+ +----------+
====



// Sent from my GNU Emacs



Re: Как в Emacs двигать слова : 20/08/18 14:53 : Anotheroneuser to Difrex [#] [reply]

> C-w C-y
Нажал по неопытности -- херак! -- полтекста исчезло. Слава Богу, помнил C-x u
Потом вспомнил, что это просто копировать-вставить.

Ничего не понимая, естественно, кроме отдельных английских слов, попробовал читать конфиг.
Вот просто ради интереса: там везде говорится up и down, но нигде не сказано right и left )
В right и в left слова можно двигать? Sublime не пользовался -- у меня к нему сразу возникло какое-то странное чувство... Решил не трогать.



Re: Как в Emacs двигать слова : 20/08/18 14:20 : Difrex to Anotheroneuser [#] [reply]

Anotheroneuser> Бывают проблемы с лексикой и надо переместить слово в в другой конец предложения. Может быть, есть для этого удобное сокращение?

У меня есть код, который умеет двигать блок текста, как во всяких саблаймах

====
(defun setup-move-code-block ()
"Enable code moving like as Sublime."
(defun move-text-internal (arg)
(cond
((and mark-active transient-mark-mode)
(if (> (point) (mark))
(exchange-point-and-mark))
(let ((column (current-column))
(text (delete-and-extract-region (point) (mark))))
(forward-line arg)
(move-to-column column t)
(set-mark (point))
(insert text)
(exchange-point-and-mark)
(setq deactivate-mark nil)))
(t
(beginning-of-line)
(when (or (> arg 0) (not (bobp)))
(forward-line)
(when (or (< arg 0) (not (eobp)))
(transpose-lines arg))
(forward-line -1)))))

(defun move-text-down (arg)
"Move region (transient-mark-mode active) or current line
arg lines down."
(interactive "*p")
(move-text-internal arg))

(defun move-text-up (arg)
"Move region (transient-mark-mode active) or current line
arg lines up."
(interactive "*p")
(move-text-internal (- arg)))

(global-set-key [\M-\S-up] 'move-text-up)
(global-set-key [\M-\S-down] 'move-text-down))
====



Думаю, что можно сделать по-аналогии, как тебе нужно. Но ваще для переноса слова я пользуюсь C-w C-y :)

// Sent from my GNU Emacs



Как в Emacs двигать слова : 20/08/18 13:58 : Anotheroneuser to All [#] [reply]

Может быть, кто-то сталкивался с этим.
Ничего не нашёл, кроме -- менять слова местами по M-t
Бывают проблемы с лексикой и надо переместить слово в в другой конец предложения. Может быть, есть для этого удобное сокращение?



Re: Тормоза eMACS и первые впечатления от i3 : 15/08/18 06:30 : Difrex to Anotheroneuser [#] [reply]



Anotheroneuser> > Используй emacs server и emacsclient -с к нему. Будешь что-то такое глобальное делать - просто выполни systemctl --user restart emacs
Anotheroneuser> emacs server и emacsclient -с -- это отдельно как-то устанавливать надо?
Не, в составе дистрибутива емакса уже все идет, а начиная с 26 версии ещё и юзерский юнит systemd.



Re: Тормоза eMACS и первые впечатления от i3 : 13/08/18 10:09 : Anotheroneuser to Difrex(mobile) [#] [reply]

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

> Используй emacs server и emacsclient -с к нему. Будешь что-то такое глобальное делать - просто выполни systemctl --user restart emacs
emacs server и emacsclient -с -- это отдельно как-то устанавливать надо?



Re: Тормоза eMACS и первые впечатления от i3 : 10/08/18 17:33 : Andrew Lobanov to Anotheroneuser [#] [reply]


Anotheroneuser> Это не давало мне спать ночью, когда проливной дождь по-летнему хлестал в тёмное окно.

Поэтично =)

Anotheroneuser> Мне виделся Andrew Lobanov, который весело рассуждал, как это здорово -- быть Emacs-ером. Можно жить и ни о чём не переживать, ведь теперь все твои проблемы ерунда, по сравнению с этим..

=)

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

Anotheroneuser> Недавно я осознал, насколько он был... прав! :)

Просто делает жизнь чуточку проще =)

Anotheroneuser> Короче, стояла у меня прога под названием CopyQ.
Anotheroneuser> Она и тормозила.
Anotheroneuser> Узнал случайно. За ненадобностью снёс к едреням, поскольку начал подозревать её в хищении содержимого буфера обмена или как он правильно называется в Emacs. Работал в Emacs --nw и иногда не мог ничего скопировать/вставить по M-w или Ctrl+Shift+C.
Anotheroneuser> Удалить -- удалил, но сессию не перезапустил.
Anotheroneuser> И зачем-то запустил Emacs-GUI. C-Backspace-нул несколько раз и Cinnamon выдал поленницу ошибок CopyQ. Тут-то до меня и дошло, что вот она, падла, где была загвоздка.
Anotheroneuser> Перезапустил сессию, запустил Emacs-GUI, C-Backspace-нул и никаких тормозов.
Anotheroneuser> Всё, можно спать спокойно.

Офигеть. Таких наглых программ я ещё не видел.

Anotheroneuser> Второе -- это I3
Anotheroneuser> ----

Anotheroneuser> Вот сейчас из-под него (или из него, или в нём, или на нём), чудом догадавшись, как вызвать терминал, пишу этот рассказец). В общем, .. надо почитать руководства-инструкции, конечно ) Но i3 однозначно торт.

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

Anotheroneuser> Пётр, спасибо за рекомендацию.

Меня, кстати, тоже Пётр подсадил, хотя про этот wm я знал и до того =)



Re: Тормоза eMACS и первые впечатления от i3 : 10/08/18 17:29 : Difrex(mobile) to Anotheroneuser [#] [reply]

>Работал в Emacs --nw и иногда не мог ничего скопировать/вставить по M-w или Ctrl+Shift+C.
Если есть иксы, то нет никакого смысла использовать консольный емакс

Anotheroneuser> Удалить -- удалил, но сессию не перезапустил.
Используй emacs server и emacsclient -с к нему. Будешь что-то такое глобальное делать - просто выполни systemctl --user restart emacs



Тормоза eMACS и первые впечатления от i3 : 10/08/18 16:26 : Anotheroneuser to All [#] [reply]

Тормоза eMACS
----

Возникали при попытке удалить несколько слов удержанием C-Backspace.
Это не давало мне спать ночью, когда проливной дождь по-летнему хлестал в тёмное окно.
Мне виделся Andrew Lobanov, который весело рассуждал, как это здорово -- быть Emacs-ером. Можно жить и ни о чём не переживать, ведь теперь все твои проблемы ерунда, по сравнению с этим..
Недавно я осознал, насколько он был... прав! :)

Короче, стояла у меня прога под названием CopyQ.
Она и тормозила.
Узнал случайно. За ненадобностью снёс к едреням, поскольку начал подозревать её в хищении содержимого буфера обмена или как он правильно называется в Emacs. Работал в Emacs --nw и иногда не мог ничего скопировать/вставить по M-w или Ctrl+Shift+C.
Удалить -- удалил, но сессию не перезапустил.
И зачем-то запустил Emacs-GUI. C-Backspace-нул несколько раз и Cinnamon выдал поленницу ошибок CopyQ. Тут-то до меня и дошло, что вот она, падла, где была загвоздка.
Перезапустил сессию, запустил Emacs-GUI, C-Backspace-нул и никаких тормозов.
Всё, можно спать спокойно.
Это первое.

Второе -- это I3
----

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



Re: NNTP, Usenet, Emacs, gnus : 04/08/18 03:06 : Andrew Lobanov to Peter [#] [reply]

>> Кстати, я знаю, что в клубе есть эхи из секты =) Но я не знаю какие и есть ли где-то их список.

> А на сайте есть кнопка подписки. Это ж твой iing на стероидах. Там и список есть.

Ну я из этого и исходил. В iing на главной все публичные эхи видно =)



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:42 : Peter to Andrew Lobanov [#] [reply]

> Кстати, я знаю, что в клубе есть эхи из секты =) Но я не знаю какие и есть ли где-то их список.

А на сайте есть кнопка подписки. Это ж твой iing на стероидах. Там и список есть.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:35 : btimofeev to Anotheroneuser [#] [reply]

По поводу команды clear в терминале: она просто сдвигает все предыдущие команды за пределы экрана. Если у тебя терминал начал неправильно что-то отображать, то выполни команду reset, она сбросит настройки терминала на дефолтные.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:29 : Anotheroneuser to btimofeev [#] [reply]

btimofeev> Из цезия выходи кнопкой F10 - будет все нормально (кнопки можешь переопределить в файле keys.py)

btimofeev> Выбирай python3 или запускай просто командой "./caesium.py" из директории с цезием, он сам найдет нужный питон.

Теперь всё ясно, благодарю )



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:29 : Anotheroneuser to Andrew Lobanov [#] [reply]

> AL> В ридми описаны хоткеи. Для выхода жми F10. Потому что ncurses при аварийном закрытии приложения (по Ctrl+C например) не возвращает терминал в исходное состояние. Питонов у тебя нормально. По сути тольк второй и третий, что есть норма. Остальное это симлинки на эти два интерпритатора.
Теперь дошло, почему F10 нажимать надо было.

> набираешь ./caesium.py. Он запустится без проблем
Теперь понял, как запускать программы )) А то, python3 caesium.py набирал.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:21 : btimofeev to Anotheroneuser [#] [reply]

Из цезия выходи кнопкой F10 - будет все нормально (кнопки можешь переопределить в файле keys.py)

Выбирай python3 или запускай просто командой "./caesium.py" из директории с цезием, он сам найдет нужный питон.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 20:17 : Andrew Lobanov to Anotheroneuser [#] [reply]

>> Не совсем понятно о чём речь.
Anotheroneuser> Вот ссылка на каталог со снимками экрана: https://yadi.sk/d/Jn9OwvFH3Zspan
Anotheroneuser> Я там кое-что подтёр, не обессудьте — в Сети же общаемся.

В ридми описаны хоткеи. Для выхода жми F10. Потому что ncurses при аварийном закрытии приложения (по Ctrl+C например) не возвращает терминал в исходное состояние. Питонов у тебя нормально. По сути только второй и третий, что есть норма. Остальное это симлинки на эти два интерпритатора.

>> Скрипт сам должен выбрать третий питон. Совместимость гарантирована с версии 3.2 по 3.7.
Anotheroneuser> Когда запускаю, просто кликнув на caesium.py мышкой, так и получается. Но когда запускаю из терминала, то возникает такой вот вопрос. Жить это не мешает.

Вопрос не понял. В терминале переходишь в директорию цезия и набираешь ./caesium.py. Он запустится без проблем. Или просто Enter в mc когда курсор на этом файле.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 19:29 : Anotheroneuser to Andrew Lobanov [#] [reply]

> Не совсем понятно о чём речь.
Вот ссылка на каталог со снимками экрана: https://yadi.sk/d/Jn9OwvFH3Zspan
Я там кое-что подтёр, не обессудьте — в Сети же общаемся.

> Скрипт сам должен выбрать третий питон. Совместимость гарантирована с версии 3.2 по 3.7.
Когда запускаю, просто кликнув на caesium.py мышкой, так и получается. Но когда запускаю из терминала, то возникает такой вот вопрос. Жить это не мешает.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 19:27 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> А можно ещё спросить? Когда запускаю Цезий в терминале, то какой... из питонов выбирать? ) А то, у меня их тут почему-то несколько. Когда Цезий закрываю, то приходится немного корячиться с выходом — не сразу получается вернуть терминал в исходное состояние.

Не совсем понятно о чём речь. Скрипт сам должен выбрать третий питон. Совместимость гарантирована с версии 3.2 по 3.7.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 19:07 : Anotheroneuser to btimofeev [#] [reply]

> btimofeev> В конфиге цезия пропиши строку:
> btimofeev> editor emacs

Во. Получилось.
А можно ещё спросить? Когда запускаю Цезий в терминале, то какой... из питонов выбирать? ) А то, у меня их тут почему-то несколько. Когда Цезий закрываю, то приходится немного корячиться с выходом — не сразу получается вернуть терминал в исходное состояние.

Сейчас снимок экрана сделаю.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 18:21 : btimofeev to Anotheroneuser [#] [reply]

>Тут единственный фокус — это редактирование сообщений с помощью nano. Наверное, в настройках можно заменить его? А то, я тут чё-то.. пока не очень ))

В конфиге цезия пропиши строку:
editor emacs



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:51 : Anotheroneuser to Andrew Lobanov [#] [reply]

> Цезий пока не очень дружелюбен и требует правку конфига. После указания адреса ноды укажи

Блин, там, оказывается, надо было $ удалить по бокам.
Я не удалил, вот оно и не работало. Благодарю )



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:47 : Anotheroneuser to Peter [#] [reply]

Peter> А так - есть caesium: http://instead.syscall.ru/ru/club/

> Настроил. Тут единственный фокус — это редактирование сообщений с помощью nano. Наверное, в настройках можно заменить его? А то, я тут чё-то.. пока не очень ))



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:48 : Andrew Lobanov to Peter [#] [reply]

Peter> Вот тут внизу страницы написано:
Peter> https://instead-hub.github.io/page/club/

Кстати, я знаю, что в клубе есть эхи из секты =) Но я не знаю какие и есть ли где-то их список.

ЗЫЖ Да это агитация за секты =)



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:46 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> > А так - есть caesium:
Anotheroneuser> Установил, запустил, но когда пытаюсь написать сюда, он отвечает

Anotheroneuser> ====
Anotheroneuser> Работа с http://ii.club.syscall.ru/
Anotheroneuser> Отправка сообщения: 1/1
Anotheroneuser> ERROR: unknown auth!
Anotheroneuser> ====

Anotheroneuser> Надо пароль ввести, а куда — х/з.
Anotheroneuser> Куда? )

Цезий пока не очень дружелюбен и требует правку конфига. После указания адреса ноды укажи

====
auth <authstr>
to Anotheroneuser
====



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



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:39 : Anotheroneuser to Peter [#] [reply]

> Вот тут внизу страницы написано
Как раз, сделал, как там.
Всё равно unknown auth.

auth $вставил, какой надо$
to $Anotheroneuser$

Может, что-то ещё надо?



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:28 : Peter to Anotheroneuser [#] [reply]

> Надо пароль ввести, а куда — х/з.
> Куда? )

Вот тут внизу страницы написано:
https://instead-hub.github.io/page/club/



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:13 : Anotheroneuser to Peter [#] [reply]

> А так - есть caesium:
Установил, запустил, но когда пытаюсь написать сюда, он отвечает

====
Работа с http://ii.club.syscall.ru/
Отправка сообщения: 1/1
ERROR: unknown auth!
====



Надо пароль ввести, а куда — х/з.
Куда? )



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:11 : Anotheroneuser to Peter [#] [reply]

Понял. Ну мне главное — узнать, что есть нормальные пути, а есть пути, которые теряются во мраке. Возможно Emacs-way применительно к IDEC теряется во мраке..



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:04 : Andrew Lobanov to Peter [#] [reply]

Peter> Через usenet еще можно читать fido. по моему. Но вообще, я не знаю, есть сейчас действующие сервера. Мне кажется, особой жизни нет.

Иерархия fido7 (соответствует 50 региону фидонета, то есть России) доступна на множестве nntp-серверов.

Русскоязычный Usenet больше мёртв, чем жив. В англоязычном жизнь есть, вроде. В общем, ситуация как с irc.

Для idec есть

https://github.com/idec-net/idec.el

Но я не знаю насколько он юзабелен пока, так как пользуюсь цезием (https://github.com/idec-net/caesium) и idec-mobile (https://github.com/idec-net/idec-mobile).



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 17:00 : Peter to Anotheroneuser [#] [reply]

> Не ткнёшь носом в более-менее внятную инструкцию? Я так и не смог понять, как делать.

Прямо сейчас не смогу, я давно настраивал. Могу попробовать освежить по своим конфигам. Но позже.
Ну или тут кто то из emacs пользователей за это время напишет. :)



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 16:34 : Anotheroneuser to Peter [#] [reply]

> Думаю, не стоит
Вот, благодарю. Сэкономлю время.
То есть, club.syscall.ru — это не NNTP? Не получится подключиться с помощью gnus-а и писать сюда из него?

> Мне кажется, особой жизни нет
Жаль.. Ну, может, всё ещё впереди.

> А так - сейчас почти все web почтой пользуются
А как шифровать? Все-то все, понятное дело..

> Читать gnus почту можно
Не ткнёшь носом в более-менее внятную инструкцию? Я так и не смог понять, как делать.
Вообще, отсутствие инструкций для чайников очень, скажем так, отдаляет людей от хороших программ. Или программы от людей )
То, что я видел на картинках, мне понравилось.
Ну и рассказывают красиво: настройки, расширения/сужения и всё такое.

> Если есть интерес - то можно. Чисто для саморазвития
Для саморазвития и делопроизводства. Говорят, можно как-то из org-mode на письма ссылаться.
Последний раз я это видел году в 2008-м в одной эстонской программе-ежедневнике. Какой-то комбайн из почты, календаря и записной книжки. Коряв он был, конечно, как моя жизнь. НО возможность ссылаться на письма и материалы была очень ценной.



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 16:26 : Peter to Anotheroneuser [#] [reply]

Да, чуть не забыл. idec читать из emacs вроде бы можно, если поставить разработанный тут кем-то софт.
Но я забыл, в каком он статусе. :)
А так - есть caesium: http://instead.syscall.ru/ru/club/



Re: NNTP, Usenet, Emacs, gnus : 03/08/18 16:24 : Peter to Anotheroneuser [#] [reply]

> - стоит ли уделять время изучению NNTP?
> - можно ли посредством gnus подключиться к здесь (я имею в виду club.syscall.ru)? Если да, то не подбросите ли кусок кода, чтобы я его просто вставил и запустил?

Думаю, не стоит. Если есть желание, gnus ом можно читать обычную почту. Я так делаю на работе.

> - Пользуются ли сейчас Usenet и нужно ли тратить время на его изучение? Мне почему-то кажется, что его устройство (читал о нём в описании) — хорошО. Интуитивно кажется.

Через usenet еще можно читать fido. по моему. Но вообще, я не знаю, есть сейчас действующие сервера. Мне кажется, особой жизни нет.

> - Удобно ли читать почту в gnus или для этого лучше использовать другой Emacs-модуль? Не помню его названия.. что-то там тоже mail. А! Rmail! Или, может, вообще настроить mutt? Или, может, есть какие-нибудь ещё пути..

Читать gnus почту можно. Достаточно удобною На самом деле, самоцели технологии ради технологии это -- наверное-- не нужно. :) А так - сейчас почти все web почтой пользуются.

> Хочется отказаться от Thunderbird и постепенно уйти от графического управления.

Если есть интерес - то можно. Чисто для саморазвития. :) gnus - достаточен.



NNTP, Usenet, Emacs, gnus : 03/08/18 16:13 : Anotheroneuser to All [#] [reply]

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

Прочитал инструкции, попробовал отредактировать .emacs и что-то там ещё — ничего не получилось.
Потом обратил внимание на наш местный адрес и начало доходить, что тут-то, возможно, тоже NNTP.

Короче.
Подскажите, пожалуйста:
- стоит ли уделять время изучению NNTP?
- можно ли посредством gnus подключиться к здесь (я имею в виду club.syscall.ru)? Если да, то не подбросите ли кусок кода, чтобы я его просто вставил и запустил?

Ну и пара вопросов уже не по теме:
- Пользуются ли сейчас Usenet и нужно ли тратить время на его изучение? Мне почему-то кажется, что его устройство (читал о нём в описании) — хорошО. Интуитивно кажется.
- Удобно ли читать почту в gnus или для этого лучше использовать другой Emacs-модуль? Не помню его названия.. что-то там тоже mail. А! Rmail! Или, может, вообще настроить mutt? Или, может, есть какие-нибудь ещё пути..

Хочется отказаться от Thunderbird и постепенно уйти от графического управления.



PostgreSQL: создание пользователя, базы данных и прав доступа : 08/07/18 08:00 : Difrex(mobile) to All [#] [reply]

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


$ sudo -u postgres psql

Добавление...

Ссылка: http://sudnitsina.pythonanywhere.com/post/16/



Django - удаление файла с диска : 06/07/18 10:00 : Difrex(mobile) to All [#] [reply]

Добавляем в модель метод delete:


def delete(self, *args, **kwargs):
storage, path = self.file.storage, self.file.path
super(Post...

Ссылка: http://sudnitsina.pythonanywhere.com/post/10/



Экспорт и импорт данных в Django : 06/07/18 10:00 : Difrex(mobile) to All [#] [reply]

Быстрый способ передать данные - воспользоваться встроенными средствами Django: dumpdata и loaddata.


./manage.py dumpdata

выведет все данные приложений из INSTALLED...

Ссылка: http://sudnitsina.pythonanywhere.com/post/11/



Django - удаление файла с диска : 29/06/18 13:00 : Difrex(mobile) to All [#] [reply]

Добавляем в модель метод delete:


def delete(self, *args, **kwargs):
storage, path = self.file.storage, self.file.path
super(Post...

Ссылка: http://sudnitsina.pythonanywhere.com/post/1/



Экспорт и импорт данных в Django : 29/06/18 13:00 : Difrex(mobile) to All [#] [reply]

Быстрый способ передать данные - воспользоваться встроенными средствами Django: dumpdata и loaddata.


./manage.py dumpdata

выведет все данные приложений из INSTALLED...

Ссылка: http://sudnitsina.pythonanywhere.com/post/12/



Тестирование django проекта с использованием coverage.py : 29/06/18 13:00 : Difrex(mobile) to All [#] [reply]

Coverage — инструмент, позволяющий оценить степерь покрытия кода тестами. Устанавливаем coverage:


pip install coverage

Запускаем тесты:


coverage run manage.py test...

Ссылка: http://sudnitsina.pythonanywhere.com/post/15/



Как добавить Google OAuth в Django : 29/06/18 13:00 : Difrex(mobile) to All [#] [reply]

Для добавления аутентификации воспользуемся библиотекой Python Social Auth Выполняем установку


$ pip install social-auth-app-django

Добавим ‘social_django’ в INSTALLED_APPS, после чего выполним...

Ссылка: http://sudnitsina.pythonanywhere.com/post/14/



Экспорт и импорт данных в Django ч.2: сериализация : 29/06/18 13:00 : Difrex(mobile) to All [#] [reply]

Сериализация объектов в Джанго предоставляет механизм преобразования моделей в другие форматы. Выполняется простой операцией:


from django.core import serializers
data...

Ссылка: http://sudnitsina.pythonanywhere.com/post/13/



Re: Microsoft купил Github и будет устанавливать там свои порядки : 27/06/18 12:13 : Difrex(mobile) to vit01 [#] [reply]

>Сабж. Ваши действия?

Какие-то репы отзеркалил на Gitlab. Но на самом деле никуда сломя голову бежать с гитхаба я не собираюсь.
Новые проекты я начинаю у себя в Gitea, а потом они все-равно открываются, так что мне тоже бояться нечего :)



Re: Microsoft купил Github и будет устанавливать там свои порядки : 18/06/18 15:30 : vit01 to Andrew Lobanov [#] [reply]

vit01>> Сабж. Ваши действия?

AL> Как там развиваются события? Уже пора переходить на self-hosted? =)

Пока решил лично для себя, что валить не буду, потому что

1. Весь мой код свободный, и приватных репозиториев нет, следовательно бояться нечего
2. МС пока не предпринимают никаких действий, потому что хотят сохранить аудиторию (тем более, многие от испуга уже свалили на гогс или гитлаб)
3. Git распределённый, и альтернатив для хостинга достаточно, поэтому мигрировать всегда успеем, если вдруг прижмёт



Re: Microsoft купил Github и будет устанавливать там свои порядки : 18/06/18 14:13 : Andrew Lobanov to vit01 [#] [reply]

vit01> Сабж. Ваши действия?

Как там развиваются события? Уже пора переходить на self-hosted? =)



Re: Microsoft купил Github и будет устанавливать там свои порядки : 05/06/18 15:53 : Anotheroneuser to vit01 [#] [reply]

Пока слежу за развитием событий <https://www.linux.org.ru/news/opensource/14260200>



Microsoft купил Github и будет устанавливать там свои порядки : 05/06/18 11:47 : vit01 to All [#] [reply]

Сабж. Ваши действия?



Re: Emacs : 17/05/18 07:00 : Anotheroneuser to Difrex [#] [reply]

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

Занят сейчас поиском учебного материала по EMACS и наткнулся на сетевой дневник Саши Чуа (любопытная и интеллектуальная филиппинка), где она опубликовала источники, подходящие для изучения EMACS на первых, вторых и т.д. порах: http://sachachua.com/blog/2014/04/emacs-beginner-resources/

Всё, разумеется, по-английски.



Re: Освоение программирования : 17/05/18 05:30 : Anotheroneuser to Andrew Lobanov [#] [reply]

> авторов и названия

Авторы и названия литературы об алгоритмах.
Цель единственная — освоение программирования игр.

====
-1-

Algorithms Unlocked / Алгоритмы. Вводный курс
Год: 2014
Автор: Thomas H. Cormen / Томас Х. Кормен
Переводчик: Игорь Красиков

-2-

Алгоритмы: разработка и применение. Классика Computers Science
Год издания: 2016
Автор: Клейнберг Дж., Тардос Е.
Переводчик: Е. Матвеева

-3-

Algorithms in C++, Third Edition / Фундаментальные алгоритмы на C++ (3-я редакция, в 5-ти частях, 2 книгах)
Год: 2001
Автор: Р. Седжвик
Жанр: Программирование

-4-

Essential Algorithms: A Practical Approach to Computer Algorithms / Алгоритмы. Теория и практическое применение
Год издания: 2016
Автор: Rod Stephens / Род Стивенс
Перевод: В. Кириленко, Р. Волошко

-5-

Алгоритмы. Построение и анализ. Издание 3-е
Год: 2013
Автор: Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн
Переводчик: И.В.Красикова

-6-

Алгоритмы. Просто как дважды два
Год выпуска: 2007
Автор: И. В. Красиков, И. Е. Красикова

-7-

Грокаем Алгоритмы. Иллюстрированное пособие для программистов и любопытствущих
Год издания: 2017
Автор: Бхаргава А.

-8-

Алгоритмы. Справочник с примерами на C, C++, Java и Python
Год издания: 2017
Автор: Хайнеман Д., Поллис Г., Селков С.

-9-

Алгоритмы. Теория и практическое применение
Год издания: 2016
Автор: Стивенс Род
====



Ещё нашёл http://www.stolyarov.info/books для получения теоретической основы. Как кажется, подойдёт? Вот базовая книга: http://www.stolyarov.info/books/pdf/progintro_vol1.pdf



Re: Освоение программирования : 17/05/18 04:03 : Andrew Lobanov to vit01 [#] [reply]

>>>>  Awesome WM
AL>> А вот тут моё мнение диаметрально противоположное, если честно. Использовать лучше то, к чему привык. Конечно, любопытство в своё время заставило меня попробовать так называемые тайловые оконные менеджеры, да так на них и остался по сей день, но Awesome достаточно сложен в настройке, если именно осмысленно писать ему конфиг и аплеты, и его изучение требует времени и сил.
vit01> Ничего ведь не мешает просто попробовать. Да, конечно, для настройки авесома надо мануалов покурить, поизучать чужие примеры. Но зато интеграция WM с языками программирования вырабатывает творческий подход к своему десктопу.

Это основная причина, по которой я отказался и от Fvwm и от stumpwm. Я в итоге слишком много времени тратил на кастомизацию, вместо того, чтобы пользоваться машиной =)



Re: Освоение программирования : 17/05/18 04:03 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> * Потом, когда ещё не было Спектрумов, пробовали составлять игры самостоятельно, но недоставало знания алгоритмизации (их и теперь недостаёт, но мне удалось найти литературу [1]. В конце задам вопрос по ней)

Ссылки не стоит, но авторов и названия же можно =)

Anotheroneuser> * Потом начались Спектрумы 48К, игры на кассетах, которые мы покупали ещё на старые российские рубли. Там уже, конечно, всё было по-взрослому: графика и прочее. Вот, текстовых игр для Спектрума я что-то не припоминаю..

Были, конечно. И их было много. На https://www.worldofspectrum.org/ их насчитывается 2217 штук. Для меня года с 1996-го это стал практически основной жанр игр, в которые я играл тогда.

Anotheroneuser> Припоминаю, как сосед, который учился в школе с уклоном по информатике, писал в клетчатой тетради программы для ЭВМ. На каком языке он их писал, уже не помню. Кажется, Бейсик. Некоторые вещи мне удавалось выучить попутно. Потом удивлял друзей, оказавшись в классе информатики, где учились уклоняющиеся в неё старшеклассники и оставляли машины (Электроника какая-то там) включенными с результатом на экранах. Мне удавалось изменять код и запускать его снова. Получалась хрень, но это впечатляло непосвящённых ))

Я так и не позанимался на компьютерах в школе. Да и были там корветы до самого моего 10 класса. Как раз когда я перешёл в 10 класс, поставили третьи пентиумы и там уже был паскаль.

Anotheroneuser> Вообще, тот код писать было весело.

Это да =)



Re: Освоение программирования : 17/05/18 01:33 : vit01 to Andrew Lobanov [#] [reply]

>>>  Awesome WM

AL> А вот тут моё мнение диаметрально противоположное, если честно. Использовать лучше то, к чему привык. Конечно, любопытство в своё время заставило меня попробовать так называемые тайловые оконные менеджеры, да так на них и остался по сей день, но Awesome достаточно сложен в настройке, если именно осмысленно писать ему конфиг и аплеты, и его изучение требует времени и сил.

Ничего ведь не мешает просто попробовать. Да, конечно, для настройки авесома надо мануалов покурить, поизучать чужие примеры. Но зато интеграция WM с языками программирования вырабатывает творческий подход к своему десктопу.



Re: Освоение программирования : 16/05/18 20:05 : Anotheroneuser to Andrew Lobanov [#] [reply]

> Надеюсь, это было не слишком скучно читать
Можно даже игру написать по этому рассказу.

У меня вот не слишком интересно.

* Как уже говорил, в детстве со старшим братом проходили «Лабиринт колдуна» Юрия Пульвера
https://quest-book.ru/forum/images/upload/2_d40701905cb005a2f4bb32540fea6c95.jpg
* Потом была Стальная Крыса Г.Гаррисона, которую прочитал, конечно, всю. Пусть земля ему будет пухом, этому человеку. Из приключенческих там была «Стань Стальной Крысой», которую впоследствии несколько раз с удовольствием прошёл на INSTEAD.
* Потом, когда ещё не было Спектрумов, пробовали составлять игры самостоятельно, но недоставало знания алгоритмизации (их и теперь недостаёт, но мне удалось найти литературу [1]. В конце задам вопрос по ней)
* Потом начались Спектрумы 48К, игры на кассетах, которые мы покупали ещё на старые российские рубли. Там уже, конечно, всё было по-взрослому: графика и прочее. Вот, текстовых игр для Спектрума я что-то не припоминаю.. Припоминаю, как сосед, который учился в школе с уклоном по информатике, писал в клетчатой тетради программы для ЭВМ. На каком языке он их писал, уже не помню. Кажется, Бейсик. Некоторые вещи мне удавалось выучить попутно. Потом удивлял друзей, оказавшись в классе информатики, где учились уклоняющиеся в неё старшеклассники и оставляли машины (Электроника какая-то там) включенными с результатом на экранах. Мне удавалось изменять код и запускать его снова. Получалась хрень, но это впечатляло непосвящённых ))
Вообще, тот код писать было весело.
* По-настоящему к компу удалось приобщиться лишь в 2006 году. Пришлось приобщиться, я бы даже так сказал. Всё происходило на бегу, лету и ползу (если есть такое слово).

---
[1] Нарыл несколько популярных изданий по алгоритмизации. Хотел бы посоветоваться по ним, но не знаю, можно ли тут выкладывать ссылки: они все ведут на Rutracker :)



Re: Освоение программирования : 15/05/18 08:19 : Peter to Andrew Lobanov [#] [reply]

> // Надеюсь, это было не слишком скучно читать =)

Интересно. :) Лучшая часть, конечно, это:

====
  -.-
*=(0)
====



:)



Re: Освоение программирования : 15/05/18 04:24 : Andrew Lobanov to Peter [#] [reply]

Peter> Сугубо для оживления беседы. :) У меня был примерно такой путь:

Забыл же про свой неказистый путь рассказать =)

Когда мне было два года, отец собрал свой первый компьютер Радио-86РК. Честно говоря, я ничего толкового о нём рассказать не могу, кроме того, что мне очень нравилась на нём игра "Клад" и ещё отец написал простенькую программку, которая занимала меня пока он готовил ужин, а за одно учила считать до десяти. На экране было изображено десять вертолётиков и если я правильно их сосчитал и ввёл ответ, один из них улетал. Изображались вертолётики вот так:

====
  -.-
*=(0)
====



так как компьютер не имел графического видеорежима.

Потом был спектрум. Тоже самопальный и в разных вариантах. Без дисковода с 48 килобайтами памяти, с дисководом с ним же, с 128 килобайтами памяти, потом даже с музыкальным сопроцессором. Там я лет до восьми только в игрушки играл и баловался графическим редактором Art Studio. А лет в восемь задал себе вопрос: как же делаются эти игрушки? Как раз примерно в это время мой друг принёс мне книжку по бейсику для детей. Называлась она, как сейчас помню, "Сказки дядюшки компьютера". Там были нелепые истории и самое ценное - примеры программ на бейсике, визуализирующие эти истории. Меня тогда это сильно впечатлило, но при ближайшем рассмотрении оказалось, что написаны они на диалекте бейсика, отличном от спектрумовского. Сейчас я искренне недоумеваю как мне тогда это удалось, но я смог их ввести в спектрум и адаптировать под имеющийся диалект.

Если кто не помнит или не знает, ввод программ на бейсике в спектруме был достаточно хитёр. Каждый символ занимал в памяти один байт, но ввести можно было только 128 символов. И ещё 127 значений этого байта было отведено под команды бейсика. То есть на экране было написано какое-нибудь слово, например, "CIRCLE", а в памяти эта команда занимала целый байт. В связи с этим команды вводились нажатием одной клавиши или клавиши-модификатора и буквы. Это сильно усложняло мне задачу, ведь на тот момент у меня была только самодельная клавиатура вообще без какой-либо маркировки и догадаться, что надо нажать, например, EXT MODE и букву для ввода команд было тяжело. Но я и с этим справился =)

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

Так я и баловался с бейсиком и в ус не дул. Я слышал, что есть некий ассемблер, но у меня не было ни литературы ни компилятора этого дела. А больше языков я не знал совершенно. Даже не догадывался об их существовании. Открытием для меня стало приложение к журналу "Радиолюбитель" с оригинальным названием "Мой компьютер". Оказалось, что есть такой язык, как паскаль. Читая статьи и пытаясь понять опубликованные в журнале программы, я возомнил его чем-то очень крутым. Строго говоря, оно так и было, ведь прогаммы были ориентированы на Turbo Pascal от Borland, и PC с паскалем на фоне спектрума с бейсиком был очень классным и интересным. Но PC у меня не было. Как и какого-нибуь компилятора паскаля.

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

Тем не менее, бейсика всё равно было достаточно для многих штук, ведь в спектруме была очень простая работа с памятью, а видеопамять была в одном адресном пространстве с остальной. И никто не мешал мне писать и читать там что угодно прямо из бейсика. Как и вызывать встроенные в ПЗУ низкоуровневые процедуры, благо отец когда-то вёл дневник по своему спектруму и там были все нужные мне адреса и точки входа.

Так я и промаялся с бейиком до 14 лет. А потом в моей жизни появился PC на базе 486 процессора. Рухлядь по тем временам (2001-й год), но после простенького спектрума это было для меня откровением. До того момента я вживую видел PC только у друга и ничего в нём не понимал. Только в дум резаться умел =)

Друзья быстро присоветовали книжку и дали заветные дискетки с турбо паскалем. На книжку мне пришлось копить несколько месяцев, но я всё таки её купил. Как сейчас помню, Немнюгин С. А. "Turbo Pascal Учебник". Кстати, очень хорошая книжка была для старшеклассников. Наисана ясно и примеры хорошие. Так я начал писать программки для доса.

Потом был целый пентиум, разогнанный аж до 166 МГц и Windows. И Delphi с ужасной книжкой "Delphi для чайников". Случилось это где-то уже годам к 16. На страшной и ужасной Delphi я просидел ещё несколько лет и даже диплом писал там же. А потом я открыл для себя GNU/Linux и занялся егё изучением. И программирование несколько забросил, ведь кроме паскаля ничего не знал, а с free pascal быстро наигрался. Так продолжалось достаточно долго и двигаться дальше я начал уже года в 24. Для начала освежил в памяти паскаль, начал играться с python-ом, вспомнил, что хотел попробовать написать игру для Instead. И понеслось до сих пор.

Профессиональная деятельность у меня ушла от программирования далеко в сторону, а для себя я пишу на чём попало. Python3, Common Lisp, Go и, конечно, lua. Ведь инстед стал частью моей жизни.

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

// Надеюсь, это было не слишком скучно читать =)



Re: Освоение программирования : 15/05/18 04:24 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Я о Моженкове особо ничего не знаю, если честно. ПРосто его видеодневник попался мне в Youtube и показался нормальным. Он там старается аккуратно советовать, так что, может я что-то не так понял: если разбираться, то придётся лезть в вашу профессию, а я не могу по причине полного отсутствия представления о ней )

Я о нём вообще только от тебя услышал. Просто рекомендовать C++ как основной язык сегодня не очен хорошо даже для профессионалов. Рекомендовать же его любителям и вовсе вредительство. Если говорить, например, о профессиональной деятельности, то знание C++ сейчас требуется только для сопровождения старых программ и кучи чужого кода. Новые программы на нём пишут мало. По крайней мере в сфере коммерческого ПО.

// Я говорю много тут, но на самом деле я совершенно не имею отношения к программированию в своей профессиональной деятельности. Максимум это простые скрипты иногда. Программирование для меня всего лишь хобби.



Re: Освоение программирования : 15/05/18 04:24 : Andrew Lobanov to Anotheroneuser [#] [reply]

>>  Это должно научить некоторым базовым вещам
Anotheroneuser> А могу я некоторые базовые вещи освоить просто в теории? Или обязательно надо сразу где-то закреплять их на практике?

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

>>  Awesome WM
Anotheroneuser> На некоторых снимках выглядит обалденно. Только у меня не настолько глубокое знание Linux на данный момент. Уже несколько лет работаю в Mint. Но надо что-то менять — согласен. Попробую..

А вот тут моё мнение диаметрально противоположное, если честно. Использовать лучше то, к чему привык. Конечно, любопытство в своё время заставило меня попробовать так называемые тайловые оконные менеджеры, да так на них и остался по сей день, но Awesome достаточно сложен в настройке, если именно осмысленно писать ему конфиг и аплеты, и его изучение требует времени и сил.



Re: Освоение программирования : 15/05/18 04:24 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Это позволит сэкономить массу сил. По-крайней мере, сейчас, когда их действительно есть куда девать. Как ты понимаешь, до меня практически не доходят характеристики языков программирования. Я просто не понимаю, что значит «монструозный-компактный» или «простой-сложный».

Да оно тебе особо и не нужно. Просто есть языки с кучей конструкций и концепций, которые нужно знать. Теоретически на них проще писать, ведь на каждый чих у тебя есть в языке что-нибудь. А есть языки с необходимым минимумом. В них тебе многое придётся делать чуть сложнее, но зато там мало всего и писать/читать код будет существенно проще. Это, конечно, моё мнение как любителя, но для себя я вывел такую штуку.

Anotheroneuser> С моей точки зрения на данный момент, язык — некий набор инструментов, с помощью которого мне предстоит оживить сценарий игры. Как это будет в натуре, пока даже не представляю. Ну main3.lua понять могу. И приблизительно представляю себе, что движок будет воспроизводить то, что предусмотрено алгоритмом, который ему напишешь в main3.lua. Наверное, в main3.lua же будут содержаться ссылки на звуковые- видео- фото- и прочие материалы, которые необходимо разместить в каталоге игры (это, кстати, отлично).

Instead предоставляет кучу удобных штук для программирования игр. Причём по большей части для написания игры уровня квантового кота (эталон да =) можно прочесть только документацию к движку и изучить код какой-нибудь простой игры. Тут я только о своих играх могу судить, так как в чужой код лажу редко, если это не код stead. Правда сейчас есть смысл опираться только на новое ядро, так что даже и не знаю в какую игру посоветовать заглянуть.

Anotheroneuser> Но читать код... пока не понимаю. Изучаю пособие. Слава Богу, кстати, что не придётся пока учить С++ )) Наверное, на это уйдут годы

Ну с инстедом всё просто на самом деле. Есть в РИЛ-сообществе мнение, что инсед сложный, но на самом деле это не так. Инстед против FireURQ, ИМХО, примерно как go против python. То есть писать на питоне, может, ипроще новичку, но go проще устроен с точки зрения синтаксиса и структуры языка. Инстед это простой инструмент, но не с самым низким порогом вхождения. Но это так. Растекаюсь мыслью по байтам =)

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

По секрету скажу, что я до сих пор не знаю lua, так как не прочёл ни одного учебника по этому языку. Просто я изучал чужие игры и экспериментировал =)



Re: Освоение программирования : 14/05/18 18:52 : Anotheroneuser to Andrew Lobanov [#] [reply]

Я о Моженкове особо ничего не знаю, если честно. ПРосто его видеодневник попался мне в Youtube и показался нормальным. Он там старается аккуратно советовать, так что, может я что-то не так понял: если разбираться, то придётся лезть в вашу профессию, а я не могу по причине полного отсутствия представления о ней )

> На самом деле, выражать свои мысли в коде проще, когда имеешь простой инструмент. lua достаточно компактный язык
Эта мысль меня вполне удовлетворяет.



Re: Освоение программирования : 14/05/18 18:49 : Anotheroneuser to vit01 [#] [reply]

> Это должно научить некоторым базовым вещам
А могу я некоторые базовые вещи освоить просто в теории? Или обязательно надо сразу где-то закреплять их на практике?

> сразу "потрогать" результат своего труда
Да. Именно так. Есть запас сил и не хотелось бы перерасходовать его. Хотелось бы составить алгоритм и посмотреть, как он будет исполняться. Короче, Lua так Lua.

> Awesome WM
На некоторых снимках выглядит обалденно. Только у меня не настолько глубокое знание Linux на данный момент. Уже несколько лет работаю в Mint. Но надо что-то менять — согласен. Попробую..



Re: Освоение программирования : 14/05/18 18:03 : Anotheroneuser to Andrew Lobanov [#] [reply]

Это позволит сэкономить массу сил. По-крайней мере, сейчас, когда их действительно есть куда девать. Как ты понимаешь, до меня практически не доходят характеристики языков программирования. Я просто не понимаю, что значит «монструозный-компактный» или «простой-сложный».

С моей точки зрения на данный момент, язык — некий набор инструментов, с помощью которого мне предстоит оживить сценарий игры. Как это будет в натуре, пока даже не представляю. Ну main3.lua понять могу. И приблизительно представляю себе, что движок будет воспроизводить то, что предусмотрено алгоритмом, который ему напишешь в main3.lua. Наверное, в main3.lua же будут содержаться ссылки на звуковые- видео- фото- и прочие материалы, которые необходимо разместить в каталоге игры (это, кстати, отлично).

Но читать код... пока не понимаю. Изучаю пособие. Слава Богу, кстати, что не придётся пока учить С++ )) Наверное, на это уйдут годы



Re: Освоение программирования : 14/05/18 17:36 : Anotheroneuser to Peter [#] [reply]

*С восхищением* Обалдеть..
У тебя прямо врождённая склонность есть к программированию.
Вспоминаю, как в школе уравнения решал — жуть берёт ) Тёмный лес со зверями. Еле-еле что-то укладывалось. А информатики у нас вообще не было, гуманитарный же уклон. Вот по этому уклону и пришлось катиться всю дорогу ))

Но Бейсик мне запомнился. И «Лабиринт колдуна».



Re: Освоение программирования : 14/05/18 16:57 : Andrew Lobanov to Peter [#] [reply]

Peter> Сугубо для оживления беседы. :) У меня был примерно такой путь:

Довольно увлекательный, надо сказать, путь =)

Peter> 15) Написал INSTEAD. Понравился Lua, появился инстерес к высокоуровневым языкам. Так что теперь с удовольствием применяю то, что попадется под руку.

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

Peter> 16) Работы менялись, но C остался =)

И это не просто так. До сих пор считаю его очень крутым инженерным языком. Конечно, писать прикладной софт на нём нынче не очень удобно, КМК, но системные вещи сам Пат велел =)



Re: Освоение программирования : 14/05/18 16:57 : Andrew Lobanov to vit01 [#] [reply]

>>> Переходи сразу к lua
Anotheroneuser>> Привлекательная мысль, благодарю. И очень сэкономит время.
vit01> То, что для "настоящего" обучения программированию советуют C++, на самом деле не лишено смысла. Это должно научить некоторым базовым вещам, да и строгая типизация дисциплинирует.

ИМХО, а я не настоящий сварщик, делать первые шаги с C++ имеет смысл только если под рукой есть гуру, который всегда придёт на помощь. Причём именно гуру, а не преподаватель.

vit01> На мой взгляд, самое важное в обучении программированию - это иметь возможность сразу "потрогать" результат своего труда. А если твоя краткосрочная цель есть написание игрушек на Инстеде, то Lua - это точное попадание. Так у тебя будет мотивация улучшать свои навыки, и, натренировавшись, можно будет углубляться, переходить от простого к сложному. К тем же плюсам, например.

Да, собственно, до долгой сборки проектов на том же C++ ещё дожить надо. Так что потрогать на первых порах получится сразу практически с любым компилятором.



Re: Освоение программирования : 14/05/18 16:57 : Andrew Lobanov to Anotheroneuser [#] [reply]

>>  Не знаю почему тебе советовали начинать с С++
Anotheroneuser> Программу обучения составляю спешно, ориентируясь на мнение таких людей, как ты, Андрей, Пётр — специалистов.
Anotheroneuser> Начинать с С++ рекомендует В.Моженков в своём видеожурнале https://www.youtube.com/playlist?list=PLY7PmJJFH5nS_QOUktkW_eJikn41A819x
Anotheroneuser> Он говорит, что начинать изучение программирования с какого-нибудь вспомогательного (возможно, я не точно воспроизвожу его слова) языка приведёт к тому, что впоследствии придётся осваивать основной язык как бы заново. Может быть, меня попросту переклинило в анализе этой теории применительно к изучению Lua по отношению к C++... А, может, Моженков говорил это не для всех, а лишь для тех, кто планирует капитально связать свою жизнь с программированием и заниматься им профессионально? У меня-то нет такой цели.

Если честно, по ссылке я не сходил, но сильно не согласен с В. Моженковым по той простой причине, что в современном мире именно C++ требуется разве что для поддержки legacy-кода. Для системщиков он так и остался слишком монструзным, хотя кто-то что-то и пишет на нём, а для прикладного ПО появились более классные языки. Причём если говорить именно о прикладном ПО, то опускаться до низкого уровня нынче нет никакого смысла, так как большинство потребностей программиста, особенно если он пишет для себя, с лихвой покроют те же python или go.

>>  Переходи сразу к lua
Anotheroneuser> Привлекательная мысль, благодарю. И очень сэкономит время.

На самом деле, выражать свои мысли в коде проще, когда имеешь простой инструмент. lua достаточно компактный язык. При этом не требует больших знаний и уж тем более, знания C++.

// Может, я предвзят, но С++ не самый удачный язык в принципе. Не самый и плохой, но уж учиться программировать с него это как-то слишком.



Re: Освоение программирования : 14/05/18 15:10 : vit01 to Anotheroneuser [#] [reply]

>> Переходи сразу к lua
Anotheroneuser> Привлекательная мысль, благодарю. И очень сэкономит время.

То, что для "настоящего" обучения программированию советуют C++, на самом деле не лишено смысла. Это должно научить некоторым базовым вещам, да и строгая типизация дисциплинирует.

Но всё-таки соглашусь с остальными товарищами и посоветую начать с Lua.

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

// python тоже очень крут в плане низкого порога вхождения и неплохо оптимизирует рутину

P.S. Когда начнёшь изучать Lua, попробуй установить Awesome WM. Будешь изучать язык и одновременно тюнинговать свой рабочий стол =)



Re: Освоение программирования : 14/05/18 15:19 : Peter to Anotheroneuser [#] [reply]

Сугубо для оживления беседы. :) У меня был примерно такой путь:

1) БК0010-01 играл в игры
2) Написал программу для решения квадратных уравнений на Фокале (и тут настал катарсис!)
3) Начал писать игры на Фокале (без знаний вообще)
4) Начал писать игры на Бейсике (без знаний вообще)
5) Начал дизассемблировать код и не понимая что он делает вставлять в свой код игр на Бейсеке :) Обычно для звука и графики
6) В школе появилась информатика но там были блок-схемы. Ничему не научился =)
7) Появилась машина на процессоре 8086 (без винчестера, конечно). Начал писать на gwbasic
8) Начал читать литературу по ассемблеру и писать код прямо в debug.com и отлаживать/менять чужие игры. Уровни к sopwith, музыка в арканоиде итд.
9) Кто то дал C компилятор. Начал пытаться писать на C
10) В итоге, стал более менее писать на ассемблере и С. Конечно, гл образом игры =)
11) В институте уже только C и ASM + Паскаль как предмет
12) Усторился на работу где надо было дизассемблировать ядро Windows NT
13) Устроился на работу где надо было дизассемблировать ядро Windows NT + писать драйверы на c++
14) Устроился на работу где делать примерно то же самое, но для Linux :)
15) Написал INSTEAD. Понравился Lua, появился инстерес к высокоуровневым языкам. Так что теперь с удовольствием применяю то, что попадется под руку.
16) Работы менялись, но C остался =)



Re: Освоение программирования : 14/05/18 13:50 : Anotheroneuser to Andrew Lobanov [#] [reply]

Надо подумать... Благодарю за советы
Кстати, сам Иерусалимски, в ответ на претензии одного из читателей его книги в последней редакции, ответил следующее: «The book is not addressed to newbie programmers, and its description clearly says that: "Programming in Lua is targeted at people with some programming background". It also says that "[it] does not assume any prior knowledge about Lua", and I stand by it, as long as the reader has some programming experience.»
Это есть на Amazon.

Я не просто «newbie» а «damn newbie man-who-seek-the-way-to-become-a-programmer» )))



Re: Освоение программирования : 14/05/18 13:42 : Anotheroneuser to btimofeev [#] [reply]

> Не знаю почему тебе советовали начинать с С++
Программу обучения составляю спешно, ориентируясь на мнение таких людей, как ты, Андрей, Пётр — специалистов.
Начинать с С++ рекомендует В.Моженков в своём видеожурнале https://www.youtube.com/playlist?list=PLY7PmJJFH5nS_QOUktkW_eJikn41A819x
Он говорит, что начинать изучение программирования с какого-нибудь вспомогательного (возможно, я не точно воспроизвожу его слова) языка приведёт к тому, что впоследствии придётся осваивать основной язык как бы заново. Может быть, меня попросту переклинило в анализе этой теории применительно к изучению Lua по отношению к C++... А, может, Моженков говорил это не для всех, а лишь для тех, кто планирует капитально связать свою жизнь с программированием и заниматься им профессионально? У меня-то нет такой цели.

> Переходи сразу к lua
Привлекательная мысль, благодарю. И очень сэкономит время.



Re: Освоение программирования : 14/05/18 12:51 : btimofeev to Anotheroneuser [#] [reply]

Anotheroneuser> С++
Anotheroneuser> Б. Страуструп - Принципы и практика с использованием C++
Anotheroneuser> Меня берут глубочайшие сомнения, что мозг не закипит уже после пятнадцатой минуты обучения.

Не знаю почему тебе советовали начинать с С++, но если ты никогда раньше не программировал, то, имхо, лучше с него не начинать (а уж тем более с книги Страуструпа). Переходи сразу к lua, как посоветовал Андрей. Или можно начать с Python'а или Go, например. C++ выучишь когда-нибудь потом.



Re: Освоение программирования : 14/05/18 12:16 : Andrew Lobanov to Anotheroneuser [#] [reply]

>>  Посоветуешь что-нибудь толковое по алгоритмизации. Я искал, но попадалось либо очень сложное, либо малоизвестное. А ты, наверняка, знаешь что-нибудь толковое.
Anotheroneuser> После «алгоритмизации» знак вопроса, конечно же))) Прошу прощения — спешил и спотыкался )

К сожалению, ничего не подскажу по этому вопросу. Сам учился по учебникам бейика и паскаля. Потом долго вытравливал их из себя =)

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

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

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

Лично я бы начал как раз с чего попроще. То есть с lua, так как он проще C++ и является целью. В books.tech (спрашивайте у оператора вашего уза =) лежит Иерусалимски на русском языке. Очень хороший учебник.

// Книжку могу скинуть более дургим способом, но для этого лучше написать мне на почту spline at rooker dot ru.



Re: Освоение программирования : 14/05/18 11:42 : Anotheroneuser to Anotheroneuser [#] [reply]

> Посоветуешь что-нибудь толковое по алгоритмизации. Я искал, но попадалось либо очень сложное, либо малоизвестное. А ты, наверняка, знаешь что-нибудь толковое.
После «алгоритмизации» знак вопроса, конечно же))) Прошу прощения — спешил и спотыкался )



Re: Освоение программирования : 14/05/18 11:38 : Anotheroneuser to Andrew Lobanov [#] [reply]

Не знаю, как тут ответить и тебе и Петру сразу, так что отвечаю так.

> А где посмотреть то?

Вот сама учебная программа:

====
---------------
Начало освоения
---------------

С++
Б. Страуструп - Принципы и практика с использованием C++
К этому меня привели рассуждения Владимира Моженкова <https://www.youtube.com/user/VladimirMozhenkov/about>
Он рекомендовал начинать изучение программирования с C++.
Меня берут глубочайшие сомнения, что мозг не закипит уже после пятнадцатой минуты обучения.

------------------------------------------
Продолжение изучения и начало деятельности
------------------------------------------

Lua
Lua 5.3 Руководство - http://lua.org.ru/contents_ru.html
C++ сам по себе мне необходим для изучения Lua, а Lua — для разработки игр.
Всё-таки, хочется освоить язык. Подойти к этому если не профессионально, то сколь-нибудь специально.
Как думаете — не слишком ли? Может быть, не пыжиться, а просто освоить движок и дело с концом..

-----------------------
Облегчение деятельности
-----------------------

Emacs LISP
Emacs Lisp https://www.gnu.org/software/emacs/manual/html_node/elisp/index.html
Он необходим для нормального использования EMACS, который, как мне показалось, весьма подходит для организации информации.
О цели такой организации уже говорили здесь. Есть определённая система обращения с информацией, которая требует наличия стационарной и переносной машин (в качестве переносной машины пока будет выступать onyx-boox darwin 5, когда удастся его приобрести на средства, вырученные от продажи другого их устройства, которое не подошло по ряду интересных причин, подробности — по интересу).

LaTeX
Documentation https://www.latex-project.org/help/documentation/
Необходим для облегчения работы с процессуальными документами. Хочется забыть о текстовых процессорах и, как говорят разработчики LaTeX: «… it is better to leave document design to document designers, and to let authors get on with writing documents».
Не знаю насколько верным будет такое решение с точки зрения практики, поскольку на данный момент не сверстал в LaTeX ни одного документа.
====



> Важнее учиться алгоритмизации, а потом уже учить те или иные языки
Посоветуешь что-нибудь толковое по алгоритмизации. Я искал, но попадалось либо очень сложное, либо малоизвестное. А ты, наверняка, знаешь что-нибудь толковое.

Ну и всё.
Сам вот самоучка. Поэтому, как самоучка — самоучкам ))



Re: Освоение программирования : 14/05/18 09:03 : Andrew Lobanov to Anotheroneuser [#] [reply]

Anotheroneuser> Парни, набросал тут себе небольшую программу по освоению языков. Но, конечно, сомневаюсь в том, правильна ли последовательность и т.д. Можно вас попросить — посмотреть, исправить и рекомендовать мне что-нибудь? Там не очень много.

А где посмотреть то?

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



Re: Освоение программирования : 14/05/18 07:05 : Peter to Anotheroneuser [#] [reply]

> Но, конечно, сомневаюсь в том, правильна ли последовательность и т.д.

Я самоучка. Так что вообще боюсь что то советовать. Я просто делал то, что было интересно и все. Кмк основная движущая сила -- любопытство.



Освоение программирования : 14/05/18 06:13 : Anotheroneuser to All [#] [reply]

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



Re: TopicID на dynamic: вытаскиваем тред целиком : 08/01/18 11:43 : Difrex(mobile) to Difrex(mobile) [#] [reply]

Так, я начинаю индексирование всего. Теперь у почти каждого сообщения должен появиться topicid.
Те сообщения, для которых по каким-то причинам не найдено старового сообщения, получают тег "misplaced": "yes".



Re: TopicID на dynamic: вытаскиваем тред целиком : 05/01/18 09:08 : Difrex(mobile) to vit01 [#] [reply]

>> // Народ, а каких бы еще фич хотелось бы вам?
>1. Хотелось бы добавить в FAQ описание, как пользоваться тредами и навигацией туда-сюда-обратно по msgid, сабжам, поинтам
Будет отдельная от фака дока.

>2. Нужен парсинг цитат, комментариев и прочей разметки. И выделение цветом. А то читать просто так крайне неудобно
Есть в TODO.

>3. API для экспорта текущей ленты в формат RSS.
Интересное предложение, посмотрю, что можно придумать

>4. При доступе через клиент, когда скачиваешь сообщение, отсутствует тег ii/ok. Это баг
Я удивлен, что оно вообще работает =)

Да, кстати, я был бы очень признателен, если бы хотелки и баги формировались, как таск.

* По вебу тут https://gitea.difrex.ru/lapus/dynamic/issues
* По ноде тут https://gitea.difrex.ru/Umbrella/lessmore
* По индексу тут https://gitea.difrex.ru/Umbrella/fetcher

Если удобней на гитхабе, то могу синкать актуальные изменения и туда :)



Re: TopicID на dynamic: вытаскиваем тред целиком : 05/01/18 08:53 : vit01 to Difrex(mobile) [#] [reply]

> // Народ, а каких бы еще фич хотелось бы вам?

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

2. Нужен парсинг цитат, комментариев и прочей разметки. И выделение цветом. А то читать просто так крайне неудобно

3. API для экспорта текущей ленты в формат RSS.

4. При доступе через клиент, когда скачиваешь сообщение, отсутствует тег ii/ok. Это баг



TopicID на dynamic: вытаскиваем тред целиком : 05/01/18 08:02 : Difrex(mobile) to All [#] [reply]

Я тут ковыряя тредовый режим для dynamic'а понял, что проще добавить фичу в бэкенд,
чем разгребать свой говнокод на JS.

Так вот суть: в индексе каждому сообщению присваивается topicid в формате UUID(RFC 4122).
Зная topicid мы можем выбрать целиком тред с нужной нам сортировкой.

Чтобы вытащить тред по интересующему сообщению(мы знаем msgid) нам нужно будет сделать 2 запроса:
* Первый - узнаем topicid из сообщения
* Второй - вытягиваем ветку

Здесь и далее запросы в json отправляются методом POST на https://dynamic.lessmore.pw/search2.

Узнаем topicid

====
{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"query_string": {
"fields": [
"msgid"
],
"query": "apfIchd9i8HMMc5DKJNI"
}
},
"size": 1
}
====



В ответ нам вернется документ сообщения

====
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "idec5",
"_type": "post",
"_id": "apfIchd9i8HMMc5DKJNI",
"_score": 9.252761,
"_source": {
...
"topicid": "fcb208f7-c947-42bc-a037-73d63b137913"
},
"sort": [
1514976123000,
9.252761
]
}
]
}
}
====



Теперь зная topicid можно вытянуть весь тред с сортировкой от старых к новым(или наоборот).

Модифицируем первый запрос

====
{
"sort": [
{
"date": {
"order": "asc"
}
},
{
"_score": {
"order": "asc"
}
}
],
"query": {
"query_string": {
"fields": [
"topicid"
],
"query": "fcb208f7-c947-42bc-a037-73d63b137913"
}
},
"size": 100
}
====



Ответом будет список с документами ветки отсортированный по дате от старых сообщений к новым.

Новый поиск будет доступен тут https://dynamic.lessmore.pw/search2 в ближайшее время, и нидекс будет наполняться совсем неторопливо.
После полного реиндекса поиск будет объявлен стабильным и доступен по https://dynamic.lessmore.pw/search.
Так же фетчер, маппинг, веб будут документированы и снабжаться инструкцией по развертке.

// Народ, а каких бы еще фич хотелось бы вам?



Re: API поиска на dynamic.lessmore.pw : 12/12/17 09:24 : Difrex(mobile) to Difrex(mobile) [#] [reply]

Фикс для запроса эхи. Правильный запрос будет выглядеть так

====
{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"query_string": {
"fields": [
"echo"
],
"query": "idec.talks"
}
},
"size": 5
}
====




API поиска на dynamic.lessmore.pw : 12/12/17 07:22 : Difrex(mobile) to All [#] [reply]

== Поиск на dynamic.lessmore.pw

Как это ваще устроено??? На самом деле [API](https://dynamic.lessmore.pw/search) -- это открытый всем Elasticsearch, который предоставляет
гору возможностей для поиска за счет движка Lucene. Давайте что-нибудь найдем!

Вот в [этом](ii://XWShDDcuR4C8PcrTFdGl[*][*]) вот комменте я пообещал рассказать как это все сделать. Приступим.

Давайте для начала попробуем поискать этот самый коммент(XWShDDcuR4C8PcrTFdGl). Здесь и далее мы будем использовать только
*curl*.

====
curl -XPOST -d '{"query": {"query_string" : {"fields" : ["msgid"], "query" :"XWShDDcuR4C8PcrTFdGl"}}}' https://dynamic.lessmore.pw/search
====



Нам вернется такой вот ответ

====
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 8.316952,
"hits": [
{
"_index": "idec_net",
"_type": "post",
"_id": "XWShDDcuR4C8PcrTFdGl",
"_score": 8.316952,
"_source": {
"echo": "idec.talks",
"subg": "Re: Совет нодов",
"to": "Peter",
"author": "Difrex(mobile)",
"message": "\nПостараюсь завтра написать пост с обзором в ii://develop.16. Ну, и ссылку в этот тред скину.",
"date": "1513020107",
"msgid": "XWShDDcuR4C8PcrTFdGl",
"tags": "",
"repto": "h97Frgqdtapl4AI11aUj",
"address": "tavern,23"
}
}
]
}
}
====


Вот и он!

Нам вернулось одно сообщение, что не удивительно, т.к. ID в сети уникальны, а мы искали именно по нему.

А теперь давайте выведем все последние(5) сообщения(по дате) из эхи *idec.talks*:

====
curl -XPOST -d '{"sort": [{"date": {"order": "desc"}}, {"_score": {"order": "desc" }}], "size": 5}' https://dynamic.lessmore.pw/search -H 'Content-type: application/json'
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
}
...
====



Смотрите, тут мы отсортировали(на стороне сервера) сообщения по дате в порядке убывания и ограничили лимит в 5 сообщений.
Попробуйте перевести это на SQL(====select * from idec.talks order by date desc limit 5====).

А теперь выполним более сложный поиск: мы найдем сообщения по строке! Т.е. выполним полнотекстовый поиск!

Запрос будет выглядеть так:

====
{
"sort": [
{
"date": {
"order": "desc"
}
},
{
"_score": {
"order": "desc"
}
}
],
"query": {
"simple_query_string": {
"query": "обзор"
}
},
"size": 5
}
====


Отправляем его POST-ом в https://dynamic.lessmore.pw/search.

В ответ нам на это вернется список из 5 сообщений отсортированных по дате, где найдены вхождения слова "обзор".
Кстати, верхнее сообщение(b2rhH6sOfzEzgGZzLT51(на данный момент)) из эхи habra.16 и с заголовком
"Обзор литературы по языку Python для начинающих".

Вот так вот. Чтобы делать более лучшие вещи читайте документацию(query DSL) по Elasticsearch.

// Да, если вашей эхи нет в индексе, то убедитесь, что она есть в list.txt



Re: Очарован GO : 11/12/17 04:38 : Andrew Lobanov to Peter [#] [reply]

Peter> P.S. Кто еще заценил эту штуку? :)

Язык и правда замечательный. Меня очень радует что во время засилия раздутых языков с тоннами синтаксического сахара и развесистым синтаксисом сравнительно недавно появился такой замечательный язык. Конечно, результат не очень быстрый на фоне C и многих других компилируемых языков, но это окупается удобством разработки и куда большей производительностью в сравнении с популярными интерпретируемыми языками.

Да. Маскот крайне классный ещё. Согласен.



Re: Очарован GO : 10/12/17 17:32 : Difrex(mobile) to Peter [#] [reply]

Я пишу на Go. Он классный :)



Очарован GO : 09/12/17 19:14 : Peter to All [#] [reply]

Начал изучать go. И должен сказать, я очарован:

1) простотой синтаксиса (такой же простой, как в C);
2) простотой кросс-компиляции для разных платформ (без мороки с кросс средами);
3) дает плюшки скриптовых языков и вместе с тем это КОМПИЛЯТОР!
4) классный талисман =)

Сейчас мне кажется, что это может стать моим рабочим инструментом, помимо C и Lua.

Буду изучать дальше!

P.S. Кто еще заценил эту штуку? :)



Фреймворки жабаскрипта : 05/12/17 12:40 : Difrex(mobile) to All [#] [reply]

А какие сейчас актуальные есть?
Чтобы просто было, без компилятора, бовера бандлеа и прочих штук.

Пока склоняюсь к vue.js, но прислушаюсь к советам.



Re: Нужна помощь по программированию под емакс : 04/10/17 08:32 : Difrex to Andrew Lobanov [#] [reply]

Как-то так:

====
(setq new-messages-list (make-hash-table :test 'equal))
(dolist (m my-list)
...
(puthash msg message-content new-messages-list)
)

(maphash (lambda (id msg)
(message (concat "Get " id "\n" msg))
new-messages-list)
====



Тут инициализируется хэш
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L315

Тут заполняется
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L417

Тут выводится
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L369



Re: Нужна помощь по программированию под емакс : 04/10/17 05:13 : Andrew Lobanov to Difrex(mobile) [#] [reply]

Difrex(mobile)> Переделал на хэшики - все работает =)

Можешь накидать примерчик? Интересно а то.



Re: Нужна помощь по программированию под емакс : 04/10/17 05:13 : Andrew Lobanov to Difrex(mobile) [#] [reply]

Difrex(mobile)> А ты не мог бы подсказать как мне сделать такую штуку, как список из ассоциативных массивов.
Difrex(mobile)> Делаю сейчас так:
Difrex(mobile)> ====
Difrex(mobile)> (setq new-messages-list (-concat 'new-messages-list '((content . message-content) (id . msg))))
Difrex(mobile)> ====
Difrex(mobile)> Потом пытаюсь пройтись по этому списку:
Difrex(mobile)> ====
Difrex(mobile)> (dolist (msg new-messages-list)
Difrex(mobile)> (message (assoc 'id msg)))
Difrex(mobile)> ====
Difrex(mobile)> Но не работает. Ругается так: Wrong type argument: listp

Вот я не помню как в emacs lisp работают property lists. Я делал простой список списков со структурой ((msgid body) (msgid body)) и обкодил список, обращаясь к элементам посредством (first...) и (second...). Решение кривое, но рабочее и с учётом статичности структуры данных, в целом, приемлемое.



Re: Нужна помощь по программированию под емакс : 03/10/17 21:41 : Difrex(mobile) to Difrex(mobile) [#] [reply]

Переделал на хэшики - все работает =)



Re: Нужна помощь по программированию под емакс : 03/10/17 20:37 : Difrex(mobile) to Andrew Lobanov [#] [reply]

А ты не мог бы подсказать как мне сделать такую штуку, как список из ассоциативных массивов.

Делаю сейчас так:

====
(setq new-messages-list (-concat 'new-messages-list '((content . message-content) (id . msg))))
====



Потом пытаюсь пройтись по этому списку:

====
(dolist (msg new-messages-list)
(message (assoc 'id msg)))
====



Но не работает. Ругается так: Wrong type argument: listp



Re: Нужна помощь по программированию под емакс : 28/09/17 15:03 : Andrew Lobanov to Difrex [#] [reply]

Difrex> В общем начал я пилить клиента под емакс. Пока удалось сделать только получение списка эх. Но думаю потом дело пойдет быстрее.
Difrex> Если кто готов присоедениться - велком https://gitea.difrex.ru/Difrex/idec.el

О! Крутота. Я неоднократно начинал, но забрасывал. А я go осваиваю потихоньку =)



Re: Нужна помощь по программированию под емакс : 28/09/17 14:16 : Difrex to Difrex [#] [reply]

В общем начал я пилить клиента под емакс. Пока удалось сделать только получение списка эх. Но думаю потом дело пойдет быстрее.

Если кто готов присоедениться - велком https://gitea.difrex.ru/Difrex/idec.el



Re: Нужна помощь по программированию под емакс : 28/09/17 11:00 : Difrex to Andrew Lobanov [#] [reply]

>Если имеется в виду интерактивный вызов, то надо использовать специальную форму (interactive &optional ARG-DESCRIPTOR). Подробнее можно прочитать во встроенной справке "C-h f interactive RET".
Спасибо! То, что нужно.

>;;; Йу-ху! С каждым днём имаксеров становится всё больше =)
Да я уже года полтора, как емаксом пользуюсь, просто не писал под него =)



Re: Нужна помощь по программированию под емакс : 28/09/17 10:06 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Привет.
Difrex> Вот я пишу программку, хочу опакетить ее. Делаю в конце
Difrex> (provide 'my-prog)
Difrex> В емаксе добавляю каталог в load-path, делаю require. Вопрос: как достучатьс до функций из пакета?

Не очень понял что значит "достучаться". Если вызывать их из других программ, то они сразу доступны по имени. Если имеется в виду интерактивный вызов, то надо использовать специальную форму (interactive &optional ARG-DESCRIPTOR). Подробнее можно прочитать во встроенной справке "C-h f interactive RET".

;;; Йу-ху! С каждым днём имаксеров становится всё больше =)



Нужна помощь по программированию под емакс : 28/09/17 09:08 : Difrex to All [#] [reply]

Привет.

Вот я пишу программку, хочу опакетить ее. Делаю в конце

(provide 'my-prog)

В емаксе добавляю каталог в load-path, делаю require. Вопрос: как достучатьс до функций из пакета?



Re: Вопрос по golang : 17/09/17 07:59 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Чтобы считать из файла структура и поля у нее должны быть экспортированы https://blog.golang.org/gobs-of-data

Да. Дело оказалось именно в этом. Спасибо за помощь.



Re: Вопрос по golang : 16/09/17 20:25 : Difrex to Andrew Lobanov [#] [reply]

Вот так вот работает все

====
package main

import (
"encoding/gob"
"fmt"
"os"
)

type Count struct {
Echo string
Count int
}

func main() {
d := []Count{{"eee", 1}}
f, _ := os.Create("slice")
enc := gob.NewEncoder(f)
enc.Encode(d)
f.Close()

var c []Count
s, _ := os.Open("slice")
dec := gob.NewDecoder(s)
dec.Decode(&c)
defer s.Close()
fmt.Println(c)
}
====



====
go build
./test
[{eee 1}]

====




Re: Вопрос по golang : 16/09/17 20:27 : Difrex to Difrex [#] [reply]

Чтобы считать из файла структура и поля у нее должны быть экспортированы https://blog.golang.org/gobs-of-data



Re: Вопрос по golang : 16/09/17 17:10 : Difrex(mobile) to Andrew Lobanov [#] [reply]

Тут пешочком не прогуляться. Мне от дома до дома родителей час на машине ехать. Вот еду обратно в метро. Метро быстро!



Re: Вопрос по golang : 16/09/17 14:12 : Andrew Lobanov to Difrex(mobile) [#] [reply]

Difrex(mobile)> А какая версия го?

1.9

Difrex(mobile)> Вечером попробую у себя воспроизвести.

Буду признателен.

Difrex(mobile)> ЗЫ: приехал в Москву. Отвык я уже от метро.

А я ни разу на метро не ездил. В Екатеринбурге, когда ездил на курсы по MS SQL Server, на нём можно было доехать от вокзала до гостинницы и обратно, но я предпочёл лишний ачсок пешком прогуляться.



Re: Вопрос по golang : 16/09/17 11:50 : Difrex(mobile) to Andrew Lobanov [#] [reply]

А какая версия го?

Вечером попробую у себя воспроизвести.

ЗЫ: приехал в Москву. Отвык я уже от метро 😀



Re: Вопрос по golang : 16/09/17 11:33 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Ну и ошибку лучше обрабатывать все же.

Это тестовый пример. В ошибку попадает EOF, так что заведомо всё нормально. Вот поему слайс пустой я не пойму.



Re: Вопрос по golang : 16/09/17 11:33 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Тут ссылку нужно передать
Difrex> _ = encoder.Decode(&d)

Да. Я там нагуглил потом. Но один фиг пустой слайс на выходе.



Re: Вопрос по golang : 16/09/17 11:33 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Потом маршаль его и пиши в файл json. После считывания анмаршал делай.

json у меня как крайний вариант.



Re: Вопрос по golang : 15/09/17 14:55 : Difrex to Difrex [#] [reply]

Ну и ошибку лучше обрабатывать все же.



Re: Вопрос по golang : 15/09/17 13:04 : Difrex to Andrew Lobanov [#] [reply]

Тут ссылку нужно передать
_ = encoder.Decode(&d)



Re: Вопрос по golang : 15/09/17 12:53 : Difrex to Andrew Lobanov [#] [reply]

Сделай так

====
type count struct {
echo string `json:"echo"`
count int `json:"count"`
}
====



Потом маршаль его и пиши в файл json. После считывания анмаршал делай.

====
var c []count
err := json.Unmarshal(data, &c)
====




Re: Вопрос по golang : 15/09/17 13:05 : Difrex to Difrex [#] [reply]

Не прочитал код сначала =)

Игнорируй пост про жсон



Вопрос по golang : 15/09/17 08:49 : Andrew Lobanov to All [#] [reply]

Есть затея сохранять слайс из структур в файл:

====
package main

import (
"encoding/gob"
"os"
"fmt"
)

type count struct {
echo string
count int
}

func main() {
d := []count{{"bash.rss", 100}, {"pipe.2032", 200}}
fmt.Println(d)
f, _ := os.Create("slice")
encoder := gob.NewEncoder(f)
encoder.Encode(d)
f.Close()
}
====



Файл вполне себе создаётся.

А вот считать из этого файла у меня не выходит:

====
package main

import (
"os"
"encoding/gob"
"fmt"
)

type count struct {
echo string
count int
}

func main() {
d := []count{}
f, _ := os.Open("slice")
encoder := gob.NewDecoder(f)
_ = encoder.Decode(d)
fmt.Println(d)
f.Close()
}
====



В итоге в d после декодирования вижу пустой слайс. Что я делаю не так?



[DIY] Как банка тушёнки улучшит жизнь в Vim & Emacs : 16/07/17 08:21 : vit01 to All [#] [reply]

Прочитав статью на Хабре про педалирование Vim ( https://habrahabr.ru/post/232177 ), я загорелся идеей сделать себе самодельную педальку для текстовых редакторов.
Как из того анекдота про педаль для Emacs, чтобы Ctrl зажимать, только уже не как анекдот, а на самом деле.

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

Внимание, даже если у вас нет Arduino, то всё равно дочитайте статью, там будет кое-что интересное про Linux!

Итак, если у нас будет педаль, то надо же куда-то ногой нажимать, верно? Съев на даче тушёнку, я не поспешил выбрасывать банку из-под неё, а вымыл и унёс домой.

Фотка 1: https://alicorn.tk/dashie/index.php/s/cIjtxJbHZJnNFbz

Затем выбил у банки дно, распрямил развёртку плоскогубцами и загнул острые края, чтобы не поранить ногу. Получилась довольно широкая поверхность, на которую можно нажимать.

Фотка 2: https://alicorn.tk/dashie/index.php/s/LRPbdF5O9DBL535

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

Самый первый вариант крепления: фотка 3: https://alicorn.tk/dashie/index.php/s/SA4jEyiOgFwEvWX

Учитель трудов в школе за такую халтуру поставил бы 2 или заставил бы переделывать (потому что на месте креплений внизу планка скололась; делалось всё криво, на глазок, и ничего не отшлифовано), но работать оно работает. Тем более, переделывать мне больше не на чем, т.к. дома и так хорошего дерева в дефиците.

Самая маленькая (и длинная) деревяшка крепится к жестяной пластине с помощью рыболовной лески, продетой в сквозные отверстия и завязанной в узел. К вертикальным перегородкам она приделана с помощью клея "Момент" в специально выточенную пазуху.

Сверху леска проходит ненадёжно, так что груз-противовес срывается, если резко дёрнуть педаль. Но ничего, не проблема, делаем шилом ещё два отверстия сверху и закрепляем груз снова. Ещё укрепим вертикальные планки, чтобы они не съезжались во время работы.

Фотка 4: https://alicorn.tk/dashie/index.php/s/biXXRbjlbcfV2s3

Итак, механическая часть готова, теперь займёмся программной. Нам понадобится любая модель Arduino, способная подключаться по USB (Uno, Nano, Mega и.т.д, в моём случае - Uno). При нажатии педали будет срабатывать датчик, который будет отлавливаться контроллером. В качестве датчика можно использовать обычную кнопку, детектор магнитного поля (геркон) или любой самодельный прибамбас, который умеет замыкать цепь. Геркон я попробовал, и это было неудобно, поэтому взял кнопку.

Arduino версий Micro и Leonardo умеет эмулировать HID-устройства, поэтому мы можем назначить пересылку любой клавиши, а решение будет кроссплатформенным. Кстати, на Windows и в графических DE вроде KDE/GNOME педаль была бы полезна для Alt+Tab или для переключения раскладки с русской на английскую.

Как позднее оказалось, Arduino Uno/Mega и им подобные требуют перепрошивки USB-контроллера, потому что родной поддержки эмуляции HID у них нет. Но мой Uno - китайский, так что нужных разъёмов для этого у него нет. Подключаться же к чипу напрямую мне боязно, потому что он, во-первых, мелкий, во-вторых, в случае кирпича восстанавливать мне его нечем (второй Uno пока у меня нет).

------------

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

Отличная идея! Почесав репу и найдя информацию о модуле ядра под названием UHID (в Archlinux он включен по умолчанию), начал с ним ковыряться. Это было не так-то просто, поэтому пока напишем прошивку для педали.

Скетч для Arduino:

====
int detector = 13; // наш датчик для педали
int pedal_pressed = LOW;
int last_pressed = LOW;

void setup() {
pinMode(detector, INPUT);
Serial.begin(9600);
}

void trigger_press() { Serial.print("on\n"); }
void trigger_release() { Serial.print("off\n"); }

void loop() {
// нажата ли педаль в данный момент
pedal_pressed = digitalRead(detector);

if (pedal_pressed == HIGH && last_pressed == LOW) trigger_press();
else if (pedal_pressed == LOW && last_pressed == HIGH) trigger_release();

last_pressed = pedal_pressed;
delay(100); // на всякий случай ждём 0.1 сек, дабы не делать слишком много проверок
}
====



Примеров использования для UHID в сети я практически не нашёл. Есть только один не очень исчерпывающий пример из исходников ядра Linux и кусок документации.

Интересующиеся могут ознакомиться с ними здесь:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/hid/uhid.txt?id=refs/tags/v4.10-rc3
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/samples/uhid/uhid-example.c?id=refs/tags/v4.10-rc3

Взяв uhid-example.c из исходников ядра и поработав с ним, я добавил туда куски кода вот отсюда: ii://TIzgUZRrWGcQSEkKBDiP[*][*], чтобы читать данные, которые поступают из Arduino.

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

====
#include <errno.h>
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <linux/uhid.h>

/*
rdesc - это магическое заклинание духа хаоса Дискорда
я узнал его, подключив к нетбуку USB-клавиатуру и посмотрев в файл
/sys/kernel/debug/hid/<dev>/rdesc, чтобы посылать аналогичные заголовки
из программы. Надо ведь как-то притворяться клавиатурой :)
*/

STATIC unsigned char rdesc[] = {
0x05, 0x01,
0x09, 0x06,
0xa1, 0x01,
0x05, 0x08,
0x19, 0x01,
0x29, 0x03,
0x15, 0x00,
0x25, 0x01,
0x75, 0x01,
0x95, 0x03,
0x91, 0x02,
0x95, 0x05,
0x91, 0x01,
0x05, 0x07,
0x19, 0xe0,
0x29, 0xe7,
0x95, 0x08,
0x81, 0x02,
0x75, 0x08,
0x95, 0x01,
0x81, 0x01,
0x19, 0x00,
0x29, 0x91,
0x26, 0xff,
0x00, 0x95,
0x06, 0x81,
0x00, 0xc0
};

static int uhid_write(int fd, const struct uhid_event *ev)
{
ssize_t ret;

ret = write(fd, ev, sizeof(*ev));
if (ret < 0) {
fprintf(stderr, "Cannot write to uhid: %m\n");
return -errno;
} else if (ret != sizeof(*ev)) {
fprintf(stderr, "Wrong size written to uhid: %ld != %lu\n",
ret, sizeof(ev));
return -EFAULT;
} else {
return 0;
}
}

static int create(int fd)
{
struct uhid_event ev;

memset(&ev, 0, sizeof(ev));
ev.type = UHID_CREATE;
strcpy((char*)ev.u.create.name, "test-uhid-device");
ev.u.create.rd_data = rdesc;
ev.u.create.rd_size = sizeof(rdesc);
ev.u.create.bus = BUS_USB;
ev.u.create.vendor = 0x15d9;
ev.u.create.product = 0x0a37;
ev.u.create.version = 0;
ev.u.create.country = 0;

return uhid_write(fd, &ev);
}

static void destroy(int fd)
{
struct uhid_event ev;

memset(&ev, 0, sizeof(ev));
ev.type = UHID_DESTROY;

uhid_write(fd, &ev);
}

static int event(int fd)
{
struct uhid_event ev;
ssize_t ret;

memset(&ev, 0, sizeof(ev));
ret = read(fd, &ev, sizeof(ev));
if (ret == 0) {
fprintf(stderr, "Read HUP on uhid-cdev\n");
return -EFAULT;
} else if (ret < 0) {
fprintf(stderr, "Cannot read uhid-cdev: %m\n");
return -errno;
} else if (ret != sizeof(ev)) {
fprintf(stderr, "Invalid size read from uhid-dev: %ld != %lu\n",
ret, sizeof(ev));
return -EFAULT;
}

switch (ev.type) {
case UHID_START:
fprintf(stderr, "UHID_START from uhid-dev\n");
break;
case UHID_STOP:
fprintf(stderr, "UHID_STOP from uhid-dev\n");
break;
case UHID_OPEN:
fprintf(stderr, "UHID_OPEN from uhid-dev\n");
break;
case UHID_CLOSE:
fprintf(stderr, "UHID_CLOSE from uhid-dev\n");
break;
case UHID_OUTPUT:
fprintf(stderr, "UHID_OUTPUT from uhid-dev\n");
break;
case UHID_OUTPUT_EV:
fprintf(stderr, "UHID_OUTPUT_EV from uhid-dev\n");
break;
default:
fprintf(stderr, "Invalid event from uhid-dev: %u\n", ev.type);
}

return 0;
}

static char ctrl_down = 0;

static int send_event(int fd)
{
struct uhid_event ev;
memset(&ev, 0, sizeof(ev));
ev.type = UHID_INPUT;
ev.u.input.size = 9;

// вот это та самая хрень, которая делает виртуальное нажатие
// первый элемент массива data - это клавиши-модификаторы
// 0 - это их отсутствие (в данном случае для key_release)
// а единичка - это как раз левый Ctrl

ev.u.input.data[0] = ctrl_down;
ev.u.input.data[1] = 0x0;

return uhid_write(fd, &ev);
}

int main(int argc, char **argv)
{
int fd;
const char *path = "/dev/uhid";
struct pollfd pfds[2];
int ret, r;
struct termios state;
char serialbuf[5];

ret = tcgetattr(STDIN_FILENO, &state);
if (ret) {
fprintf(stderr, "Cannot get tty state\n");
} else {
state.c_lflag &= ~ICANON;
state.c_cc[VMIN] = 1;
ret = tcsetattr(STDIN_FILENO, TCSANOW, &state);
if (ret)
fprintf(stderr, "Cannot set tty state\n");
}

fprintf(stderr, "Open uhid-cdev %s\n", path);
fd = open(path, O_RDWR | O_CLOEXEC);
if (fd < 0) {
fprintf(stderr, "Cannot open uhid-cdev %s: %m\n", path);
return EXIT_FAILURE;
}

fprintf(stderr, "Create uhid device\n");
ret = create(fd);
if (ret) {
close(fd);
return EXIT_FAILURE;
}

pfds[0].fd = STDIN_FILENO;
pfds[0].events = POLLIN;
pfds[1].fd = fd;
pfds[1].events = POLLIN;

int device_fd = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("open_port: Unable to open /dev/ttyUSB0 - ");
return 1;
} else {
fcntl(device_fd, F_SETFL, FNDELAY);
}

while (1) {
ret = poll(pfds, 2, -1);
r = read(device_fd, serialbuf, 5); // получаем данные с педали

if (ret < 0) {
fprintf(stderr, "Cannot poll for fds: %m\n");
break;
}
if (pfds[0].revents & POLLHUP) {
fprintf(stderr, "Received HUP on stdin\n");
break;
}
if (pfds[1].revents & POLLHUP) {
fprintf(stderr, "Received HUP on uhid-cdev\n");
break;
}

if (pfds[0].revents & POLLIN) {
// проверка поступающих данных с ардуины
if (r > 0 && strncmp(serialbuf, "on\n", 3) == 0) {
ctrl_down = 0;
send_event(fd);
memset(&serialbuf, 0, 5); // очищаем буфер
}
else if (r > 0 && strncmp(serialbuf, "off\n", 4) == 0) {
ctrl_down = 1;
send_event(fd);
memset(&serialbuf, 0, 5);
}
}
if (pfds[1].revents & POLLIN) {
ret = event(fd);
if (ret)
break;
}
}

fprintf(stderr, "Destroy uhid device\n");
destroy(fd);
return EXIT_SUCCESS;
}
====



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

Сейчас я пишу это сообщение в Emacs с использованием педали. Вполне неплохо работает. Вот видите - даже из банки тушёнки можно что-нибудь полезное запилить :)

В качестве бонуса выкладываю найденный на просторах сети PDF со стандартом на HID-устройства. Любые непонятные моменты там можно уточнить, это очень годный документ: https://alicorn.tk/dashie/index.php/s/dISkfEraH8xVgDm
Первые 5 страниц - вода, читать с 6.



Stringlate - перевод Android-приложений в два клика : 10/07/17 18:00 : vit01 to All [#] [reply]

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

https://github.com/LonamiWebs/Stringlate
https://f-droid.org/packages/io.github.lonamiwebs.stringlate/

Использовать его очень просто: вводите адрес Git-репозитория (есть интеграция с Github), дальше приложение само скачает и распарсит нужные ресурсы.

Потом можно спокойно править переводы через удобный GUI. После окончания работы можно экспортировать результат в файл, поделиться им по Email или сразу открыть Pull Request/Issue в репозитории. Рекомендую и одобряю.



Re: IDEC Mobile: кодинг в прямом эфире : 30/06/17 16:08 : vit01 to Difrex [#] [reply]

Кстати, как ни странно, пробросить порт дебага через ssh на удалёнку и набрать adb connect localhost субъективно кажется менее напряжным, чем возиться с проводами и подключением по локалке =)

Так что нафиг эмуляторы, буду продолжать работать с реальными устройствами. Но 4 гигабайта ОЗУ оказались не лишними. Теперь хотя бы браузер рядом с IDE не страшно включённым держать. И второй, запасной комп дома разгруженный сидит, так что разработка теперь без всяких напрягов и ненужных ожиданий происходит.

P.S. Кодинг-эксгибиционизм-шоу до сих пор идёт. Кому хочется (и тому, кто может в андроид), могу даже RW-пароль скинуть



Re: IDEC Mobile: кодинг в прямом эфире : 29/06/17 15:01 : Difrex to vit01 [#] [reply]

О, круто! =)



IDEC Mobile: кодинг в прямом эфире : 29/06/17 06:09 : vit01 to All [#] [reply]

Надоели скучные сериалы и реалити-шоу? Хочется посмотреть на эпик-мега-экшен?

Смотреть немое кино бесплатно без смс и регистрации:

====
$ vncviewer -Shared -ViewOnly debug.ii-net.tk:5901
====



Юзер debug
Пароль 303045

Встречайте актёров:

1. Андроид студия - главная героиня шоу. Обаятельная, привлекательная, но иногда очень капризная и упёртая свол^W IDE.
2. Виртуальный Android 4.4 - надёжный и неприхотливый эмулятор, который через годика два выйдет на пенсию. Обладает загадочным характером, будет периодически появляться и исчезать
3. Курсор мыши. Часто бездельничает, но иногда тыкает по кнопкам, бегает по спагетти-быдлокоду и выделяет текст.
4. Терминал. Всегда в своём репертуаре. Отображает белый текст на чёрном фоне.



Re: Требуется сервер : 28/06/17 17:48 : vit01 to Difrex [#] [reply]

Difrex> MSK-highmem-KVM-SAS-2 439р

Ой, я невнимательно просмотрел каталог :)

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



Re: Требуется сервер : 28/06/17 15:07 : Difrex to vit01 [#] [reply]

>У них самый выгодный тариф - это за 399р. дают 2 гига ОЗУ и 40 гигов места.
MSK-highmem-KVM-SAS-2 439р
* 2CPU
* 4Gb RAM
* 60Gb HDD

По-моему норм цена.



Re: Машина снов на Arduino своими руками : 28/06/17 14:09 : vit01 to btimofeev [#] [reply]

btimofeev> А эффект от этого реально какой-то есть?

Если сидеть с открытыми глазами, то это как на дискотеке, только немного под трансом. Так или иначе, это интересно, рекомендую.

С закрытыми - уже трип какой-то напоминает. Через некоторое время сидения с закрытыми глазами появляются разные глюки, воображение усиливается. Можно вполне "выпасть" из реальности, наблюдая причудливые хренотени у себя в голове. Оказывается, сабж используют даже для психотерапии.
То есть мигалка нужна, если тебе слишком скучно, а фантазия плохо развита. Устройство как бы "подстёгивает" мозг на что-нибудь эдакое.

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

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



Re: Машина снов на Arduino своими руками : 27/06/17 18:42 : btimofeev to vit01 [#] [reply]

vit01>> Андрей попросил видео сабжа в действии. Вот оно:
vit01>> https://alicorn.tk/dashie/index.php/s/4PZLyfKTDDVSH5U

AL> Не взирая на то, что камера не сняла (ну почти не сняла) то, что было на стенах, мне видео понравилось =)

Мне тоже понравилось, красиво мигает. А эффект от этого реально какой-то есть?



Re: Машина снов на Arduino своими руками : 27/06/17 18:12 : Andrew Lobanov to vit01 [#] [reply]

vit01> Андрей попросил видео сабжа в действии. Вот оно:
vit01> https://alicorn.tk/dashie/index.php/s/4PZLyfKTDDVSH5U
vit01> Ничего интересного здесь нет (тем более, плохонькая камера мобильника не может запечатлеть эту игру света), но просто как факт.

Не взирая на то, что камера не сняла (ну почти не сняла) то, что было на стенах, мне видео понравилось =)



Re: Требуется сервер : 27/06/17 17:45 : vit01 to Difrex [#] [reply]

Difrex> firstbyte.ru

У них самый выгодный тариф - это за 399р. дают 2 гига ОЗУ и 40 гигов места.

Вот посмотрел сейчас на поисквпс, здесь советует несколько вариантов:

https://poiskvps.ru/index.php?search_hdd_min=25&search_hdd_max=60&search_ram_min=3072&search_ram_max=4096&search_price_max=500

Самый выгодный, на мой взгляд, последний, где 4 гига предлагают за 420 рублей. Но и остальные с 3 гигами не отстают.

Подожду ещё предложений от сетян.



Re: Требуется сервер : 27/06/17 17:01 : Difrex to vit01 [#] [reply]

firstbyte.ru

У них хостюсь уже больше года -- полет отличный.



Требуется сервер : 27/06/17 16:03 : vit01 to All [#] [reply]

Товарищи, нужна ваша консультация.

По случаю успешного окончания школы (золотая медаль как-никак) мне подогнали денег, и у меня есть план на лето.

Хочу заказать хороший, годный VPS на 2 месяца, чтобы установить туда эмулятор Андроида и IDE. На сервере, конечно же, будут иксы и доступ через VNC + RDP.
View-only доступ к рабочему столу думаю предоставить всем, а пароль "для дела" дать некоторым из вас, кому захочется. В первую очередь Борису, потому что он IDEC Mobile иногда помогает пилить.

Таким шагом будет ускорена разработка клиента и другого софта для IDEC, потому что сервак будет доступен 24/7, и мне не надо будет тратить время на перезагрузки, ожидания запуска IDE и "въезд" в сборочное окружение.
Можно будет писать код и компилить на даче, в транспорте и так далее. Не отрываться от кодинга.

Плюс есть надежды, что кто-нибудь будет помогать или давать свои комментарии в реалтайме

Требования к серверу

1. ОЗУ - 3-4 гига. Желательно 4
2. Место на диске сколько получится, но хотелось бы 30-40 гигов
3. ОС - любой линь, за исключением source-based (генту, слака).
4. Цена в районе 400-500 рублей в месяц. Можно меньше.

Если подскажете какой рабочий вариант, то это будет очень круто. Планирую развернуть сабж уже на этой неделе.



Re: Машина снов на Arduino своими руками : 26/06/17 15:51 : vit01 to vit01 [#] [reply]

Андрей попросил видео сабжа в действии. Вот оно:

https://alicorn.tk/dashie/index.php/s/4PZLyfKTDDVSH5U

Ничего интересного здесь нет (тем более, плохонькая камера мобильника не может запечатлеть эту игру света), но просто как факт.



Re: Машина снов на Arduino своими руками : 25/06/17 17:47 : vit01 to vit01 [#] [reply]

Усовершенствовал девайс, добавив туда второй светодиод и поменяв мою любимую для дебага Arduino UNO на портативную Arduino Pro Mini.

https://ii-net.tk/ii/ii-point.php?q=/x/file/dream-arduino-2.jpg

Вместо пауэрбэнка теперь три мизинчиковые батарейки, и трип-машину можно засунуть в карман. Цепь включается нажатием на контакты с питанием на плате (оказывается, кривая пайка может быть не только минусом, но и полезной фичей!).

Зачем мне понадобился второй светодиод?

1. При использовании единственного RGB-LED проявлялся не очень хороший эффект: полупроводники светодиода, часто моргая, перегревались, а перегрев являлся причиной случайных затуханий во время работы. Я бы мог разгрузить плату, добавив резистор, но не хотелось терять в яркости. Добавление второй лампочки означало то, что первая будет меньше мигать и меньше нагреваться (поставил так, чтобы они работали по очереди) -> "сеанс" теперь проходит плавно, без затуханий.

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

3. Пара разных источников света, как я выяснил на практике, гораздо сильнее "расшатывает" мозг, чем один. Действительно наркота какая-то

Упарываемся по-технарски %), хехехе
Вторая схема вообще полный улёт, рекомендую. И надеюсь, что роскомпозор не заблокирует IDEC за эту статью.



Машина снов на Arduino своими руками : 22/06/17 12:27 : vit01 to All [#] [reply]

Прочитал в интернете недавно про такую штуку как машина сновидений. Грубо говоря, это картонный вращающийся цилиндр вокруг источника света, с прорезями, создающий мерцание частотой 8-13 Гц. Оптический эффект от этого мерцания вызывает резонанс в мозгу, в результате чего от просмотра бликов у человека едет крыша, возникают интересные "галюны".

Подробнее читаем здесь: https://ru.wikipedia.org/wiki/Машина_сновидений

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

Осторожно, девайс может вызвать приступ эпилепсии! Если станет плохо, ответственности не несу!

Итак, чтобы изготовить трип-девайс из подручных средств, нам понадобятся:

1. Arduino или Raspberry Pi (или любую другую плату для самоделкиных). В данном случае ардуино
2. Три разноцветных светодиода или один RGB-LED. У меня в DIY-комплекте, заказанном из Китая, как раз оказался RGB-светодиод, поэтому я решил воспользоваться именно им
3. Устройство для преломления, чтобы создавать на стенах красивые цветовые картинки и усилить "наркоманский" эффект. Я использовал в качестве преломлятеля хрустальный стакан с резным узором.
4. Кнопка для переключения частот (8-13 Гц), дабы настраивать сеанс "под свой вкус". У меня хорошей кнопки не оказалось, поэтому я взял вместо неё датчик обхода препятствий. На него не надо нажимать пальцем, а достаточно лишь провести рукой на близком расстоянии.
5. [Опционально] источник питания для контроллера, ради портативности.
6. [Опционально] увеличительное стекло, лупа. Поможет делать другие прикольные узоры на стенах и потолке.

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

Исходник скетча для Arduino:

====
// периоды свечения/затухания светодиодов;
// соответствуют частотам от 8 до 13 Гц
int periods[] = {62, 56, 50, 45, 42, 38};

// светодиоды к аналоговым выводам, кнопку - к цифровому
int r = A0;
int g = A1;
int b = A2;
int button = 13;

byte selected_period_index = 0; // 1 период
int selected_period = 62; // 1 период
boolean pressed = false; // кнопка была нажата
boolean tmp_pressed = false;

// сохранённые значения цветов
byte last_r = 0;
byte last_g = 0;
byte last_b = 0;

void setup() {
randomSeed(0);
pinMode(button, INPUT);
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
}

void changePeriod() {
if (selected_period_index < 5) selected_period_index++;
else selected_period_index = 0;

selected_period = periods[selected_period_index];
}

void color_enable() {
// переставляем цвета местами и добавляем
// на красный цвет рандом
last_b = last_g;
last_g = last_r;
last_r = random(50, 255);
// минимальное значение 50 нужно,
// чтобы избегать появления тусклых цветов

analogWrite(r, last_r);
analogWrite(g, last_g);
analogWrite(b, last_b);
}

void color_disable() {
analogWrite(r, 0);
analogWrite(g, 0);
analogWrite(b, 0);
}

void loop() {
color_enable(); // 1, 2, 3 - ёлочка, гори!

// если кнопка была нажата, меняем частоту мерцания
tmp_pressed = (digitalRead(button) == HIGH);
if (pressed && !tmp_pressed) changePeriod();
pressed = tmp_pressed;

delay(selected_period);
color_disable();
delay(selected_period);
}
====



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

Варианты эксплуатации:

1. Либо с открытыми глазами смотрим на стены и потолок (можно использовать линзы/лупу для ещё более прикольных узоров)
2. Или закрываем глаза и смотрим прямо на источник света.

Вот так выглядит моя самодельная хрень: https://ii-net.tk/ii/ii-point.php?q=/x/file/dream-arduino.jpg

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

Прошу комментариев/вопросов, если кому-то стало интересно.



Re: Книги! : 23/05/17 14:50 : vit01 to Difrex [#] [reply]

Интересно, интересно.
Целый набор "современного" девелопера. Куча джаваскрипта, новомодные angular и react, микросервисы (какой ужас, столько страшилок про них!), а также незаменимый Докер. Зачем туда закинули agile и tdd, вообще без понятия.

Хотя кто знает. Может быть, через год я сам буду клепать что-нибудь на React (если он к тому времени не выйдет из моды).

Из подборок книг больше всего нравится так распиаренный Free Programming Books. Там прямо всё по полочкам разложено в одном файле.

https://github.com/vhf/free-programming-books/blob/master/free-programming-books-ru.md



Книги! : 23/05/17 14:24 : Difrex to All [#] [reply]

Зацените, что нашел https://github.com/miguellgt/books



Re: Web и длинные ссылки : 07/05/17 09:15 : Andrew Lobanov to All [#] [reply]

> Есть div, у него задана ширина в процентах от вьюпорта, внутри длинная-длинная ссылка. Ссылка переносится, но только один раз, а потом растягивает этот div за пределы экрана. Как это можно забороть? Есть опыт?

Таки разобрался.

====
word-break: break-all;
====



И всё отображается как мне надо.



Web и длинные ссылки : 07/05/17 08:56 : Andrew Lobanov to All [#] [reply]

Есть div, у него задана ширина в процентах от вьюпорта, внутри длинная-длинная ссылка. Ссылка переносится, но только один раз, а потом растягивает этот div за пределы экрана. Как это можно забороть? Есть опыт?



Re: Git : 13/03/17 10:26 : Andrew Lobanov to vit01 [#] [reply]

AL>> А ещё бы полноценный git-клиент под андроид. А то в маршрутке приходится книги читать, а мог бы тратить это время на написание игрушки на инстеде. Писать есть чем вполне сносно, а вот потом пушить изменения нечем.
vit01> Порекомендую клиент MGit или его предшественника (по форку) SGit. И коммитить, и пушить, и всё остальное необходимое умеет.
vit01> https://f-droid.org/repository/browse/?fdfilter=MGit&fdid=com.manichord.mgit

Спасибо. Попробую.

vit01> Кстати, а чем тебя Termux'овский гит не устроил? Это ведь тоже вполне рабочий вариант (даже более идеологически правильный). Пробовал и остался доволен.

Как-то не очень удобно получается с ним работать без hacker's keyboard, а от последней я отказался.



Re: Git : 13/03/17 07:49 : vit01 to Andrew Lobanov [#] [reply]

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

Порекомендую клиент MGit или его предшественника (по форку) SGit. И коммитить, и пушить, и всё остальное необходимое умеет.
https://f-droid.org/repository/browse/?fdfilter=MGit&fdid=com.manichord.mgit

Кстати, а чем тебя Termux'овский гит не устроил? Это ведь тоже вполне рабочий вариант (даже более идеологически правильный). Пробовал и остался доволен.



Re: Emacs : 13/03/17 04:32 : Andrew Lobanov to btimofeev [#] [reply]

btimofeev>>> Для андроид обнаружил программку Orgzly
btimofeev> Там есть еще Dropbox, но только в версии из Google Play (или если сам из исходников соберешь). Я, кстати, ей побольше попользовался и оказалось, что она поддерживает сильно ограниченный набор возможностей org-mode. И непонятно собирается ли автор этот набор расширять.

Пробовал его тоже. И тоже не глянулась урезанная до нельзя функциональность. А ещё бы полноценный git-клиент под андроид. А то в маршрутке приходится книги читать, а мог бы тратить это время на написание игрушки на инстеде. Писать есть чем вполне сносно, а вот потом пушить изменения нечем.

vit01>> Другое дело, что следовать расписаниям и всяким спискам в целом - это неудобно и часто бессмысленно, потому что планы постоянно перекраиваются, а хотелки меняются.
btimofeev> А для меня нормально работает: память у меня не очень хорошая, так что постоянно приходится записывать todo'шки.

У меня фиг спланируешь что. Так что простые тудушки покрывают рабочий процесс.



Re: Emacs : 12/03/17 17:17 : btimofeev to vit01 [#] [reply]

vit01> На Хабре недавно промелькнула статья про технику помидора и Emacs.
vit01> https://habrahabr.ru/post/323576/

Я вчера этот плагин ставил. Думаю пользоваться можно, если отключить ежесекундное тиканье таймера.



Re: Emacs : 12/03/17 17:10 : btimofeev to vit01 [#] [reply]

btimofeev>> Для андроид обнаружил программку Orgzly

vit01> Установил, посмотрел. Интересная штука, минималистично выглядит. Правда, из опций синхронизации там только директория. Обещают ещё добавить протоколов, но это ждать.

Там есть еще Dropbox, но только в версии из Google Play (или если сам из исходников соберешь). Я, кстати, ей побольше попользовался и оказалось, что она поддерживает сильно ограниченный набор возможностей org-mode. И непонятно собирается ли автор этот набор расширять.

vit01> Другое дело, что следовать расписаниям и всяким спискам в целом - это неудобно и часто бессмысленно, потому что планы постоянно перекраиваются, а хотелки меняются.

А для меня нормально работает: память у меня не очень хорошая, так что постоянно приходится записывать todo'шки.



Re: Emacs : 12/03/17 09:32 : vit01 to vit01 [#] [reply]

На Хабре недавно промелькнула статья про технику помидора и Emacs.
https://habrahabr.ru/post/323576/

Ссылка на гитхаб со скриптом: https://github.com/TatriX/pomidor

Симпатичная штука для столь избитой методики повышения производительности :)



Re: Emacs : 12/03/17 08:59 : vit01 to btimofeev [#] [reply]

btimofeev> Для андроид обнаружил программку Orgzly

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

У самого для тудушек стоит приложение OpenTasks (уже упоминал его в ii://linux.14)[*][*]. Его плюс в том, что с OwnCloud/NextCloud обменивается и интерфейс с точки зрения кнопкотыкания удобен.

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



Re: Emacs : 11/03/17 08:37 : btimofeev to All [#] [reply]

btimofeev> Ещё org-mode в нем довольно крутой. Надо как-то познакомиться с ним поближе.

Вот и настало это время: я тоже начал осваивать emacs. Преимущественно из-за org-mode. Пока что перетащил туда почти все свои заметки и todo из разных программ и сервисов. Для андроид обнаружил программку Orgzly, простенькая, довольно удобная и недавно заопенсорсилась https://github.com/orgzly/orgzly-android



Сигнализация для меломана на Arduino : 18/02/17 13:56 : vit01 to All [#] [reply]

Когда у меня появилась ардуинка, я хотел приспособить её для какого-нибудь действительно полезного дела. В домашних условиях такая задача всё-таки нашлась :)

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

Цель: сделать установку на ардуине, которая будет ставить плеер на паузу, когда подходят к твоему "рабочему месту".

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

Нашёл в сети образцы скетчей для использования датчика движения, но они мне не очень понравились, и я решил взять один из них и максимально упростить:

====
#define pirPin 2  // наш датчик
#define ledPin 13 // светодиод

int wasMotion = false;

void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);

delay(2000); // не активируем цикл сразу, а чуть-чуть подождём
}

void loop() {
int pirVal = digitalRead(pirPin);

//Если обнаружили движение
if (pirVal == HIGH)
{
if (wasMotion == false) {
digitalWrite(ledPin, HIGH);
Serial.print("Motion detected\n");
wasMotion = true;
}
delay(500); // пауза для прогорания светодиода и для следующей проверки
} else if (wasMotion == true) {
wasMotion = false;
digitalWrite(ledPin, LOW);
}
}
====



После заливки скетча надо добавить вашего пользователя в группу uucp, которая позволит считывать данные из виртуального USB-COM порта ардуины без root-прав.

# usermod -a -G uucp youruser

Далее надо было написать программу, которая будет отслеживать сигнал, поступающий с девайса, и подавать сигнал плееру. Питон ради такой мелочи расчехлять не хотелось (будет память жрать), поэтому выбрал C.

====
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <stdlib.h>

int fd;
int should_exit = 0;

static void signal_handler(int sig) {
// Обрабатываем нажатие Ctrl-C, чтобы корректно выходить

switch (sig) {
case SIGINT:
close(fd);
printf("Exiting\n");
should_exit = 1;
break;
default:
break;
}
}

void stop_player() {
// Главная вещь, ради которой всё затевалось
// Для плеера Audacious, которым пользуюсь

system("if [ \"`audtool playback-status`\" = \"playing\" ]; then audtool playback-pause; fi");
}

void main(int argc, char** argv) {
char buf[15];
int r;

signal(SIGINT, signal_handler);

// Открываем виртуальный USB COM-port девайса
fd = open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY | O_NDELAY);
if (fd == -1) {
perror("open_port: Unable to open /dev/ttyUSB0 - ");
should_exit = 1;
} else {
fcntl(fd, F_SETFL, FNDELAY);
}

while(!should_exit) {
r = read(fd, buf, 20);
if (r > 0 && strncmp(buf, "Motion detected", 15) == 0) {
puts("Works!");
stop_player();
}
sleep(1);
}
}
====



Всё, можно добавлять в автозагрузку и пользоваться!
И да, как это выглядит на фоточках:

https://ii-net.tk/ii/files/arduino-pir1.jpg
https://ii-net.tk/ii/files/arduino-pir2.jpg



Re: Реализация IDEC протокола на Гошечке : 10/02/17 07:29 : Difrex to vit01 [#] [reply]

Я просто решил переписать свой убогий и тормозной фетчер с перла. А реализацию протокола тут по-любому делать надо =)

Кстати, немного статисти из эластика:

Документы

====
      "docs" : {
"count" : 79614,
"deleted" : 0
},
"store" : {
"size_in_bytes" : 147104264,
"throttle_time_in_millis" : 0
},
====



Самое старое сообщение в индексе:

====
 curl http://127.0.0.1:9200/idec/_search?pretty -XPOST -d '{"fields" : ["_id", "author", "to", "echo", "subg", "message", "date"],"sort": [ { "date":   { "order": "acs" }}, { "_score": { "order": "asc" }}],"size":1}'
{
"took" : 11,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 79614,
"max_score" : null,
"hits" : [ {
"_index" : "idec",
"_type" : "post",
"_id" : "HuE2FzPk5A6ANa4vHtlA",
"_score" : 1.0,
"fields" : {
"message" : [ "\n(я тоже ненастоящий сварщик)\n\nДа, спасибо, я про zfill думал, а как-то про подобное не догадался, исправлено.\n\nЧто касается хранилилища:\n\nу меня до сих пор основная цель - это африканские дети с компьютерами 1-2 гб hdd, с openbsd или haiku, где дорог каждый килобайт и каждый inode.\n\nПоэтому для клиентов планируется просто сделать один большой файл, в который просто дописывать сжатое содержимое сообщения. И отдельно - индекс, где указаны начальное и конечное смещение в файле.\n\nА для больших и крупных клиентов - всякие разные крутейшие распределённые базы данных. А сейчас мне хочется как можно более простую реализацию сделать." ],
"to" : [ "All" ],
"author" : [ "51t" ],
"subg" : [ "про хэш и реализацию" ],
"date" : [ "1394282165" ],
"echo" : [ "to.lor.2014" ]
},
"sort" : [ "1394282165", 1.0 ]
} ]
}
====



Самое новое сообщение в индексе

====
curl http://127.0.0.1:9200/idec/_search?pretty -XPOST -d '{"fields" : ["_id", "author", "to", "echo", "subg", "message", "date"],"sort": [ { "date":   { "order": "desc" }}, { "_score": { "order": "desc" }}],"size":1}'
{
"took" : 11,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 79614,
"max_score" : null,
"hits" : [ {
"_index" : "idec",
"_type" : "post",
"_id" : "e3w8k49i3BcDvNS0MsLw",
"_score" : 1.0,
"fields" : {
"message" : [ "\n Американская актриса Джуди Гарленд, сыгравшая Дороти в фильме «Волшебник страны Оз» 1939 года, подвергалась сексуальным домогательствам со стороны актеров-карликов во время съемок ленты. Об этом говорится в книге бывшего мужа артистки Сида Луфта «Джуди и я: моя жизнь с Джуди Гарленд». \nСсылка: https://lenta.ru/news/2017/02/10/wonderland/" ],
"to" : [ "All" ],
"author" : [ "Новостной_робот" ],
"subg" : [ "СМИ узнали о домогательствах карликов-жевунов к звезде «Волшебника страны Оз»" ],
"date" : [ "1486710015" ],
"echo" : [ "lenta.rss" ]
},
"sort" : [ "1486710015", 1.0 ]
} ]
}
}
====




Re: Реализация IDEC протокола на Гошечке : 10/02/17 06:44 : vit01 to Difrex [#] [reply]

Сомневаюсь, что сабж есть перспективно, но зато хоть как-то современно :)



Реализация IDEC протокола на Гошечке : 09/02/17 20:32 : Difrex to All [#] [reply]

Сегодня реализовал какую-то часть: https://gitea.difrex.ru/Umbrella/fetcher/src/master/idec

Скоро будет API ноды добавлено =)

ЗЫ: Всем привет, я в секте все еще, просто в ридонли Ж(



Развлекаюсь с Arduino : 02/02/17 16:29 : vit01 to All [#] [reply]

Прикупил себе китайскую Arduino Uno на али за 190 рублей.
Драйвера подошли стандартные из IDE, правда, приходится перед началом работы делать chmod 777 /dev/ttyUSB0, иначе ничего не прошьётся.
Сама IDE, кстати, не хотела сначала ничего компилировать, ругаясь на отсутствие libtinfo.so.5, но симлинком на libncurses проблема разрешилась.

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

Порылся в закромах, нашёл раздолбанную игрушечную рацию и вытащил оттуда динамик.

Подключил к ардуине, нашёл примеры использования в сети и, о чудо, оно работает!

В общем, попробовал сделать кавер на кусок симфонии Виктора Аргонова (сюда постил уже когда-то). Автор молодец, что полные midi в открытый доступ выкладывает, экспериментировать удобно.

https://ii-net.tk/ii/ii-point.php?q=/x/file/constructing-sensations-arduino.ogg

И исходник на Гитхабе: https://github.com/vit1-irk/constructing-sensations-arduino

Оригинал для сравнения (3 часть, если что) доступен для скачивания здесь: http://argonov.ru/crossing.html



Re: Android coding : 26/01/17 18:10 : btimofeev to vit01 [#] [reply]

vit01> Первый раз вижу упоминание Amazon AppStore.

Стор амазона второй по популярности в штатах. Он по умолчанию стоит на Kindle'ах. И народ там самый платежноспособный. Так что если делать приложения с целью заработать, то в первую очередь нужно смотреть на ранок США.

Еще у них есть Amazon Underground. Это стор в котором все приложения бесплатные и внутренние покупки тоже бесплатные, а амазон платит разработчику за время проведенное пользователем в приложении. Но это же приложение должно быть в другом сторе платным.

vit01> Вот F-Droid у всех на слуху. Там, правда, за чистотой исходников следят тщательно, но из-за этого популярности и доверия у него больше.

Я сам им пользуюсь и хотел прогу в него добавить, но там не принимаются приложения в которых есть несвободная аналитика. А Firebase Crash отличная штука, я обнаружил пару десятков разных вылетов благодаря ему, отказываться пока не хочется.



Re: Android coding : 26/01/17 10:41 : vit01 to btimofeev [#] [reply]

btimofeev> Какие-то эти альтернативные сторы муторные.

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



Re: Android coding : 25/01/17 20:12 : btimofeev to btimofeev [#] [reply]

Выложил приложение в Amazon appstore, а при установке выдает "Приложение не установлено. Похоже пакет поврежден". Причем с двух телефонов такое. Они похоже мою apk-шку сломали, нехорошо это. Попробую перезалить новую версию, но блин опять полдня ждать придётся. Какие-то эти альтернативные сторы муторные.



Re: Android coding : 25/01/17 13:26 : btimofeev to vit01 [#] [reply]

vit01> Нормально установилось и запустилось. Ну а тестировать мне не на чем.

Спасибо за помощь. Мне просто надо было знать не вылетает ли оно, а то там внутри аналитика и крэш-репорты от Google Firebase. Сейчас просто в Яндекс сторе видел кучу плохих отзывов на приложение BlaBlaCar, люди пишут что без гуглосервисов оно вылетает.



Re: Android coding : 25/01/17 12:39 : vit01 to btimofeev [#] [reply]

btimofeev> Подскажи, а у тебя телефон без play сервисов?

Да. ОС 7.1.1
Уже давно приспособился жить совсем без гугла.

btimofeev> Если так, то не мог бы ты посмотреть работает ли вот эта версия моего приложения

Нормально установилось и запустилось. Ну а тестировать мне не на чем.



Re: Android coding : 25/01/17 09:02 : btimofeev to vit01 [#] [reply]

Подскажи, а у тебя телефон без play сервисов? Если так, то не мог бы ты посмотреть работает ли вот эта версия моего приложения https://github.com/btimofeev/UniPatcher/releases/download/0.13/UniPatcher-0.13.apk



Re: Заполнение форм PDF или "Russian, s*ka! Do you speak it?!" : 24/01/17 05:08 : vit01 to Andrew Lobanov [#] [reply]

AL> Вот меня как раз может ожидать работа с pdf, но из питона. И там может оказаться тоже весьма весело.

Своего бота я как раз на питоне писал, а тулзу запускал через subprocess.Popen, и никаких проблем.
Если нужна работа в read-only (например, любой парсинг или анализ), то тут граблей быть не должно, библиотек куча рабочих как для питона, так и для других языков.



Re: Заполнение форм PDF или "Russian, s*ka! Do you speak it?!" : 24/01/17 03:08 : Andrew Lobanov to vit01 [#] [reply]

vit01> Услышав "PDF", я порадовался и подумал, что "для него уж точно кучу всего написали, проще некуда, найду что-нибудь". Но не тут-то было!

Вот меня как раз может ожидать работа с pdf, но из питона. И там может оказаться тоже весьма весело. По крайней мере беглое гугление показало, что граблей с PDF до сих пор много где есть, что на мой взгляд очень странно.

vit01> Где же, наконец, простое и рабочее решение для автозаполнения PDF-форм?

vit01> Вот оно: https://sourceforge.net/projects/pdfformfiller2/?source=directory
vit01> Использует библиотеку iTextPdf 5 версии, написано на Java.

Спасибо за наводку. Вполне допускаю отдавать данные сторонней штуке.



Заполнение форм PDF или "Russian, s*ka! Do you speak it?!" : 23/01/17 15:51 : vit01 to All [#] [reply]

Дали мне одно задание - используя API одного сервиса для получения исходных данных, автоматически заполнять бланки для Почты России, чтобы быстро отправлять их на печать. Грубо говоря, написать импровизированного бота, который будет с этим разбираться.

Услышав "PDF", я порадовался и подумал, что "для него уж точно кучу всего написали, проще некуда, найду что-нибудь". Но не тут-то было!

Поискав на Гитхабе, нашёл оригинальную библиотеку pdf-fill-form, написанную на NodeJS. Потратил достаточно времени на разборки с тем, дабы заставить её работать, но ничего хорошего из этого не вышло. Русские символы никак не отображались. Вместо них - кракозябры, либо пустота.

Посмотрел в сети, и выяснилось, что проблема библиотеки - в зависимости от libpoppler. Баг в poppler'е затрагивает многие другие приложения, например, Evince. И проблему в последнем до сих пор можно увидеть без особых усилий.

https://bugs.launchpad.net/ubuntu/+source/evince/+bug/1288182
Представьте себе, баг по этой ссылке висит с 2008 года, но так и не исправлен!

----------

Идём по Гитхабу дальше. Все остальные репозитории с нужным мне делом представлены обёртками для программного пакета pdftk.

pdftk имеет множество фич. Можно даже сказать, что это самая популярная вещь для автоматической обработки. Он может "инспектировать" PDF-файлы, декомпилировать их, изменять внутренности и так далее. Работает на основе файлов FDF и XFDF (XML-версия формата). Туда записываются данные для заполнения в декларативном виде, затем скармливаются pdftk, и тот выдаёт заполненный результат.

Но здесь я опять потерпел неудачу. Кириллица снова отказывается отображаться. В багтрекере уже появлялись люди с похожими проблемами, но их мягко посылали. Были люди, которые предлагали обходные пути вроде дополнительных параметров, но здесь они не помогли.

В чём же проблема с ним?

Оказывается, pdftk полностью перестраивает шрифты в выходном документе, полурандомным образом удаляя некоторые из них. Были товарищи, которые советовали подключать позднее свои шрифты через костыли к полям форм, но этот способ слишком ненадёжный и неочевидный. Баг до сих пор толком не исправлен, хотя поддержка юникода, говорят, улучшилась в pdftk с 2 версии (которую я и использовал). Пользователям из России говорят, что эта самая поддержка в pdftk сделана с существенными ограничениями.

-----------

Где же, наконец, простое и рабочее решение для автозаполнения PDF-форм?

Вот оно: https://sourceforge.net/projects/pdfformfiller2/?source=directory
Использует библиотеку iTextPdf 5 версии, написано на Java.

Установка после распаковки zip-а:

1. Требуется OpenJDK 7 или 8
2. Надо скачать iTextPdf отсюда: https://github.com/itext/itextpdf/releases/tag/5.5.10
3. Затем распаковать jar-файлы и положить их в lib/ к pdfformfiller-у
4. Компилируем обёртку
javac -d . -cp lib/itextpdf-5.5.10.jar PdfFormFiller.java

5. Делаем скрипт для запуска утилиты
java -classpath .:lib/itextpdf-5.5.10.jar PdfFormFiller.PdfFormFiller $1 $2 $3 etc

Всё, готово к использованию. Программа принимает в качестве ввода файл с названиями полей ввода и внешний шрифт (в формате ttf), которым надо их заполнять. Может брать данные в том числе из stdin.

Кстати, насчёт остального. Для выяснения, какие шрифты есть в документе, пригодится cli-утилита pdffonts из состава poppler.
Чтобы узнать id полей ввода в документе, можно использовать pdftk file.pdf dump_data_fields, либо сам pdfformfiller, в котором это предусмотрели (см. справка).



Re: Уведомления для IDEC Mobile : 09/10/16 08:39 : vit01 to vit01 [#] [reply]

Итак, за что проголосует народ? Может быть, есть, что предложить получше?



Уведомления для IDEC Mobile : 09/10/16 08:36 : vit01 to All [#] [reply]

Подумал тут насчёт продумывания сабжа и зашёл в тупик.

Есть несколько вариантов:

1. Как в ServerListener. Поступление новых сообщений отслеживается через /x/c. Если они имеются, то выводится уведомление: "Новых сообщений: <число>", но при этом ничего на устройство не скачивается. Когда пользователь жмёт на оповещение, то запускается фетчер.

Плюс подхода - избежание "неожиданных ситуаций". Предположим, в эхе ii://pipe.2032[*][*] решил нагадить бот/спамер и закинул туда 50000 сообщений. Пользователь смотрит на оповещение и думает: "Ага, что-то тут нечисто!". Потом идёт проверять станцию, а база на телефоне остаётся в чистоте от мусора.

Либо по-другому: любители разного чтива закинули куда-нибудь в ii://lit.14[*][*] сразу 50 огроменных рассказов. У пользователя на мобильном интернете остаётся мало трафика, и он осознанно решает не фетчить сообщения до прихода домой, чтобы сэкономить несколько мегабайт.

Минус подхода - использование /x/c. Не все ноды его поддерживают, а фичу хочется для любых станций сразу.

2. Подход "фонового фетча". Фетчер сам запускается и сам фетчит сообщения, а пользователю только говорит о результатах.

Плюсы - универсальность для всех нод и относительная простота реализации.
Минусы - незащищённость базы от спама и от большого трафика.

3. Смесь первого и второго подхода. Делаем проверки не по /x/c, а по индексу, то есть по /u/e.
// Можно даже сделать так, чтобы ноды c /x/c проверялись именно по нему, а ноды без /x/c - по индексу.

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



Re: Android клиент : 05/10/16 06:16 : vit01 to btimofeev [#] [reply]

btimofeev> Я исправил тот самый баг с удалением свайпом в черновиках (сделай пулл) и добавил поясняющую иконку на фон при удалении. Можно еще и undo реализовать будет.

Ура! Это очень круто, спасибо! Пересобрал только что и очень доволен.

Undo, наверное, будет лишним.



Re: Android клиент : 04/10/16 22:17 : btimofeev to vit01 [#] [reply]

Я исправил тот самый баг с удалением свайпом в черновиках (сделай пулл) и добавил поясняющую иконку на фон при удалении. Можно еще и undo реализовать будет.



Re: Android клиент : 04/10/16 14:06 : vit01 to btimofeev [#] [reply]

Что-то неполадки были в жаббере, поэтому можно продолжить дискуссию здесь:

В фетчере я вообще ничего не менял, он работает по-старому, поэтому пока вот так:

1. Какие у тебя настройки были для каждой станции?
2. Увеличивал ли ты лимит /u/e, использовал ли автоконфигурацию?
3. Включал галочку "Качать сообщения дальше"? Не очень я это доработал, так что здесь косяк может быть.



Re: Android клиент : 27/09/16 05:41 : Difrex to vit01 [#] [reply]

vit01> Если будет удача в исправлении багов, с конца следующей недели планирую выкладывать APK для тестирования.



Re: Android клиент : 17/09/16 06:13 : btimofeev to vit01 [#] [reply]

Я залил в твой репозиторий небольшой багфикс (вчера не досмотрел). Сделай у себя git pull.



Вопрос программистам : 13/09/16 07:27 : vit01 to All [#] [reply]

Среди вас кто-нибудь использует на работе или в собственных проектах технологии или наработки на основе нейронных сетей?

Если да, то какие именно? Что интересного можете припомнить в этой практике?



Re: С этим надо бы в ru.humor.14, да тольно оно не на русском языке : 05/09/16 13:24 : vit01 to Andrew Lobanov [#] [reply]

Как раз читал недавно новый холивар на Хабре на эту тему.

Мой главный аргумент, почему табы рулят - это то, что когда хочешь нажать Backspace/Delete для удаления пустого места, то надо сделать это всего 1 раз, а не 4.

В Emacs мне удалось частично побороть эту проблему на пробел-конфигурациях, но только лишь частично.
Просто некоторые major-modes для языков могут насильно сбивать настройки написанных костылей.

В Android-studio (хоть и не на 100%) возню с пробелами компенсирует функция "code beautifier'а".



С этим надо бы в ru.humor.14, да тольно оно не на русском языке : 05/09/16 12:49 : Andrew Lobanov to All [#] [reply]

В очередном треде tabs vs. spaces было обнаружено прекрасное:

butlerpcnet * 5 years ago

YES! Another strong win for us Tab people! Thank you :) another disadvantage of space-indented code is what I call the "asshole" principle. If I were using spaces to indent? I could be an asshole and indent with 1 space per level! Any normal person thah opens the file would have to make sure his/her IDE or text editor is configured correctly to convert the spaces, and convert back (like you said with committing). It's just a mess.

butlerpcnet * 3 months ago

Comming back to reverse my opinion! I'm now a 4-spaces indenter!! Python 3 standard is 4 spaces, and PHP PSR-2 standard is also 4 spaces. Go away tabs!!



Re: Android клиент : 04/09/16 14:49 : vit01 to vit01 [#] [reply]

Если будет удача в исправлении багов, с конца следующей недели планирую выкладывать APK для тестирования.



Re: Android клиент : 04/09/16 14:41 : vit01 to vit01 [#] [reply]

Текущий прогресс:

1. Сделал дизайн куска сообщения и впихнул его в EchoView-Activity
2. Написал топорный xml для полного просмотрщика сообщений

В планах:

1. Реализовать фрагмент и заодно отдельную активити для просмотрщика сообщений
2. Впихнуть его внутрь ViewPager, чтобы переключать сообщения свайпом
3. Сделать "бесконечную прокрутку" для уже более-менее рабочего RecyclerView
4. Приукрасить всё, чтобы более-менее прилично выглядело (нескучные иконки)
5. Починить баги с DebugActivity, с поиском в БД и c запросом одного отдельного сообщения

Не наступаю ли на где-нибудь на грабли? Можно ли сделать лучше? Вот особенно для пункта 3 сомнения.

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



Re: Android клиент : 31/08/16 07:34 : vit01 to btimofeev [#] [reply]

btimofeev> По поводу версий sdk и библиотек: ты не можешь использовать buildtools выше 23.0.1? Support библиотеки 24 версии тоже не работают? Просто чтобы не получилось что я обновлю версии, а у тебя компилироваться не будет.

buildtools точно не получится.

Support-библиотеки (support, design, appcompat) только что поменял на 24 ради эксперимента. IDE сказала, что, дескать, неправильно разные build-tools под разные библиотеки ставить, но проект пересобрался и вроде работает.

На гитхаб оно только что ушло, посмотри build.gradle

// в джаббер тебя добавил, но ты вроде как оффлайн



Re: Android клиент : 31/08/16 07:04 : btimofeev to vit01 [#] [reply]

По поводу версий sdk и библиотек: ты не можешь использовать buildtools выше 23.0.1? Support библиотеки 24 версии тоже не работают? Просто чтобы не получилось что я обновлю версии, а у тебя компилироваться не будет.

И у тебя есть jabber или что-то подобное, возможно некоторые вопросы было бы удобнее в чате решать. (мой jabber btimofeev@jabber.ru)



Re: Android клиент : 31/08/16 06:29 : vit01 to btimofeev [#] [reply]

Хорошо, делай на своё усмотрение.

Кстати, RecyclerView, насколько видно по документации, довольно неплохая штука.
Попробую прикрутить его после того, как кое-какие свои баги наисправляю.



Re: Android клиент : 31/08/16 06:13 : btimofeev to vit01 [#] [reply]


vit01> Дал тебе RW-доступ в репозиторий; коль желание есть, можешь прикрутить самостоятельно.

Хорошо, займусь этим. Но я буду использовать библиотеку Material Drawer, вместо реализации из библиотеки Design, она проще в использовании, кода меньше, никаких xml файлов и она использует библиотеку Android-Iconics для отображения векторных и шрифтовых иконок (последнее оказалось удобной штукой, не нужно качать кучу иконок разных размеров, просто указываешь имя иконки в шрифте, а библиотека сама масштабирует).



Re: Android coding : 31/08/16 00:54 : vit01 to btimofeev [#] [reply]

btimofeev> Сегодня попробовал Instant Run в Android Studio. Это офигительная штука!

Без неё вообще никак. Правда, есть баги: когда изменений всего на пару строк, то IDE может сообщить, что никаких изменений вовсе и не было. Тогда приходится нажимать "rebuild project" и ждать положенные несколько минут.



Re: Android клиент : 31/08/16 00:54 : vit01 to btimofeev [#] [reply]

Так, перейдём сюда, чтобы людей не смущать. Как раз эхотаг.

btimofeev> А в чем проблема с SharedPreferences (я с ними никогда не работал)?

1. Чтобы хранить вложенные значения, нужны костыли. Например, люди предлагают всё тот же JSON
2. PreferenceActivity, который работает в связке с этим делом, имеет скудный набор виджетов (например, те же кастомные списки для эхолиста не сделать вообще)
3. Надо реализовывать всё через PreferenceFragment; это довольно небыстро (для кодинга в том числе) и заставляет пользователя дольше кликать, чтобы добраться до нужной настройки

btimofeev> А с json просто работать через библиотеку https://github.com/google/gson

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



Re: Android coding : 30/08/16 22:04 : btimofeev to vit01 [#] [reply]

Сегодня попробовал Instant Run в Android Studio. Это офигительная штука! Перекомпиляция, загрузка на телефон и перезапуск приложения занимает около двух секунд. Раньше на это у меня в районе минуты уходило. Здорово время экономит когда нужно делать много мелких правок и постоянно смотреть на результат.



Re: Android coding : 26/08/16 01:21 : vit01 to btimofeev [#] [reply]

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

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



Re: Android coding : 25/08/16 18:04 : btimofeev to vit01 [#] [reply]

vit01> Мой рабочий SDK 24.0.0 с build-tools и platform-tools 23.0.1

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



Re: Android coding : 27/07/16 04:12 : vit01 to btimofeev [#] [reply]

btimofeev> Напиши, пожалуйста, свои версию gradle плагина, и что ты пишешь в compileSdkVersion и в buildToolsVersion.

====
    compileSdkVersion 23
buildToolsVersion "23.0.1"
====



При этом в dependencies

====
    compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:support-v4:24.0.0'
compile 'com.android.support:design:24.0.0'
====



Всё для gradle вот:

====
classpath 'com.android.tools.build:gradle:2.1.2'
====



====
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
====




Re: Android coding : 26/07/16 19:41 : btimofeev to vit01 [#] [reply]

vit01> Мой рабочий SDK 24.0.0 с build-tools и platform-tools 23.0.1

Напиши, пожалуйста, свои версию gradle плагина, и что ты пишешь в compileSdkVersion и в buildToolsVersion. Чего-то с твоим сдк у меня всякие разные ошибки валятся: то он обнаруживает что в папке с 24 build tools лежат 23, то когда я симлинк удалил gradle не может найти библиотеки firebase (думаю, может они не поддерживаются старым плагином).



Re: Android coding : 26/07/16 18:16 : vit01 to btimofeev [#] [reply]

btimofeev> Если не сложно выложи пожалуйста.

Мой рабочий SDK 24.0.0 с build-tools и platform-tools 23.0.1

http://ii-net.tk/ii/files/sdk-24-tools-23.tar.xz



Re: Android coding : 26/07/16 16:30 : btimofeev to vit01 [#] [reply]


vit01> У тебя есть Swap-раздел на старом ноуте? Последний раз, когда gradle зависал, его подключение помогло.

Да, был в виде файла. Здесь тоже есть, но как отдельный раздел. Так что дело в чем то другом видимо.

vit01> Версия SDK тоже 23 или другая? Могу заархивировать собственный и выложить на сервер, если надо.

SDK 23, build tools я пробовал 23.0.3 и 23.0.2, platform tools были 24 (они уже 64х разрядные) я на их место скачал тоже 23.

Если не сложно выложи пожалуйста.



Re: Android coding : 26/07/16 14:38 : vit01 to btimofeev [#] [reply]

btimofeev> Build tools все поставил 23 версии, так как они 32 битные. Причем виснет даже на сборке хелловорлда. И вот не понятно что теперь делать. Никто с таким не сталкивался?

Примерно сталкивался. У тебя есть Swap-раздел на старом ноуте? Последний раз, когда gradle зависал, его подключение помогло.
Версия SDK тоже 23 или другая? Могу заархивировать собственный и выложить на сервер, если надо.



Re: Android coding : 26/07/16 13:08 : btimofeev to vit01 [#] [reply]

Что-то у меня тоже беда со сборкой. Так как нетбук мой умер, сегодня я скачал свой проект на старый комп с хубунтой. Запускаю сборку, а gradle виснет на стадии app:mergeDebugResources. Build tools все поставил 23 версии, так как они 32 битные. Причем виснет даже на сборке хелловорлда. И вот не понятно что теперь делать. Никто с таким не сталкивался?



Re: Android coding : 12/07/16 13:56 : btimofeev to vit01 [#] [reply]

vit01> Пробовал запускать версию 1.4/1.5 буквально в прошлом году. Девайс виснет намертво (примерно на этапе компиляции проекта).

Я пользовался начиная с самых первых бета версий и до 2.* включительно. С зависаниями сталкивался если только помимо студии запустить еще что-то тяжелое, потипу браузера. Тогда не хватает ни памяти, ни свопа.

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

vit01> Про поддержку Python3 Андрей уже сказал ранее.

У них в бложике последние записи на тему того, что они добавляют поддержку 3 пайтона. https://kivy.org/planet/

vit01> С GoLang дел не имел пока. На текущий момент его осваивать как-то не хочется.

Язык по-моему достаточно хорош. Он маленький, простой и при этом напоминает помесь Си и скриптовых языков. Некоторые советуют учиться на этих простых примерах https://gobyexample.com/ Они покрывают (почти?) весь язык и часть стандартной библиотеки.



Re: Android coding : 12/07/16 13:06 : vit01 to btimofeev [#] [reply]

vit01>> На моём ящике с двумя гигами писать для андроида, мягко говоря, проблематично. На нетбуке же (1ГБ) невозможно в принципе (уже пробовал).

btimofeev> Я на нетбуке пользовался android studio в течении последних трех лет. Нетбук с 1 гб оперативки и 1.6 Ггц intel atom. Но конечно тормозит оно жестоко.

Пробовал запускать версию 1.4/1.5 буквально в прошлом году. Девайс виснет намертво (примерно на этапе компиляции проекта).

btimofeev> И на python'е плюс kivy.

У kivy есть существенные недостатки, как по мне. Во-первых, недостаёт важных модулей (например, ctypes). Во-вторых, kivy до сих пор не имеет достойного редактора форм (у Qt есть очень удобный Qt Designer), и их придётся писать вручную. Есть, конечно, Kivy Designer, но он настолько сильно тормозит и много падает, что ему даже альфа-статус присваивать рано.

Про поддержку Python3 Андрей уже сказал ранее.

С GoLang дел не имел пока. На текущий момент его осваивать как-то не хочется.



Re: Google и x86_32 : 12/07/16 11:45 : Andrew Lobanov to btimofeev [#] [reply]

> И на python'е плюс kivy.

Вроде, там какие-то проблемы с третьим питоном, но для себя именно такой вариант на будущее рассматриваю. Пайтон, киви и бульдозер =)



Re: Google и x86_32 : 12/07/16 11:37 : btimofeev to Andrew Lobanov [#] [reply]

AL> Не хочу C++. Правда яву я хочу ещё меньше =)

А мне вот наоборот ява нравится больше cpp.

Еще под андроид можно на go писать. И на python'е плюс kivy. Правда сам я это все не пробовал.



Re: Google и x86_32 : 12/07/16 11:37 : btimofeev to vit01 [#] [reply]

Тоже с этим столкнулся, пришлось ставить
adb и сопутствующие тулзы из репозитория дистрибутива и копировать в папку android studio.

vit01> На моём ящике с двумя гигами писать для андроида, мягко говоря, проблематично. На нетбуке же (1ГБ) невозможно в принципе (уже пробовал).

Я на нетбуке пользовался android studio в течении последних трех лет. Нетбук с 1 гб оперативки и 1.6 Ггц intel atom. Но конечно тормозит оно жестоко.



Re: Google и x86_32 : 12/07/16 04:38 : vit01 to Andrew Lobanov [#] [reply]

AL> Не хочу C++. Правда яву я хочу ещё меньше =)

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

Я вон тоже мечтаю, чтобы с комфортом можно было писать GUI и на питоне, и на лиспах, и даже на Lua каком-нибудь. В идеале даже прикручивать собственные shared-libraries с любыми биндингами для языков. А ещё чтобы можно было делать пакетирование для андроида полностью из CLI (в том числе на самом девайсе).

Что ж, видимо, прогресс идёт совсем в другую сторону.



Re: Google и x86_32 : 12/07/16 04:21 : Andrew Lobanov to vit01 [#] [reply]

Не хочу C++. Правда яву я хочу ещё меньше =)



Re: Google и x86_32 : 12/07/16 04:20 : Andrew Lobanov to vit01 [#] [reply]

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

Эта общая тенденция нынче. 32-разрядные системы постепенно уходят в прошлое, так как с них уходят разработчики и им лень заниматься сборкой. И везде или мелким шрифтом или молча это делают.



Re: Google и x86_32 : 12/07/16 04:14 : vit01 to vit01 [#] [reply]

И ещё немного упрёков в сторону продуктов сабжа. В системных требованиях для Android Studio указано, что минимальный объём ОЗУ должен быть 2 гига, а рекомендуемый - 8.

На моём ящике с двумя гигами писать для андроида, мягко говоря, проблематично. На нетбуке же (1ГБ) невозможно в принципе (уже пробовал).

Гугл, ты серьёзно? 8 гигов оперативы для мелкого Android-HelloWorld?

Короче, парни, пишите на C++ и Qt. Да, у них тоже есть свои минусы, но зато гораздо ниже системные требования, и оно работает на 32-битных системах. А поддержка Андроида и кроссплатформенности у Qt со временем постоянно улучшается. Кроме этого, можно писать в любимом Vim/Emacs.



Google и x86_32 : 12/07/16 04:02 : vit01 to All [#] [reply]

Корпорация постепенно избавляется от поддержки 32-битных систем в своих инструментах для разработчиков. Так опытным путём я выяснил, что последняя рабочая версия SDK - 24, при этом в ней надо ещё заменить подкаталог build-tools на такой же из 23.0.1.

Последний рабочий вариант NDK - версия 10.

Если попытаться обновить SDK через встроенный конфигуратор, на следующий раз он просто не запустится. И даже не выдаст предупреждения, дескать, "ставится только 64-битная сборка, вы уверены?"

В официальных ChangeLog об изменениях написано вскользь и мелким шрифтом.

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



Re: cmus : 13/06/16 18:02 : vit01 to btimofeev [#] [reply]

btimofeev> Можешь еще посмотреть код deadbeef'а, у него внутри плагина доступна функция для добавления нескольких треков.

deadbeef как раз на разные сомнительные штуки имеет функцию плагиноинициализации. Здесь я сделал подобную вещь и тем самым завершил перенос функций добавления плейлиста внутрь плагинов.

Посмотрим, что разработчик ответит: https://github.com/cmus/cmus/pull/460



Re: cmus : 06/06/16 04:52 : btimofeev to vit01 [#] [reply]

Можешь еще посмотреть код deadbeef'а, у него внутри плагина доступна функция для добавления нескольких треков.



Re: cmus : 05/06/16 15:46 : vit01 to btimofeev [#] [reply]

Разработчик мне только сегодня ответил. Пишет, что времени на просмотр кода у него очень мало, но подбадривает и говорит, чтобы я продолжал. Как сделаю большую часть, то пулл-реквест открою.
С кодом cd посложнее будет, потому что там инициализация модуля в самом коде находится. Больше всего вопросов по коду определения типа файла. Но ничего, зато нескучно будет.

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



Re: cmus : 27/05/16 16:33 : btimofeev to vit01 [#] [reply]

vit01> Проталкивать в апстрим пока страшновато (несмотря на то, что моя ветка уже собирается и не сегфолтится).

Лучше создай заранее issue с обсуждением изменений или напиши на почту майнтейнеру приложения (его ник flyingmutant, он из России, на почту он нормально отвечает), так как он делает код ревью и отправляет на доработку если ему что-то не нравится (мой простенький vtx плагин со второго или третьего раза принял, точно не помню).



Re: cmus : 27/05/16 15:55 : vit01 to vit01 [#] [reply]

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

Проталкивать в апстрим пока страшновато (несмотря на то, что моя ветка уже собирается и не сегфолтится).



Re: Несетевые проекты : 25/05/16 01:49 : vit01 to btimofeev [#] [reply]

btimofeev> Могу предложить поучаствовать в относительно крупном проекте. Есть очень неплохой консольный музыкальный плеер cmus.

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



Re: emuchip-qt : 25/05/16 01:49 : vit01 to btimofeev [#] [reply]

vit01> // Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.
btimofeev> А мне они уже не нравятся, слишком сложный язык, по-моему.

Смотря с чем сравнивать. Вот если сравнить C++ & Qt с Java на андроиде, то первая связка гораздо приятнее в работе.
А так на питоне проще всего делать. Вот хорошее отличие от питоновского PyQt в том, что не надо заморачиваться с импортами разных фич (т.е. не надо помнить заранее, какая вещь в каком классе находится).



Re: emuchip-qt : 24/05/16 15:30 : btimofeev to vit01 [#] [reply]

vit01> Надо бы какой-нибудь покрупнее проект найти.

Могу предложить поучаствовать в относительно крупном проекте. Есть очень неплохой консольный музыкальный плеер cmus. У его плагинной системы один недостаток: из плагина нельзя добавить несколько треков в плейлист (это нужно для музыкальных форматов в которых в одном файле может содержаться несколько треков). К примеру в плагинах поддержки cue и cd это сделано хаками: часть кода плагина содержится в коде программы. И это сильно усложняет написание подобных плагинов + при компиляции плагина нужно перекомпилировать и программу. Текущий майнтейнер проекта не против изменений, но никто за реализацию этого так и не взялся.

vit01> // Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.

А мне они уже не нравятся, слишком сложный язык, по-моему.



Re: emuchip-qt : 24/05/16 13:48 : vit01 to btimofeev [#] [reply]

Хочется ещё и ещё кода понаписать. ;)

Надо бы какой-нибудь покрупнее проект найти.

// Плюсы, кстати, неплохая вещь, особенно, в связке с Qt. Жаль, что раньше никогда почти дел с ними не имел.



Re: emuchip-qt : 24/05/16 10:34 : btimofeev to vit01 [#] [reply]

vit01> Починил проблему с полосой, установив EventFilter на событие изменения размера меню.

Работает, спасибо. Кстати, добавь себя в файл authors.



Re: emuchip-qt : 24/05/16 05:02 : vit01 to vit01 [#] [reply]

Починил проблему с полосой, установив EventFilter на событие изменения размера меню.
Заодно сделал получение объекта menuBar единичным, а то как-то не очень хорошо для каждого раза заново метод вызывать.



Re: emuchip-qt : 23/05/16 19:43 : vit01 to btimofeev [#] [reply]

Хорошо. А я тут наконец-то выяснил, почему появляется та самая белая полоса внизу окна. Это происходит из-за того, что размеры окна становятся больше, чем размер [холста + меню].

У тебя есть функции set1x(), set2x() и так далее. Внутри них есть такой кусок кода:

====
setFixedSize (512, 256 + menuBar()->height()); // например, так
====



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

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



Re: emuchip-qt : 21/05/16 18:02 : btimofeev to vit01 [#] [reply]

vit01> О, а кода там совсем немного. Уже сейчас успел отправить, можно мержить, собирать и проверять.

Спасибо, смержил.

Насчет производительности: демки qt отрисовывают тысячи объектов с огромной скоростью, тут же отрисовка сотни квадратов порой тормозит. Особенно заметно на демках типа Climax Slideshow, на высоких разрешениях.

Я тут еще антиалиайсинг отключил, как то упустил его при портировании на qt5.



Re: emuchip-qt : 21/05/16 09:48 : vit01 to vit01 [#] [reply]

О, а кода там совсем немного. Уже сейчас успел отправить, можно мержить, собирать и проверять.



Re: emuchip-qt : 21/05/16 09:16 : vit01 to btimofeev [#] [reply]

btimofeev> 2. ..... Вот передача этого массива между объектами реализована полным копированием, а не передачей указателя. Все мои попытки передать указатель заканчивались segfault'ом. Здесь наверное сказывается мое плохое знание c++, либо неправильная архитектура.

У меня получилось решить эту проблему. Вот приду с репетиции вечером, причешу код немного и закину на Гитхаб.
Правда, производительность только чуть-чуть повысилась, но всё же.

Над qt-шной пустой полосой пока думаю.



Re: Несетевые проекты : 19/05/16 13:13 : btimofeev to vit01 [#] [reply]

vit01> Если руки дойдут, то и над этим голову поломать можно. Можно поподробнее, что за ошибки?

1. При изменении размера окна внизу появляется пустая полоса в несколько пикселей. Не понимаю откуда она берется.

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



Re: Несетевые проекты : 19/05/16 12:33 : vit01 to btimofeev [#] [reply]

Серьёзная вещь, надо бы посмотреть.

btimofeev> Но в эмуляторе есть пара ошибок, которые я так и не решил (одна связана с размером окна Qt, вторая с указателями c++).

Если руки дойдут, то и над этим голову поломать можно. Можно поподробнее, что за ошибки?

btimofeev> // а вообще я всегда хотел написать эмулятор Sega Mega Drive, но думаю не дорос еще))

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



Re: azot : 19/05/16 12:19 : vit01 to vit01 [#] [reply]

Сделал в сабже вот что:

* Инициализация дисплея для иксов теперь проходит только один раз
* В конфиге можно задавать самому задержку для проверки курсора
* Конфиг в самом начале не надо копировать вручную, программа сделает это сама
(вариант копирования из /usr/share/doc/ тоже работает)
* Теперь азот работает не на втором питоне, а на третьем

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



Re: Несетевые проекты : 19/05/16 12:03 : btimofeev to All [#] [reply]

У меня из проектов на гитхабе самое интересное https://github.com/btimofeev/emuchip

Это была моя попытка написать эмулятор простейшего компьютера, на примере Chip8 и SuperChip. Все игры для этих систем работают (за исключением одной, кажется). Но в эмуляторе есть пара ошибок, которые я так и не решил (одна связана с размером окна Qt, вторая с указателями c++).

// а вообще я всегда хотел написать эмулятор Sega Mega Drive, но думаю не дорос еще))



Re: Несетевые проекты : 18/05/16 08:51 : vit01 to Difrex [#] [reply]

Difrex> ЗЫ: Покажи свои проекты, интересно :)

Если зайдёшь ко мне на гитхаб, то убедишься в том, что смотреть там особо нечего :)
// за исключением сетевых проектов, только это не в счёт

Хотя есть кое-что: https://github.com/vit1-irk/timeleft
Андроид-приложение для товарищей школьников, которое позволяет отслеживать расписание занятий (уроки/пары, перемены). Появилось после экспериментов в ii://linux.14[*][*] по NDK: ii://RZdZbVEHDhzU8UcpWJsF[*][*]
Простое, как валенок, но зато имеет неплохой UI и поддерживает уведомления.



Re: azot : 18/05/16 08:51 : vit01 to Difrex [#] [reply]

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

Заглянул в исходники X.py из азота. Там такой интересный кусок кода:

====
def get_cursor_position():
while 1:
try:
data = display.Display().screen().root.query_pointer()._data

return {'x': data['root_x'], 'y': data['root_y']}
====



Смущает очень сильно, что ты инициализируешь объект display через display.Display() каждый запуск этой функции. Если учесть, что это происходит постоянно раз в секунду, я не удивляюсь, что иксам это сильно надоедает ;)

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

У меня уже план есть по сабжу:

1. Переписать на python3
2. Убрать костыли и повысить производительность
3. Сделать опцию для ручного указания задержки в конфиге
4. Сделать автоматическую подгрузку конфига, чтобы в самый первый раз не вручную копировать

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



Re: azot : 18/05/16 07:06 : Difrex to vit01 [#] [reply]

>Для производительности можно переписать сабж на Си, но вряд ли будет сильный прирост.
Я думал на счет Go :). Но проблема не в этом.

>Что думаешь?
Например, у меня на федоре иксы через примерно час начинают отлупливать соединения от Azot, типа, слишком часто. Скорее всего надо один раз подключаться и работать в пределах этой сессии, но как это сделать - я не знаю.

>удивило, кстати, что python2, а не python3
Привык я ко второму питону, но там под третий совсем немного переписывать.


ЗЫ: Покажи свои проекты, интересно :)



Re: azot : 16/05/16 12:53 : vit01 to Difrex [#] [reply]

Difrex> Жрет ресурсы не в себя. Там постоянно опрашивается положение курсора.

Вроде бы, это единственный рабочий способ для иксов.

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

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

Для производительности можно переписать сабж на Си, но вряд ли будет сильный прирост.
// удивило, кстати, что python2, а не python3

Что думаешь?



Re: Несетевые проекты : 16/05/16 10:25 : Difrex to vit01 [#] [reply]

Жрет ресурсы не в себя. Там постоянно опрашивается положение курсора.
Было бы круто использовать что-то типа Inotify, но для X, а не FS.



Re: Несетевые проекты : 16/05/16 08:20 : vit01 to Difrex [#] [reply]

Difrex> Не заинтересует такая штука? https://github.com/Difrex/azot

Забавная вещь. И каковы планы по её улучшению? Делает своё дело, судя по видео, вполне исправно.



Re: Несетевые проекты : 16/05/16 08:14 : Difrex to vit01 [#] [reply]

>Итак, в PM вроде всё устоялось с фичами (если появятся ещё какие-нибудь хотелки, то пусть Денис пишет, поломаю голову).
Да, большое спасибо за коммиты :)

>Что можете предложить из того, что не связано с нашей сеткой, но интересно было бы сделать вместе?
Не заинтересует такая штука?
https://github.com/Difrex/azot



Re: Несетевые проекты : 15/05/16 16:27 : vit01 to vit01 [#] [reply]

Итак, в PM вроде всё устоялось с фичами (если появятся ещё какие-нибудь хотелки, то пусть Денис пишет, поломаю голову).

Надо ещё и больше.

Что можете предложить из того, что не связано с нашей сеткой, но интересно было бы сделать вместе?

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



Re: PM : 09/05/16 11:32 : vit01 to Difrex [#] [reply]

Difrex> Есть только проблема с отображением, если uri в ресурсе очень длинный - табличку корежит

Difrex> Я, в принципе, знаю как это поправить.

Там таблица строится очень просто - обычным дополнением пробелов справа.

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



Re: PM : 09/05/16 11:20 : Difrex to vit01 [#] [reply]

Очень классно получилось.

Есть только проблема с отображением, если uri в ресурсе очень длинный - табличку корежит: https://cloud.difrex.ru/index.php/s/txaZ77bL1KlJ562

Я, в принципе, знаю как это поправить. Спасибо, смержил в тестинг :)



PM : 09/05/16 09:05 : vit01 to Difrex [#] [reply]

В своём репозитории сабжа сделал ветку testing.

В этой ветке сделал вывод в красивую таблицу и исправил твой костыль с дублированием кода при выводе информации.
Протестируй и выскажи своё мнение.

====
./pm.pl -s -n all
====




Re: PM : 04/05/16 11:26 : Difrex to vit01 [#] [reply]


>Difrex> Да вот красивый вывод в pm -sn all, только хочется. Все руки не дошли до того, чтобы сделать это.
vit01> Он разве слишком некрасивый? Там даже цвет есть, насколько видно.
Я просто хотел сделать, как в mysql/pgsql - табличка, чтобы рисовалась.

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



Re: PM : 04/05/16 10:53 : vit01 to Difrex [#] [reply]

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

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

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

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

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

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

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



Re: PM : 04/05/16 06:48 : Difrex to vit01 [#] [reply]

>Помогу и сделаю пулл-реквест (или сейчас сделаю, если хочешь).
Делай пулл-реквест(только в AUTHORS себя не забудь добавить :), я потестю на своей базе из ~150 паролей и смержу в мастер.

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

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



Re: PM : 01/05/16 13:38 : vit01 to Difrex [#] [reply]

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

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

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

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



Re: PM : 29/04/16 16:53 : vit01 to Andrew Lobanov [#] [reply]

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

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

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



Re: PM : 29/04/16 16:33 : Andrew Lobanov to All [#] [reply]

А как вообще в сабже с безопасностью? В каком виде оно хранится? А то я чёт перловые исходники совсем не разумею, а времени на кемел бук нет пока.



Re: PM : 29/04/16 15:12 : vit01 to vit01 [#] [reply]

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

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



Re: PM : 29/04/16 13:10 : vit01 to Difrex [#] [reply]

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

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

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



Re: Несетевые проекты : 29/04/16 06:29 : Difrex to btimofeev [#] [reply]

>Сорри за оффтоп, но чем pass не устроил? https://www.passwordstore.org/
Мне он был не удобен. Мне нужен был именно плоский вывод имен, т.к. я часто использую подобное:

====
pm -sn all | tail -3
====


Так же мне хотелось xdg-open, чтобы сразу перейти по ссылке. Хотелось комментариев к паролям, и.т.д.

Короче, pass мне был не удобен и я написал свой велосипед. :)



Re: PM : 29/04/16 06:16 : Difrex to vit01 [#] [reply]

>и обнаружил, что ни DBI, ни сам sqlite не поддерживают загрузку бинаря базы данных из RAM.
Да, я знаю про это. Вообще я думал попробовать так:
* Расшифровать базу в память - тут все норм
* Подсунуть базу драйверу sqlite как файл, т.е. через \$bd

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



Re: Несетевые проекты : 28/04/16 18:16 : btimofeev to Difrex [#] [reply]

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

Сорри за оффтоп, но чем pass не устроил? https://www.passwordstore.org/



Re: PM : 28/04/16 14:39 : vit01 to Difrex [#] [reply]

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

> Store decrypted DB into RAM not in /tmp/

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

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

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

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



Re: PM : 28/04/16 14:10 : Difrex to vit01 [#] [reply]

>Жаль, что перл, а то бы TODO-шка твоя быстро опустела :) Хотя подозреваю, что там не все планы.
Ридми давно не апдейтил, а хелп в самом коде так и подавно =) Запушил



Re: PM : 28/04/16 12:25 : vit01 to Difrex [#] [reply]

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: Несетевые проекты : 28/04/16 08:19 : Difrex to vit01 [#] [reply]

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

А вот и зря. Нормального перемещения/копирования в плоских репах нет. По-этому, собственно говоря, и был написан lotly. Используется сейчас у нас в продакшене.



Re: Несетевые проекты : 28/04/16 08:19 : Difrex to vit01 [#] [reply]

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

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



Re: Несетевые проекты : 28/04/16 02:20 : vit01 to Difrex [#] [reply]

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

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

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



Re: idec.el : 28/04/16 02:13 : vit01 to Difrex [#] [reply]

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

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

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



Re: idec.el : 27/04/16 19:44 : Difrex to vit01 [#] [reply]

>Уже есть идеи, как оно будет выглядеть?
M-X idec-fetch - получаем сообщения и выводим их
M-X idec-read-echo() - Читаем сообщения в эхе
M-X idex-make-answer() - Отвечаем

И.т.д.



Re: Несетевые проекты : 27/04/16 19:40 : Difrex to Andrew Lobanov [#] [reply]

>Я за любую движуху в нашей уютной
+1

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



Re: Несетевые проекты : 27/04/16 16:41 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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

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

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

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

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

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

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



Re: Несетевые проекты : 27/04/16 15:26 : Andrew Lobanov to vit01 [#] [reply]

vit01> Что скажете?

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

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

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



Несетевые проекты : 27/04/16 14:40 : vit01 to All [#] [reply]

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

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

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

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

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

Что скажете?



Re: idec.el : 27/04/16 14:02 : vit01 to Difrex [#] [reply]

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

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

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

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



idec.el : 27/04/16 13:57 : Difrex to All [#] [reply]

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

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

Кто со мной?



Re: Emacs : 18/04/16 19:45 : Difrex to Andrew Lobanov [#] [reply]

>Какой он у тебя гламурненький.
Смесь vim+sublime ^_^

>Как такой modeline сделал?
Поставил https://melpa.org/#/airline-themes и в M-X customize-themes выбрал подходящую тему



Re: Emacs : 18/04/16 14:43 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Вроде настроил себе emacs =>

Какой он у тебя гламурненький. Как такой modeline сделал?

Difrex> Разбираюсь с org-mode.

Это очень объёмная тема. По нему даже отдельная книга есть.



Re: Emacs : 18/04/16 14:20 : Difrex to vit01 [#] [reply]

Вроде настроил себе emacs => http://storage8.static.itmages.ru/i/16/0418/h_1460989184_8354350_36199cb938.png

Разбираюсь с org-mode.

Уже перешел с pidgin на jabber.el :D



Re: Emacs : 14/04/16 10:20 : Andrew Lobanov to Difrex [#] [reply]

Difrex> А можно ли в емаксе пилить свои комбинации клавишь не на Fx?

Не понял вопроса =) Можно какие угодно комбинации лепить. Как для глобального использования, так и индивидуально для разных режимов.

Difrex> И еще: хочу выделять несколько строк, а поотом двигать их по тексту через C-Shift Up/Down. Можно такое сделать?

Не сталкивался с такой необходимостью. Надо гуглить расширения.



Re: Emacs : 14/04/16 09:50 : Difrex to Andrew Lobanov [#] [reply]

А можно ли в емаксе пилить свои комбинации клавишь не на Fx?
И еще: хочу выделять несколько строк, а поотом двигать их по тексту через C-Shift Up/Down. Можно такое сделать?



Re: Emacs : 13/04/16 13:00 : vit01 to Andrew Lobanov [#] [reply]

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

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

====
#!/bin/bash

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



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



Re: Emacs : 13/04/16 12:08 : Andrew Lobanov to Difrex [#] [reply]

Difrex> ЗЫ: Может подскажете мне по настройке Емакса что-нибудь? Гайды там кикие-нибудь?

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

// В плане редактирования кода мне хватает просто дополнительных режимов (mode). Собственно, lua-mode и php-mode. Ещё отключены меню, тулбар и скроллбар. На F8 навешан linum-mode (нумерование строк для удобной навигации по коду) и включен автометом visual-line-mode (перенос по словам).

====
;; Добавляем пути для поиска нужных библиотек и расширений
(add-to-list 'load-path "~/.emacs.d/lisp/lua-mode/")
(add-to-list 'load-path "~/.emacs.d/lisp/php-mode/")

;;;
;;; Appearance
;;;
;; Disable GUI components
(tooltip-mode -1)
(menu-bar-mode -1) ; disable menu-bar
(tool-bar-mode -1) ; disable tool-bar
(scroll-bar-mode -1) ; disable scroll-bar
(blink-cursor-mode -1) ; disable cursor blink
(setq use-dialog-box nil) ; disable gui dialogs
(setq redisplay-dont-pause t) ; better buffer draw
(setq ring-bell-function 'ignore) ; disable bell
(setq inhibit-splash-screen t) ; disable splash screen
(setq ingibit-startup-message t) ; disable startup message
(setq frame-title-format "GNU Emacs: %b") ; display the name of the current buffer in the title bar
(show-paren-mode t) ;; paren highlignt
(global-visual-line-mode t)
(setq column-number-mode t) ;; display column numver at modeline

;; Display current time in modeline
(setq display-time-string-forms
'((propertize (concat "[" 24-hours ":" minutes "]"))))
(display-time-mode 1)

;; Set font
(set-default-font "Terminus-12")

;; Load and set solarized color theme
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/solarized/")
(load-theme 'solarized-dark t)

;;;
;;; Lua & php modes
;;;
(require 'lua-mode)
(require 'php-mode)

;;;
;;; Other
;;;
(delete-selection-mode t) ; delete selection by input new character

;; Disable backup/autosave files
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq auto-save-list-file-name nil)

;; Scroll settings
(setq scroll-conservatively 50)
(setq scroll-margin 0)

;; Clipboard settings
(setq x-select-enable-clipboard t)
====



Ещё забыл сказать, что для программирования у меня установлена и настроена SLIME:

====
;;;
;;; SLIME
;;;
(add-to-list 'load-path "~/.emacs.d/lisp/slime/")
(require 'slime)
(setq inferior-lisp-program "/usr/bin/sbcl")
(setq slime-contribs '(slime-fancy))
====



и небольшое расширение для удобства написания игр на движке INSTEAD:

====
;;;
;;; Instead mode
;;;
(load "~/.emacs.d/lisp/emacs-instead/emacs-instead.el")
(global-set-key (kbd "<f4>") 'instead-goto-room)
(global-set-key (kbd "<f5>") 'instead-goto-obj)
(global-set-key (kbd "<f6>") 'instead-goto-dlg)
(global-set-key (kbd "<f7>") 'instead-start)
====



Остальная часть конфига к редактированию текстов не относится совершенно =)



Re: Emacs : 13/04/16 11:48 : Difrex to Andrew Lobanov [#] [reply]

>Но ценник негуманный за такой редактор ИМХО.
Ценник высок, да. Но редактора лучше я пока не нашел.

ЗЫ: Может подскажете мне по настройке Емакса что-нибудь? Гайды там кикие-нибудь?



Re: Emacs : 12/04/16 15:43 : Andrew Lobanov to vit01 [#] [reply]

Difrex>> * нормальное multiline редактирование
vit01> Что под этим имеется в виду?

Это такой режим редактирование, когда несколько курсоров одновременно реагируют на нажатия клавиш. После освоения регулярок уже не так нужно по большей части. Хотя в ряде случаев мжет быть удобно. Особенно для любителей хардкода =)

// В emacs есть расширение для этого. По мне так не хуже саблаймовского режима, но я не сильно вникал.

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

У него изначально проприетарная лицензия. Мне ещё вторая версия предлагала приобрести лицензию. Но ценник негуманный за такой редактор ИМХО.



Re: Emacs : 12/04/16 15:36 : vit01 to Difrex [#] [reply]

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

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

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

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



Re: Emacs : 12/04/16 14:47 : Difrex to vit01 [#] [reply]

>А в чём фишка Sublime и его клонов?
Клоны - отстой.

Фичи:
* настраиваемость всего и вся
* приятные кейбиндги для любого языка по-дефолту
* отличная интеграция с perl :)
* нормальное multiline редактирование
* работает реактивно(быстрее вима с кучей плагинов для достижения той же функциональности)

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



Re: Emacs : 12/04/16 08:57 : Andrew Lobanov to vit01 [#] [reply]

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

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

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



Re: Emacs : 12/04/16 07:47 : vit01 to Difrex [#] [reply]

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

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

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

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



Re: Emacs : 12/04/16 07:05 : Difrex to vit01 [#] [reply]

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



Re: Emacs : 10/04/16 13:42 : Andrew Lobanov to btimofeev [#] [reply]

btimofeev> Ещё org-mode в нем довольно крутой. Надо как-то познакомиться с ним поближе.

В своё время это послужило причиной моего перехода с вима.



Re: Emacs : 10/04/16 13:42 : Andrew Lobanov to vit01 [#] [reply]

vit01> Думал, что в емаксе что-то подобное, вот и спросил.

Учитывая мой опыт "я ещё только сформулировал хотелку, а для emacs её уже написали" наверняка есть что найти.



Re: Emacs : 10/04/16 11:32 : btimofeev to vit01 [#] [reply]

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

Я когда его запустил впервые и увидел там игры - удивился.

Ещё org-mode в нем довольно крутой. Надо как-то познакомиться с ним поближе.



Re: Emacs : 10/04/16 10:03 : vit01 to Andrew Lobanov [#] [reply]

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

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

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



Re: Emacs : 10/04/16 09:52 : vit01 to btimofeev [#] [reply]

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

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

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



Re: Emacs : 10/04/16 09:52 : vit01 to vit01 [#] [reply]

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

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

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



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



Re: Emacs : 10/04/16 05:38 : btimofeev to vit01 [#] [reply]

vit01> С Емаксом работать пока сложновато, но буду как-нибудь привыкать.

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



Re: Emacs : 10/04/16 00:15 : vit01 to Andrew Lobanov [#] [reply]

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

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



Re: Emacs : 09/04/16 17:30 : Andrew Lobanov to vit01 [#] [reply]

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

Прикол в том, что Emacs это далеко не только тектосвый редактор. Так что посмотри в сторону других его возможностей при случае. А удобнее SLIME я действительно ничего ещё в разработке не встречал.

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

А вот не знаю. С другой стороны, команды в vim тоже на английской раскладке надо вбивать. Так что переключение раскладки уже в подкорке. Но если нагуглишь решение, то делись.



Emacs : 09/04/16 16:38 : vit01 to All [#] [reply]

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

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



Re: Упрощение написания скриптов для GIMP : 30/03/16 06:49 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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



Re: Упрощение написания скриптов для GIMP : 30/03/16 06:19 : Andrew Lobanov to vit01 [#] [reply]

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

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

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

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



Re: Упрощение написания скриптов для GIMP : 30/03/16 05:46 : vit01 to Andrew Lobanov [#] [reply]

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

Оно самое.

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

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

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

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

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

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



Re: Упрощение написания скриптов для GIMP : 29/03/16 17:25 : Andrew Lobanov to vit01 [#] [reply]

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

Возможно одно из двух: или ты не привык к лиспу или твой редактор некорректно занимается автоформатированием. Но в любом случае, код вполне читаемый на выходе, но видно, что писал человек, привыкший к алголоподобному синтаксису =)

// Не знал, что в гимпе есть лисп. Спасибо за информацию.



Упрощение написания скриптов для GIMP : 28/03/16 19:15 : vit01 to All [#] [reply]

Возникла на днях задача пакетно обработать 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: Вдохновляющий текст: Write Code Every Day : 10/03/16 04:43 : Andrew Lobanov to Difrex [#] [reply]

>> The code must be Open Source and up on Github.

> Я вот, кстати, не считаю, что надо сразу тащить все на гитхаб.

Мне кажется, это надо читать, как "доступность кода с историей изменений". Хоть hg, хоть git, хоть svn с bazar. Во всяком случае именно это мне кажется хорошим тоном для Open Source проекта. В конце концов, хороший код с историей изменений и хорошими комментариями к коммитам может играть роль некоего учебного пособия помимо прочего.



Re: Вдохновляющий текст: Write Code Every Day : 02/03/16 12:12 : vit01 to Difrex [#] [reply]

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

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

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



Re: Вдохновляющий текст: Write Code Every Day : 02/03/16 11:55 : Difrex to vit01 [#] [reply]

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



Вдохновляющий текст: Write Code Every Day : 01/03/16 12:15 : vit01 to All [#] [reply]

Это надо запостить сюда полностью
Источник: 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!



Обнаружил проблему 2038 года в ii-php : 22/02/16 09:05 : vit01 to All [#] [reply]

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



"Транспорты" для базы и PHP : 21/02/16 11:36 : vit01 to All [#] [reply]

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

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

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

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



Пятая сборка клиента : 11/02/16 06:47 : vit01 to All [#] [reply]

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

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

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



Четвёртая сборка клиента : 10/02/16 04:53 : vit01 to All [#] [reply]

Исправления и улучшения можно почитать здесь:
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



Re: Третья сборка клиента : 07/02/16 13:46 : vit01 to btimofeev [#] [reply]

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

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

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



Re: Третья сборка клиента : 07/02/16 13:39 : vit01 to btimofeev [#] [reply]

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

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

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

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

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



Re: Третья сборка клиента : 07/02/16 13:18 : btimofeev to vit01 [#] [reply]

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



Re: Третья сборка клиента : 07/02/16 13:13 : btimofeev to vit01 [#] [reply]

У меня работает. Пара незначительных моментов:

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

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



Третья сборка клиента : 07/02/16 07:47 : vit01 to All [#] [reply]

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

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



Re: Вторая сборка клиента : 06/02/16 15:45 : vit01 to vit01 [#] [reply]

В общем, у меня проблемы теперь. Решил пересобрать 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
====




Re: Вторая сборка клиента : 06/02/16 07:12 : vit01 to btimofeev [#] [reply]

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



Re: Вторая сборка клиента : 05/02/16 16:44 : btimofeev to vit01 [#] [reply]

Теперь у меня редактор начал открываться, но выдает ошибку что мол не может открыть файл "C://Documents". Видимо не может обработать путь с пробелом. Ставлю gvim редактором, он просто создает и открывает файл "c://documents"



Вторая сборка клиента : 05/02/16 15:39 : vit01 to All [#] [reply]

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 08:39 : vit01 to btimofeev [#] [reply]

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 07:44 : btimofeev to vit01 [#] [reply]

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 05:27 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 05:10 : Andrew Lobanov to vit01 [#] [reply]

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

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 05:01 : vit01 to Andrew Lobanov [#] [reply]

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-клиента на винду : 05/02/16 04:15 : Andrew Lobanov to vit01 [#] [reply]

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

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 02:29 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 05/02/16 02:05 : Andrew Lobanov to vit01 [#] [reply]

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

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

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



Re: Черновая сборка для Qt-клиента на винду : 04/02/16 23:21 : vit01 to btimofeev [#] [reply]

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

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



Re: Черновая сборка для Qt-клиента на винду : 04/02/16 16:34 : btimofeev to vit01 [#] [reply]

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

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



Черновая сборка для Qt-клиента на винду : 04/02/16 14:18 : vit01 to All [#] [reply]

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

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

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



Re: Wine и Python : 04/02/16 00:48 : vit01 to btimofeev [#] [reply]

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



Re: Wine и Python : 03/02/16 21:21 : btimofeev to vit01 [#] [reply]

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

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

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



Re: Wine и Python : 03/02/16 14:13 : vit01 to vit01 [#] [reply]

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

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

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



Re: Wine и Python : 03/02/16 10:52 : vit01 to Difrex [#] [reply]

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

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



Re: Wine и Python : 03/02/16 07:56 : Difrex to vit01 [#] [reply]

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



Wine и Python : 03/02/16 04:16 : vit01 to All [#] [reply]

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

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

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



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



Re: Bash и Python развращают мозг : 14/01/16 12:26 : vit01 to vit01 [#] [reply]

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



Re: Bash и Python развращают мозг : 13/01/16 13:26 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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



Re: Bash и Python развращают мозг : 13/01/16 07:34 : Andrew Lobanov to vit01 [#] [reply]

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

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

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

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

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

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

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

- Да.

- Точно?

- Да.

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



Bash и Python развращают мозг : 12/01/16 14:32 : vit01 to All [#] [reply]

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

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

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



Re: split-sequence : 02/01/16 04:28 : vit01 to Andrew Lobanov [#] [reply]

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

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



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



Re: split-sequence : 30/12/15 08:41 : Andrew Lobanov to vit01 [#] [reply]

vit01> // ура, наконец-то кто-то из "своих" появился в ii =)

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

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

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

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



Re: split-sequence : 30/12/15 08:02 : vit01 to Andrew Lobanov [#] [reply]

// ура, наконец-то кто-то из "своих" появился в ii =)

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

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



Re: split-sequence : 30/12/15 05:18 : Andrew Lobanov to vit01 [#] [reply]

vit01> Вопрос Андрею, как знатоку CL.

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

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

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

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

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



split-sequence : 27/12/15 15:55 : vit01 to Andrew Lobanov [#] [reply]

Вопрос Андрею, как знатоку CL.

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



Читаю тут PCL : 19/12/15 15:47 : vit01 to All [#] [reply]

Сабж вполне подробный и нескучный.

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

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



node.js : 10/12/15 09:51 : Difrex to All [#] [reply]

Кто пишет под это?

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



Re: LISP : 03/12/15 16:10 : vit01 to Andrew Lobanov [#] [reply]

> PS: Я рекомендую почитать первую главу PCL (Practical Common Lisp).

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



Re: LISP : 02/12/15 16:44 : Andrew Lobanov to vit01 [#] [reply]

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 написал, имея за плечами только этот багаж).



Re: LISP : 02/12/15 14:51 : vit01 to Andrew Lobanov [#] [reply]

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

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

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

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



Re: LISP : 02/12/15 11:36 : Andrew Lobanov to Difrex [#] [reply]

Difrex> Не, не совсем то. Зато sbcl --script точно, то, что нужно.

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

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

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



Re: LISP : 02/12/15 11:34 : Difrex to Difrex [#] [reply]

>О, compile-file делает, то, что мне нужно :)
Не, не совсем то. Зато sbcl --script точно, то, что нужно.

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



Re: LISP : 02/12/15 11:27 : Andrew Lobanov to Difrex [#] [reply]

Difrex> О, compile-file делает, то, что мне нужно :)

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

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



Re: LISP : 02/12/15 11:17 : Andrew Lobanov to Difrex [#] [reply]

Difrex> О, compile-file делает, то, что мне нужно :)

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



Re: LISP : 02/12/15 11:05 : Difrex to Difrex [#] [reply]

О, compile-file делает, то, что мне нужно :)



Re: LISP : 02/12/15 10:10 : Difrex to Andrew Lobanov [#] [reply]

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

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



Re: LISP : 02/12/15 09:41 : Andrew Lobanov to Difrex [#] [reply]

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

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



Re: LISP : 02/12/15 09:39 : Andrew Lobanov to Difrex [#] [reply]

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: А синтаксис не такой уж и наркоманский. Зато позволяет легко осуществлять работу макросов и вообще. Ведь никто не запрещает передавать функции как данные, например.



Re: LISP : 02/12/15 08:49 : Difrex to Difrex [#] [reply]

Да, поставил SBCL.



LISP : 02/12/15 08:47 : Difrex to All [#] [reply]

Я тут подумал, что надо бы написать что-то на чем-то отличном от перла или питона.
Руби не хочу, ноджс тащить в систему ваще не хочется, С не люблю с института.

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

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



develop.16 : 01/12/15 09:55 : Difrex to All [#] [reply]

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




Сообщений на странице : 100 1000 Все