LINUX.ORG.RU

Сообщения lovesan

 

Мысли про формы оплаты труда

 ,

В сфере SE/SA/IT существует только три вменяемых вида оплаты труда. Первый это почасовка, которая применяется для разовых задач(настроить сервак, перекрасить кнопку, итд). Второй вариант это фиксированная сумма, опять же для разовых задач(или этапов задач). Третий вариант это «зарплата в месяц».

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

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

Из чего следует, что схема «зарплата в месяц» эффективна только в следующих случаях:

  • Поддержка, починка багов, и вот это всё
  • R&D и прочие виды разработки, когда ни результат, ни сроки, заранее не определены, а бюджет резиновый(последнее - важно)
  • Фиксированное количество работы и бюджета, превыщающее месяц, но при этом детально распланированное (редкость)

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

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