
Zaur
22.01.2018
07:04:26
Вот этот момент немного не понял. А почему те же c# и джава тоже в разы быстрее отработали? Это как-то связано с тем, что они интерпретируемые или просто лучшая оптимизация из-за возраста?
2.5 секунды плюсы
34 (!) секунды голанг
Задание сгенерировать Бин дерево и посчитать количество узлов для каждой глубины
В целом главная проблема - сборка мусора. Это плата за удобство программирования

Slava
22.01.2018
07:05:28

Google

Slava
22.01.2018
07:05:52
возможно тут JIT помог

Daniel
22.01.2018
07:05:53
сложнее, чем "компилируемые в байткод"
jit тут помог не быть тормозным
тут два моммента
1. оптимизатор в go довольно убогий. и будет таковым оставаться, ибо для 99% задач, которые решают на go, оптимизатор просто не нужен
2. разница 2.5 и 34 секунды означает только одно - "структура данных плохо влезает в кеш процессора". или большая, или разбросана по памяти, или предсказатель ветвлений ее не понимает. если, например, взять ту же структуру, что использовалась в c++ - разрыв может сократиться

Zaur
22.01.2018
07:14:27
Понял, спасибо)

Vladimir
22.01.2018
07:15:05
Надо на код задачи ещё смотреть :)
/report
@onokonem @m0sth8 тут какая то нездоровая хрень у человека творится

Andrew
22.01.2018
07:40:07
Сколько уже спамеров забанили за историю группы?

Мерлин
22.01.2018
07:52:55

Александр
22.01.2018
07:56:51

Google

Мерлин
22.01.2018
07:57:28

Andrew
22.01.2018
08:57:14

Гриша
22.01.2018
08:59:15

Евгений
22.01.2018
09:02:23
Коллеги, кто как, свои приложения в продакшен заводит?
Да смотря куда. Если что-то сложное, важное - докер.
Для веб-игрищщ завел себе акк не heroku. Деплой идет бинарем через отдельный гит-реп (чтобы основной с кодом не замусоривтаь).
1. компиляю у себя CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ../project-heroku/bin/app
2. git add .
3. git push heroku master
Может не очень красиво, что бинарь в гит кладу, но получается простой быстрый деплой в одну команду make
вендор в корне, бин тоже - норм.
Чем плохо?

Andrew
22.01.2018
09:03:17
Bin же должен быть в $GOPATH/bin (вроде)

Vladislav
22.01.2018
09:03:21
Вендор должен быть в корне проекта и управляться с помощью менеджера зависимостей, например dep.

Евгений
22.01.2018
09:04:00

Гриша
22.01.2018
09:05:33

Евгений
22.01.2018
09:06:28
вендор норм - как раз в отдельной папке все рядом и не лезет по всему проекту

Vladislav
22.01.2018
09:08:56

Евгений
22.01.2018
09:09:10
я использую dep (и вроде как он рекомендован для всех новых проектов)
- в корне проекта 2 файла Godep.toml `и `Godep.lock - в них описаны все зависимости
- так же папка vendor - в ней лежит исходный код проектов нужных версий, согласно файликам.
Да. vendor лежит в .gitignore и не коммитится в проект - он нужен только на рабочей машине для сборки

Vladimir
22.01.2018
09:09:43

Евгений
22.01.2018
09:09:54
Если я кладу по каким-то причинам бинарники в bin в проекте, то он у меня в игноре.

Vladislav
22.01.2018
09:10:14

Евгений
22.01.2018
09:10:15

Vladimir
22.01.2018
09:10:51
или просто грохнуть проект

Google

Vladimir
22.01.2018
09:11:20
сделает умный человек форс пуш и нет коммита
по глупости например

Евгений
22.01.2018
09:11:41
Мне кжется, более правильно поднять гит-копии использованных проектов, чтобы и код можно было достать и не замусоривать свой проект
но это конечно сложнее
Либо, если все на гитхабе, то форкаешь проект - и у тебя своя копия зависимости. Что там случилось с исходной версией, тебе не важно. Периодически, когда обновляешь зависимости затаскиваешь изменения в свой форк. Нашел серьезный баг - исправил у себя, отправил пулл-реквест.
На той стороне чувак будет морозиться - ну и хрен с ним, у тебя код работает. Если очень будут нужны его новые изменения, то тащишь и мерджишь.
Но, если чел морозится по пустякам, но наврядли в проекте появятся какие-то суперполезные изменения.


Vladislav
22.01.2018
09:16:10
Либо, если все на гитхабе, то форкаешь проект - и у тебя своя копия зависимости. Что там случилось с исходной версией, тебе не важно. Периодически, когда обновляешь зависимости затаскиваешь изменения в свой форк. Нашел серьезный баг - исправил у себя, отправил пулл-реквест.
На той стороне чувак будет морозиться - ну и хрен с ним, у тебя код работает. Если очень будут нужны его новые изменения, то тащишь и мерджишь.
Но, если чел морозится по пустякам, но наврядли в проекте появятся какие-то суперполезные изменения.
Каждый проект форкать такое себе. Да и в случае если ты не один работаешь, то нужно акк компании на гитхабе делать?


Евгений
22.01.2018
09:18:44
Не обязательно. Мне никто не запрещает сделать бесплатный публичный форк открытых проектов на GH.
А дальше в своей закрытой репе, которая вообще лежит даже не на ГХ я импортирую нужные мне зависимости.
go get и dep штуки умные - они без проблем мне вытаскивают все нужное из разных источников.
Если компания не хочет закрывать копии своих репов, то без проблем можно сделать бесплатный акк компании и туда все сотрудники будут класть. Тогда, если кто уволится, то все равно все сорцы останутся в том же самом месте.

Vladislav
22.01.2018
09:20:00

Евгений
22.01.2018
09:20:07
только что ответил )

Vladimir
22.01.2018
09:20:23
кстати, если я правильно помню, удаление оригинальной репы ведет к удалению всех форков

Евгений
22.01.2018
09:20:48
для публичных беслпатных?

Евгений
22.01.2018
09:21:03
тогда можно неаккуратно полгитхаба разломать
придет очередной leftpad - и карачун гитхабу )
Вобщем это надо проверить, уж очень рискованная вещь. Может это как-то лицензией регулирутеся?

Anton
22.01.2018
09:24:00

Евгений
22.01.2018
09:28:38
Для закрытого кода компании можно сделать локальные копии реп и в них отдельный upstream на внешний репозиторий. Периодически затаскиваешь свежий код, мерджишь, проверяешь. Тогда ты вообще не зависишь от GH и что там снаружи происходит. У тебя всегда один и тот же реп по одному и тому же адресу.
Даже если у тебя в твоем проекте сделан lock на master (гы), то все равно, мастер не будет спонтанно меняться (ну в надежде, что отвечающие за это люди адекватны и изменения зависимостей обсуждаются перед тем как их ломать).

Vladimir
22.01.2018
09:29:02
или можно просто закомитить vendor

Евгений
22.01.2018
09:29:17
мусор в репе будет копиться

Vladimir
22.01.2018
09:29:26
периодически его чистить

Admin
ERROR: S client not available

Google

Vladimir
22.01.2018
09:29:32
ну и будет ну и что

Евгений
22.01.2018
09:29:39
куча левых коммитов

Vladislav
22.01.2018
09:33:49
Это мешает смотреть изменения.

Vladimir
22.01.2018
09:35:49

Vladislav
22.01.2018
09:36:38
Если я хочу посмотреть изменения в ветке?
Т.е. приходит merge request. И нужно ревью сделать, например.

Vladimir
22.01.2018
09:41:46
берешь и смотришь)
github очень клево vendor/* скрывает по-умолчанию
(потому что там обычно дофига всего)

Vladislav
22.01.2018
09:42:13
Гитхаб да.

Alexander
22.01.2018
09:42:24
Не так уж часто в MR обновляются зависимости. А если обновляются, то да, нужно сделать ревью

Vladislav
22.01.2018
09:43:25
В файлах dep и так отображается, что они изменились. Или мне ещё и коду зависимостей ревью делать?

Vladimir
22.01.2018
09:44:00

Vladislav
22.01.2018
09:44:49
Ну так не все веб интерфейсы скрывать позволяют.

Vladimir
22.01.2018
09:45:05
повод написать фичареквест автору
или даже pull request

Vladislav
22.01.2018
09:45:40
Ну фронтенд писать я пока не собираюсь.

Vladimir
22.01.2018
09:46:55
можно еще подумать о смене инструмента, так как функционал скрытия не нужного - кажется очень даже первоочередным для любой тулзы для ревью

Vladislav
22.01.2018
09:48:04

Vladimir
22.01.2018
09:48:33

Google

Vladislav
22.01.2018
09:49:08
Ну там и куча задач и история. И документооборот. И все нужно для аудита.

Alexander
22.01.2018
09:59:40

Димка
22.01.2018
09:59:48
напомните плз, куда уходить с `gopkg.in/mgo.v2`?

Slava
22.01.2018
10:07:34

Mike
22.01.2018
10:23:50
Вот еще на эту тему: https://engineering.mongodb.com/post/considering-the-community-effects-of-introducing-an-official-golang-mongodb-driver

Bohdan
22.01.2018
10:25:22
Приветствую!
Может и не в профильный чат, но вопрос актуальный.
Как удалить куку при 403 ответе?)
Set-Cookie не отрабатывает, походу

Aleksandr
22.01.2018
10:26:30