- 1
- 2
- 3
- 4
- 5
- 6
var CodeMirror = require("codemirror");
var Thrift = require("thrift.js");
require("./src/my.css");
include(`gen-js/test_types.js')
include(`gen-js/TestServ.js')
include(`src/main.js')
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
var CodeMirror = require("codemirror");
var Thrift = require("thrift.js");
require("./src/my.css");
include(`gen-js/test_types.js')
include(`gen-js/TestServ.js')
include(`src/main.js')
Против m4 нет приёма.
CHayT 29.10.2017 00:05 # 0
g0cTb 29.10.2017 00:15 # 0
CHayT 29.10.2017 13:09 # 0
roman-kashitsyn 29.10.2017 14:26 # 0
Видимо, один из авторов протобуфа, а не grpc. Протобуфы пилит довольно много людей. Я grpc не использовал, но его неопенсорсный вариант использую каждый день, ничего плохого сказать не могу. Если бы нужно было что-то сделать для себя, я бы, наверное, взял grpc.
CHayT 29.10.2017 14:42 # 0
Да, именно.
> я бы, наверное, взял grpc
Могу ошибаться, но GRPC вроде не особо умеет во фронтенд и экму. Thrift умеет, в том числе с использованием бинарного протокола и вебсокетов.
subaru 29.10.2017 14:55 # 0
gost 31.10.2017 17:10 # +3
SemaReal 31.10.2017 20:34 # +3
такой метод удобно расширять
1024-- 31.10.2017 20:52 # +3
SemaReal 31.10.2017 20:57 # +4
int это оператор, а void * это его операнды (один или массив в зависимости от).
Например:
int speed = 42;
do_all(LAUNCH_ROCKET, &speed);
Или
struct Email email = {....}
do_all(SEND_EMAIL, &email);
или
int length;
do_all(GET_LENGTH, &length);
Кажется я придумал ioctl
roman-kashitsyn 31.10.2017 22:24 # +4
kegdan 01.11.2017 14:00 # +3
Еврейское программирование.
d_fomenok 01.11.2017 14:06 # −1
roman-kashitsyn 01.11.2017 14:08 # +3
kegdan 01.11.2017 14:11 # 0
Я смотрю у вас тут тяжелые наркотики в почете
CHayT 01.11.2017 15:41 # +2
Роман имел в виду continuation passing style, судя по "адресу коллбэка"
roman-kashitsyn 01.11.2017 15:55 # 0
SemaReal 01.11.2017 15:58 # 0
Ты же в телекоме работаешь
CHayT 01.11.2017 19:29 # +1
roman-kashitsyn 01.11.2017 19:34 # 0
CHayT 01.11.2017 19:39 # 0
Из широко известных фирм в Швеции есть ещё как минимум Volvo (self-driving cars) и Spotify.
roman-kashitsyn 01.11.2017 19:41 # 0
CHayT 01.11.2017 19:42 # 0
OCEHHuu_nemyx 16.10.2020 13:51 # 0
CHayT 17.10.2020 18:24 # 0
kegdan 01.11.2017 17:16 # 0
guest8 17.10.2020 18:25 # −999
wvxvw 29.10.2017 17:13 # +2
Из достоинств, следует отметить, что каждый наивный програмист попытавшийся использовать это говно сразу же сталкивается с проблемой: "а оперделения сервисов мне не уперлись потому что у меня нет ХТТП, я работаю с Х (например, топиками в Кафке), как же мне теперь угадать какой мессадж мне прислали".
Естественно, тут же ваяется "решение", вот виды решений, с которыми я уже сталкивался:
1. Захуярить размер мессаджа в 4 байта (как правило в направлении обратном сетевому), за ним строку с названием замапленного класса (ну, или варианты, типа энумератора, который в коде приложения мапится к классам).
2. Попытаться распарсить в разные типы, авось какой-нибудь совпадет.
3. Захуярить в другой формат, например в ХМЛ, в Бэйс64. Зато надежно.
С опытом приходит понимание необходимости полиморфизма и работы с разными версиями говна. И тут в уже готовое месиво из байтоебства и самодельных оберток добавляется код для угадывания версии, и всякие причуды типа .
Потом приходит понимание, что постореная система - говно, но деньги уже заплачены и потрачены. В этот момент нанимают саппорт, а гении идут строить новый и луччий проект, в этот раз с Трифтоговном и т.д.
subaru 29.10.2017 17:44 # −13
wvxvw 29.10.2017 19:27 # +2
Я думаю, что такими темпами, они нас не обгонят.
SemaReal 30.10.2017 13:33 # 0
Я предпочитаю SO
roman-kashitsyn 29.10.2017 19:46 # +2
Я прям даже не знаю, использовать oneof не пробовали?
https://developers.google.com/protocol-buffers/docs/proto3#oneof
Если уж совсем всё равно, что слать, есть any
https://developers.google.com/protocol-buffers/docs/proto3#any
wvxvw 30.10.2017 10:20 # +2
Естесственно, oneof невозможен, если формат сообщений описан кем-то другим, кто не подумал о том, что всем сообщениям нужна общая обертка.
CHayT 30.10.2017 14:42 # +1
Dummy00001 31.10.2017 00:01 # +1
еще ни разу не видел сетевого протокола без версионирования - и без граблей. ни разу. исключение тоже было: протокольчик для миддлваре где версия стояла в "2.1" и её ни в коем случае менять было нельзя...
CHayT 31.10.2017 18:21 # +1
Dummy00001 31.10.2017 18:48 # 0
потому что ASN1 (с которым я имел несчастье работать) сам по себе в ж неверсионирован. хуже: если определения ASN1 не одинаковы, то ты хер это можешь определить, потому что длины это г не сохраняет (как например TLV). и все исторические приложения (шифрование, телекомы) они все не версионированы. (потому что есть организации отвечающие за стандарт - но когда народ копирует в проекты, все ложат на организационную часть.)
roman-kashitsyn 31.10.2017 19:46 # 0
Опять же, версионирование — это больше дело протокола, а не только лишь формата сериализации. Одна из частых стратегий: делаешь новое API, депрекейтишь старое, какое-то время поддерживаешь обе версии. Для большинства приложений этого обычно вполне достаточно.
Для протоколов уровня IETF, конечно, такой подход не работает, там, как правило, всё старьё нужно уметь поддерживать.
Dummy00001 31.10.2017 20:04 # 0
почитал.
все сводят к "just add new shit - old shit will just ignore it!" - это 100% говно.
потому что в половине случаев не только добавляется новая информация, но так же меняется интерпретация старой. потому что иначе поля в сообщениях начинаются плодится без остановки. (протокол с >10К тагов - ASN1 based - я в реале видел.)
> это больше дело протокола, а не только лишь формата сериализации.
совершенно правильно. номер версии - это номер протокола, а не формата сериализации.
но практических проблем это не решает. много этого корпоративного говна начинается с каких-то тривиальных мелочей - а когда вырастает до больших размеров, уже поздно что либо менять.
SemaReal 31.10.2017 20:33 # 0
Dummy00001 31.10.2017 20:46 # 0
Твой вопрос немного напоминает митинги на эту тему, которые в кратце можно выразить: "как мы можем исправить грабли, но при этом ничего не меняя?"
subaru 31.10.2017 21:17 # +2
roman-kashitsyn 31.10.2017 22:21 # 0
g0cTb 29.10.2017 20:22 # +3
wvxvw 30.10.2017 10:22 # 0
roman-kashitsyn 30.10.2017 11:50 # 0
Т.е. ты даже не знаешь, какой тебе прислали? Вот это реальный ЛОЛ, шаблон проектирования "I have no idea what I'm doing".
Допустим даже, ты знаешь размер, и прочитал этот несчастный блоб (или просто прочитал всё, что есть в сокете, допустим). Что ты дальше-то с ним делать будешь? Предлагаю сразу слать его на почту тому, кто придумал ваш протокол коммуникации.
wvxvw 30.10.2017 14:57 # 0
"Наш протокол комуникации" был придуман дибилом из гугла. Почты его у меня нет, и общаться с ним мне не интересно.
roman-kashitsyn 30.10.2017 15:11 # +2
/thread
wvxvw 30.10.2017 15:28 # 0
1. https://en.wikipedia.org/wiki/GRPC
2. https://en.wikipedia.org/wiki/Remote_procedure_call
roman-kashitsyn 30.10.2017 15:42 # +4
Да, GRPC -- это протокол, я использую его аналог каждый день. Но ты же сам сказал, что вы не используете GRPC, и гоняете по сети протобафы, используете свой кастомный протокол.
> Вот, открыл ты сокет, как ты знаешь сколько байтов нужно прочитать из него, чтобы прочитать сообщение?
Это не ты написал? Protobuf -- это формат сериализации, а не протокол. Давай прочитаем вместо PROTOCOL BUFFERS, то есть это пэйлоад, который ты кладёшь в свой проткол (HTTP или кастомный бинарный). Протокол -- это то, что вы там на сокетах намутили вместо GRPC. В ваших проблемах никто кроме вас, мудаков, не виноват.
> Нет, это ты просто долбоеб, который читать не умеет.
Нет, ты
SemaReal 30.10.2017 16:41 # +1
IP говно, кстати. Там все складывается в пакеты и явно передается размер.
802.3 (Ethernet) говно, кстати. Там все складывается в кадры.
gost 31.10.2017 17:18 # +2
Stallman 31.10.2017 17:21 # 0
inho 31.10.2017 17:35 # 0
SemaReal 31.10.2017 17:49 # +1
CHayT 31.10.2017 18:17 # +1
То ли дело "E1/T1".
Dummy00001 31.10.2017 18:59 # 0
CHayT 31.10.2017 19:18 # 0
SemaReal 31.10.2017 21:07 # 0
А еще можно вспомнить ATM: там все ячейки (или как их там называли) были фиксированного размера, чтобы было удобно и телефонистам, и сетевикам, и wvxvw
g0cTb 30.10.2017 12:17 # 0
roman-kashitsyn 30.10.2017 12:24 # 0
Видимо, они руками в сокеты пишут.
g0cTb 30.10.2017 12:56 # 0
roman-kashitsyn 30.10.2017 13:22 # +1
На самом деле, проблема в гомоморфна типизации в языках программирования, только всё хранится по значению. Слать сообщения разного типа в один канал — это как класть объекты в гетерогенный список. Нельзя сделать это без оверхеда RTTI ("ручного" или встроенного в язык), да и не нужно.
g0cTb 30.10.2017 13:36 # 0
SemaReal 30.10.2017 13:22 # 0
roman-kashitsyn 30.10.2017 13:28 # 0
Это не решает основную проблему, только откладывает неизбежное. Что потом с этим говном неизвестного типа делать? Как проверить, что сообщение валидное? Можно перекладывать эти байты с места на место, но тогда аналогичная проблема ожидает того, кто обрабатывает это сообщение дальше.
SemaReal 30.10.2017 13:42 # 0
А вообще конечно глупая проблема, и решений у нее миллион
От предачи типа в первых двух байтах, до определения типа по адресу, порту итд
roman-kashitsyn 30.10.2017 14:36 # +2
Сообщения разных типов могут быть сериализованы в одинаковый набор байтов. Например:
< name: "John" > может быть и студентом, и профессором без студентов.
g0cTb 30.10.2017 13:42 # +2
SemaReal 30.10.2017 16:48 # 0
Вот правда я не уверен: закроет-ли операционка сокет кошерно в случае смерти процесса и освобождения ресурса?
g0cTb 30.10.2017 22:35 # −1
В этом и был вопрос, умник.
SemaReal 30.10.2017 22:41 # −1
g0cTb 30.10.2017 22:51 # +4
SemaReal 30.10.2017 23:04 # +1
я цепалнулся телнетом к своему серверу на жабе, и когда я кильнул виндовый телнет у меня полетел connection reset (значит что винда послала TCP RST).
А тоже самое с линуксом: там убитый (kill -9) telnet успешно умер и соединение закрылось (считался -1, EOF). подозреваю что это можно менять в настройках клиентского сокета, но тем не менее дефалты у ОСей разные
Dummy00001 31.10.2017 00:07 # 0
официально: да, она закроет сокет. только закроет - со всеми вытекающими - shutdown() никто на сокете не вызовет. (последствий уже не помню.)
но в общем случае полагаться на это все - что бы узнать почему соединение закрылось - все равно нельзя. (потому что даже graceful FIN может быть потерян, и его никто повторно посылать не будет.)
SemaReal 31.10.2017 00:12 # +2
Короче я уже понял что я зря доебался до гостя: он все правильно делает: полагаться ни на что нельзя, все зыбко.
Нужно или в первых байтах передавать размер месседжа, или явно ждать спец. символа для его завершения, а иначе это всё не валиднуть нормально
Dummy00001 31.10.2017 00:24 # +2
лол. если провод был оборван - то ничего не может послатся - peer'ы будут на таймауте висеть.
> винда шлет RST, а линукс шлет FIN.
винда всегда любила соединения быстро и грязно разрывать.
помню еще head-banging-against-wall когда первый раз прога подвисла в close() сокета который был грязно закрыт без RST/FIN - виндами - и были еще буфернутые непосланые данные ("bye", последнее сообщение протокола).
SemaReal 31.10.2017 00:27 # 0
Да, и в конце концов я получу timeout, это понятно. Я, по наивности децкой, думал что если SIGKILL процесс то он тоже ничего не пошлет и будет такой же timeout.
Но оказалось что ОС так не думает.
Dummy00001 31.10.2017 00:35 # 0
SemaReal 31.10.2017 00:52 # 0
Видишь вот эти [F.]? Это же FIN?
Dummy00001 31.10.2017 01:02 # +1
другого флага с F нету.
на линуксе там тьма конфигурационных опций.
http://man7.org/linux/man-pages/man7/tcp.7.html
он даже глобальный лингер умеет делать.
ЗЫ читал вспомнил почему shutdown *них не делает: после форка сокет может шарится между процессами. а шатдаун меняет глобальное состояние соединения.
SemaReal 31.10.2017 01:06 # 0
Вполне возможно что это настраивается опциями TCP, да
Dummy00001 31.10.2017 01:16 # 0
более обобщенно: это стандартная фича *нихов.
SemaReal 31.10.2017 01:29 # 0
У виндуос тоже есть "хендлы объектов" и они тоже самоубиваются.
Dummy00001 31.10.2017 01:38 # +1
SemaReal 31.10.2017 03:01 # +1
, не?
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms724466(v=vs.85).aspx
Dummy00001 31.10.2017 03:17 # +1
но следует виндовым традициям - и не без граблей -
https://stackoverflow.com/questions/3400675/duplicatehandle-need-to-openprocess-but-the-access-is-denied
давно винды не ковырял.
bormand 31.10.2017 08:18 # +2
Тут у чувака просто юзкейс ебнутый на голову, как и попытки решить проблему в духе "раздать всем приложениям привилегию на дебаг".
wvxvw 30.10.2017 14:52 # −1
Другими словами, ты это говно уже жрешь черпаком, но только сейчас об этом узнал.
g0cTb 30.10.2017 22:43 # +5
Ты спросил, как я делаю - я ответил. Причем тут твоя кафка? Кафка не сообщает длину пейлоада, который возвращает? Ну напиши ее перед протобуфом.
> говно
У тебя в голове.
Her 01.11.2017 16:09 # 0
SemaReal 29.10.2017 19:22 # +4
CHayT 29.10.2017 19:58 # +3
roman-kashitsyn 29.10.2017 14:29 # +1
ты таки решил запилить свой гк на богомерзкой динамике?
CHayT 29.10.2017 14:43 # 0
guest8 16.10.2020 15:14 # −999
guest8 16.10.2020 15:14 # −999
OCETuHCKuu_nemyx 16.10.2020 16:05 # 0
guest8 16.10.2020 16:33 # −999
CHayT 16.10.2020 18:56 # 0
bormand 17.10.2020 04:25 # +2
OCEHHuu_nemyx 17.10.2020 12:01 # +2
guest8 17.10.2020 12:04 # −999
OCEHHuu_nemyx 17.10.2020 12:15 # 0
Именно поэтому я за «m4».
Так лучше?
guest8 17.10.2020 12:19 # −999
guest8 17.10.2020 14:58 # −999
bormand 17.10.2020 15:00 # +1
guest8 17.10.2020 15:12 # −999
guest8 17.10.2020 15:26 # −999
defecate-plusplus 17.10.2020 15:29 # 0
guest8 17.10.2020 15:32 # −999
bormand 17.10.2020 15:37 # +1
Я думаю, они для автоконфа старались юзать те инструменты, которые точно везде есть - m4, ванильный sh и т.п. Чтобы на любом говне мамонта взлетело.
guest8 17.10.2020 15:43 # −999
bormand 17.10.2020 15:48 # 0
guest8 17.10.2020 15:52 # −999
bormand 17.10.2020 16:07 # 0
Ой да ладно... Там реальный гемор начинается только если надо какие-то свои тесты для платформы запилить или нестандартные шаги. Но это во всех системах сборки так. А стандартные конфиги ну не сложнее того же cmake.
guest8 17.10.2020 18:29 # −999
bormand 17.10.2020 13:27 # +1
Вот эти штуки бесят, кстати. Это чтобы переводы строк не попадали на выход? И заодно как коммент можно юзать?
OCEHHuu_nemyx 17.10.2020 14:53 # 0
Иногда делают без них, но с командой divert, после которой указывается номер буфера, в который выводить:
https://web.mit.edu/gnu/doc/html/m4_9.html
divert(0) означает вывести в стандартный поток, а divert с отрицательным номером означает просто потерять все данные, которые должны быть выведены.
Пример:
bormand 17.10.2020 14:57 # +1
З.Ы. Я сварщик не настоящий, `m4' юзал буквально пару раз и всех фишек не знаю.
guest8 17.10.2020 15:08 # −999
bormand 17.10.2020 15:35 # +2
Ааааа! Ну зачем ты мне про эту хуету напомнил!?
guest8 17.10.2020 15:41 # −999
CHayT 17.10.2020 16:04 # +2
CHayT 17.10.2020 16:12 # +2
Desktop 17.10.2020 19:05 # 0
- звучит так, как будто это было лет тридцать назад))
bormand 17.10.2020 16:13 # +2
Я sendmail админил без этих ваших m4. То ли в той версии слаки ещё не было этого макропакета, то ли мне его просто не показали.
guest8 17.10.2020 18:20 # −999
bormand 17.10.2020 18:48 # 0
З.Ы. Он не так уж и плохо читается, на самом деле.
guest8 17.10.2020 20:39 # −999
guest8 17.10.2020 15:04 # −999
guest8 17.10.2020 15:03 # −999
bormand 17.10.2020 13:08 # +2
Desktop 17.10.2020 13:01 # +2
OCEHHuu_nemyx 17.10.2020 15:05 # 0
CHayT 17.10.2020 17:59 # +2
OCETuHCKuu_nemyx 17.10.2020 18:06 # 0
CHayT 17.10.2020 18:08 # 0
gost 17.10.2020 18:12 # 0
>>> bormand 15.03.2020 14:44 #
>>> я девочка-волшебница.
https://govnokod.ru/26488#comment534043
OCETuHCKuu_nemyx 17.10.2020 20:16 # 0
bormand 17.10.2020 20:19 # 0
> пруф
Вжуууух. И ты петух.
OCETuHCKuu_nemyx 17.10.2020 20:23 # 0
bormand 17.10.2020 20:26 # +2
У тебя теперь ник "OCETuHCKuu_nemyx" и петух на аватарке, проверь.
К сожалению, обратное заклинание я ещё не выучила. Так что походишь пока так.
OCETuHCKuu_nemyx 17.10.2020 20:35 # 0
CHayT 17.10.2020 20:39 # +2
bormand 17.10.2020 20:42 # +2
bormand 17.10.2020 20:40 # 0
А про возраст товарищу майору будешь доказывать.
-- Товарищ майор, бегите скорее сюда, тут какой-то петух просит пруфы показать.
OCETuHCKuu_nemyx 17.10.2020 20:43 # 0
bormand 17.10.2020 20:47 # 0