@dlangru

Страница 55 из 719
Oleg
22.08.2016
14:47:48
ну если для 80 есть 8080, то для 443 должен быть тоже какой-то?

Pavel
22.08.2016
14:48:22
Это же все в рамках общественных соглашений, я использую 10443

Макс
22.08.2016
15:11:45
ребят, а как в vibe сделать, чтобы автоматом с http перекидывал на тот же адресс, но https?
Делаю это на уровне nginx и не очень понимаю, откуда у меня может взяться желание запихивать это в код. Всё равно проксировал бы через nginx ради статики, даже если бы не ради HTTPS.

Pavel
22.08.2016
15:12:10
Ну да, лучше nginx поставить впереди конечно)

Google
Oleg
22.08.2016
15:12:38
да и тут проблемка задалась какая-то

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

это на данный момент api сервис, возможно тонкий клиент на десктоп, возможно веб

Pavel
22.08.2016
15:13:28
Вот, как раз повод поставить nginx) Там он все делает "нативно"

делаешь два виртуал хоста, один слушает 80 порт и редиректит на второй. Второй слушает 443 порт, отдает crt сертификаты и все такое, и проксирует к vibe.d приложению.

Макс
22.08.2016
15:17:20
Плюс есть некое неуверенное ощущение, что HTTPS это что-то связанное больше с конкретным деплоем, чем с логикой, а потому уместнее выглядит, когда настроено в конфиге сервера, а не в коде. Но это мои личные душевные переживания, у других всё может быть наоборот)

Dmitry
23.08.2016
06:06:25
Я когда-то давно спрашивал, почему в доках пишут char[] вместо string. Там какой-то глубокий смысл есть? Или просто исходя из того, что строка это массив символов?

Oleg
23.08.2016
06:30:45
string это не char[], а immutable(char)[]

Просто alias

Нет типа данных string в языке

Dmitry
23.08.2016
06:32:28
погоди, если строка не изменяемый тип, то все операции что получается через копирование происходят?

вот мне нужно сделать срез строки размером 10 байт, до 5. Могу я именно последние 5 байт откусить, а не просто указатель сместить так, что будут видны 1..5 ?

Google
Nick
23.08.2016
07:09:19
http://dlang.org/phobos/std_regex.html

звиняюсь - телеграм ступил

Dmitry
23.08.2016
07:28:21
toArray имеешь ввиду?

qwe
23.08.2016
07:28:43
погоди, если строка не изменяемый тип, то все операции что получается через копирование происходят?
ну не все. Наверное, только конкатенация. Которая по сути — добавление в массив новых элементов. Это такой динамический массив. А как добавление элементов в массив без копирования в более просторный участок памяти? Знатоки меня поправят. Но операцию append в C я делал именно так. Если массив выходил за рамки отведенной ему памяти, он копировался в участок, где ее в 2 раза больше. Полагаю, capacity в slice как раз и показывает сколько памяти slice может занять до того момента, как его переместят в другое место.

Dmitry
23.08.2016
07:29:58
Э.... по идее менеджер памяти если в пределах данной страницы есть место может без операции копирования обойтись? Верно рассуждаю? Там же страницы по 4КБ

Dmitry
23.08.2016
07:32:03
неизменность строк зачем сделана?

Мерлин
23.08.2016
07:33:59
неизменность строк зачем сделана?
Так удобнее Можно использовать, как ключи для хэш таблиц, это потоко-безопасно и т.д

Dmitry
23.08.2016
07:45:48
Олег, я тут застрял с перенаправлением ввода-вывода

Oleg
23.08.2016
07:45:59
что конкретно не так?

Dmitry
23.08.2016
07:47:01
щас покажу что нужно: http://stackoverflow.com/questions/39094806/how-to-pass-data-to-console-app-and-handle-its-output у меня максимум получется запустить утилиту, которая будет работать на прием данные как readln и потом по ктрл-с при выходе данные напечатает

Dmitry
23.08.2016
07:53:48
@deviator ок пасибо

Oleg
23.08.2016
07:53:55
ты же даже pipe.stdin не юзаешь)

1 мин

Dmitry
23.08.2016
07:54:17
а что он делает можешь словами объяснить?

а то доки это хорошо, но краткая суть лучше

Google
Oleg
23.08.2016
08:07:45
хм

чёт не работает как я думал

Dmitry
23.08.2016
08:09:11
во-во

Oleg
23.08.2016
08:10:04
что делает эта функция: запускает процесс и подсовывает ему 3 файла стандартных, ты их можешь пользовать из вызывающей программы

аа

понял

но достаточно странно

сейчас скину код

Dmitry
23.08.2016
08:12:28
давай

Oleg
23.08.2016
08:14:21
простая программа (типа gdal) import std.stdio; import std.string; void main(string[] args) { writeln("hello"); stderr.writeln("direct to stderr"); if (args.length > 1) writeln("your args: ", args); auto str = readln().strip; writefln("you type '%s'", str); }

вызывающая программа import std.stdio; import std.process; import std.array; void main() { writeln("caller start"); auto pipe = pipeProcess(["./gen", "shell", "args"], Redirect.stdin | Redirect.stdout); scope (exit) wait(pipe.pid); //foreach (ln; pipe.stdout.byLine) // writeln("gen says: ", ln); pipe.stdin.writeln("my call string"); pipe.stdin.flush(); pipe.stdin.close(); foreach (ln; pipe.stdout.byLine) writeln("gen says: ", ln); writeln("caller end"); }

Dmitry
23.08.2016
08:15:20
Что значит stderr.writeln("direct to stderr"); ?

Oleg
23.08.2016
08:15:32
ну то и значит, что оно выводит)))

пишем в файл ошибок)

есть 3 файла

stdin (вход), stdout (выход), stderr (выход ошибок)

Dmitry
23.08.2016
08:16:19
а имена им где задаются?

Oleg
23.08.2016
08:16:35
обычно перенаправляют stdout, а чтобы видеть ошибки, оставляют stderr выходом в консоль

это типа стандарт...

Dmitry
23.08.2016
08:16:50
да? честно не знал...

Google
Oleg
23.08.2016
08:17:09
https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8

Dmitry
23.08.2016
08:17:36
тоесть writeln по умолчанию в stdout просто пишет?

Oleg
23.08.2016
08:17:47
да

так вот читать, что вывела программа до конца программы мне как-то не удалось нормально (закомментированные строки)

Dmitry
23.08.2016
08:18:39
а если нужно чтобы оно туда только ошибки писало, то надо stderr.writeln писать? А как оно определяет где ошибка? Получается нужно его так вызывать в блоке catch

Oleg
23.08.2016
08:19:05
stderr это просто диагностические сообщения

понимает только программист где ошибки могут быть, а где нет

можно в stderr лог писать

Dmitry
23.08.2016
08:19:52
так, момент. Проверю у себя на простом примере

Я вот честно нигде в исходниках не видел, чтобы писали так: stderr.writeln("error");

Admin
ERROR: S client not available

Oleg
23.08.2016
08:25:21
ну хз

а много ты исходников смотрел?)

Dmitry
23.08.2016
08:26:13
а смысл логированния тогда в чем? std.log или как там его?

Oleg
23.08.2016
08:26:28
в том, что это более высокоуровневый метод

а stderr низкоуровневый

grep -r "stderr.writeln" /usr/include/dmd/phobos /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Doing workForce work."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Yield from workForce."); /usr/include/dmd/phobos/std/parallelism.d: debug(std_parallelism) stderr.writeln("totalCPUs = ", totalCPUs); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln(ii, '\t', elem); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Done creating nums."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Done modulus test."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Done squares."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Done sums."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Creator Raw Index: ", poolInstance.threadIndex); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("\nCurrent thread is: ", /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Workload distribution: "); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln(k, '\t', v); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln( /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Done sum of square roots."); /usr/include/dmd/phobos/std/parallelism.d: stderr.writeln("Nums: ", nums); /usr/include/dmd/phobos/std/getopt.d: stderr.writeln("Dunno how verbose you want me to be by saying ", /usr/include/dmd/phobos/std/datetime.d: stderr.writeln("genTZs.d windowsZones.xml <nix2WinFile> <win2NixFile>"); /usr/include/dmd/phobos/std/process.d: debug std.stdio.stderr.writeln(e.msg); /usr/include/dmd/phobos/std/net/curl.d: stderr.writeln(e); /usr/include/dmd/phobos/std/experimental/allocator/common.d: scope(failure) stderr.writeln("testAllocator failed for ", A.stringof); /usr/include/dmd/phobos/std/numeric.d: scope(failure) stderr.writeln("Failure testing secantMethod");

по бОльшему счёту это осталось только в std.parallelism

Dmitry
23.08.2016
08:27:44
Я праивльно понял, что если мне нужно сделать чтобы: 1. программа что-то писала на экран 2. логировала я пишу: `stdout.writeln("print to screen"); stderr.writeln("write to log");`

Oleg
23.08.2016
08:28:24
а ты думаешь, что строка, которую ты на печать отправляешь на что-то влияет?

Google
Oleg
23.08.2016
08:28:32
=)

она просто пишется в stderr

а лог это или не лог, на экран выводится или нет это другой вопрос

Dmitry
23.08.2016
08:29:20
так, а как надо?

Oleg
23.08.2016
08:29:51
я эту строку включил в gen.d только чтобы показать, что можно и мимо stdout написать и это не будет перехвачено другой прогой, которая только stdout перехватывает

Dmitry
23.08.2016
08:32:26
stderr.writeln("direct to stderr"); так эта же штука тоже на экран выведется, но через поток stderr так? Этот поток по умолчанию выводится на экран, но его можно выводить и в файл. Верно?

Oleg
23.08.2016
08:34:14
и stdout и stderr по умолчанию на экран

их можно перенаправить

Dmitry
23.08.2016
08:34:47
а можешь показать как перенаправить?

Oleg
23.08.2016
08:34:48
auto pipe = pipeProcess(["./gen", "shell", "args"], Redirect.stdin | Redirect.stdout);

Dmitry
23.08.2016
08:35:11
а в данном случае куда они перенаправляются?

Oleg
23.08.2016
08:35:17
перенаправлены в pipe.stdin и pipe.stdout

а ты уже можешь ими рулить в вызывающей программе

Dmitry
23.08.2016
08:36:04
а pipe эта структура в которой можно задать имя файла куда оно пишется ?

Oleg
23.08.2016
08:36:33
https://dlang.org/phobos/std_process.html#.ProcessPipes

> можно задать имя файла куда оно пишется ? нет, мне кажется

если ты попробуешь открыть файл, то он отвяжется от вывода

тебе нужно отдельно создать файл, куда ты хочешь писать

но это мне так кажется

Dmitry
23.08.2016
08:38:34
т.е. auto file = new File("file.txt", w);?

Oleg
23.08.2016
08:38:51
да, а в него уже писать из pipe.stdout

но зачем тебе это?

Dmitry
23.08.2016
08:39:12
да просто разобраться

Страница 55 из 719