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

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

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

Поэтому вопрос — чем можно в 21-ом веке заменить шелл, чтоб преимуществ не сильно растерять, но и при этом иметь возможность нормально программировать? Готов рассмотреть ЯП с компиляторами со статической линковкой. Поделитесь опытом.

Смотрю я на свой код шестилетней давности и не узнаю себя
if (nameDivSpanNext.nodeType == 3) {
Почему ==, а не ===, ещё как-то можно понять. Не убедил меня тогда ещё JS-Lint, что всё же двойное грешновато. Но почему не if (3 === nameDivSpanNext.nodeType) ?

Как сейчас помню, учил меня Каменский Никита Викторович в НГУ в птичьих языках программирования на всякий случай при сравнении ставить константу всегда влево. Я так и делаю, на птичьих языках — константа влево, а на нормальных языках — гордо ставлю вправо. НГУ был раньше, чем я писал скрипт. Я как будто забыл, а потом вспомнил. Странно это.

вот раньше такая штука была, "zmodem" называлась. Шо это такое: сидишь в терминале, тебе запущенная в терминале консольная программа генерирует специальную последовательность, которую ТЕРМИНАЛ понимает и складывает в файл рядом с собой. Нужно чтобы передать например файл из консоли прямо ко мне, через сколько бы там я штук ssh не сидел далеко. Нужно, чтобы терминал умел понимать zmodem как он понимает ansi sequences. И кстати в другую сторону тоже работало.

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

youtube.com

Нужно запретить использовать слово приложение (application) из–за того что это заимствование создаёт ещё больше неразберихи в среде малообразованного населения. И у нас уже есть слово «программа» которое в контексте программирования и ЭВМ обозначает комьютерную программу. А ещё «приложение» звучит отвратительно. В англицкой Wikipedia ( en.wikipedia.org ) напечатано что application это программа для ЭВМ созданная для решения пользователем неких своих задач а если почитать эту же статью в переводе, то выясняется что application это прикладная программа. Теперь о якобы взаимозаменяемости application и web site. Нет, блять, это разные понятия. Есть такое замечательное слово как web–узел, web site то есть, узел всемирной, блять, сети. И если вы открываете web–узел www.mazafucka.com, то открываете вы web–узел а не application. И уже через этот узел вы используете, если они есть, ваши прикладные, блять, программы (например, прости господи, текстовый редактор на JavaScript) с помощью которых вы решаете какую–то свою задачу. К сожалению многие senior upper-intermidiate-english javascript-ninja software engineer`ы этого не понимают и говорят «когда я говорю приложение, я не совсем знаю точно что занчит вообще приложение… я долго над этим думал и попытался сформулировать в чём собственно разница между приложением и сайтом…» и выдают размытое определение: вэб–аппс хэв комплэкс интэрэкшнс энд мэйнт э стэйт он зэ клайэнт вайл, вэб сайтс мостли рэндэр стэйтик информэйшн.». Стэйтик информэйшн выдаётся потому ты, web–программист, написал программу которая и выдаёт мостли стэйтик информэйшн (или же ты ничего не писал и её выдает какой–нибудь apache).

попалась мне книжка "Fluent C#"
для меня она сейчас ну прям совсем "hello world", но жаль, что в начале моего пути таких книг не нашел.
она рассказывает о том, как надо делать приложения, а не только программировать.
да еще и СТИМПАНКОВСКИЕ иллюстрации!
books.google.ru
рекомендую новичкам

Я хуею. Один из возможных способов отправить HTTP запрос это написать код типа
HttpWebRequest r = WebRequest.Create(url) as HttpWebRequest;
r.Method = "POST";
r.ContentType = "application/json";
System.Byte[] jA = Encoding.UTF8.GetBytes(jsonStringToSend);

Stream rStream = r.GetRequestStream();
rStream.Write(jA, 0, j.Length);
HttpWebResponse re = r.GetResponse() as HttpWebResponse;

А где же происходит отправка запроса? А во время вызова GetResponse и происходит. Для сравнения код на Ruby:
uri = URI.parse("http://localhost:3000/users")

header = {'Content-Type': 'text/json'}
user = {user: {
name: 'Bob',
email: 'bob@example.com'
}
}

http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri, header)
request.body = user.to_json

# Send the request
response = http.request(request)

Подумал как потоки можно реализовать наиболее простым образом.

Пока по запуску потоков есть идеи:
есть специальный набор суффиксов, которые указывают что слово нужно запустить в отдельном потоке, а также из стека извлечь его аргументы и это будет новый стек. Если стек реализован двусвязным списком, то создание нового стека из куска имеющегося — очень быстрая операция, но вообще и из массива можно копировать довольно быстро (на МК это можно поручить DMA).

Классический подход такой что запущенному потоку присваивается токен, и его уже программа может использовать для управления потоком и обменом с ним данными, однако можно ввести суффикс, который сохранит токен под именем. Например, как-то так:
в слове Й’хан-тлеи корень хан исполнится в отдельном потоке (префикс й), а токен сохранится под именем тлеи. Точнее даже не так, хан-тлеи будет возвращать токен, а различные суффиксы помогут собрать слово ожидания результата, остановки потока, пересылки потока на другую машину, и т.д.

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

Не могу получить данные с сайта по HTTPS из программки на .NET в Windows XP ({"Unable to read data from the transport connection: Удаленный хост принудительно разорвал существующее подключение."}). А вот в случае программы на Python такой проблемы нет. Сука–а!

Я правильно понимаю что в рейтинге самых кроссплатформенных решений для разработки игрового движка первые два места занимают javascript и plain c?

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

mercurial-scm.org
"Rust: implementation of `hg`

This commit provides a mostly-working implementation of the
`hg` script in Rust along with scaffolding to support Rust in
the repository.

If you are familiar with Rust, the contents of the added rust/
directory should be pretty straightforward. We create an "hgcli"
package that implements a binary application to run Mercurial.
The output of this package is an "hg" binary.

Our Rust `hg` (henceforth "rhg") essentially is a port of the existing
`hg` Python script. The main difference is the creation of the embedded
CPython interpreter is handled by the binary itself instead of relying
on the shebang. In that sense, rhg is more similar to the "exe wrapper"
we currently use on Windows. However, unlike the exe wrapper, rhg does
not call the `hg` Python script. Instead, it uses the CPython APIs to
import mercurial modules and call appropriate functions. The amount of
code here is surprisingly small.

It is my intent to replace the existing C-based exe wrapper with rhg.
Preferably in the next Mercurial release. This should be achievable —
at least for some Mercurial distributions. The future/timeline for
rhg on other platforms is less clear. We already ship a hg.exe on
Windows. So if we get the quirks with Rust worked out, shipping a
Rust-based hg.exe should hopefully not be too contentious."

Баян-статья habrahabr.ru про промисы в жабоскрипте, нашел попутно.

Так вот, там чуваки РУГАЮТ async/await потому что по сравнению с промисами код хуже читается (!!). Вроде не шутят. Беда (!!), говорят, что асинхронный код становится похож на синхронный. И это не один человек, там вроде есть группа с консенсусом на эту тему. Да, и постоянно ссылаются что становится сложно выполнить 2 функции одновременно: Promise.all(f1(), f2()).

Вопрос публике: в вашем проекте какой процент кода вот это вот, запускает одновременно 2 future? Это оптимизация latency на коленке каждый раз? Нафиг так жить?

Какой смысл в node.js если есть dart?

Варианты ответов: 1) под ноду есть офигенне ВЕБ-фреймворк, без которого не жизнь, и оно без ноды на сервере не живет 2) реюзать код с бровзером

В моем случае: чисто енларг-подобный процессинг: схватил — сцепил — залил/отдал, никаких веб фреймворков. Шарить с вебом тоже нечего. Зато строгая типизация с тайпчекером, системные штучки искаропки, раздельные кучи, и самое главное — это то, что оно задизайнено все изначально как надо, не костыльно, весь тулчейн включая package mgr.

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

Неявный вопрос звучит так: может я пропустил что-то, что в этом направлении идет еще дальше дарта?

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

Пишу на дарте, дык реально утомительно и забывчиво писать там везде "await s.readBytes()", вот это await. В котлине здорово придумали вообще на уровне языка чтобы само все делалось.

Мнэ.

В C# можно создать объект анонимного типа используя записав свйства в фигурных скобках (как в языке–который–нельзя–называть)

var o = new {name = "Ndndn", place = 12};
Но как потом обратиться к этим свойствам? Судя по подсказке IDE у объекта свойств таких нет. Оказывается всё просто (проще чем в языке–который–нельзя–называть):

item.GetType().GetProperty("label").GetValue(item, null)