Pull to refresh

Comments 125

UFO just landed and posted this here
У вас эта ссылка отобразилась как непосещенная? :)
UFO just landed and posted this here
Не активные пользователи оценили шутку только после перехода %)
Только это не ОС, а графическая оболочка к ней.
Продолжая логику комментария, было бы интересно прочитать подобную статью про саму OpenOS и принципы её работы внутри Minecraft
Обычная машина с Lua, некоторые апи языки переписаны для адаптации под Minecraft (например функция получения текущего времени возвращает игровое время, а не реальное), ну и добавлены апи для работы с блоками и карточками. Шелл, который мимикрирует под bash и вообще OpenOS пытается быть минилинуксом. Ничего сверхординарного там нет.
Ой чувствую что 0x10c таки выйдет. Своя ось уже есть, осталось только добавить космический корабль и перенести главного героя в космос.
UFO just landed and posted this here
UFO just landed and posted this here
Нет, осталось в эту «ось» перенести сам minecraft, дабы играть в minecraft в minecraft'е, ну и далее по рекурсии.
Ну, это можно скриптом выпиливать, если он код нормальный будет писать :D
Ок, ок, беру свои слова назад. А вам вот печеньку, хотите? :)
Вирусы для майнкрафта ещё не писали?
Писали-писали. Делали и «синие экраны», и полное удаление всех файлов, и инжект в код стандартной OpenOS, чтобы сложнее было обнаружить вирус. Делали так, что раз в 2 минуты компьютер выдавал окно с текстом «требую печеньки». В общем, много чего там можно сделать, чтобы испортить жизнь юзерам.
Предлагаю написать под неё RDP клиент и ходить с него на свое рабочее место.
Тоже писали, и даже работала система. Правда, медленно, т.к. автор ограничил количество пакетов, передаваемых за раз через игровые модемы. Можно, конечно, сделать через реальные php-скрипты, чтобы, например, управлять игровым компом с браузера, но в php я полный ноль. Такие дела.
>>Затем я добавил поддержку обоев, затем я написал файловый менеджер, затем…
Респект, так между делом несколько тысяч строк кода написал, просто по приколу, круто :)
Теперь под эту ось майнкрафт написать нужно.
Это было бы одно из самых интересных рекурсивных разбирательств по авторскому праву.
Видел в просторах ютуба видюшки с «фотошопом» от этого автора и игрой 2д майнкрафт.
Ну да. Особенно в связи с упомянутой комментарием ниже лицензии для самой ОС.
Меня вопрос почему-то очень беспокоит, а как вам вообще пришло в голову читать лицензию этой ОС? :)
Я ожидал такого вопроса. Привычка у меня такая, обычно я всегда автоматически лезу в папку вендоров, чтобы посмотреть, какие сторонние решения используются.
шикарная лицензия :) Надо только уточнить, что рабство пожизненное :)
То чувство, когда ты следил за появлением сего проекта ещё на YouTube, а теперь видишь статью на хабре, это, однако, доставляет =)
Идея создания операционной системы пришла как-то сама собой, и, недолго думая, я решил сделать несколько набросков иконок для будущей ОС


Читаю курс в университете по операционным системам. Теперь только понял, что самое главное в ОС :)
Главное – это нескучные обои. Так что автор в итоге всё сделал правильно :)
Игорь, я из QuickBlox, нам было бы интересно запустить чат (мессенджер, звонки, push notifications) для Minecraft, как считаете:
1) будет ли это востребовано в рамках OpenComputers и вне его
2) лучше самим делать или посотрудничать с кем-то типа вашей команды?
На OpenComputers уже имеется мессенджер, подключающийся к IRC, и им пользуются, в основном, гики и крайне узкий круг лиц. Обычным пользователям больше нравится писать скрипты для роботов, как-то взаимодействовать с игровым миром, а не общаться через эти компы (сужу исключительно по опыту администратора сервера), так что не думаю, что еще один сервис будет востребован. Но чисто ради забавы и кодерского любопытства было бы интересно написать клиент для вашего сервиса. Хотя я во всех этих сетевых протоколах довольно слабо разбираюсь, и вряд ли смогу накодить это сам.
Спасибо за ответ. А вне OpenComputers имеет смысл или все пользуются обычным IRC подобным / консольным чатом?
Ну, в самом Minecraft, как правило, пользуются обычным игровым чатом, не заморачиваясь на все эти технологичные приблуды. Иногда на серверах ставят моды для голосовой связи, такие как Gliby's Voice Chat, так что если и делать свой способ общения, то как-то в этом стиле, через модификации или плагины.
Товарищ разработчик) вещь наикрутейшая) Огромнющий лайк)
Автор забыл прикрепить видео обзор: https://youtu.be/nYvSoLz4JNQ
По сравнению с «недружелюбным к новичкам семейством СИ», LUA — ОТВРАТИТЕЛЬНЫЙ язык. К сожалению, приходилось по работе на нём кодить.
На вкус и цвет, как говорится… Насколько я его знаю (тоже на работе имел с ним дело немного) — язык как язык. Обычный скриптовый прототип-ориентированный язык, вроде java script.
Да теперь после полугода кодинга на Lua, автор и Си влет освоит :)

Кстати, чтобы не писали про модные свифты-питоны-java, а С — он рулез. Это почти ассемблер, когда смотришь в код, и понимаешь почти до уровня ячейки памяти как это работает. Так что настоятельно советую автору его изучить.

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

Вообще, идеального языка пока что не встречал — что в C#, что C++ отсутствует большинство необходимых мне функций для старта написания софта, а если они и есть, то реализованы не для людей. В Lua отсутствует понятие «указатель» и понятие «класс», что порой затрудняет работу и заставляет писать костыли. В Java приходится создавать отдельный класс для каждой мелочи, это я вообще считаю верхом безумия. Про Python лучше промолчу. Но все это, конечно, субъективные впечатления человека, слабо знакомого с этими языками и работавшего с ними от силы пару дней — однако именно по первым ощущениям и складывается общее отношение к языку. Если ты элементарно не можешь перевести int в string одной стандартной функцией — то весь язык я сразу считаю кучкой кала. Интересно, сложно ли написать свой язык…
Любой синтаксис — вопрос пары дней и привычки. Главное понимать суть, как это работает. И все эти «звездочки и скобочки» (прикольное определение кстати:) как раз позволяют сделать что-то на низком уровне эффективно и без костылей.

Если хочется «просто и быстро» — питон как раз самое то :)

«сложно ли написать свой язык» — интерпретатор Lua написан на С, кстати.
Ну это потому что пару дней,
в С/C++ уже все реализовано, причем, как правило, до вашего и моего рождения.
Python очень удобен, и тоже все что можете придумать, уже реализовано кем-то.
По первым впечатлениям о ЯП можно хоть как-то объективно судить имея огромный опыт работы с другими, иначе первые впечатления ошибочны.
Хотя после скриптовых языков звездочки могут и напугать, но это и есть отличие «низкоуровневых» языков.
Я имел в виду реализацию всех необходимых функций «из коробки», без необходимости поиска встроенных или сторонних библиотек. Люблю, когда даже самый отбитый новичок сразу осваивается в данной среде — это и есть признак хорошего и грамотно сконструированного языка. Имхо, конечно.

Ну, а так-то разобраться в плюсах или шарпе не столь уж и сложно при должном желании — противно в этих дебрях копаться, вот и все :)
Вы сейчас описали PHP как хороший и грамотно сконструированный язык.
Ага. Но ситаксис убог, слишком много «иероглифов», поэтому увы и ах.
что в C#, что C++ отсутствует большинство необходимых мне функций для старта написания софта, а если они и есть, то реализованы не для людей.

Пример (для C#) можете привести?
Легко.

Отсутствует сериализация массивов в строку и наоборот, отсутствуют алгоритмы хеширования SHA2 и MD5, отсутствует адекватное интегрированное Internet API для осуществления элементарных GET и POST запросов. Разумеется, все это легко исправляется поиском по гуглу и скачиванием сторонних библиотек, зачастую очень и очень неплохих, однако сейчас у нас 2015 год на дворе, и в современном языке я хочу видеть максимум удобства, благо не в пещерном веке живем.
Вы точно не путаете язык и базовую библиотеку?

Отсутствует сериализация массивов в строку

Вы, наверное, JSON имеете в виду? JavaScriptSerializer (хотя Json.net лучше, не зря более поздние версии на него перешли).

отсутствуют алгоритмы хеширования SHA2 и MD5

Серьезно?

MD5, SHA256, SHA384, SHA512.

адекватное интегрированное Internet API для осуществления элементарных GET и POST запросов

HttpClient.
Вы, наверное, JSON имеете в виду? JavaScriptSerializer (хотя Json.net лучше, не зря более поздние версии на него перешли).

Нет, я имею в виду именно массивы, а также сериализацию классов и функций. JSON-генератор и -парсер не нужен.
Серьезно?
MD5, SHA256, SHA384, SHA512.

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

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

Если вам нужна сериализация в бинарный поток — то берите встроенную. Если в строку, то вам придется выбрать формат. Чем JSON хуже других?

Неадекватная библиотека

Аргументы в студию.

чтобы выполнить простую задачу, нужно проделать туеву хучу операций

Например?

Она имеет слишком много схожих методов с крайне непродуманными названиями и аргументами,

Примеры в студию.

(BTW, библиотека не может иметь методы и аргументы.)
Если вам нужна сериализация в бинарный поток — то берите встроенную. Если в строку, то вам придется выбрать формат. Чем JSON хуже других?

Не хочу я ничего выбирать, мне необходима функция toString(class/array/function), выводящая содержимое аргумента в строку C#-кода. И все тут, безо всяких джсонов, хуенов, потоков и прочей лабуды, которую так часто приходится писать во языках семейства СИ. Хотя надо признать, что в шарпе лабуды в разы меньше, это факт, да.
Аргументы в студию

Без проблем, сейчас пошарюсь по харду, найду старые проекты на шарпе, затерянные под вековой пылью, найду в них костыльный участок кода на HttpClient и немедленно отпишусь, чтобы удовлетворить ваше любопытство, минуток 10 подождите. А если серьезно, то в чем проблема вообще? Я высказал свою позицию, что лично мне не нравится эта либа, ибо прекрасно помню, какой с ней был геморрой на старте изучения шарпа, а если у вас данной проблемы не возникало, то остается только искренне порадоваться за вас, вот и все. Аргументы вам подавай, ишь ты! Говно-либа, сложна в освоении. Годится такой аргумент? Вот и все, не надо разводить демагогию в комментах, лучше кодить пойдемте, это всяко полезнее.
Не хочу я ничего выбирать, мне необходима функция toString(class/array/function), выводящая содержимое аргумента в строку C#-кода.

Зачем?

Я высказал свою позицию, что лично мне не нравится эта либа,

Неа. Вы высказали, что «отсутствует адекватное интегрированное Internet API для осуществления элементарных GET и POST запросов», «Неадекватная библиотека, чтобы выполнить простую задачу, нужно проделать туеву хучу операций» и «Она имеет слишком много схожих методов с крайне непродуманными названиями и аргументами».

Это не «мне не нравится».
Зачем?

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

Именно по перечисленным вами моим высказываниям данная либа мне не нравится. Это обобщающий речевой оборот, выражающий вкратце мое отношение к либе.
Вот же ж упорный человек, а? Потому что нужно.

Это неправильная постановка задачи. Нужно может быть передать данные. Или сохранить данные (что, в общем-то, то же самое). А «записать массив в строку C#-кода» — это не задача, это один из вариантов решения. Почти всегда неправильный.

Именно по перечисленным вами моим высказываниям данная либа мне не нравится.

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

Собственно, вот: " Говно-либа, сложна в освоении. Годится такой аргумент?".

Нет, не годится. Не либа (омг, в .net вообще нет такого понятия) сложна в освоении, а вы не осилили ее освоить. Чувствуете разницу?
Это неправильная постановка задачи.

Что ж тут неправильного и непонятного? Требуется функция, конвертирующая класс, массив или функцию в строку, и возвращающая эту строку. Опционально хотелось бы получать строку в человекочитабельном варианте с \n, чтобы ее впоследствии было легко парсить. Хватит казуистикой заниматься, тут и обезьяна поймет, о чем речь.
Нет, не годится. Не либа (омг, в .net вообще нет такого понятия) сложна в освоении, а вы не осилили ее освоить. Чувствуете разницу?

Ну не годится и не годится, переживу как-нибудь. А разницы не чувствую, ибо не освоить что-то можно лишь по одной причине: осваиваемый объект создает искусственные трудности в освоении. Каким бы ни был юнит, осваивающий этот объект — умным, глупым или одноклеточным — сложность осваиваемости задается именно создателем осваиваемого объекта. Любой объект можно создать универсальным, чтобы его суть понял даже конченный дебил с задержками в развитии (на то и существуют методы рефакторинга кода), а можно создать способом, понятным лишь кругу лиц, в котором находится автор — на все воля автора. Собственно, в случае с HttpClient мы имеем второй вариант. Говно-либа, неудобная в использовании.
Требуется функция, конвертирующая класс, массив или функцию в строку, и возвращающая эту строку.

Ох. Как вы себе представляете конверсию в строку класса или функции?

А для объектов (массив — частный случай объекта) прекрасно работает уже упомянутый выше JSON.

Что ж тут неправильного и непонятного?

То, что вы говорите «хочу сконвертировать х в строку», но не говорите, зачем вам это надо. Хотя то, зачем это надо, важнее — возможно, вам на самом деле надо не в строку, а в передаваемый формат.

А разницы не чувствую, ибо не освоить что-то можно лишь по одной причине: осваиваемый объект создает искусственные трудности в освоении

Неа. Бывает еще так, что осваивающий субъект не приспособлен для освоения.

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

Вы про essential complexity никогда не слышали?

Собственно, в случае с HttpClient мы имеем второй вариант. Говно-либа, неудобная в использовании.

Приведите конкретный пример, где вы не поняли, как использовать HttpClient, и вам было неудобно — вот и посмотрим, можно ли сделать проще.

С моей точки зрения, у HttpClient (да и вообще System.Net.Http) как раз один из самых разумных интерфейсов для работы с HTTP, достаточно близкий к протоколу, но при этом еще не избыточно детальный.
Ох. Как вы себе представляете конверсию в строку класса или функции?

void funkcia()
{
   print("bla-bla");
}

string stroka = toString(funkciya)

А как именно? Что ж, меня это не особо волнует — в опенкомпах из поста есть стандартная либа для сериализации таблиц и функций, в C# нет, вот и все. Собственно, в нашей дискуссии и шла речь о том, каких функций мне не хватает в базовом C#.

А примеры касательно Http мне лень приводить, все равно мое мнение останется на своем должном месте, а ваше на своем. Вы слишком занудный собеседник для меня, акцентирующий внимание на мелочах, на которые я обычно кладу болт. Боюсь, если я приведу примеры, то наша милая беседа затянется на куда большее количество символов, а символы — это, между прочим, физический труд в плане нажатия на клавиши. Так что лень-матушка взяла свое.
string stroka = toString(funkciya)


И что же этот вызов должен вернуть?
void funkcia()
{
   print("bla-bla");
}
string stroka = toString(funkciya)

А как именно? Что ж, меня это не особо волнует

А, это легко.

Action funkcia = () => {Console.WriteLine("bla-bla");};
string stroka = funkciya.ToString();


в опенкомпах из поста есть стандартная либа для сериализации таблиц и функций

Кстати, а можно ссылочку на эту «стандартную либу»?

А примеры касательно Http мне лень приводить

Подозреваю, что и с его освоением было то же самое — лень разбираться, проще говном назвать.
А, это легко.

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

Качайте мод на майн, ставьте OpenOS, смотрите апи serialization, находится в папке lib. Очень простая и лаконичная библиотека, проходящаяся через цикл по структуре массива или функции, реализовать ее легко даже с базовыми знаниями Lua, ну, и при условии, что вы умеете юзать регулярки. Правда, она не совсем оптимизирована в плане расхода на память, т.к. использует быдлокодерскую конкатенацию строк, но в целом понять ее суть легко.
Подозреваю, что и с его освоением было то же самое — лень разбираться, проще говном назвать.

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

А это не результат выполнения функции.

Качайте мод на майн, ставьте OpenOS, смотрите апи serialization, находится в папке lib.

Это вот это API?

реализовать ее легко даже с базовыми знаниями Lua

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

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

… а что с ней «идет в комплекте», мне вот интересно? Ну и да, я вас еще раз спрошу: вы про понятие essential complexity не слышали?

Впрочем, не суть. Если кому-то что-то трудно в освоении, но он не может привести конкретных недостатков — то это его личные проблемы. Кому-то вот принципиально не даются указатели — это же не значит, что указатели говно.
вы про понятие essential complexity не слышали

Слышал-слышал, забавная статья, которую обосрали уже все, кому только не лень. Моя личная позиция по данному вопросу такова: любая софтина или либа обязана быть одновременно простой для начинающих и максимально гибкой для «шарящих». Любое отклонение в ту (Internet API OpenComputers) или иную (HttpClient) сторону не является правильным и требует рефакторинга кода.
Кому-то вот принципиально не даются указатели — это же не значит, что указатели говно.

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

Я не знаю, о какой статье вы говорите.

Вам нравится этот HttpClient, мне нет. В чем проблема-то?

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

Вы выписываете термин из довольно изестной статьи, и не знаете, о чем я говорю? Попахивает вредностью.
Вот в этом утверждении: «система является скучным говном, как правило, с кучей модульных функций». Вы продолжаете не видеть разницы между «я не осилил» и «система — говно».

Неверно, ибо либу я осилил. Мне она неудобна в использовании, поэтому перешел на более простую версию с двумя методами, соответствующую моим требованиям.
Вы выписываете термин из довольно изестной статьи, и не знаете, о чем я говорю?

Этот термин давно перерос эту статью.

Мне она неудобна в использовании, поэтому перешел на более простую версию с двумя методами, соответствующую моим требованиям.

Вам неудобна. Никакого отношения к ее вкусовым качествам это не имеет.
void funkcia()
{
   print("bla-bla");
}

string stroka = toString(funkciya)

Качайте мод на майн, ставьте OpenOS, смотрите апи serialization, находится в папке lib. Очень простая и лаконичная библиотека, проходящаяся через цикл по структуре массива или функции, реализовать ее легко даже с базовыми знаниями Lua, ну, и при условии, что вы умеете юзать регулярки. Правда, она не совсем оптимизирована в плане расхода на память, т.к. использует быдлокодерскую конкатенацию строк, но в целом понять ее суть легко.

Вы противоречите сами себе, ибо в документации к этому самому «serialization» написано прямым текстом:
serialization.serialize(value: any except functions[, pretty:boolean]): string
Никто никому не противоречит, ибо эта функция предназначена для сериализации таблиц, в которых может содержать все, что угодно, если это все не закрыто в теле цикла. Функции также сериализуются в виде строки, это проверено мною лично на практике и часто используется для дебага. Ну, а если запихнуть в нее число или просто строку, то она выдаст nil, т. е. ничего. Так что any туда не запихнешь, автор вики неверно указал типы.
Дайте ссылку на исходник (ну или выложите на gist/pastebin). Текущая реализация прямо противоречит тому, что вы говорите. Ну или вы говорите про другое API вообще.
Эта реализация и есть то, о чем я говорю. Судя по всему, вы не поняли моих требований к ее функционалу, постоянно переспрашивая то про JSON, то еще про что-то, поэтому и возникает такой вот диссонанс. В любом случае, эта либа — именно то, чего мне не хватало в шарпе, на этом и покончим.
Эта реализация и есть то, о чем я говорю.

Что, правда?

Ну, а если запихнуть в нее число или просто строку, то она выдаст nil, т. е. ничего.

    elseif t == "number" then
      if v ~= v then
        return "0/0"
      elseif v == math.huge then
        return "math.huge"
      elseif v == -math.huge then
        return "-math.huge"
      else
        return tostring(v)
      end
    elseif t == "string" then
      return string.format("%q", v):gsub("\\\n","\\n")


Функции также сериализуются в виде строки,

    else --отдельного обработчика для function нет
      if pretty then
        return tostring(t)
      else
        error("unsupported type: " .. t)
      end
    end


Иными словами, если включен pretty, то вернется tostring от функции, то есть строчка приблизительно вот такого вида: «function: 0xb0bf00» (или вы хотите сказать, что OpenComputers переопределяет tostring для функций?). Если pretty выключен, будет ошибка. Никакой сериализации тела функции в этом апи нет.

В любом случае, эта либа — именно то, чего мне не хватало в шарпе, на этом и покончим.

Э нет. Вот как раз аналогов «этой либы» в шарпе сколько угодно, начиная от встроенной сериализации и заканчивая любой другой на вкус.
Назовите хоть одну ситуацию, где может потребоваться тело функции сериализовать в строку и обратно. За все несколько лет что я занимаюсь программированием такой необходимости у меня ни разу не было.
Иными словами, если включен pretty, то вернется tostring от функции

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

{["privet"] = 123, ["hello"] = {["test"] = 12}}

А в таком:

{
  ["privet"] = 123,
  ["hello"] = {
    ["test"] = 12
  }
}


Иными словами, Pretty добавляет \n в конце каждого элемента для лучшей читабельности, вот и все. Не надо додумывать функционал на основе кода — поработайте с библиотекой сами, а потом уже пишите.
Иными словами, если включен pretty, то вернется tostring от функции

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

Было бы удивительно, если бы при вызове для функции вернулся сериализованный массив.
Вот и все. Не надо додумывать функционал на основе кода — поработайте с библиотекой сами, а потом уже пишите.

Вы додумываете его даже не смотря в код :) В библиотеке нет сериализатора для функций, в документации написано что его нет, но у вас он неожиданно появляется. Быть может, отправите автору библиотеки пулл-реквест с этой фичей?
Иными словами, Pretty добавляет \n в конце каждого элемента для лучшей читабельности, вот и все.

В коде, как мы видим, написано иное.

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

А смысл, если в коде все написано? Мне еще не хватало тут среду под Lua разворачивать.
>> Не хочу я ничего выбирать, мне необходима функция toString(class/array/function), выводящая содержимое аргумента в строку C#-кода. И все тут, безо всяких джсонов, хуенов, потоков и прочей лабуды

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

Однако получить текст кода функции на практике не требовалось. Это попахивает какими-то слишком дикими костылями. Если конечно мы не пишем некий анализатор кода…
Разумеется, все это легко исправляется поиском по гуглу и скачиванием сторонних библиотек, зачастую очень и очень неплохих, однако сейчас у нас 2015 год на дворе, и в современном языке я хочу видеть максимум удобства, благо не в пещерном веке живем.

В Ruby, к примеру, «поиск и скачивание сторонних библиотек» — это чуть ли не идеология.
Все вышеперечисленное вами в C# уже есть, и ничего искать/качать не нужно. А когда появляется все же такая необходимость, большинство пакетов можно найти в nuget и скачать+подключить их одной кнопкой.
> Интересно, сложно ли написать свой язык…

Интересно Ваше мнение по синтаксису для учебного языка из http://habrahabr.ru/post/219419/
Странный он какой-то. Не люблю лишних знаков в основных операторах. Зачем использовать := для присваивания, а == для проверки истинности? И что за =/= для проверки на неравенство, зачем аж 3 символа использовать? Вон, в BASIC было идеально в этом плане: и присваиваешь через =, и условия проверяешь в стиле IF A = B THEN B = C ENDIF, все было элементарно. Опять же, в современном языке все должно быть интеллектуально, он сам должен понимать, где присвоение, а где проверка истины. Да и массивы по вашей ссылке там явно будут в стиле СИ. То ли дело таблицы Lua, в которые пихай что хочешь: хоть функции, хоть другие таблицы, хоть строки, хоть числа, хоть все вместе. В современном языке должны быть именно такие массивы, а то и еще лучше.
в современном языке все должно быть интеллектуально, он сам должен понимать, где присвоение, а где проверка истины


bool a, b, c;
a = b = c;


Разбирайтесь.
а равно истина если б равно ц и ложь, если не равно
и кстати видел это на практике в 1с :)
А почему не а и б равно ц?
В современном языке должны быть именно такие массивы, а то и еще лучше.

Это намек на слабо-типизированные ЯП с динамическими структурами данных?

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

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

К слову, на платных курсах по C#, которые ведет моя хорошая знакомая, практически никогда не заостряется внимание на типизации данных. Люди просто получают задание и творят маленькие шедевры, получая за это хорошие деньги, при необходимости, опять же, спрашивая у лектора, как можно оптимизировать проект. Это в моем понимании и есть настоящее обучение программированию, когда ты программируешь, а не страдаешь ерундой, доказывая что-то ноунейму в комментариях.
Подчеркиваю, для обучения. Вас могут посадить расчитывать полеты ракет после недельного курса математики и физики, но результат будет плачевный.
Вы оглядываетесь вокруг и видите таких же ребят, которые сели писать, и потихоньку подтягивают матчасть.
В свою очередь, я говорю о том, что учить нужно процессам, а поняв процессы, программисты могут спокойно кодить хоть на своем не-типизированном языке, хоть на луа, хоть на джаваскрипте, шарпах, питонах, явах. Но понимая процессы, они не будут лажать на ровном месте.
А я тоже подчеркиваю, для обучения я бы не выбрал курсы, где мусолят лишь теоретическую часть, отдавая ей основное предпочтение — это устаревший и непродуктивный метод обучения. Нет ничего плохого в том, чтобы разбираться в типах данных и уметь грамотно их использовать, плохо — когда матчасть занимает основную нишу учебного процесса. Я человек-практик, привык изучать теорию в процессе кодинга, и почему-то я до сих пор никогда не лажал на ровном месте, ровно как и большинство моих товарищей, ибо курсы были хорошие, а преподаватель явлалась крутой, умнющей девкой, и знала свое дело.
почему-то я до сих пор никогда не лажал на ровном мест

Это пишет человек, который не нашел в .net SHA-2?
Вы пока еще ничего серьезного не сделали, где можно «налажать». «Налажать» очень субъективная оценка. Если оценивать ваш код с позиции модульности, ре-юзабельности, то вдруг окажется, что он не отвечает этим требованиям.
Попробуйте какой ни будь этнерпрайз проект, где будут люди, которые будут указывать на ваши ошибки. Вы сейчас наверное делаете проекты или для себя или для развлечения с ребятами, у которых точно такие же навыки программирования как и у вас. Кто же вам будет указывать на ошибки? Конечно никто, вот у вас и складывается ошибочное впечатление, что все супер, я нигде не лажаю. Но есть работа, где платят деньги и вот как раз там ты и начинаешь набивать все шишки.
где мусолят лишь теоретическую часть, отдавая ей основное предпочтение — это устаревший и непродуктивный метод обучения.

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

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

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

Ну и про язык — я старался описать версию читаемого человеком языка. Машина любые навороты разберет, и сообщит, что как ею прочитано. На мой взгляд, у Вас есть элементы комплекса: «я так легко понимаю программы, но другие, плохо понимающие, успешны. Почему?»

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

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

С точки зрения самого верхнего заказчика это именно так. Но ваш заказчик — это тимлид или сеньер-девелопер, который заказывает у вас хорошую архитектуру или хотя бы читаемый код, который смогут поддерживать после вашего внезапного ухода, он не заказывает у вас «тяп-ляп в продакшн».
Рад, что все «Без проблем!» :)
Извиняюсь, дам ссылку на еще одну идею игры, для которой мне рекомендовали Lua
http://habrahabr.ru/post/208044/

Главная сцена:
Вселенная
Солнечная система
Земля
По стране
В себя
На природу
В школу
На завод
В университет

У меня на первом месте транслятор, а потом приложения для него, еще не скоро доберусь :)
UFO just landed and posted this here
UFO just landed and posted this here
алгоритм двойной буферизации изображения. Для тех, кто не в курсе, поясню вкратце его суть: в оперативной памяти у нас находятся два массива изображения: первый содержит информацию о пикселях, которые в данный момент отображены на экране, а второй — информацию о пикселях, которые мы хотим отрисовать. Затем при помощи вызова функции расчета алгоритм сверяет эти два массива и выводит на экран не все пиксели, а только лишь измененные. А затем присваивает первому массиву значение второго.

Это не верное определение и суть двойной буфферизации.
Это частично верное определение. Обычно двойную буферизацию реализуют обменом указателей на активную страницу с видеопамятью. Но, как вариант, может применяться и копирование из невидимой страницы.
В Lua отсутствует понятие «указатель», там все работает в автоматическом режиме: если присваешь первому массиву значение второго, то идет не дублирование массива, а именно обмен указателями. Да и понятие «страница видеопамяти» там тоже отсутствует («спасибо» автору мода), поэтому приходится работать с тем, что имеем.
Я не отрицаю ваших заслуг, вы очень много сделали для написания этой графической оболочки (все-таки это не полноценная операционная система, если на то пошло). Мой комментарий, скорее, обращение к тому несогласному, который поставил минус AllexIn-у — ваш подход к двойной буферизации может смело называться двойной буферизацией, хоть вы и вычисляете разницу между кадрами вместо обмена видеостраниц.
github.com/IgorTimofeev/OpenComputers/blob/master/MineOS/OS.lua
Тут можно было бы написать кучу текста, мол,
вы не имеете прав на использование этой бобони в
коммерческих целях и прочую чушь, навеянную нам
западной культурой. Но я же не пидор какой-то, верно?

Просто помни, сука, что эту ОСь накодил Тимофеев Игорь,
ссылка на ВК: vk.com/id7799889

Стилистика и орфография сохранены.
Неплохо так автор оскорбил программистов, кто вставляет «вуйню» в исходники.
Мне кажется, 1994 год рождения автора может подсказать источник столь неуемно-радикального патриотизма.
Эй, вы оскорбляет чувства людей, рождённых в 94 году. По комментариям выше видно, что автор весьма специфичной натуры.
Быть хорошим инженером 1994 года рождения не дает ни малейшего права считать всех остальных «пидорами» за приверженность к «чуши западной культуры», и «суками» безусловно.

Быть глупым ребенком 1994 года рождения, неспособным осознавать недопустимость своего отношения к других людям — это хотя бы делает попытку объяснить причины.
Я не оправдывают автора, просто подметил, что год рождения едва ли является причиной подобного отношения.
Да ну вас, я данный текст от балды написал с целью «заполнения пространства», не надо воспринимать столь серьезным образом.
Лучше пространство ничем не заполнять, чем таким. В данном случае такая шутка неуместна.
Мне хотелось показать людям, что на любом языке и в любой среде можно создать маленький, не побоюсь этого слова, шедевр. Еще полтора года назад я крайне смутно представлял себе, что такое «функция», «массив» или «класс», а теперь мы с товарищами кодим собственную мини-ОС.


Просто помни, сука, что эту ОСь накодил Тимофеев Игорь,
ссылка на ВК: vk.com/id7799889


--Создаем массив говна
local govno = {}


Рейтинг статьи +95.

Мне тут даже комментировать что-то противно. Это типа наверное новый формат статей.
Вероятно, многие (чего скрывать, я тоже), плюсуют статьи после прочтения привлекательного заголовка и первого абзаца (чтобы потом не забыть).
Sign up to leave a comment.

Articles