
Denis
09.01.2017
13:51:51
Либо обратную статистику уровень счастья - яп
Но надо бы еще учесть материальную составляющую
Обратную таким как : яп-зп, яп-вакансий
Ибо что-то фундаментальное в них неверно

Google

Denis
09.01.2017
13:55:09
Яп выбирают от склада ума, и других составляющих, выбирать яп по уровню зп.. ,хм, категорию нуждающихся думаю можно отбросить

Славик
09.01.2017
13:59:53
чем лучше ты знаешь язык программирования, тем больше ты на нем будешь зарабатывать

Tsundershark
09.01.2017
14:00:09

Славик
09.01.2017
14:00:14
конечный потребитель платит не за выбранные технологии, а за продукт

Quet
09.01.2017
14:00:26

Denis
09.01.2017
14:00:46
Коммерцию тоже можно отбросить

Phil
09.01.2017
14:00:50

Denis
09.01.2017
14:00:55
Куча опенсорса полезного

Quet
09.01.2017
14:01:55

Phil
09.01.2017
14:03:22

Vadzim
09.01.2017
14:03:39
И опыт тоже нужен

Quet
09.01.2017
14:07:15

Kirill
09.01.2017
14:08:36
@toby3d интересно, сколько максимум стикеров можно в пак добавить? ?

Google

Maxim
09.01.2017
14:08:49

Phil
09.01.2017
14:12:13
У меня вообще есть только две репы в паблике, кторыми я могу открыто хвастаться. Одна это простейшие тригонометрические функции с точностью 8 знаков после запятой, не больше, на MACRO-11. Это пипец я алгоритмы подбирал. Вторая - на нескольких языках рассчет DNS записи DS. В том числе на двух, которых я не знал
https://github.com/diphost/ds-calc во

Alex
09.01.2017
14:17:11
Народ, пытаюсь закешировать файл и выводить его каждый раз из оперативы. Делаю так, но получаю каждый раз ошибку "invalid argument"
func handleSmart() func(w http.ResponseWriter, r *http.Request) {
file, _ := os.Open("../templates/smart_multiple.html")
return func(w http.ResponseWriter, r *http.Request) {
_, err := io.Copy(w, file)
if err != nil {
log.Println(err)
}
}
}

Kirill
09.01.2017
14:17:43

Alex
09.01.2017
14:18:04
это я уже понял :)
но не понимаю, как оно работает(
файл прочитал. Затем отправляю его в w
- это моя логика. Помогите понять, как оно на самом деле работает)

Alexei
09.01.2017
14:19:39
логика простая handleSmart вызывается каждый раз при каждом запросе
а не один раз

Alex
09.01.2017
14:20:02
юзаю так:
http.HandleFunc("/short/smart", handleSmart())
таки один раз :)

Kirill
09.01.2017
14:20:25
как оно вообще у тебя собралось?

Alex
09.01.2017
14:20:32
а в чем проблема-то?

Alexei
09.01.2017
14:20:42
тебе надо какую-то переменную, в которую до момента старта всосать файлик, а потом просто из нее отдавать данные, если ты хочешь именно файлик закешировать

Alex
09.01.2017
14:20:51
ретурню функцию, которая и встает в handleFunc

Alexei
09.01.2017
14:20:51
глобальную
или принадлежащую структуре

Alex
09.01.2017
14:21:15
не хотел делать глобальные переменные, поэтому и завернул все в замыкание)

Alexei
09.01.2017
14:21:37
хорошо, что голанг - не розетка

Google

Kirill
09.01.2017
14:21:42
естественный отбор работал бы быстрее

Alexei
09.01.2017
14:22:00

Denis
09.01.2017
14:22:43

Kirill
09.01.2017
14:23:03
и если памяти свободной больше, чем этот файл

Denis
09.01.2017
14:23:34
Он все равно на пейджи делит все
Ось точнее
Ну а если файл больле чем рам

Alexei
09.01.2017
14:24:21
то его все-равно придется читать пачками

Denis
09.01.2017
14:24:22
То его прога ее не прибавит

Denis
09.01.2017
14:24:29
Ага

Alex
09.01.2017
14:25:44
На самом деле, так все работает огонь. Давайте представим, что все норм. Я даже переписал это на глобал варах, только не работает все равно. Ошибка та же: invalid argument.
var f *os.File
func handleSmart(w http.ResponseWriter, r *http.Request) {
_, err := io.Copy(w, f)
if err != nil {
log.Println(err)
}
}
func createRoutes(db *sql.DB, rootURL string) {
f, _ = os.Open("../templates/smart_multiple.html")
http.HandleFunc("/short/smart", handleSmart)
}

Kirill
09.01.2017
14:26:19
закешируй в нативный тип

Alex
09.01.2017
14:26:44
в байты?
просто не могу вкурить, зачем тогда нужен io.Reader и io.Writer
с байтами все ок будет

Alexei
09.01.2017
14:27:17
чтобы читать и писать, а не хранить

Google

Denis
09.01.2017
14:27:36
Можешь из байтов сделать ридер
Если очень хочется

Alex
09.01.2017
14:28:04
а таки для чего они нужны? Работают эффективнее?

Alexei
09.01.2017
14:28:18

Kirill
09.01.2017
14:28:23

Admin
ERROR: S client not available

Denis
09.01.2017
14:28:29
Памятью распоряжаются эффективнее

Alexei
09.01.2017
14:28:36
поэтому я предлагаю людям сперва учить си ???

Alex
09.01.2017
14:28:54
таки если бы были миллионы, я бы не держал

Kirill
09.01.2017
14:28:57
говорю же, жаль, что гошка не розетка...

Alex
09.01.2017
14:29:08
а так он один на весь проект

Alexei
09.01.2017
14:29:47
а так он один на весь проект
вечно открытый файл, из которого ты читаешь, чем это отличается, в сущности, от открытия файла каждый раз для чтения?

Denis
09.01.2017
14:29:54
ioutil.ReadAll
Вроде
Получишь байты
Байты напрямую в респонс

Alex
09.01.2017
14:30:58
да в байты читать не проблема, говорю ж)
интересно было почему не работает напрямую, а мне тут предлагают учить си)

Denis
09.01.2017
14:31:36
Так ответ был получен ?

Google

Quet
09.01.2017
14:32:17

Alex
09.01.2017
14:32:17
нет)
f, _ := os.Open("...")
io.Copy(w, f)

Alexei
09.01.2017
14:32:54

Kirill
09.01.2017
14:33:06

Denis
09.01.2017
14:33:17
Ставь nginx, sendfile on;

Kirill
09.01.2017
14:33:18
ты закешировать хочешь, или открывать?

Quet
09.01.2017
14:33:51

Alex
09.01.2017
14:33:53
да с кешом уже понятно все - конвертирую в байты и храню.
а если я хочу просто напрямую послать, то как?)

Quet
09.01.2017
14:33:54
или все же много раз?

Kirill
09.01.2017
14:34:07

Quet
09.01.2017
14:34:13
если много раз то каждый раз делай open+copy
в хендлере

Alex
09.01.2017
14:34:43
таки не работает.

Quet
09.01.2017
14:35:09
ну выложи код на play

Alex
09.01.2017
14:35:16
ща

Denis
09.01.2017
14:35:23
Так зачем каждый раз вручную открывать