LINUX.ORG.RU

Сообщения lovesan

 

Почему Go это плохо, и он вам, на самом деле, не нужен.

 ,

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

Дело в том, что Go это, на самом деле, «решение» внутренних гугловских проблем. Но отнюдь не проблем горизонтального масштабирования серверного ПО, как многие почему-то думают. Он приспособлен специально для использования в гугле вот в каком контексте.

Гугл нанимает большое количество тупых студентов, только-только после вуза или ПТУ, и заставлять их писать хоть какой-то простой код. И делать минимум ошибок, при этом. Для этого Go сделан таким тупым и упрощенным. И выкинут в паблик он только для того, чтобы вероятность, что у такого студента, только пришедшего в гугл, было хоть какое-то знание Go, была выше нуля.

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

Из гугла же идет маразматическая система управления зависимостями Го, которая заточена на монорепы.

Тут возникает вопрос - а почему этому тимлиду не дать в руки кодогенератор, вместо всей этой accidental complexity, возникающей из-за огромного количества строк кода, и из-за затрат на коммуникацию?

А тут надо понимать, как внутри устроены огромные корпорации типа гугла.

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

Естественно, это все отражается на качестве продуктов, и это видно как по полному прекращению инноваций в гугле, так и по постоянно мелькающим и закрывающимся высерам этой компании - hangouts, duo, google plus, google wave, и прочее и прочее, можете еще вспомнить много чего.

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

Никакой мифической простоты в отладке и в понимании кода Go не приносит. Да и сложность программных систем растет совершенно не из-за понятности/непонятности какой-то отдельной взятой строчки кода или функции. Потому, что, во-первых, понятность это понятие субъективное, во-вторых потому, что, отдельно взятая фунцкия на 5 строк понятна любому опытному программисту, будь она написана хоть на Rust, хоть на Common Lisp.

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

В случае если вы не хотите выкидывать кучу денег просто так, и скорее предпочли бы нанять немного, но более-менее опытных программистов, Go будет только вреден, потому что все вменяемые люди от него, на самом деле, плюются. Он реально отталкивает опытных людей, которые способны понять сложные требования и написать, и поддерживать, более-менее сложные системы уровнем хотя бы нескольких сервисов плюс БД и MQ.

lovesan
()

Как выучить C# за 21 день имея только опыт Common Lisp? Надо всего лишь...

 , , , ,

Вобщем, я тут в своей библиотеке для интероперабельности Common Lisp и .NET - запилил мега-фичу - прокси-классы.

Это такие классы, лисповые, которые с помощью магии метаобъектного протокола CLOS и немного System.Reflection.Emit - прикидываются .NET классами, а их объекты, соответственно - .NET объектами.

Это позволяет бесшовно интегрироваться с .NET кодом, например реализовывать .NET интерфейсы или вон, идиоматически писать на WPF, с MVVM, биндингами, командами и всем прочим.

Вон пример приложения, это браузер пакетов(лисповых неймспейсов) CL: https://files.catbox.moe/77wdbn.png

https://github.com/Lovesan/bike/blob/master/examples/wpf.lisp (потом как-нибудь еще добавлю пример с Avalonia, чтобы было кроссплатформенно вообще).

Вот соответствующий XAML. Как видно, вьюха напрямую биндится к свойствам вью-моделей, как будто у нее под капотом C#. https://github.com/Lovesan/bike/blob/master/examples/WpfUserControl.xaml

Код в принципе там понятен, особенно тем кто имел дело с WPF/Avalonia. Но документацию надо бы написать, да, работаю над этим. Докстринги это хорошо но мало.

lovesan
()

Релиз bike 0.13.0. Нужна помощь с сигналами на линуксе. Опять.

 , , , ,

После пары лет наконец выпустил новый релиз своей библиотеки для интероперабельности Common Lisp и .NET

https://github.com/Lovesan/bike/tree/0.13.0

Там есть серьезная issue, касающаяся линукса, с которой вообще нужна была бы помощь. Что-то опять с сигналами не так, на этот раз с SIGFPE.

https://github.com/Lovesan/bike/issues/10

Если для Ъ - после загрузки рантаймов последних версий .NET в лисп(тестировал на SBCL и CCL), лисповый процесс грохается с SIGFPE.

Выглядит это обычно примерно так:

CORRUPTION WARNING in SBCL pid 151 tid 163:
Received signal 8 @ 7f00cbeb2c3b in non-lisp tid 163, resignaling to a lisp thread.
The integrity of this image is possibly compromised.
Continuing with fingers crossed.
Floating point exception (core dumped)

Началось такое с релиза .NET 6 и продолжается до сих пор. Т.е. .NET 5 работает, и .Net Core до него работали тоже.

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

Для SBCL и в этот раз есть костыль, правда, кривой. Вырубить отлов исключений операций с плавающей точкой. Но тогда, вместо вызова исключений, в случае операций по типу (/ 1.0 0.0) будут возвращаться значения типа +inf, -inf, и всякие там NaN. Что вобщем-то не по стандарту CL и вообще криво.

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

lovesan
()

Илон Маск заопенсорсил твиттерский алгоритм рекомендаций

 , , ,

Нет, это не шутка.

https://github.com/twitter/the-algorithm/tree/main

Под AGPL.

По-моему - круто.

lovesan
()

OpenAI как инструмент mass surveillance

 , , ,

Будете смеяться, но я только сейчас начал понимать, о чем на самом деле все это время говорил Столлман и сотоварищи.

Всем понятна аналогия о том что «free as in beer» это неправильное понимание свободного ПО, несмотря на то что множество людей его так и понимает, особенно в постсовке.

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

И вот что мы видим на примере OpenAI? Куда оно отправляет все данные и все диалоги? А вот хрен знает куда. И как это всё потом используется? Код-то закрыт.

lovesan
()

Metallica или Megadeth?

 megadeth, ,

Ну, с прошлой темы прошло достаточно времени, но вот теперь я задался вот этим вопросом. Ну, он куда сложнее. С одной стороны Megadeth часто куда техничнее, чего стоит один Holy Wars, но с другой стороны, Metallica часто имеет куда более внушительные элементы Thrash-метала. Что думаете?

lovesan
()

Portage/Ebuildы для MinGW

 , , ,

А есть такая штука вообще? Помоему, было бы круто для кросс-компиляции или вообще нативно.

Под винду, под MinGW, собирается и работает куча софта, но руками такое делать довольно муторно. К тому же у библиотек есть куча опций сборки, так что можно было бы задействовать use-флаги и так далее.

Может я проспал, и такое есть, гентой давно не пользовался, но вдруг стало интересно.

А то пилю потихоньку свои скрипты, но вдруг это кривой велосипед, и оно уже сделано?

https://github.com/Lovesan/mingw-xc/

Кстати некоторые вещи(например как собирать NSS) - скопипастил именно из гентовских ебилдов.

lovesan
()

Хватит триггериться на мат

 

Я не понимаю уже, это ЛОР или форум для тринадцатилетних девочек-анимешниц? Че удалять то? Не дают парням поговорить нормально, не то слово сказал, так все, подгорает снизу, жаловаться идут в некорректные сообщения.

Че за дела вообще? Че за синдром вахтера? Хватит уже на мат триггериться.

lovesan
()

Metallica или Slayer?

 ,

Че круче? Как думаете?

Я склоняюсь к Metallica \m/

lovesan
()

SBCL уделывает C++(и шланг, и G++) по производительности

 , , ,

https://programming-language-benchmarks.vercel.app/problem/spectral-norm

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

Назовите теперь хоть одну причину использовать плюсы вообще?

Перемещено xaizek из development

lovesan
()

Кто-нибудь играет в Starbase?

 ,

Сабж.

Супер крутая игруха, только что вышла в Early Access в стиме. Багов, конечно, море, но потенциал огромен. Круче Space Engineers и подобного всего вместе взятого. Редактор космических кораблей - натурально не уступает CAD для авиации.

В фичах - программируемость всего и вся, на специальном басикоподобном языке YOLOL. Чуваки на нем запилили даже GPS-систему навигации. https://isan.to/isan.pdf

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

Да, также можно грабить корованы.

lovesan
()

Когда люди перестанут писать на C++?

 

И зачем они это делают до сих пор, не считая поддержки легаси?

Перемещено Shaman007 из development

lovesan
()

Навелосипедил квадратные скобки в лиспе

 , , ,

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

Тащемто теперь есть. Вот так можно вызывать методы:

(use-namespace 'System)

[:Console WriteLine "Hello, World!"]

Вот так можно получить текущее время в стринге: (ни одной круглой скобки! может это tcl/tk?)

[[:DateTime %Now] ToString]

А вот так получить значение максимального int32, из специального статического поля соответствующего класса:

[:int $MaxValue]

Более того, можно стучаться в индексеры дикшнрей и прочих объектов, даже круче чем в Clojure:

(let ((dict (new '(Dictionary :string :string))))
  (setf #[dict "Hello"] "World!")
  dict)

И создавать Enum-ы не обременяя себя расставлением запятых:

(use-namespace 'System.Reflection)

#e(BindingFlags Public Static)

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

(use-namespace 'System.Text)

(let ((dotnet-array [[:Encoding %UTF8] GetBytes "Hello, World!"]))
  (with-fixed (raw-pointer dotnet-array)
   (cffi:mem-ref raw-pointer :uint8)))
;; ==> 72

Не хватает батареек? Тогда мы идем к вам!

lovesan
()

Посмотрел я этот ваш Rust

 ,

Вобщем, дошли руки потыкать палочкой.

Я вот что не пойму - зачем и кому он нужен, ну правда?

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

Close to metal? Нет, извините, мне когда надо будет close to metal - я пойду сишку возьму. Которая реально, и Close To Metal, и со стабильным ABI, так важным для низкоуровневого программирования, и так далее. А если просто производительности не будет хватать, в том числе там из-за GC, так ведь - что в Java, что в Common Lisp, есть огромное количество возможностей затюнить производительность до нужного уровня, при этом не стреляя себе в ногу.

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

Наконец, ну безопасность чтоли, хваленая? Ну, опять нет. Взять тот же unsafe. Если вам нужна прямо таки безопасность-безопасность - берите что-нибудь вроде хаскеля(или какого-нибудь Coq, или что-нибудь подобное, с зависимыми типами, если совсем упоролись), ну или на худой конец, что-нибудь вроде Java, где все безопасно прямо как в дурдоме с мягкими стенами.

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

lovesan
()

АВИМ

 , ,

Удалены:

а) Комментарии по 5.2 с неслабым снятием скора, хотя никакого 5.2 там нет от слова совсем.

Например вот это: https://www.linux.org.ru/forum/development/15559382?cid=15559383

б) тема с замечаниями: https://www.linux.org.ru/forum/linux-org-ru/15559460?lastmod=1583105320669

Модераторы модераторов спят или как вообще?

Заблокируйте ему модераторские права пока тут полфорума не снесло.

lovesan
()

Удаленный комментарий про Ryzen 3950

 ,

Удален по причине 4.2 - это как? Модератору @leave задели за больное место? (за процессор видимо)

При том что комментарий содержит ссылки-подтверждения мнения.

https://www.linux.org.ru/forum/talks/15553247?cid=15553536

lovesan
()

Работа на Python в американском стартапе из кремниевой долины

 , , , ,

Внимание внимание, есть работа!

Тащемто нужно писать на Python, на Django. На фронте Vue.js, надо будет туда тоже уметь жать(если что научим, в принципе). В качестве базы посгрес, ну и всякое вроде ELK стека и подобного, для разных вещей. Также используем AWS и heroku.

Компания занимается автоматизацией сферы ипотечного кредитования в США.

Мы маленький, но уверенный стартап, который финансируется топовыми венчурными инвесторами из США. Только-только вышли из фазы MVP и уверенно движемся вперед.

Вилка 3000-4000 USD, но обговаривается отдельно. Если вы прямо супер-пупер, можно и больше, наверное.

Сотрудник ищется в Петербург, либо же с релокацией в Петербург(поможем). Но в крайнем случае можно и совсем удаленно, опять же если вы прямо супер пупер. Работаем в основном как удаленщики, но надо иногда появляться в офисе. Вобщем flexibility во все поля.

Официального представительства компании в РФ нет, поэтому нужно будет открывать ИП.

Подробное описание здесь: https://jobs.lever.co/pollyex/adf4467a-09e7-40ac-a098-529e6530eda3

Ищется синьор-помидор, т.е. у вас должен быть как минимум 5-летний опыт. На Питоне, либо Руби, либо даже же на Java или .NET

lovesan
()

Вступление в FSF

 , ,

Наслушавшись Столлмана в Питере, задумался.

Вощемто, что оно дает, нужно ли, итд. Как думаете?

$120 в год за членство - не так уж много.

Заставят ли весь код выкладывать под GPL?

Дискач.

lovesan
()

Велосипед на Asp.Net Core MVC

 , , , ,

(барабанная дробь)

Теперь у моего велосипеда есть пример встраивания лиспа в пайплайн Asp.Net Core MVC.

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

Все на лиспе, и сервер, и модель, и вью, и контроллер, и даже небо и даже Аллах.

https://github.com/Lovesan/bike/blob/master/examples/aspnet-mvc.lisp

Вот конкретно код хендлера:

(defun process-request (request response route-data)
  (declare (type dotnet-object request response route-data)
           (ignore request))
  "Processes a single HTTP request.
 REQUEST parameter represents an instance of HttpRequest.
 RESPONSE parameter is an instance of HttpResponse, which we would modify.
 ROUTE-DATA represent a collection of route data parameters(a RouteData instance)."
  (handler-case
      ;; First, retrieve the 'name' route parameter, which we have configured
      ;;  in our CONFIGURE-ROUTES handler
      ;; In case of it represents a string which equals to 'None',
      ;;  we instead utilize current user name.
      (let* ((route-arg (ref (property route-data 'Values) "name"))
             (who (if (string-equal route-arg "None")
                    (property 'Environment 'UserName)
                    route-arg)))
        ;; Set response content type
        (setf (property response 'ContentType) "text/plain; encoding=utf-8")
        ;; Write a string to response stream. Note that the extension method
        ;;   which we are making use of, returns a Task instance
        (invoke 'HttpResponseWritingExtensions 'WriteAsync response
                (format nil "Hello from AspNet.Mvc, ~a!~%Now is ~a~%"
                        who
                        (invoke (property 'DateTime 'Now) 'ToString))
                (property 'CancellationToken 'None)))
    (error (e)
      ;; Handle error in case of one occurs and return completed task
      (format *error-output* "~a~%" e)
      (property 'Task 'CompletedTask))))
lovesan
()

Велосипед починили. Теперь линуксоиды тоже могут в .Net Core через SBCL

 , , , ,

Значит так, сегодня починили баг который не давал SBCL работать с подгруженным в него .Net Core на Линуксе.

(напоминаю, что я делаю библиотеку которая позволяет дергать дотнет-кор из лиспа, и наоборот https://github.com/Lovesan/bike)

Но кроме того, я уже некоторое время собираю докер имаджи, которые содержат в себе реализацию лиспа и .Net Core SDK:

https://cloud.docker.com/u/love5an/repository/docker/love5an/dotnet-core-sdk-...

Пока поддерживаются реализации SBCL и Clozure CL(не путать с Clojure).

В основном для линукса, но также есть SBCL в контейнере Windows nanoserver.

Собираю сам, под AMD64, но исходники докерфайлов открыты, можете брать и модифицировать если надо:

https://github.com/Lovesan/dotnet-core-sdk-common-lisp-docker

Даешь лисп! Херак херак и в продакшн!

lovesan
()

RSS подписка на новые темы