[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: music, vector, image, code, pdf, flash, archive, text, video
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.36161 Ответ [Открыть тред]
Файл: 125860969610249.jpg
Jpg, 39.86 KB, 300×100 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
125860969610249.jpg
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
PHP >>23225
JavaScript >>40541
Pascal/Delphi >>37645
Golang >>48143

Фреймворки и библиотеки:
Ruby on Rails >>31319
Qt >>31597

Инструменты:
Vim >>33881
Emacs >>36714
Системы контроля версий >>28005

Прочие технологии:
SQL >>29820

Информатика:
Стеганография >>35350

"Кафедра сайтостроя": тред тут в /s >>31137 и тред в /u >>u/104773
Game Development тред тут >>39943 "Кафедра гейм-девелопмента" в /u: >>u/60525
Сообщение слишком длинное. Полная версия. Post was modified last time at 2017-09-26 21:53:58


No.49696 Ответ [Открыть тред]
Файл: tumblr_inline_ml09rkrmWH1qz4rgp.gif
Gif, 151.78 KB, 400×267 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tumblr_inline_ml09rkrmWH1qz4rgp.gif
Тред помощи начинающим свой долгий и тернистый путь в дебри программирования. А также необузданных оленей, код-мартышек, выбора ЯП и иных платиновых вещей.
Но в первую очередь всё-таки помощи новичкам. Всё, чтобы зашедший сюда в первый раз мог почувствовать себя как дома.
Главное - без фанатизма.

Предыдущий: >>47927
28 posts are omitted, из них 7 с файлами. Развернуть тред.
>> No.49859 Ответ
Какой язык удобнее всего для вката на бэкэнд? привлекает голанг, но как-то вакансий джунов совсем мало
>> No.49860 Ответ
>>49859
Если вакансии для джунов - движущая сила, то смотри по своему городу. В моей дыре - это C# и JS.
>> No.49862 Ответ
>>49859
Голанг новичку лучше не трогать. Пока они не починят свою утилиту сборки и не введут нормального разрешение зависимостей импортов. Зато кроссплатформенно, мм, мммм.
если кто знает как в 13 или 15 версии засунуть в бинарник ресурс манифеста под винду с возможностью выбора и хардкода путей до файлов, которые в этот бинарник попадут - буду благодарен, а пока прикрутил костыль
>> No.49867 Ответ
>>49862
Вот не соглашусь про новичков. У нас на галере как раз их набирают уже нет на голанг и через месяц-два стажировки они уже неплохо так в работу вливаются со всем модным микросервисным стеком, куда более безболезненно, чем со всякими спрингами и шарпами. А чё там с зависимостями и сборкой? Вроде элементарно же, гомод налево, госум направо и всё работает.
Либы для запихивания в бинари штук пробовал? Вроде markbates/pkger.
>> No.49879 Ответ
Навряд ли кто-то ответит, но...

Была раньше такая библиотека -- Borland Turbo Vision, в которой можно было дизайнить подобное. ну нравятся мне синие окошки с псевдографикой, почему-то. Насколько я понял, сам менеджер Far написан с использованием виндовой библиотеки ncurses. Проблема только в том, что если по борландовским вещам документации вагон и маленькая тележка, то по виндовой либе я не сумел найти нихрена (не там искал?) Что-то есть из похожего по линуксовой ncurses, но -- не та платформа.

Собственно, вопрос: можно ли где-нибудь найти примеры (относительно) простых программ с ncurses? Ибо из исходников Far manager'а я это не вытяну (увы).
>> No.49880 Ответ
>>49879
На винде оно называется pdcurses. Но оно не сложно - можешь и сам написать https://docs.microsoft.com/en-us/windows/console/console-functions
>> No.49881 Ответ
Файл: press-freedom-ranking-2020-1200px.jpg
Jpg, 451.01 KB, 1200×849 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
press-freedom-ranking-2020-1200px.jpg
>>49880
Спасибо. ^_^
>> No.49882 Ответ
Файл: 1605099077194245323.png
Png, 364.57 KB, 700×624 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1605099077194245323.png
>>49696
Как вкатиться в разработку мобильных приложений? С чего начать? Что выбрать Kotlin или JavaScript? Опыта и познаний полный ноль. Есть большое желание. Все эти платные курсы гигбрейнс и подобное развод на шекели? Чем хуже code academy?
>> No.49883 Ответ
>>49882
Прошу не делайте этого. Миру не хватает С/С++ программистов, ембед-программистов и системщиков. Найдутся индусы, которые мобилками и вебом позанимаются, не составляй им конкуренцию, их больше, они дешевле.
c: слишком нужен
>> No.49884 Ответ
>>49883
> не хватает С/С++ программистов, ембед-программистов и системщиков
Когда приходишь устраиваться на РАБоту, а тебя не берут, считаем что хватает. К тому же, оплата труда у веб макак может быть даже выше, а усилий на вкат примерно нисколько. Так что такое себе не хватает.


No.48832 Ответ [Открыть тред]
Файл: pg087.png
Png, 23.35 KB, 475×349
edit Find source with google Find source with iqdb
pg087.png
Файл: pg072.png
Png, 56.58 KB, 515×709
edit Find source with google Find source with iqdb
pg072.png
Файл: 14686072547160.png
Png, 44.08 KB, 1024×450
edit Find source with google Find source with iqdb
14686072547160.png

Как понять ООП? Я просто вот не понимаю, зачем это нужно. Безотносительно языка программирования

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

Вот допустим есть public private protected модификаторы доступа т.е. ограничения на то, откуда какой метод можно вызывать. public можно вызывать отовсюду, private только для методов из числа public, а protected ... protected становится private при наследовании, притом наследований может быть 3 вида - тоже public, private, protected... Зачем всё это? Чем это лучше просто кучи функций, которые могут просто вызывать другие функции и работать с какими-то структурами?

Или вот методы, методы это функции, которые привязаны к конкретной структуре, но что если мне нужны методы, которые связывают два разных класса? Например это может код, переводящий из вектора в растровую картинку. Этот код должен быть методом класса для растровой или векторной картинки?
85 posts are omitted, из них 6 с файлами. Развернуть тред.
>> No.49844 Ответ
>>49842
Мне нравится какой ты на все озлобленный демагог. Продолжай в том же духе, бро. Добра.
>> No.49845 Ответ
>>49841
Но ECS к ООП абсолютно перпендикулярен. То есть, вообще никакого отношения, кроме того, что его можно реализовать с помощью объектов. В реальности у тебя тут будет HitManager.do_attack( player, monster );, что есть антипаттерн.
> Все решается
Начну немного издалека, но ты потерпи.
Ещё относительно недавно на вопрос "Что такое ООП?" следовал ответ "Полиморфизм, инкапсуляция, наследование". Сейчас люди стали чуть менее категоричными, но они продолжают-таки признавать, что эти принципы есть основные киты ООП. При этом полиморфизм в ООП - сабтайпинг, о котором будет следующий абзац - это подмножество полиморфизма вообще, и полиморфизм есть, например, в StandardML, а вот ООП туда не завезли. Да что там, его можно сделать даже в сишке; тебе процесс не понравится, но можно. Инкапсуляция тоже есть как в SML, так и в сишке. Даже некоторые ассемблеры (тот же масм, который использует сишный линкер) позволяют тебе делать локальные для файла функции/переменные. Остаётся наследование. Вот это уже чистая ООПешная тема. Что забавно, ибо в последнее время программисты объектной ориентации от него открещиваются. На этом можно было бы и закончить, но я продолжу.

>>49841
Но ECS к ООП абсолютно перпендикулярен. То есть, вообще никакого отношения, кроме того, что его можно реализовать с помощью объектов. В реальности у тебя тут будет HitManager.do_attack( player, monster );, что есть антипаттерн.
> Все решается
Начну немного издалека, но ты потерпи.
Ещё относительно недавно на вопрос "Что такое ООП?" следовал ответ "Полиморфизм, инкапсуляция, наследование". Сейчас люди стали чуть менее категоричными, но они продолжают-таки признавать, что эти принципы есть основные киты ООП. При этом полиморфизм в ООП - сабтайпинг, о котором будет следующий абзац - это подмножество полиморфизма вообще, и полиморфизм есть, например, в StandardML, а вот ООП туда не завезли. Да что там, его можно сделать даже в сишке; тебе процесс не понравится, но можно. Инкапсуляция тоже есть как в SML, так и в сишке. Даже некоторые ассемблеры (тот же масм, который использует сишный линкер) позволяют тебе делать локальные для файла функции/переменные. Остаётся наследование. Вот это уже чистая ООПешная тема. Что забавно, ибо в последнее время программисты объектной ориентации от него открещиваются. На этом можно было бы и закончить, но я продолжу.

Теперь рассмотрим Liskov Substitution Principle. Это та самая L из SOLID. Ещё поговаривают, что это l из Agile и даже из Waterfall, где их сразу две. Этот принцип настолько важен, что в честь него назвали язык LISP. Я буду говорить про его ООП интерпретацию. Звучит он так: если у тебя есть базовый класс А, и есть наследующийся от А класс В, то везде, где ожидается объект класса А, можно передать объект класса Б, и семантика программы не изменится. Если подумать, то оно логично. Это, как говорят у них, цельная точка (whole point) наследования. В конце концов, если у тебя есть ящик, который может хранить фрукты, но не бананы и яблоки, а некие абстрактные фрукты, то такой ящик тебе будет не очень полезен.

Теперь, держа в голове последние два абзаца, рассмотрим пример из почти любой книжки про введение ООП в начинающих. Этот пример, например, можно увидеть в книге Страуструпа Programming: Principles and Practices in C++ (или как-то так) где-то, если я не ошибаюсь, в первых трёх-четырёх главах. Мы делаем графическую объектно-ориентированную библиотеку. У нас есть базовый класс Shape, у нас есть много-много его наследников, и мы с ним можем делать разные вещи - рисовать на экран, печатать, считать площади и т.д. и т.п.. Мы доходим до реализации классов Rectangle и Square, и у нас появляется три пути, ради рассмотрения которых всё это и писалось.

Итак, путь первый, он же не_ооп: class Rectangle extends Shape и сlass Square extends Shape
Тут всё очевидно. Никакого переиспользования кода, отношения "is a" не выражены и т.д. Любой оопрограммист скажет тебе, что это неправильно и никто так не делает, а если делает, то он дурак и должен получать клавиатурой по голове пока не осознает. Ну, или хоть пусть какого-нибудь Буча почитает. Поэтому...

...Путь второй, он же очевидный и неправильный: class Rectangle extends Shape и class Square extends Rectangle
И вроде бы тут не к чему придраться, но я не просто так же написал абзац про LSP выше. Рассмотрим код
```function scale( r:Rectangle ) {
r.width *= 10;
r.height *= 2;
}
scale( new Square( 4 ) );
```Этот код скомпилится, но он нарушает LSP. Более того, тут почти undefined behaviour, потому что этот код зависит от того, как реализован сам язык, как реализована библиотека шейпов, и может быть даже как компилятору позволено код оптимизировать. Как же правильно? Если помедитировать над LSP, то можно прийти к выводу, что дочерние классы могут только расширять родительские, но ни в коем случае не ограничивать. Ведь именно из-за введения нового инварианта в Square у нас и получилась фигня. Поэтому правильный код...

...Номер три: class Square extends Shape и class Rectangle extends Square.
И всё, вроде бы хорошо, ну, кроме "очевидности ооп", о которой тебе говорят в книжках. Знаешь, вот эти все истории про "собачка - это животное, и кошечка - это животное, поэтому мы делаем базовый класс, наследуемся от него, и кошечка говорит "мяу", а собачка говорит "гав" - смотрите, как просто мы можем моделировать реальный мир. И ты читаешь эти истории, веришь им, а в реальности у тебя вот такая фигня выходит. Но если бы на этом всё закончилось, то я бы тут не распинался. Consider, как говорится, зе following
```if ( new Rectangle( 15, 45 ) is Square ) throw "somethin' really fucked up's goin' on here m8";```
Что, по-твоему, сделает этот код? Я, конечно, не математик, но какое-то внутреннее чувство мне подсказывает, что прямоугольник со сторонами 15 и 45 - это не квадрат.

Вот эта вот задача не решаема в ооп. Фундаментальная проблема всея компьютер саенса разводит руками. В книжках об этом умалчивают, потому что иначе никто дальше первой главы (с этим примером) читать не будет.
Сообщение слишком длинное. Полная версия.
>> No.49846 Ответ
>>49845
> Остаётся наследование. Вот это уже чистая ООПешная тема.
А трейты (trait, интерфейсы с возможностью объявлять дефолтные реализации методов) относятся к наследованию?
А typeclass из Хаскеля?
Видимо наследование есть не только в ООП, или в ООП есть своё ООП-шное определение наследования.
>> No.49847 Ответ
>>49846
В ООП-шном наследовании можно унаследовать переопределённую реализацию метода.
С трейтами и тайпклассами это сделать не так просто, как в ООП.
>> No.49873 Ответ
>>49845
> Путь второй, он же очевидный и неправильный: class Rectangle extends Shape и class Square extends Rectangle
Просто ты очевидный быдлокодер. С какого хуя у тебя Rectangle имеет метод на увеличение параметров магическими цифрами? Почему ты лезешь напрямую в данные вместо вызова сеттеров? А потому что ты отстреливающий себе ногу быдлокодер.
virtual bool Rectangle::scale(int xScale, int yScale) {...}
bool Square::scale(int xScale, int yScale) override
{
if (xScale != yScale)
return false
else
return this->scale(xScale);
}
>> No.49874 Ответ
>>49873
Ну да, можно и так. Простите, был неправ. Забыл, что любую проблему можно обойти наговнокодив костылей.
Что вот у тебя за bool там такой? Откуда он взялся? Ах, он тут затем, чтобы это хоть как-то работало? Вопрос тебе: у тебя есть класс Shape; тебе нужно написать класс Rectangle; квадраты ещё не изобрели, и о том, что тебе понадобится класс Square ты узнаешь только через полгода - будет ли твой scale возвращать bool?
Далее, как ты думаешь, сколько постов на форуме твоей либы будут содержать вопрос "почему Square::scale принимает два параметра, при том, что они должны быть равны, и если они не равны, то ошибка (может быть) вылезет только в рантайме"?
Это всё "фиксится" перегрузкой scale для одного аргумента и выбросом исключения, вот только
а) исключение нарушает LSP,
б) перегрузка функций к ооп не имеет отношения - это языкоспецифическое средство починить пролему ооп,
в) оригинальный scale всё ещё останется и всё ещё будет принимать два аргумента.

>>49873
Ну да, можно и так. Простите, был неправ. Забыл, что любую проблему можно обойти наговнокодив костылей.
Что вот у тебя за bool там такой? Откуда он взялся? Ах, он тут затем, чтобы это хоть как-то работало? Вопрос тебе: у тебя есть класс Shape; тебе нужно написать класс Rectangle; квадраты ещё не изобрели, и о том, что тебе понадобится класс Square ты узнаешь только через полгода - будет ли твой scale возвращать bool?
Далее, как ты думаешь, сколько постов на форуме твоей либы будут содержать вопрос "почему Square::scale принимает два параметра, при том, что они должны быть равны, и если они не равны, то ошибка (может быть) вылезет только в рантайме"?
Это всё "фиксится" перегрузкой scale для одного аргумента и выбросом исключения, вот только
а) исключение нарушает LSP,
б) перегрузка функций к ооп не имеет отношения - это языкоспецифическое средство починить пролему ооп,
в) оригинальный scale всё ещё останется и всё ещё будет принимать два аргумента.

Но, самое главное, что даже с этим твоим костылём ты всё ещё нарушаешь LSP, просто ты это относительно неплохо спрятал под коврик, и оно теперь почти незаметно. Напомню: объект дочернего класса должен иметь возможность быть подставленным ВЕЗДЕ, где требуется объект родительского БЕЗ ИЗМЕНЕНИЯ ПОВЕДЕНИЯ программы. Есть у тебя функция сделать_мост, которая принимает прямоугольники, меняет ему размер на 3м х 10м, поворачивает и кладёт поперёк ущелья. Кто-то потом передаёт туда квадрат. Он не масштабируется. Функция кладёт его поперёк ущелья. Он падает. Ты ступаешь на несуществующий мост и падаешь вниз. Тебя съедают крокодилы. А всё потому что ты наслушался маркетологов.
Единственное, что ты тут можешь сделать - это начать вилять хвостом, что надо было проверять возвращаемые значения. Но это так не работает, потому что твой дочерний класс всё ещё ограничивает родительский - поведение всегда будет меняться в тех случаях, когда код делает что-то, что затрагивает эти ограничения. Как только ты ограничил родителя - ты уже проиграл.

Вообще, я тут поумничать решил, и оригинальная идея была о наследовании класса Tree от BinaryTree (книга это была, или статья какая - не помню, но если кто-то узнал, дайте ссылку или ключевые слова), но пример с фигурами мне показался чуть более наглядным.
Сообщение слишком длинное. Полная версия.
>> No.49875 Ответ
>>49874
> Что вот у тебя за bool там такой? Откуда он взялся? Ах, он тут затем, чтобы это хоть как-то работало?
Так ты все-таки проектируешь иерархию классов и допускаешь, что метод может сфейлить? Или быдлокодишь и ноешь про "костыли", отстрелив себе ногу "да не, оно не может сфейлить, хуяк-хуяк return void -> бля, сфейлило, чертово ООП!"? Хотя тут и так все понятно, что тут спрашивать.
> Вопрос тебе: у тебя есть класс Shape; тебе нужно написать класс Rectangle; квадраты ещё не изобрели, и о том, что тебе понадобится класс Square ты узнаешь только через полгода - будет ли твой scale возвращать bool?
Типичный подход быдлокодера, как и было предсказано. Я уж молчу про подготовку проекта перед кодированием, сраные UML, IDEF0 и прочая, но подумать своей башкой, что не все Rectangle можно успешно отскейлить на разные множители по разным координатам, ты мог? Или для тебя внезапно оказалось открытием: епта, хуе-мое, квадрат тоже прямоугольник, нам этого в школе не рассказывали! Проклятое ООП!
> Далее, как ты думаешь, сколько постов на форуме твоей либы будут содержать вопрос "почему Square::scale принимает два параметра, при том, что они должны быть равны, и если они не равны, то ошибка (может быть) вылезет только в рантайме"?
Я бы на форуме таких говнокодеров банил на месяц в ридонли, если они такие тупые, что не видят перегруженный метод и не ебут, что такое наследование от базового класса, но пиздят что-то про ООП.
> исключение нарушает LSP
Поэтому не будь быдлокодером и не пиши быдлокодерские иерархии с return void. Внезапно, и исключения не понадобятся.
>>49874
> Что вот у тебя за bool там такой? Откуда он взялся? Ах, он тут затем, чтобы это хоть как-то работало?
Так ты все-таки проектируешь иерархию классов и допускаешь, что метод может сфейлить? Или быдлокодишь и ноешь про "костыли", отстрелив себе ногу "да не, оно не может сфейлить, хуяк-хуяк return void -> бля, сфейлило, чертово ООП!"? Хотя тут и так все понятно, что тут спрашивать.
> Вопрос тебе: у тебя есть класс Shape; тебе нужно написать класс Rectangle; квадраты ещё не изобрели, и о том, что тебе понадобится класс Square ты узнаешь только через полгода - будет ли твой scale возвращать bool?
Типичный подход быдлокодера, как и было предсказано. Я уж молчу про подготовку проекта перед кодированием, сраные UML, IDEF0 и прочая, но подумать своей башкой, что не все Rectangle можно успешно отскейлить на разные множители по разным координатам, ты мог? Или для тебя внезапно оказалось открытием: епта, хуе-мое, квадрат тоже прямоугольник, нам этого в школе не рассказывали! Проклятое ООП!
> Далее, как ты думаешь, сколько постов на форуме твоей либы будут содержать вопрос "почему Square::scale принимает два параметра, при том, что они должны быть равны, и если они не равны, то ошибка (может быть) вылезет только в рантайме"?
Я бы на форуме таких говнокодеров банил на месяц в ридонли, если они такие тупые, что не видят перегруженный метод и не ебут, что такое наследование от базового класса, но пиздят что-то про ООП.
> исключение нарушает LSP
Поэтому не будь быдлокодером и не пиши быдлокодерские иерархии с return void. Внезапно, и исключения не понадобятся.
> перегрузка функций к ооп не имеет отношения - это языкоспецифическое средство починить пролему ооп
Это вообще сахар для удобства, наркоман, оно ничего не чинит.
> оригинальный scale всё ещё останется и всё ещё будет принимать два аргумента.
И? Клятое ООП не дает тебе сломать ООП? Ты тут двумя строками ранее LSP для красного словца нагуглил?
> Но, самое главное, что даже с этим твоим костылём ты всё ещё нарушаешь LSP, просто ты это относительно неплохо спрятал под коврик, и оно теперь почти незаметно. Напомню: объект дочернего класса должен иметь возможность быть подставленным ВЕЗДЕ, где требуется объект родительского БЕЗ ИЗМЕНЕНИЯ ПОВЕДЕНИЯ программы.
Напомню, что ничего не нарушается. Если ты такой быдлокодер, что по юности и недалекости своей думаешь, что у тебя любая операция всегда сработает, то я выебу твой scale переполнением.
> Есть у тебя функция сделать_мост, которая принимает прямоугольники, меняет ему размер на 3м х 10м, поворачивает и кладёт поперёк ущелья. Кто-то потом передаёт туда квадрат. Он не масштабируется. Функция кладёт его поперёк ущелья. Он падает. Ты ступаешь на несуществующий мост и падаешь вниз. Тебя съедают крокодилы. А всё потому что ты наслушался маркетологов.
Вот поэтому, дети, таких джунов гонят ссаными тряпками на первом же code review, и не подпускают потом этих макак дальше ардуинки в кофеварках китайских ноунеймов.
> Вообще, я тут поумничать решил
Ты сфейлил, бро.
Сообщение слишком длинное. Полная версия.
>> No.49876 Ответ
>>49875
ОК, я проигнорирую всё начало (хотя тут много чего можно сказать), кроме нескольких основных пунктов.
> Или для тебя внезапно оказалось открытием: епта, хуе-мое, квадрат тоже прямоугольник
Именно так. Потому что на момент проектирования квадраты не изобрели. Их не существует физически. Появятся они только через полгода, когда код уже написан.
> Я бы на форуме
Знаешь, что такое "протекающие абстракции"? Нет? Ну, теперь знаешь, потому что это пример прямо из палаты мер и весов.
> Напомню, что ничего не нарушается.
Я тебе ещё раз говорю: не важно, проверяешь ли ты там что-то где-то или нет. Для начала ещё раз перечитай LSP, и теперь я объясню сразу на наглядном примере:
Вот есть такой код:
``fun sdelat_most( Rectangle r ) {
if ( r.scale( 3, 10 ) ) print( "Most sdelan" )
else print( "Oshibka" )
}
Rectangle rect = new Rectangle( 3, 3 )
sdelat_most( rect )``
>>49875
ОК, я проигнорирую всё начало (хотя тут много чего можно сказать), кроме нескольких основных пунктов.
> Или для тебя внезапно оказалось открытием: епта, хуе-мое, квадрат тоже прямоугольник
Именно так. Потому что на момент проектирования квадраты не изобрели. Их не существует физически. Появятся они только через полгода, когда код уже написан.
> Я бы на форуме
Знаешь, что такое "протекающие абстракции"? Нет? Ну, теперь знаешь, потому что это пример прямо из палаты мер и весов.
> Напомню, что ничего не нарушается.
Я тебе ещё раз говорю: не важно, проверяешь ли ты там что-то где-то или нет. Для начала ещё раз перечитай LSP, и теперь я объясню сразу на наглядном примере:
Вот есть такой код:
``fun sdelat_most( Rectangle r ) {
if ( r.scale( 3, 10 ) ) print( "Most sdelan" )
else print( "Oshibka" )
}
Rectangle rect = new Rectangle( 3, 3 )
sdelat_most( rect )``
Мы его запускаем и он печатает "Most sdelan". Теперь мы подменяем родительский объект на дочерний ``Rectangle rect = new Square( 3 )``, запускаем, и код печатает "Oshibka". Поведение программы изменилось, а по LSP этого быть не должно. А можно проще, без лишних функций (у тебя же сеттеры отнаследовались):
``Rectangle rect = new Rectangle( 3, 3 )
rect.set_width( 4 )
rect.set_height( 5 )
assert( rect.get_area() == 20 )
print( "Ok" )``
Это печатает "Ok". Заменяем прямоугольник на квадрат и он падает с assertion failure. А не должен.
Наследование Square от Rectangle нарушает LSP, что в свою очередь означает несоответствие твоего кода принципам SOLID, что в свою очередь делает говнокодером тебя, а не меня.
QED
Сообщение слишком длинное. Полная версия.
>> No.49877 Ответ
>>49876
> ОК, я проигнорирую всё начало
как обосраться и не подать виду.тхт
> Именно так. Потому что на момент проектирования квадраты не изобрели. Их не существует физически. Появятся они только через полгода, когда код уже написан.
Чо-чо? Проектирование интерфейсов? Изучение предметной области? Зачем, когда можно хуяк-хуяк и в продакшн!
Эээ, пан заказчик, это не я наобезьянил, это все ООП! Только по лицу не бейте!
> Знаешь, что такое "протекающие абстракции"? Нет? Ну, теперь знаешь, потому что это пример прямо из палаты мер и весов.
Нет, просто твои абстракции кривые и предусматривают только common cases. А опытный разработчик тем и отличается от джуна, что сразу предусматривает редкие случаи. Поэтому джуны и не проектируют API.
> Вот есть такой код
Это быдлокод, еще раз тебе говорю.
> Это печатает "Ok". Заменяем прямоугольник на квадрат и он падает с assertion failure. А не должен.
А кроме написания быдлокода ты еще и не понимаешь, что такое LSP.
Rectangle rect = new Rectangle( INTMAX, 3INTMAX)
Rectangle нарушает Rectangle! LSP! OOP! SOLID! Вы все быдлокодеры, а я нет, уиииии!
> print( "Most sdelan" ) else print( "Oshibka" )
>>49876
> ОК, я проигнорирую всё начало
как обосраться и не подать виду.тхт
> Именно так. Потому что на момент проектирования квадраты не изобрели. Их не существует физически. Появятся они только через полгода, когда код уже написан.
Чо-чо? Проектирование интерфейсов? Изучение предметной области? Зачем, когда можно хуяк-хуяк и в продакшн!
Эээ, пан заказчик, это не я наобезьянил, это все ООП! Только по лицу не бейте!
> Знаешь, что такое "протекающие абстракции"? Нет? Ну, теперь знаешь, потому что это пример прямо из палаты мер и весов.
Нет, просто твои абстракции кривые и предусматривают только common cases. А опытный разработчик тем и отличается от джуна, что сразу предусматривает редкие случаи. Поэтому джуны и не проектируют API.
> Вот есть такой код
Это быдлокод, еще раз тебе говорю.
> Это печатает "Ok". Заменяем прямоугольник на квадрат и он падает с assertion failure. А не должен.
А кроме написания быдлокода ты еще и не понимаешь, что такое LSP.
Rectangle rect = new Rectangle( INTMAX, 3INTMAX)
Rectangle нарушает Rectangle! LSP! OOP! SOLID! Вы все быдлокодеры, а я нет, уиииии!
> print( "Most sdelan" ) else print( "Oshibka" )
> fun sdelat_most
Блядский блядь, и я еще на это трачу время, пиздец просто.
Сообщение слишком длинное. Полная версия.
>> No.49878 Ответ
>>49877
> Это быдлокод
Но ведь это ровно тот код, который ты предложил мне написать. Я, очевидно, чего-то не понимаю, поэтому напиши, пожалуйста, как оно тут должно быть.
> ты еще и не понимаешь, что такое LSP.
Забавные проекции. Твой код, очевидно, никаких LSP не нарушает, потому что принцип этот про типы. Про подстановку в валидный код валидных экземпляров типов. Принцип этот требует, чтобы код, который работает для некоего типа, работал бы точно так же для любых его наследников. То есть, ты можешь добавлять методы детишкам, но не изменять обозреваемое поведение наследуемых методов (да, да, когда ты делаешь наследника, который делает всё то же самое, но только ещё и в логи пишет - это тоже нарушение LSP, потому что поведение программы меняется).
А вот когда у тебя есть код napechatat( 2 + 2 ), а ты меняешь его на napechatat( 3 + 2 ), то никаким LSP тут не пахнет, потому что здесь нет никакой замены типов. Ты можешь этот код поменять на napechatat( 2.0 + 2 ), нарушив LSP , потому что он теперь напечатает не 4, а что-то вроде 4.00000000 (хотя тут всё немного сложнее), что скажет тебе, что float не может быть субтипом int


No.29402 Ответ [Открыть тред]
Файл: serial_experiments_lain-14377.jpg
Jpg, 405.57 KB, 1600×1200 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
serial_experiments_lain-14377.jpg
Был удивлён, пролистав за десяток страниц, и не найдя здесь подобного трэда.
Решил начать учить язык богов. С чего начать - книги и мануалы, теория и практика (желательно на русском), в чём лучше писать (под винду и под никсы), советы, распространённые ошибки, всё сюда. Лисп-нить иди.
407 posts are omitted, из них 51 с файлами. Развернуть тред.
>> No.49658 Ответ
>>49657
Да я уже более-менее определился. Вообще байтоёб не в этом смысле, а в том, чтобы разбирать двоичные файл на байтики, например. Основная масса реализаций с типами ниже строк тяжело работает, по ощущениям. Так что если кто знает как в вышеназванных реализациях работать с двоичными данными, или работал сам, можете подсказать вкратце если не лень. Ключевое слово в языке С - struct и сопутствующие функции, желательно без lisp-way и unix-way.
>> No.49660 Ответ
>>49658
https://paste.debian.net/1121242/

> Ключевое слово в языке С - struct и сопутствующие функции
На тебе три часа на несвежую голову утром, мысли вслух под guile scheme. Это можно сделать короче, красивее и так, как надо, но мне лень и чёткого понимания нет.
Сперва взгляни на let в строке 36, всё писалось с него. По крайней мере, всё без переменной c.

По поводу твоих ощущений: ну да, мне как бы тоже не очень хочется вызывать все эти bytevector-u8-ref, но один раз пришлось, если мало, то можно жить. Вообще, всё, что есть - это несколько SRFI, прямо смотришь в оглавление мануала на твою схему или на srfi.schemers.org, не забыв про (rnrs bytevectors), но ощущения, как понимаешь, не очень. Надо сокращать и устраиваться поудобней.

> lisp-way и unix-way
А это что за звери и чем они тебе не угодили? Что понимаешь под?

Что-то здешняя вакаба не понимает файлы. Говорит, exception - неизвестная кодировка. Хотя сверху она стоит.
>> No.49661 Ответ
>>49655
>>49653
Давай начнём с того, что я не могу себе представить человека, у которого лисп был первым. Кроме пользователя какой-нибудь CAD, но я с такими не общаюсь за их отсутствием.
Так что толстишь тут скорее всего ты, особенно, учитывая то, что краткая характеристика уже в треде есть и не одна.
>> No.49667 Ответ
>>49660
> unix-way lisp-way чем не угодили
Да, нужно бы расшифровать. В данном случае имел ввиду следующие проблемы:
для unix-way - сведение всего к текстовому конвееру, тоесть практически антиподход для случая обработки двоичных данных;
для lisp-way - когда вместо 1МиБ двоичных данных придётся работать с 1 миллионом точечных пар (или как они там в любой книжке по лиспу позиционируются как самый базовый тип данных).

За пример благодарю.
>> No.49668 Ответ
>>49667
> для unix-way - сведение всего к текстовому конвееру, тоесть практически антиподход для случая обработки двоичных данных;
Можно же делать текстовые конвееры с именами отдельных файлов. Это удобней для пакетной обработки, например. Нет, конечно, есть примеры, когда в пайпы долны полезть бинарные данные.

В r5rs векторы есть например. В книжках по лиспу мне не приходилось сталкиваться с совсем уж "двоичными" запакованными данными.
А ещё ко всему есть вариация этих самых списков, где снизу массивы вместо cons-ячеек. Но за это ты платишь неизменяемостью списка.
https://www.gnu.org/software/guile/docs/master/guile.html/VLists.html

Ты не доводи до абсурда же, изо всякого правила есть исключения. Просто текстовые данные проще дёргать из того же шелла, например. Работать с ними проще. И чем больше излишней бинарщины, тем труднее с ней жить. Со списками теми же работать проще, чем неоправданным образом делать ADT или векторы на каждый чих. Как-то так. Но это не значит, что всякая программа обязана быть текстовым фильтром или использовать только списки.
>> No.49669 Ответ
>>49668
Где ты увидел доведение до абсурда? Мне кажется ты проецируешь какие то свои взгляды, например если тебе проще работать с текстом, это не значит что и другим также.

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

> платишь неизменяемостью списка
Очередное необоснованное ограничение.
>> No.49670 Ответ
>>49669
> Где ты увидел доведение до абсурда?

>>49658
> желательно без lisp-way и unix-way
>>49667
> для unix-way - сведение всего к текстовому конвееру
> для lisp-way - когда вместо 1МиБ двоичных данных придётся работать с 1 миллионом точечных пар (или как они там в любой книжке по лиспу позиционируются как самый базовый тип данных).

Вот доведение до абсурда. У тебя в руках UNIX-подобная система есть? Ты в курсе, что у неё есть библиотеки и остальные программы, которые обрабатывают бинарные данные целиком и полностью и даже пишут в пайпы/стандартные потоки бинарщину? Даже sysvinit слушает пайп /run/initctl, забирая оттуда структуру. Если надо — давай, бери, пользуйся, никто тебе не запрещает, юниксвей — про то, что структуры и байты не надо бездумно совать везде, где придётся. Где можно обойтись текстом, вот там и обходись текстом. У меня же сложилось ощущение, что ты же думаешь, что текст надо пихать везде. Точно то же самое ты говоришь про cons-списки, считая, что тебя насильно заставляют пользоваться ими вместо векторов, особенно для целей, для которых они мало предназначены.

Я уже не говорю, что lisp-way — это оксюморон. У языка с подстраиваемыми языковыми формами никакого way практически нет. Хоть awk с шеллом впиливай прямо внутрь.

> Мне кажется ты проецируешь какие то свои взгляды, например если тебе проще работать с текстом
>>49669
> Где ты увидел доведение до абсурда?

>>49658
> желательно без lisp-way и unix-way
>>49667
> для unix-way - сведение всего к текстовому конвееру
> для lisp-way - когда вместо 1МиБ двоичных данных придётся работать с 1 миллионом точечных пар (или как они там в любой книжке по лиспу позиционируются как самый базовый тип данных).

Вот доведение до абсурда. У тебя в руках UNIX-подобная система есть? Ты в курсе, что у неё есть библиотеки и остальные программы, которые обрабатывают бинарные данные целиком и полностью и даже пишут в пайпы/стандартные потоки бинарщину? Даже sysvinit слушает пайп /run/initctl, забирая оттуда структуру. Если надо — давай, бери, пользуйся, никто тебе не запрещает, юниксвей — про то, что структуры и байты не надо бездумно совать везде, где придётся. Где можно обойтись текстом, вот там и обходись текстом. У меня же сложилось ощущение, что ты же думаешь, что текст надо пихать везде. Точно то же самое ты говоришь про cons-списки, считая, что тебя насильно заставляют пользоваться ими вместо векторов, особенно для целей, для которых они мало предназначены.

Я уже не говорю, что lisp-way — это оксюморон. У языка с подстраиваемыми языковыми формами никакого way практически нет. Хоть awk с шеллом впиливай прямо внутрь.

> Мне кажется ты проецируешь какие то свои взгляды, например если тебе проще работать с текстом
А это не мои взгляды. Это вгляды любого человека, державшего в руках шелл. *nix — это кучка мелких максимально реюзабельных утилит, склеиваемых вместе шеллом. Я этот подход считаю удобным, как и кто-то другой, вот и всё. Не хочешь скреплять шеллом — не скрепляй, никто тебе не запрещает.

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

Во-первых, не лисп, а scheme. Scheme вообще не обязан тебе быть приспособлен для всего, особенно со стандартом в 50 страниц. Лисп в целом жил на лисп-машинах как единственный язык и вполне себе обрабатывал всё, что нужно, про common lisp говорить не буду. Но scheme приспособлен приспосабливаться. Я приспособил.

Ящитаю, оформить вот эти мысли из файла как модуль (или просто подключать через include/load) и использовать формы
(bstruct mystruct
(a 1)
(b 2)
(c 8 ->u64 u64->))

(with-mystruct bv
(bv.c newvalue)
(format #t ".a ~a\n.b ~a\n.c ~x\n"
(bv.a)
(bv.b)
(bv.c)))
особого труда не составит. В случае чего можно вполне себе нарисовать врапперы вокруг bytevector-<тип>-native-{ref,set}, особо много это не займёт.

> Очередное необоснованное ограничение.
Честно говоря, мне лень читать исходник и смотреть, почему там неизменяемость, хочешь обоснований — смотри сам. Векторы и так есть, а в основной массе списки обрабатываются без изменения хвоста.
Сообщение слишком длинное. Полная версия.
>> No.49726 Ответ
Файл: 15304474106560.png
Png, 14056.52 KB, 3041×4096 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
15304474106560.png
Позвольте сХОРОнить.
>> No.49870 Ответ
Здравствуйте. Вы живы или умерли? Хочу срач CL vs Scheme в контекте описаний мест работы, где редко, тайком, но используют. Такие, вроде, есть.
>> No.49872 Ответ
>>49726
ЗаХОРОнить.

>>49870
> CL vs Scheme
Что то х~~ня, что это х~~ня.
Как работодателю мозги промоешь, на том и будешь писать.


No.49861 Ответ [Открыть тред]
Файл: 16025644159910.jpg
Jpg, 64.16 KB, 604×604
Ваши настройки цензуры запрещают этот файл.
unrated
Дали входное задание, понять и написать программу для аутентификации на сервер с использованием ролей на Java Spring.

Я понял, что нужно создать бд с таблицами пользователей, ролей и объединяющую, прописать классы, которые будут считывать и добавлять туда новых, страницы отображения и доступы для разных ролей, а дальше что? В обычной idea готовые проекты (скачивал, чтобы понять) не запускаются, в скриншотах и видео видел, что это происходит через tomcat, встроенный в ультимативную версию, для чего он нужен?

Подскажите, пожалуйста по структуре программы: что нужно ещё добавить? И как запустить готовый проект?
>> No.49863 Ответ
>>49861
Проекты, скорее всего, имеют в корневой директории файл pom.xml. Для сборки таких проектов используется утилита maven. Создаёшь jar-файл через mvn install, потом этот jar-ник закидываешь в томкатовскую директорию webapps. Томкат можешь скачать и запустить отдельно.
>> No.49864 Ответ
>>49863
mvn install - это встроенная в ide утилита? То есть нужно просто запустить tomcat сервер, как это делается при, например, администировании бд?
>> No.49865 Ответ
>>49864
> mvn install - это встроенная в ide утилита?
Нет, это команда мавена, мавен - это самостоятельная программа, она может работать и без ide, хотя разные ide могут создавать свои интерфейсы для работы с мавеном.
> То есть нужно просто запустить tomcat сервер, как это делается при, например, администировании бд?
Да, просто запустить сервер и залить своё приложение на сервер. Не понял при чём здесь администрирование бд. Ты запускаешь томкат чтобы администрировать бд? Запости скриншоты.
>> No.49866 Ответ
>>49865
> Ты запускаешь томкат чтобы администрировать бд?
Приводил как аналогию работы сервера томкэт, и сервера для бд.
>> No.49869 Ответ
Ему сегодня исполнялось тридцать лет! Да, 30 полновесных лет в дерьме и позоре. И никто не поздравил. Хотя с чем поздравлять? С ним даже разговаривать-то старались только по необходимости. Этот факт породил в голове java-кодера ворох неприятных мыслей. Он просрал свою жизнь… Просрал настолько обидным способом, насколько это вообще возможно. Размышляя таким образом, он дошел до компьютера и, не снимая уличной одежды, плюхнулся на подобранный им на помойке засаленный офисный стул, не имеющий одного подлокотника, но еще вполне рабочий. Привычным движением джавист ткнул в кнопку включения питания и быстрее запустил IDEA. Он бы держал компьютер включенным круглые сутки, но электричество приходилось экономить. Добавил в pom хибернейт, сделал maven install, прошло несколько минут, в течение которых он возбужденно ёрзал по стулу.

Наконец-то! Он добавил аннотации ломбока на все энтити. Заебца! Почти как Котлин! Отчего-то ему вдруг захотелось поделиться своими мыслями с /s/осачерами. Выбрав создание нового треда, он начал строчить: «Ребята! Мне тридцать лет. Я помню, как десять лет назад так же, как и сейчас, петушил круды и рефакторил тырпрайзные проекты. У меня не было ни гостей, ни подарков. У меня и сегодня нет ни гостей, ни подарков. Мне было двадцать лет тогда, я был тощим и патлатым. Сегодня я жирный и лысею. Пожалейте меня. Мне плохо.» Яростно стуча по клавишам, он не заметил, как в комнату тихо вошла мать.

-Сынок… что ж ты не разделся-то.

Ему сегодня исполнялось тридцать лет! Да, 30 полновесных лет в дерьме и позоре. И никто не поздравил. Хотя с чем поздравлять? С ним даже разговаривать-то старались только по необходимости. Этот факт породил в голове java-кодера ворох неприятных мыслей. Он просрал свою жизнь… Просрал настолько обидным способом, насколько это вообще возможно. Размышляя таким образом, он дошел до компьютера и, не снимая уличной одежды, плюхнулся на подобранный им на помойке засаленный офисный стул, не имеющий одного подлокотника, но еще вполне рабочий. Привычным движением джавист ткнул в кнопку включения питания и быстрее запустил IDEA. Он бы держал компьютер включенным круглые сутки, но электричество приходилось экономить. Добавил в pom хибернейт, сделал maven install, прошло несколько минут, в течение которых он возбужденно ёрзал по стулу.

Наконец-то! Он добавил аннотации ломбока на все энтити. Заебца! Почти как Котлин! Отчего-то ему вдруг захотелось поделиться своими мыслями с /s/осачерами. Выбрав создание нового треда, он начал строчить: «Ребята! Мне тридцать лет. Я помню, как десять лет назад так же, как и сейчас, петушил круды и рефакторил тырпрайзные проекты. У меня не было ни гостей, ни подарков. У меня и сегодня нет ни гостей, ни подарков. Мне было двадцать лет тогда, я был тощим и патлатым. Сегодня я жирный и лысею. Пожалейте меня. Мне плохо.» Яростно стуча по клавишам, он не заметил, как в комнату тихо вошла мать.

-Сынок… что ж ты не разделся-то.

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

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

Тут мама не сдержалась и глухо зарыдала. Алексей хотел было ее утешить, но что он мог сказать? Мама, прости меня за загубленную жизнь? Мама, прости меня за то, что я занимался крудошлепством безвылазно десять лет подряд? Сначала он считал себя джавистом джуниором… прошел год. Потом два. Три. Он втянулся. Спринг бут стал его жизнью.

- Да ладно, мам… ничего. Мне ж не надо все равно ничего.

Он произнес эти слова нарочито грубым тоном. Алексей вообще много раз задумывался, что с ним будет, когда мать умрет. Ведь она уже была такой старой и дряхлой… В последнее время она уже почти не выходила из дома. Кое-как спровадив плачущую маму из комнаты, он с тяжелым сердцем вернулся к компьютеру. Чтение накопившихся ответов его не порадовало. Среди потоков мата и насмешек нашлось кое-что необычное - некий ослослов успел за это время накатать крохотный рассказик под названием «Смерть Джависта», где в красках описывал его будущее через десять лет. Язык в рассказе был, наверно, еще кривее, чем в школьных сочинениях, но суть была ухвачена верно. Разволновавшись, он принялся было печатать ответ, как внезапно почувствовал: пальцы его не слушаются. Это ощущение напомнило ему о том, как в вузе он подрабатывал грузчиком, после чего не мог даже поднести ко рту ложку. Но ведь сегодня он ничего не грузил! Почему же тогда руки холодны и безжизненны? И почему так болит сердце… Больше, чем обычно… Он попытался встать. Невероятным волевым усилием ему это удалось, хотя при этом грудь защемило волной жуткой боли. Сдерживая крик, Алёша потянулся к грязному стакану со вчерашней водой. Поводя из стороны в сторону дрожащей головой, он попытался вспомнить, где лежит аптечка. По лбу струился ледяной пот. Разгребая руками, почти мертвыми ниже локтя, гору хлама на полу, он таки нашел ее.

«Это инфаркт… нужен валидол!» — пронеслось в его голове. Кое-как рванув молнию в сторону лихорадочно начал рыться в горе просроченных годы назад лекарств. Внезапно все его тело прорезал такой разряд боли, что он не сдержался и заорал во весь голос. В коридоре раздалось шарканье материнских тапок, и через несколько секунд она уже стояла на пороге.

- Сынок! Что с тобой?! — от шока ее голос словно помолодел.
- У…мираю.. — кое-как выдохнул леденеющими губами.

Зрение начало меркнуть. Последнее, что пронеслось в его голове, было: «mvn deploy» Через три недели милиция, вскрыв по жалобам соседей провонявшую квартиру, нашла в ней два чудовищно раздувшихся, уже полностью разложившихся трупа. F.

паста с пораши
Сообщение слишком длинное. Полная версия.


No.49834 Ответ [Открыть тред]
Ура! Сегодня День Программиста! Все же мы чуть такие? :)

https://youtu.be/2QkTuQPY0jY
>> No.49851 Ответ
Файл: 12726202097097.gif
Gif, 3.22 KB, 240×240 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
12726202097097.gif
Божечки кошечки. А тут программисты бывают вообще? Или так, только интересующиеся?
>> No.49852 Ответ
typingstudy.com - интересно,насколько трудно будет напечатать без опечаток все 15 уроков подряд?
>> No.49853 Ответ
>>49851
Бывают. Я же тут иногда.

>>49852
Трудно. конкретно этот не пробовал, но в соло на клавиатуре месяц пальцы ломал. Зато теперь на английском печатаю вслепую без проблем. Надо бы за русский еще засесть.
>> No.49854 Ответ
>>49853
> Бывают
Классно тогда. Но я, как истинный слоупок, сначала написал и только потом понял что вопрос был бессмысленен.


No.43511 Ответ [Открыть тред]
Файл: 599716131.png
Png, 77.78 KB, 317×372 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
599716131.png
Предыдущий тред: >>39226
415 posts are omitted, из них 37 с файлами. Развернуть тред.
>> No.49496 Ответ
Сап. Есть замечательный плеер mpv и, к сожалению, менее замечательное андроид приложение https://github.com/mpv-android/mpv-android, которое строится на libmpv. Мне бы очень хотелось его переписать с использованием всех самых новых технологий, но для этого нужно сделать андроид либу с использованием С++ и JNI. Если кого-то заинтересует создание такой либы - распишу подробнее,
>> No.49497 Ответ
>>49496
А можно старых? Ну, для совместимости.
>> No.49523 Ответ
>>49494
> Не одно и то же, отдельному зверю вменяют ещё и кодинг (считай, написание подпорок и костылей) в обязанности, обзывая девопсом.
Но девопс -- это и есть админ. И админы и без этого могут кодить.

> Самое простое — держать бэкапы.
А как так делать бекапы, чтобы их сразу же можно было развернуть в один клик на машине с потенциально другим железом? И чтоб сразу заработало.

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

> список пакетов
И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.

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

> Самое простое — держать бэкапы.
А как так делать бекапы, чтобы их сразу же можно было развернуть в один клик на машине с потенциально другим железом? И чтоб сразу заработало.

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

> список пакетов
И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.

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

> Мне даже кажется, что какую-нибудь софтину на плюсах пересобирать с make на случай факапа быстрее, чем обкатывать ваши скрипты в контейнере.
Да не

> Ты открыл hh.ru
А мне по знакомствам надо было?
Сообщение слишком длинное. Полная версия.
>> No.49531 Ответ
>>49523
> девопс
Админу кодинг на языке программирования в обязанности не вменяется. И куча остальных вещей, которые на него взгрузили, особо ценник не повысив, тоже.
> как делать бэкапы ... и чтоб сразу заработало
tar +- chroot, шеллскрипты. На вкус.
"чтоб сразу заработало" смахивает на фразу про Большую Кнопку из /s/ другой, мёртвой борды. Ясно ведь, в каком контексте её используют?
> с потенциально другим железом
bash, distro~bootstrap. Обычно такой задачи не стоит. Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM. Подозреваю, что подавляющая масса докерообразов в основном собираются под amd64 даже если это не так, конечного набора архитектур, как в дистрибутиве, нет, не было и не будет и поэтому под тезис о "потенциально другом железе" тут работает в пользу того, что и должно заниматься менеджментом пакетов — полноценных дистрибутивов с полноценными ПМ.
> в один клик
Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
> Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры
Энджой ёр дыры в безопасности. За вас настраивать кто-то другой не будет. А если и будет, то сделает это из рук вон плохо.
> И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.
Это уже в архив или в строчку git clone $project; cd $project; make; make install в одном маленьком скрипте никак не помещается?
Если у вас с бойлерплейтом проблемы, можно использовать функции, например
>>49523
> девопс
Админу кодинг на языке программирования в обязанности не вменяется. И куча остальных вещей, которые на него взгрузили, особо ценник не повысив, тоже.
> как делать бэкапы ... и чтоб сразу заработало
tar +- chroot, шеллскрипты. На вкус.
"чтоб сразу заработало" смахивает на фразу про Большую Кнопку из /s/ другой, мёртвой борды. Ясно ведь, в каком контексте её используют?
> с потенциально другим железом
bash, distro~bootstrap. Обычно такой задачи не стоит. Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM. Подозреваю, что подавляющая масса докерообразов в основном собираются под amd64 даже если это не так, конечного набора архитектур, как в дистрибутиве, нет, не было и не будет и поэтому под тезис о "потенциально другом железе" тут работает в пользу того, что и должно заниматься менеджментом пакетов — полноценных дистрибутивов с полноценными ПМ.
> в один клик
Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
> Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры
Энджой ёр дыры в безопасности. За вас настраивать кто-то другой не будет. А если и будет, то сделает это из рук вон плохо.
> И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.
Это уже в архив или в строчку git clone $project; cd $project; make; make install в одном маленьком скрипте никак не помещается?
Если у вас с бойлерплейтом проблемы, можно использовать функции, например
installfromgit () { git clone $1 $2; pushd $2; if [ -z "$3" ]; then make; make install; else sh -c "$3"; fi; popd};
installfromgit git://githost.example/killer-project.git killer-project "X=Y sh install.sh"
...
> На пакетном менеджере сложно поставить разные инстансы субд с разными настройками и разных версий под разные проекты, чтобы они не пересекались.
Ещё раз, как я говорил, если у вас в архитектуре по десять БД, очередей и всего остального, то эта изумительной красоты архитектура — помойка. Что самое интересное, с самого начала мою истерику по поводу сотен БД вы назвали небывальщиной, или я что-то путаю?
На Nix/Guix можно. В разные префиксы совать можно. В чруты разные, если уж стрелять из пушки по воробьям, можно. Вы же тянете весь комбайн.
> Да не
А вы дайте пруфы своего "Да не". Четыре буквы и скрипт снизу vs сборка чрут-образа, секс с неймспейсами, оверлейной ФС, костылями для того, чтобы вытащить ресурсы наружу и загадить таблицу того же фаервола плюс непрозрачный контейнер, который обязан состоять ровно из одного процесса.
> А мне по знакомствам надо было?
А вот это хз. Я не специалист по рынку. Но вакансии "всё в одном" должны наводить на мысли. Всё в традициях одного укросайтика на итальянском домене.

Что-то мы по третьему кругу всё идём.
Сообщение слишком длинное. Полная версия.
>> No.49532 Ответ
>>49531
Там после popd в функции семиколон не стоит, забыли.
>> No.49533 Ответ
>>49531
> шеллскрипты
Ну это уже почти то же самое. Но они типа должны быть удобнее.
> Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM.
Не настолько другим. Я не так выразился. Просто я к тому, что на другой материнке уже операционка может не загрузится, и её надо заново ставить.
> Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
Дома на винде, на работе работаю на Линухе(дома я не работаю)
> Энджой ёр дыры в безопасности.
Ну обновлять это уже отдельно. Но вот надо просто поднять. А обновить чуть потом. Обновить всё равно легче, заново не настраивая.
> Ещё раз, как я говорил, если у вас в архитектуре по десять БД
Ну так я разрабатываю на одной машине несколько не связанных проектов. У них у каждого вся архитектура совершенно иная.
>> No.49686 Ответ
Файл: qt.png
Png, 32.51 KB, 1200×880 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
qt.png
Там это, Qt скурвился.
https://valdyas.org/fading/software/about-qt-offering-changes-2020/
https://www.qt.io/blog/qt-offering-changes-2020
Речь идет о неприятных изменениях в условиях лицензии и распространения. Сам до конца не въехал пока, поэтому не буду пытаться пересказать своими словами.
>> No.49848 Ответ
Здравствуйте. Вопросы больше про Си, но тем не менее:
1) NULL это всегда и везде 0х0000? Или зависит от либ/архитектуры?
2) Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
>> No.49849 Ответ
>>49848
> NULL это всегда и везде 0х0000?
Нет. Хотя реальных архитектур ты можешь и не встретить. http://c-faq.com/null/varieties.html
> Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
Видимо чтобы нельзя было прочитать какие-то ценные данные, которые там были до этого.
>> No.49850 Ответ
>>49686
Какие-нибудь KDE просто форкнут и начнут паралельно пилить, не проблема.


No.33881 Ответ [Открыть тред]
Файл: vim-shortcuts-dar...
Png, 116.56 KB, 2560×1600
edit Find source with google Find source with iqdb
vim-shortcuts-dark_2560x1600.png
Файл: vim_cheat_sheet_f...
Png, 1791.61 KB, 3301×2550
edit Find source with google Find source with iqdb
vim_cheat_sheet_for_programmers_print.png

Обещал про Vim написать. Ну вот собсна и написал.

Итак. Для начала поговорим о том, кому он не нужен. Ненужен он в самую первую очередь тем, кто не умеет в слепую десятипальцевую печать. Для таких людей vim буде каторгой. Посему данной категории людей советую либо забить на это дело, либо начать развивать слепую печать. Благо навык полезный. Можно гуглить например очевидную stamina и т.д. Вторая категория людей, которым не нужен сабж, это фанаты emacs по очевидным причинам. Кроме того не очень желательно изучать для виндопользователей. Ибо может быть черевато переходом на linux в конечном итоге, лол.

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

Ок. Где взять? Для линупсов достаточно установить из пакетного менеджера очевидный пакет под именем vim sudo apt-install vim для бубунты, а остальные и сами разберутся. Для винды можно пользовать ссылочку ftp://ftp.vim.org/pub/vim/pc/gvim74.exe

Скачали, запустили. Ну и? Где вся няшнота то?
Объясняю только самые основы:
  • выход без сохранения точнее закрытие файла при помощи :q!
  • есть несколько режимов работы. Основные: "нормальный", редактирование, командный, выделение.
  • передвижение по файлу при помощи клавиш h j k l это соответственно влево, вниз, вверх, вправо.
  • для собсна редактирования можно нажать например i
Далее находим vimtutor и проходим его. Он ответит на остальные вопросы. Для линупсов vimtutor ru в консольке. Для винды должно быть гхдетоу в районе меню пуск. Хотя шут его знает. Потом изучаем и печатаем на бумажку или ставим в качестве обойки воон те картинки, что в комплекте с постом идут.
Обещал про Vim написать. Ну вот собсна и написал.

Итак. Для начала поговорим о том, кому он не нужен. Ненужен он в самую первую очередь тем, кто не умеет в слепую десятипальцевую печать. Для таких людей vim буде каторгой. Посему данной категории людей советую либо забить на это дело, либо начать развивать слепую печать. Благо навык полезный. Можно гуглить например очевидную stamina и т.д. Вторая категория людей, которым не нужен сабж, это фанаты emacs по очевидным причинам. Кроме того не очень желательно изучать для виндопользователей. Ибо может быть черевато переходом на linux в конечном итоге, лол.

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

Ок. Где взять? Для линупсов достаточно установить из пакетного менеджера очевидный пакет под именем vim sudo apt-install vim для бубунты, а остальные и сами разберутся. Для винды можно пользовать ссылочку ftp://ftp.vim.org/pub/vim/pc/gvim74.exe

Скачали, запустили. Ну и? Где вся няшнота то?
Объясняю только самые основы:
  • выход без сохранения точнее закрытие файла при помощи :q!
  • есть несколько режимов работы. Основные: "нормальный", редактирование, командный, выделение.
  • передвижение по файлу при помощи клавиш h j k l это соответственно влево, вниз, вверх, вправо.
  • для собсна редактирования можно нажать например i
Далее находим vimtutor и проходим его. Он ответит на остальные вопросы. Для линупсов vimtutor ru в консольке. Для винды должно быть гхдетоу в районе меню пуск. Хотя шут его знает. Потом изучаем и печатаем на бумажку или ставим в качестве обойки воон те картинки, что в комплекте с постом идут.

Это было сверхкраткое введение. А теперь мы будем обмазыватся плугинками и всячески допиливать редактор до удобоваримого состояния. Для начала открываем .vimrc или _vimrc (для венды). Это конфигурационный файлег. Да, да, господа виндузятники. Ни каких окошечек с настроечками. Только хардкор.
По поводу настроечек рекомендую загуглить самомуа лучше почитать маны. Примеры: http://dimio.org/cgi-bin/bps/hlghtsrc/sourcehl.cgi?d=conf&s=vimrc&l=vim http://pastebin.com/jy4a3pE5 http://pastebin.com/paPWQ5fE http://pastebin.com/V3GdD38s Тысячи их.

Однако мы переходим к самому интересному. Доведём до ума сабж при помощи плугинок. Ибо без них vim уныл. Для начала нужно установить пакетный менеджер. Рекомендую либо Vundle либо NeoBundle. Думаю сами сможете загуглить их. К ним идут инструкции. Тож сами читнёте.

Самые полезниньки плагины можно найти там http://vim.wikia.com/wiki/Use_Vim_like_an_IDE

Отдельно упомяну следующие:
NERDTree добавляет древо файлов.
bufexplorer даёт удобную навигацию по буферам.
Вот кстати о буферах, окнах и табах в виме. Вот открыли вы один файлег, а потом, не закрывая первый, открыли второй. Можно потом переключаться между этими файлами. А можно их в одном окне одновременно открыть. Подробнее об том читнуть в справке или например в http://habrahabr.ru/post/28572/ http://habrahabr.ru/post/102373/
Vim Powerline раскрашивает статусную строку.
ColorSamplerPack набор тем оформления.

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

Можно ещё читнуть напоследок http://habrahabr.ru/post/176187/

Ну пока всё. Спрашивайте свои ответы. Ато может я чего забыл ненароком.
Сообщение слишком длинное. Полная версия. 246 posts are omitted, из них 43 с файлами. Развернуть тред.
>> No.49821 Ответ
Сегодня девочка узнала об include jump и что ctags, оказывается, более удобный, чем кажется.
>> No.49822 Ответ
Файл: 2017-07-08-913354...
Jpg, 308.67 KB, 881×1277
edit Find source with google Find source with iqdb
2017-07-08-913354.jpg
Файл: ADM-3A.jpg
Jpg, 443.13 KB, 2676×2370
edit Find source with google Find source with iqdb
ADM-3A.jpg

Интересно ещё вспомнить, что vi писался конкретно под терминал ADM-3A (https://ru.wikipedia.org/wiki/ADM-3), в котором сэкономили на дополнительных клавишах и микропроцессоре, почему он и получил название «тупого терминала». Так что он автором таким сделан, чтобы работать на этом и подобных дрынах, а вовсе не ради какой-то там эргономики. Этому анахронизму уже более 40-ка лет.
>> No.49823 Ответ
>>49822
> а вовсе не ради какой-то там эргономики
Ну почему же. Ради эргономики работы именно на этом конкретном и подобных терминалах. А типичная современная клавиатура недалеко ушла от этих терминалов. (Esc только перебиндить надо.)

Я всегда говорил, что в споре emacs .vs. vi за эргономику, vi выигрывает при условии использования стандартной ублюдочной клавиатуры, а если взять нормальный kinesis или ergodox, то все эти пляски с режимами становятся не нужны, а emacs с его аккордами становится вполне удобен.
>> No.49824 Ответ
Файл: 2018-01-04-943532.png
Png, 139.38 KB, 654×826 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2018-01-04-943532.png
>>49823
Это не удобство, это компромисс между удобством и железом.

http://www.classiccmp.org/dunfield/altair/d/adm3a.pdf — почитай, довольно интересно в плане понимания, что, зачем и почему.
Этот, как и другие, терминал подключался к универскому мэйнфрейму через модем на скорости 300 бод, т.е. даже экран vi на нём перерисовывался оче неторопливо с другой стороны, люди только-только начали пересаживаться с телетайпов, так что полноэкранный режим для них был чем-то нереально охуенным. Все коды, которые он посылал, были ASCII кодами и реализованны аппаратно кучей микрух TTL-логики, т.е. Ctrl+A отсылает ASCII SOH, а не скан-коды клавиш, к которым ты привык; приём ASCII BEL или прожимание Ctrl+G заставляет термил бибикать, и хер что ты с этим сделаешь (там под крышечкой с винтиком, на которой написано ADM, есть переключатель, чтобы он не бибикал). Вся его ёба-графика, т.е. перемещение курсора по экрану, была реализована аппаратно в самом терминале, т.е. ESC = ## ## ставит курсор в позицию ## ##, ты не можешь изменить это поведение программно. По соображениям простоты аппаратной реализации разработчики терминала повесили стрелки на клавиши HJKL (Ctrl+HJKL), хотя удобней IJKL. Клавиша Here Is отсылала уникальный идентификатор терминала и досталась в наследство от телетайпов, так же, как и Line Feed, которая прокручивала барабан с бумагой на один шаг вверх, а посему она тупо дублирует Ctrl+J.
>>49823
Это не удобство, это компромисс между удобством и железом.

http://www.classiccmp.org/dunfield/altair/d/adm3a.pdf — почитай, довольно интересно в плане понимания, что, зачем и почему.
Этот, как и другие, терминал подключался к универскому мэйнфрейму через модем на скорости 300 бод, т.е. даже экран vi на нём перерисовывался оче неторопливо с другой стороны, люди только-только начали пересаживаться с телетайпов, так что полноэкранный режим для них был чем-то нереально охуенным. Все коды, которые он посылал, были ASCII кодами и реализованны аппаратно кучей микрух TTL-логики, т.е. Ctrl+A отсылает ASCII SOH, а не скан-коды клавиш, к которым ты привык; приём ASCII BEL или прожимание Ctrl+G заставляет термил бибикать, и хер что ты с этим сделаешь (там под крышечкой с винтиком, на которой написано ADM, есть переключатель, чтобы он не бибикал). Вся его ёба-графика, т.е. перемещение курсора по экрану, была реализована аппаратно в самом терминале, т.е. ESC = ## ## ставит курсор в позицию ## ##, ты не можешь изменить это поведение программно. По соображениям простоты аппаратной реализации разработчики терминала повесили стрелки на клавиши HJKL (Ctrl+HJKL), хотя удобней IJKL. Клавиша Here Is отсылала уникальный идентификатор терминала и досталась в наследство от телетайпов, так же, как и Line Feed, которая прокручивала барабан с бумагой на один шаг вверх, а посему она тупо дублирует Ctrl+J.
Т.е. в подобных терминалах никакой кастомизации быть не могло в принципе, здесь всё аппаратно сделано, сиречь «ешь что дают». Отсюда или vi-шные режимы, или emacs-овские аккорды, что влезет в память универского компа. В современных клавиатурах аппаратной осталась только клавиша System Request, которая досталась в наследство от мэйнфреймов.
Сообщение слишком длинное. Полная версия.
>> No.49825 Ответ
Файл: 649a345fdb3bf5951fd9ac1b64a0d3ef.png
Png, 970.01 KB, 1593×896 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
649a345fdb3bf5951fd9ac1b64a0d3ef.png
>>49824
Это все не так и важно, не так ли? Моды в vi появились в древние времена и задумывались под древнюю аппаратуру, но это не отменяет того, что сама идея пережила эти времена и сейчас используется именно из-за своей эргономичности: Spacemacs и vi-like плагины во всех популярных IDE будут тому подтверждением.
>> No.49826 Ответ
>>49825
Альтернативная теория:
Старпёры привыкли к ви(му). Старпёры были хорошими программистами. Новое поколение увидело, что хорошие программисты пишут в ви(ме), стали подражать и привыкли. Из нового поколения получились хорошие программисты. Ещё более новое поколение увидело, что хорошие программисты пишут в ви(ме), и стало подражать. Продолжать до 2020 года.
>> No.49827 Ответ
Файл: 2015-02-25-714031.png
Png, 174.62 KB, 350×651 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2015-02-25-714031.png
>>49825
Какая идея? Идея vi — полноэкранный редактор, который работает на любом дрыне, имитирующем аппаратно пиш.машинку и подключаемом к компьютеру через тормознутый диалап. За это он был очень любим одминами, у которых в каморке всегда такой дрын имелся, стал стандартом и до сих пор суётся в дистрибутивы по принципу «А вдруг?!», благо менять в нём ничего уже не надо.
В современности же vim косплеит по факту edit.com с нескучными фичами, однако его кривой RE-движок не вывозит и заставляет юзать Perl.

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

А если смотреть ширее, то:
— скан-коды и куча дополнительных клавиш в клавиатурах, которые отсюда можно перебиндить под свои нужды — в ASCII-терминалах у вас нет возможности узнать, например, нажата ли клавиша Ctrl, поскольку она просто обнуляет 6-й бит в коде символа;
— чемпион по скоропечатанью выехал на том, что использовал CapsLock вместо Shift — так почему-то быстрее (собственно {Shift,A} прожимать удобнее, чем Shift+A, но у нас клавиатуры до сих пор косплеят пиш.машинку, где такое поведение было обусловлено механикой);
— аккорды всегда были в винде, пробиваются через Alt: {Alt,f,o}, {Alt,f,s}, {Alt,e,u} — ЖидБрейнс в своей Идее на это почему-то забил;
— аккорды были в AutoCAD, также они есть в QCAD (Компас — не знаю, не крутила) — я вообще не представляю, как можно что-то начертить без аккордов, особенно альбом простыней A1.

>>49825
Какая идея? Идея vi — полноэкранный редактор, который работает на любом дрыне, имитирующем аппаратно пиш.машинку и подключаемом к компьютеру через тормознутый диалап. За это он был очень любим одминами, у которых в каморке всегда такой дрын имелся, стал стандартом и до сих пор суётся в дистрибутивы по принципу «А вдруг?!», благо менять в нём ничего уже не надо.
В современности же vim косплеит по факту edit.com с нескучными фичами, однако его кривой RE-движок не вывозит и заставляет юзать Perl.

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

А если смотреть ширее, то:
— скан-коды и куча дополнительных клавиш в клавиатурах, которые отсюда можно перебиндить под свои нужды — в ASCII-терминалах у вас нет возможности узнать, например, нажата ли клавиша Ctrl, поскольку она просто обнуляет 6-й бит в коде символа;
— чемпион по скоропечатанью выехал на том, что использовал CapsLock вместо Shift — так почему-то быстрее (собственно {Shift,A} прожимать удобнее, чем Shift+A, но у нас клавиатуры до сих пор косплеят пиш.машинку, где такое поведение было обусловлено механикой);
— аккорды всегда были в винде, пробиваются через Alt: {Alt,f,o}, {Alt,f,s}, {Alt,e,u} — ЖидБрейнс в своей Идее на это почему-то забил;
— аккорды были в AutoCAD, также они есть в QCAD (Компас — не знаю, не крутила) — я вообще не представляю, как можно что-то начертить без аккордов, особенно альбом простыней A1.

Так что удвою вот этих: >>49818 >>49823

>>49826
Забавно в свете вашей теории вспомнить тот факт, что vi со второй версии перестал помещаться в память универского компа.
Сообщение слишком длинное. Полная версия.
>> No.49831 Ответ
>>49827
Ты немножко терминологию путаешь. "Аккорды" -- это как раз одновременные нажатия, типа Ctrl+Alt+Del. Последовательные нажатия (вроде виндовых {Alt,f,o}) как-то по-другому называются. И ближе к виайным режимам по принципам работы.

А стандартная клавиатура, конечно, то ещё дерьмо. Инженерный идиотизм, как я его называю. По-хорошему, ещё при появлении электрических пишущих машинок (когда механических рычагов под клавишами не стало) нужно было всю раскладку переработать с точки зрения эргономики.
>> No.49832 Ответ
>>49824
> Это не удобство, это компромисс между удобством и железом.
Любое удобство работы на компе это компромисс с железом. По крайней мере, пока нейроинтерфейс не разработали.
>> No.49838 Ответ
>>49824
> хотя удобней IJKL
Вкусовщина. Начинал пользоваться вимом из-за хайпа, без навыка слепой печати. Потом один чувак сказал, что я косячу. Научился (почти)слепой печати (косячные биндинги мышечной памяти и иногда приходиться мысленно представлять клавиатуру и места кнокок).

Так вот, теперь субъективно один ряд управляющих кнопок вместо WASD-подобного кажеться лучше. Хз. Я больше думал не про "HJKL", а про "JKL;" - чтобы с соска руку не нужно было убирать.


No.49719 Ответ [Открыть тред]
Файл: cirno-s-computer-science-class-sicp.jpg
Jpg, 174.71 KB, 1355×882 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
cirno-s-computer-science-class-sicp.jpg
Здесь я буду собирать и делиться интересными и очень блогпостами, записями с конферений и публикациями.

Проблема восьми королев, решенная с помощью типов. Вариант с шаблонами на плюсах прилагается в комментариях:
https://aphyr.com/posts/342-typing-the-technical-interview

Использование экзистенциальных типов и CPS для написания безопасных zero-cost API:
https://dl.acm.org/doi/10.1145/3299711.3242755

SPJ о линейных типах. В теории, мы должны их увидеть в 9-ой версии GHC.
https://www.youtube.com/watch?v=t0mhvd3-60Y
12 posts are omitted. Развернуть тред.
>> No.49764 Ответ
>> No.49765 Ответ
Файл: 1496459160698.jpg
Jpg, 95.33 KB, 517×753 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1496459160698.jpg
>>49764
Пожалуйста, с небольшими комментариями в следующий раз! Голые ссылки надо открывать и вспоминать!
>> No.49766 Ответ
>>49763
> Как мне известно, это просто набор переписывающих правил, позволющих вычислить статическую часть кода и специализировать динамическую во время компиляции.
Да, но это не всё. Есть прокции Футамуры https://habr.com/ru/post/47418/
Теоретически, можно сделать такую штуку - мы пишем некий интерпретатор некоего языка X на каком-то очень умном ЯП, потом особым образом специализируя код интерптетатора, можно синтезировать компилятор из интерпретатора. И если потом код на языке X отдать этому синтезированному компилятору, он может скомпилировать это в полноценный бинарник, притом самого интерпретатора там не будет вшито в рантайм, это может быть прямая компиляция в инструкции целевого процессора.

Вот на что-то такое было бы интересно посмотреть.
>> No.49769 Ответ
>>49766
Погугли книгу "Understanding and Writing Compilers" (Richard Bornat).
>> No.49779 Ответ
>>49763
https://keldysh.ru/papers/2018/prep2018_111.pdf - вот обзорная статья по суперкомпиляции
> Делается попытка «выполнить» программу не для конкретных входныхданных, а «символически» в «общем» виде, то есть для произвольныхвходных данных. Ну или для всех входных данных, удовлетворяющих каким-то ограничениям. Для этого строится «дерево конфигураций» (=«дерево процессов»). В узлах дерева находятся «конфигурации», кото-рые описывают множества состояний вычислительного процесса. По-нятно, что эти множества должны быть описаны на каком-то языке,и могут быть не вполне точными («прихватывать» что-то лишнее). А стрелки, связывающие узлы дерева, соответствуют каким-то действиями проверкам, происходящим при исполнении программы.

https://sergei-romanenko.github.io/scp-notes-ru/ и вот еще.

Я считаю что это достаточно интересное направление
>> No.49783 Ответ
Файл: porovozik.png
Png, 136.47 KB, 662×556 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
porovozik.png
>>49779
> Я считаю что это достаточно интересное направление
А я считаю, что моск аффтара достаточно суперкомпилирован токсоплазмой.
Когда на вашем супер-языке найдут хотя бы элемент в массиве, тогда и приходи!!!!!111ы
>> No.49784 Ответ
>>49779
Спасибо, я посмотрю обязательно!

В последнее время читаю страшные вещи вот тут:
http://comonad.com/reader/

Практически ничего непонятно, и нагнетает сильно. Формального математического образования очень не хватает.
>> No.49808 Ответ
>> No.49835 Ответ
Файл: 4317119750_4d5c719004.jpg
Jpg, 39.13 KB, 500×449 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
4317119750_4d5c719004.jpg
>>49719
Ну? Где мои интересности?
>> No.49837 Ответ
Файл: e98f78899ee18eda12326c79.jpg
Jpg, 201.74 KB, 900×540 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
e98f78899ee18eda12326c79.jpg
>>49835
Прости, я почти ничего не читаю в эти сумбурные времена!
Узнал только про интересный проект, позволяющий компилировать полиморфные функции без указателей и без специализации. В README тут более подробно. Интересно, насколько это может иметь смысл добавить в уже существующие функциональные языки.

https://github.com/ollef/sixten#compared-to-other-languages


No.48615 Ответ [Открыть тред]
Файл: 1.jpg
Jpg, 49.89 KB, 1024×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
1.jpg
Предлагаю челендж, где каждую неделю мы будем выполнять задания.

Придумал разные уровни сложности:
1 - как самый простой.
5 - самый сложный.

Первые задания от меня, на правах ОПа!

C3: Реализация синтезатора bytebeat, воспроизводящего аудио непосредственно с помощью OpenAL или аудио вашей платформы (e.g alsa, oss, sndio)

C2: Реализуйте последовательность Фибоначчи с помощью рекурсивного решения, но избегайте экспоненциальной временной сложности. Программа должна быть четко определена для первых 100 членов Фибоначчи. Это типичный вопрос на интервью. Haskell, Idris и Agda не могут быть использованы для этого задания, бонусные очки для выяснения, почему.

C1: Реализация программы fizzbuzz без использования оператора деления по модулю ( % , mod, rem, & c...)

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

Придумал разные уровни сложности:
1 - как самый простой.
5 - самый сложный.

Первые задания от меня, на правах ОПа!

C3: Реализация синтезатора bytebeat, воспроизводящего аудио непосредственно с помощью OpenAL или аудио вашей платформы (e.g alsa, oss, sndio)

C2: Реализуйте последовательность Фибоначчи с помощью рекурсивного решения, но избегайте экспоненциальной временной сложности. Программа должна быть четко определена для первых 100 членов Фибоначчи. Это типичный вопрос на интервью. Haskell, Idris и Agda не могут быть использованы для этого задания, бонусные очки для выяснения, почему.

C1: Реализация программы fizzbuzz без использования оператора деления по модулю ( % , mod, rem, & c...)

Реализацию можно кидать тут под спойлером либо pastebin.

Связь дабы не проебать треад и для организации тут: @lambdaclass
Сообщение слишком длинное. Полная версия.
>> No.49129 Ответ
Так себе идея.
>> No.49134 Ответ
>>48615
Где-то я видел уже задачу C2. Не понимаю, почему haskell не может быть использован для решения. Вот несколько решений на хаскеле. Третье не рекурсивное, но самое лаконичное и ясное. Первые два - рекурсивные, хотя рекурсивна внутренняя функция. А рекурсивной должна быть внешняя? Тогда наверное и вправду не получится избежать экспоненциальной временной сложности. Но почему именно на тех трех языках? На джаве наверное тоже не получится избежать. Или здесь я должен разбираться в тонкостях того, как исполняется хаскель, чтобы ответить?

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

module Fib () where

fib :: Int -> [Int]
fib 1 = [1]
fib 2 = [1,1]
fib n = innerfib [1,1] (n-2)

innerfib :: [Int] -> Int -> [Int]
innerfib arr 0 = arr
innerfib (a : b : rest) n = innerfib (a + b : a : b : rest) (n-1)
>>48615
Где-то я видел уже задачу C2. Не понимаю, почему haskell не может быть использован для решения. Вот несколько решений на хаскеле. Третье не рекурсивное, но самое лаконичное и ясное. Первые два - рекурсивные, хотя рекурсивна внутренняя функция. А рекурсивной должна быть внешняя? Тогда наверное и вправду не получится избежать экспоненциальной временной сложности. Но почему именно на тех трех языках? На джаве наверное тоже не получится избежать. Или здесь я должен разбираться в тонкостях того, как исполняется хаскель, чтобы ответить?

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

module Fib () where

fib :: Int -> [Int]
fib 1 = [1]
fib 2 = [1,1]
fib n = innerfib [1,1] (n-2)

innerfib :: [Int] -> Int -> [Int]
innerfib arr 0 = arr
innerfib (a : b : rest) n = innerfib (a + b : a : b : rest) (n-1)

fib2 :: Int -> [Int]
fib2 1 = [1]
fib2 2 = [1,1]
fib2 n = innerfib2 (1, 1) (n-2) [1,1]

innerfib2 :: (Int,Int) -> Int -> [Int] -> [Int]
innerfib2 p 0 arr = arr
innerfib2 p n arr = case nextpair p of (a,b) -> innerfib2 (a,b) (n-1) (b:arr)

nextpair :: (Int,Int) -> (Int,Int)
nextpair (a,b) = (b, a+b)

fib3 :: Int -> [Int]
-- fib3 n = take n (map snd (iterate nextpair (1,1)))
fib3 n = (map snd . take n) (iterate nextpair (1,1))
Сообщение слишком длинное. Полная версия.
>> No.49179 Ответ
fizzbuzz
public class FizzBuzz {
public static void main(String[] args) {
for (int i = 1, m = 4, n = 2; i <= 100; i++, m--, n--) {
if (m == 0 || n == 0) {
if (n == 0) {
System.out.print("Fizz");
n = 3;
}
if (m == 0) {
System.out.print("Buzz");
m = 5;
}
System.out.println();
} else {
fizzbuzz
public class FizzBuzz {
public static void main(String[] args) {
for (int i = 1, m = 4, n = 2; i <= 100; i++, m--, n--) {
if (m == 0 || n == 0) {
if (n == 0) {
System.out.print("Fizz");
n = 3;
}
if (m == 0) {
System.out.print("Buzz");
m = 5;
}
System.out.println();
} else {
System.out.println(i);
}
}
}
}
Сообщение слишком длинное. Полная версия.
>> No.49182 Ответ
>>49179
Как не нужно делать последовательность Фибоначчи
import java.math.BigInteger;

public class Fibonacci {

private static int count = 100;

private static void step(BigInteger num1, BigInteger num2) {
count--;
if (count <= 0) {
return;
}
System.out.print(num2 + " ");
step(num2, num1.add(num2));
>>49179
Как не нужно делать последовательность Фибоначчи
import java.math.BigInteger;

public class Fibonacci {

private static int count = 100;

private static void step(BigInteger num1, BigInteger num2) {
count--;
if (count <= 0) {
return;
}
System.out.print(num2 + " ");
step(num2, num1.add(num2));
}

public static void main(String[] args) {
step(BigInteger.ZERO, BigInteger.ONE);
}
}
Сообщение слишком длинное. Полная версия.
>> No.49219 Ответ
>>49182
А так?
a = 0
b = 1
c = 0
while c < 1000:
c = a + b
a = b
b = c
print(a)
>> No.49803 Ответ
>>49219
Оно не рекурсивное.
>> No.49805 Ответ
>>48615
import java.math.BigInteger

fun fib(num: Int): MutableList<BigInteger> = when(num) {
in 0..1 -> (0..num).map { it.toBigInteger() }.toMutableList()
else -> fib(num - 1).apply { add(get(size - 1) + get(size - 2)) }
}

fun main() {
println(fib(2))
}
>> No.49830 Ответ
Где мои задачи? Уже джва года жду!


No.49799 Ответ [Открыть тред]
Файл: Bounty_Hunter_icon.png
Png, 73.38 KB, 256×144 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Bounty_Hunter_icon.png
Какие есть конкурсы с большим денежным вознаграждением? Помню телеграм раньше делал всякие конкурсы, но не могу сейчас найти актуальные (все старые). Где можно найти объявления о таких конкурсах собранные вместе?
>> No.49806 Ответ
>>49799
rsa factorization challenge
Старый но вроде еще живой.


[0] [1] [2] [3] [4] [5] ... [52] [53] [54]
Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]