LINUX.ORG.RU

9
Всего сообщений: 39

Помогите мне разупороться....

В продолжении темы Аргументы за и против длинных имён функций. Я вот сидел и думал как организовывать для себя API с учётом что пользоваться буду только я один и пришёл к выводам что

  • 1- Функции должны быть маленькими и делать только что-то одно и делать это хорошо.
  • 2-Имена функций должны быть явными и исключить неоднозначности длинна именования не является важной
  • 3-Имена функций должны быть единообразными, они не должны выглядеть чужеродными внутри одного проекта
  • 4-Обработка ошибок должна быть заложена в сами функции и производится автоматически
  • 5-Если возможно избежать побочных эффектов, констант,флагов и прочего это избегается ибо пункт 1

Я решил, жёстко следовать этим правилам, по итогу у меня человеко читаемые функции которые не надо помнить ибо их имя это имя + глагол + дополнение в зависимости от контекста и всё. Да , длинно функции плодятся, но было всё здорово... пока я не пришёл к обработке клавиатуры и там у меня более 500 функций Карл! на каждую клавишу и символ, типа так

bool keyboard_event_keydown_shift();
bool keyboard_event_keyup_shift();
bool keyboard_state_key_shift();
bool keyboard_bind_key_shift(void(*callback)(bool));
bool keyboard_unbind_key_shift(void(*callback)(bool));

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

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



#ifndef cmouse_h
#define cmouse_h
#include "cgraphics.h"
#include "cengine.h"
#include "cevent.h"

typedef struct mouse mouse;
typedef struct mouse
{
    struct{
    int    position_x;
    int    position_y;
    vec2   position;
    int    relative_x;
    int    relative_y;
    vec2   relative;
    bool   keydown_left;
    bool   keydown_right;
    bool   keydown_middle;
    bool   keyup_left;
    bool   keyup_right;
    bool   keyup_middle;
    bool   wheel_up;
    bool   wheel_down;
    bool   wheel_left;
    bool   wheel_right;
    bool   evented_key;
    bool   evented_wheel;
    bool   evented_position;
    bool   evented;
    }event;
    struct{
    int    position_x;
    int    position_y;
    vec2   position;
    bool   key_left;
    bool   key_right;
    bool   key_middle;
    bool   relative_mode;
    }state;
}mouse;

/*       ==debug==        */
mouse mouse_get();
void  mouse_print(mouse mou);

/*       ==events==        */
bool  mouse_evented();

bool mouse_evented_position();
vec2 mouse_event_position();
int  mouse_event_position_x();
int  mouse_event_position_y();

vec2 mouse_event_relative();
int  mouse_event_relative_x();
int  mouse_event_relative_y();

bool mouse_evented_key();
bool mouse_event_keydown_left();
bool mouse_event_keydown_right();
bool mouse_event_keydown_middle();
bool mouse_event_keyup_left();
bool mouse_event_keyup_right();
bool mouse_event_keyup_middle();

bool mouse_evented_wheel();
bool mouse_event_wheel_up();
bool mouse_event_wheel_down();
bool mouse_event_wheel_left();
bool mouse_event_wheel_right();
/*       ==states==        */
bool mouse_state_key_left();
bool mouse_state_key_right();
bool mouse_state_key_middle();

vec2 mouse_state_position();
int  mouse_state_position_x();
int  mouse_state_position_y();

vec2 mouse_state_relative();
bool mouse_state_relative_mode();


/*     ==setters event+state==    */
void mouse_set_position(int x, int y);
void mouse_set_position_x(int x);
void mouse_set_position_y(int y);

void mouse_set_relative_mode(bool rel);

void mouse_set_relative(int x, int y);
void mouse_set_relative_x(int x);
void mouse_set_relative_y(int y);

void mouse_set_keydown_left();
void mouse_set_keydown_right();
void mouse_set_keydown_middle();

void mouse_set_keyup_left();
void mouse_set_keyup_right();
void mouse_set_keyup_middle();

void mouse_set_wheel_up();
void mouse_set_wheel_down();
void mouse_set_wheel_left();
void mouse_set_wheel_right();

/*if you need nonconflict relative status mouse
   use this template
   --------------------------------------------
   static  int curr_x=0;
   static  int curr_y=0;
   int prev_x=0;
   int prev_y=0;
   prev_x = curr_x;
   prev_y = curr_y;
   curr_x = mouse_state_position_x();
   curr_y = mouse_state_position_y();
   int rel_x = curr_x - prev_x;
   int rel_y = curr_y - prev_y;
   ---------------------------------------------
   rel_x and rel_y it actual relative 
   value for current frame time
 */

 /*              ==binds==             */
 bool mouse_bind(void(*callback)(mouse));
 void mouse_unbind(void(*callback)(mouse));
 void mouse_bind_update(void);

 bool mouse_bind_evented(void(*callback)(bool));
 bool mouse_bind_evented_key(void(*callback)(bool));
 bool mouse_bind_evented_wheel(void(*callback)(bool));
 bool mouse_bind_evented_position(void(*callback)(bool));
 bool mouse_bind_event_position(void(*callback)(vec2));
 bool mouse_bind_event_position_x(void(*callback)(int));
 bool mouse_bind_event_position_y(void(*callback)(int));
 bool mouse_bind_event_relative(void(*callback)(vec2));
 bool mouse_bind_event_relative_x(void(*callback)(int));
 bool mouse_bind_event_relative_y(void(*callback)(int));
 bool mouse_bind_event_keydown_left(void(*callback)(bool));
 bool mouse_bind_event_keydown_right(void(*callback)(bool));
 bool mouse_bind_event_keydown_middle(void(*callback)(bool));
 bool mouse_bind_event_keyup_left(void(*callback)(bool));
 bool mouse_bind_event_keyup_right(void(*callback)(bool));
 bool mouse_bind_event_keyup_middle(void(*callback)(bool));
 bool mouse_bind_event_wheel_up(void(*callback)(bool));
 bool mouse_bind_event_wheel_down(void(*callback)(bool));
 bool mouse_bind_event_wheel_left(void(*callback)(bool));
 bool mouse_bind_event_wheel_right(void(*callback)(bool));
 bool mouse_bind_state_key_left(void(*callback)(bool));
 bool mouse_bind_state_key_right(void(*callback)(bool));
 bool mouse_bind_state_key_middle(void(*callback)(bool));
 bool mouse_bind_state_position(void(*callback)(vec2));
 bool mouse_bind_state_position_x(void(*callback)(int));
 bool mouse_bind_state_position_y(void(*callback)(int));
 /*                 ==unbinds==                       */
 void  mouse_unbind_event_position(void(*callback)(vec2));
 void  mouse_unbind_event_position_x(void(*callback)(int));
 void  mouse_unbind_event_position_y(void(*callback)(int));
 void  mouse_unbind_event_relative(void(*callback)(vec2));
 void  mouse_unbind_event_relative_x(void(*callback)(int));
 void  mouse_unbind_event_relative_y(void(*callback)(int));
 void  mouse_unbind_event_keydown_left(void(*callback)(bool));
 void  mouse_unbind_event_keydown_right(void(*callback)(bool));
 void  mouse_unbind_event_keydown_middle(void(*callback)(bool));
 void  mouse_unbind_event_keyup_left(void(*callback)(bool));
 void  mouse_unbind_event_keyup_right(void(*callback)(bool));
 void  mouse_unbind_event_keyup_middle(void(*callback)(bool));
 void  mouse_unbind_event_wheel_up(void(*callback)(bool));
 void  mouse_unbind_event_wheel_down(void(*callback)(bool));
 void  mouse_unbind_event_wheel_left(void(*callback)(bool));
 void  mouse_unbind_event_wheel_right(void(*callback)(bool));
 void  mouse_unbind_state_key_left(void(*callback)(bool));
 void  mouse_unbind_state_key_right(void(*callback)(bool));
 void  mouse_unbind_state_key_middle(void(*callback)(bool));
 void  mouse_unbind_state_position(void(*callback)(vec2));
 void  mouse_unbind_state_position_x(void(*callback)(int));
 void  mouse_unbind_state_position_y(void(*callback)(int));
 
#endif

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

Короче, я хочу просто идей,как сделать по иному, не частных случаев типа «нуууу можно заменить position на pos» или «ну можно вынести всё в аргументы и завести 100500 флагов и констант»,а хочется принципиальных изменений где сочетаются пункты которые я выше указал, то как я сделал мне очень удобно, но одновременно очень не нравится ибо оно громоздко и по итогу уродливо вот чисто визуально.

 , , , ,

Deleted ()

PWA какие вести?

Звучит вкусно, вопрос, какие подвижки есть на этом фоне?

 , ,

onhydro ()

какая самая большая температура для детей?

вот у нас есть 0К --- понятно почему, все остановилось.

а есть какой-то обоснованный предел температуры? какой? почему?

 , ,

Rastafarra ()

РАЧ Линукс

(продолжение Кратко о BSD)

https://youtu.be/DKN_tkGricQ?t=2m30s
Ъ: Arch Linux плохой дистрибутив, кеды русифицируются не полностью. Арч вики годнота, но по ней лучше чинить другие дистрибутивы. Нестабильный роллинг-релиз - всё ломается, но с другой стороны именно арч подходит тем, что хочет разобраться, что и как работает в линуксах - это как автомобиль «Москвич», в котором ломалось всё, и приходилось чинить самостоятельно и разбираться в автомобилях.

 ,

TheAnonymous ()

Демка, в котрой кодят для Мс-Дос в Фотошопе

это из 2011, сори если было
кодит демку в фотошопе, для мс-дос

This is a 240 bytes long tunnel effect in MsDOS with a procedural (XOR) texture. It's so small that it can be «coded» in Photoshop by placing the right colors in the right order in a image file, then renaming it into an executable.

https://youtu.be/FvS_DG8yIqQ

скилуха конечно впечатляет

 

missxu ()

Web on нормальные языки

Всем привет! Интересуют веб-фреймворки + орм (PGSQL, MongoDB) на чем-то компилируемом. Гуглить по Golang, Rust, Crystal, Nim - я умею. Интересуют вещи на C++, C (Kore.io видел), Dlang, etc.

JVM/.Net не инетресуют.

Есть конкретно API с большой долей нагрузки (минимально на стороне базы при этом) и очень ограниченными API: расшифровать JWT, получить данные с базы, их обработать, записать точечно новые данные, выдать ответ.

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

 , , ,

silver-bullet-bfg ()

Пятницы тред

Hi all!

Вот и пришла пятница. Вот и настала время тро.. поговорить.

Меня интересует мнение коллег по четырем вопросам:

  • будущее NodeJS как платформы. Особенно ввиду того, что их активно начала спонсировать MS. В обозримом будущем так мы сможем увидеть «нативный» TypeScript (без всяких транспиллеров), то является, ИМХО, не такой плохой перспективой.
  • будущее WebAssembly. Так долго ждали и вот пришло. Кто-нибудь на нём уже писал? Интересует опыт и бека и фронта.
  • Язык Dart и его будущее. Не понятно почему не взлетевший и не понятно для кого созданный язык. Собственно фишек кроме поддержки корпорацией бобра я так и не увидел. Может я что-то не так понимаю). Есть success stories у комрадов с бека и фронта?
  • Декстопные приложения вырождаются в электрон - ИМХО это имеет и положительные и отрицательные стороны. Но каков будет дальнейший вектор? Кто как думает?

 , ,

silver-bullet-bfg ()

systemd: вопросы

установил систему на новый ноут и попробовал пожить на systemd, не получилось - снес.

что выбешивает:

  • рестартишь какого-то демона, а оно тебе и говорит «ошибка при рестарте подробности смотри в
    journalctl -xe

    Вопрос: а нельзя настроить чтобы вело себя нормально: показывало проблему сразу на экране?

  • почему
    journalctl -xe
    открывает какой-то поток логов где-то в середине и можно листать как вверх так и вниз? это для сумасшедших придумано? причем вниз листать можно на много-много экранов и там события совсем не связанные с проблемой
  • сложную сеть как я понял без GUI на хосте с systemd и настроить-то нельзя? Есть внятные хауту как не устанавливая ifupdown поднять скажем wpasupplicant?
  • как логи в нормальный читаемый режим переключить?

в общем я снёс его пока, подождём еще лет 5, может доработают до ума...

доклад окончил, украшайте

 ,

rsync ()

Инкремент

Тут, я так понял, модно ЖЖ разводить. Вчера отлично отметил двадцать восьмой день рождения. Сижу смотрю в окно, за окном Тобол и поля, слушаю сектор газа, пью пиво, жизнь удалась. По формату, как теги в цп в кои перегнать?

 , ,

kravzo ()

Электромагнетизм и человечество

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

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

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

Это я туплю или бэтмэн был не такой уж и крутой?

 ,

Deleted ()

Встреча МЛУГ

DR_SL, Goury

Где объява?!

 , , ,

Einstok_Fair ()

Компилируемая вебота

Добрый день, комрады. Такой вопрос интересует - на чем сейчас из компилируемых языков удобно/принято писать выботу? Интересует фреймворк + ОРМ + шаблонизатор.

Под интересующими языками я понимаю: DLang, Rust, C++, OCaml, Haskell, etc. Golang не предлагать (религиозно).

 , , ,

silver-bullet-bfg ()

к вопросу о жизни, смерти и всего такого.

а чем принципиально различается развал семьи, супружеская измена и, внезапно, лгбт?

ну в смысле и там и там есть общественное порицание, и там и там есть нравственный конфликт, есть внутренняя борьба с воспитанием и вот это все.

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

безотносительно того хорошо это или плохо, разница есть?

---

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

 ,

Rastafarra ()

Пятничный холивар

Наброшу тут.

Вот, хреначил я с утреца свою коронку. Было раннее утро. Бежалось легко и комфортно. В наушниках бубухал Пинк Флойд, радуя сказками о том, что жизнь только начинается, отчего горячело сердце и радужные мыслишки толпились в звонкой и пустой черепной коробке.
Из ноздрей валил пар. Одинокий топот кроссовок в кромешной предутренней мгле напоминал топот копыт Буцефала, чей скелет долго белел на просторах Индостана, пока не рассыпался от ветхости, возникающие по пути собаки шарахались по сторонам, растаскивая за собой своих спящих хозяев.
Тело предвкушало зимний отдых в горах.
В общем, было хорошо.
Внезапно захотелось странного, и бодрый мозг живо загадал себе такую животрепещащую загадку.
Вот, допустим, заканчивается контракт. Продлевать его я по каким-то причинам не хочу.
Ну, мало ли от чего жизнь может дать трещину.
Как долго может проходить процесс трудоустройства, при том, что уровень зряплатки важен, но не так, чтобы очень.
Каков в этом смысле опыт all'а?

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

 ,

Deleted ()

Переходный возраст

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

 ,

Rastafarra ()

победа пробелов над табами.

!Ъ: https://stackoverflow.blog/2017/06/15/developers-use-spaces-make-money-use-tabs/

Ъ: за пробелы платят больше чем за табы.

шах и мат, таболюбы.

 ,

Rastafarra ()

О форме Enter

Тащемта, почему сейчас в РФ так популярна американская клавиатура с прямым Enter?

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

Далее идет европейская, где энтер перевернут наоборот (напоминает букву Г). Тоже годно, хотя и не так, как предыдущая.

И наконец, с прямым, в клиническом случае совпадающим по длине с правым Shift. Кроме того, такая клавиатура у макбука детектирует владельца, купившего вместо нового б/у хлам у нигры джо, как и расположение английской буквы в середине клавиши (это значит, что rусские были нанесены гравировкой в левой конторе отдельно). Кстати, в коворкингах таких большинство, и 99% почему-то с air. Если и попадаются прошки - то толстенные и без ретины.

 , ,

svr4 ()

Десктопный дистр работающий в памяти

Делал ли кто-то такой дистр, чтобы он работал полностью в памяти. Речь не о банальном запуске read-only образа диска в read-write tmpfs, а о том, чтобы все работало из памяти, но когда речь заходит о обновлении, то обновление устанавливалось на диск и на лету обновляло копии соответствующих файлов в памяти. Таким образом при перезагрузке обновления остаются. Плюс пользователь всегда может редактировать файлы на диске напрямую через какую-то специальную точку монтирования, например /disk. Можно было бы все изменения ФС в памяти асинхронно повторять на диске, но не все файлы в этом нуждаются и как раз суть работы в памяти и заключается в том, чтобы меньше дергать диск, причем не только для чтения, но и для записи.

/home при этом может быть на физическом диске, HDD или SSD.

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

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

 ,

vertexua ()

деменция для маленьких

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

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

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

 ,

Rastafarra ()

Ubuntu touch на планшете- ваше мнение

Господа и дамы, кто уже использовал сабж? Мне начинает хотеться его попробовать пощупать. Кто то уже покупал планшет с предустановленным UT? Как он себя ведёт по сравнению с андроидом? Где купить такую железку? Я накопал какой-страшный bq aquarius за ~30к деревянных, но думаю, это перебор))))

 ,

alexnorton ()