@proGO

Страница 360 из 1674
Roman
23.12.2016
14:01:34
Опять же, как версию обновлять из репозитория? Автоматически или вручную?

corpix
23.12.2016
14:03:09
с докером вообще изврат
Ну докер, не докер. Это всё одно - контейнеры. Подождите года 3, в линуксе каждое приложение будет в контейнере. И как по мне, тк команда по типу docker run -v .:/gopath golang:1.7 go run main.goНикакого изврата не вносит. Можно даже алиас сделать, если не удобно.

Опять же, как версию обновлять из репозитория? Автоматически или вручную?
Менеджер обновлений говорит что обновление доступно. Обновлять или нет решает пользователь

ros
23.12.2016
14:04:16
> Подождите года 3 это слышали ещё 3 года назад

Google
Denis
23.12.2016
14:04:43
Snap же

corpix
23.12.2016
14:04:53
Flatpak :)

Уже работает и довольно хорошо

Denis
23.12.2016
14:05:37
Только пакеты в 2-5 раз больше

По снапу

Roman
23.12.2016
14:05:50
Менеджер обновлений говорит что обновление доступно. Обновлять или нет решает пользователь
Чет я не припоминаю в жизни ситуаций чтобы менеджер дистрибутива сам предлагал на выбор major версии софта.

corpix
23.12.2016
14:06:42
Чет я не припоминаю в жизни ситуаций чтобы менеджер дистрибутива сам предлагал на выбор major версии софта.
Не понял. Ему же пофиг. Есть обновление в ветке - предлагает. Нет - не предлагает

Roman
23.12.2016
14:06:54
Например, ставишь postgress и там пакеты 9.5 и 9.4 ты выбираешь ветку и там только фиксы. И никогда оно тебе не предложит перейти просто так.

corpix
23.12.2016
14:07:47
Это уже от дистрибутива зависит

И от пакетного менеджера. Конкретика вобщем.

Roman
23.12.2016
14:08:00
Пустой спор я считаю. Разработчик всяко должен иметь пару версий языка и бстро переключаться.

corpix
23.12.2016
14:08:32
Тогда либо контейнеры, либо костыли в виде скриптов-менеджеров типа gvm

Roman
23.12.2016
14:08:36
И от пакетного менеджера. Конкретика вобщем.
И вот этой кокретикой предлагается нагрузить авторов Go :)

Google
corpix
23.12.2016
14:10:47
В их случае всё будет просто(скорее всего, не думаю что они будут заморачиваться с lts/не lts), если они заведут свой репозиторий с пакетами. Одна ветка, последовательный набор версий, определённое количество поддеживаемых типов пакетов(например deb && rpm). Положил свежую версию в основную ветку репозитория - разработчики получили возможность обновиться. Никаких сложностей

Roman
23.12.2016
14:14:12
И алгоритм смены версий ляжет на разработчиков языка. А они не хотят. Я тоже не хочу этого пару лет еще, до выхода 2.1 какого нибудь.

corpix
23.12.2016
14:15:05
Он и так лежит на них. Наличие репозитория не вносит никаких изменений в версионирование

Quet
23.12.2016
14:58:50
нет там магии
угу, какая например сигнатура у len? )

Kirill
23.12.2016
14:59:46
Quet
23.12.2016
15:00:57
и если я захочу чтобы len работало для моей структуры данных? )

ну и конечно ж потрясающее определение builtin.Type —> type Type int

Kirill
23.12.2016
15:04:38
и если я захочу чтобы len работало для моей структуры данных? )
помнится, len вообще можно переопределять

Quet
23.12.2016
15:05:23
помнится, len вообще можно переопределять
ну даже если ты сделаешь свой len2 - builtin.Type абсолютно непрозрачная штука, как там какой-то функционал написать?

я про эту магию собственно

Kirill
23.12.2016
15:06:22
builtin вообще пакет только для документации

Quet
23.12.2016
15:06:37
тем более )

Kirill
23.12.2016
15:06:53
но это еще не магия

Quet
23.12.2016
15:07:31
ну блин, магия в том смысле что доступно только разработчикам го

Kirill
23.12.2016
15:08:15
если не применять кельтскую магию, конечно

вроде как, можно залинковать runtime._type на свой тип

только нафига оно тебе — не ясно

Quet
23.12.2016
15:10:52
ну через такие извращения понятно что не очень надо )

Petr
23.12.2016
15:42:07
Можно сделать пакет в папке с проектом? Я понимаю что нужно создать папку src и изменить GOPATH ?

Sergey
23.12.2016
15:43:55
разослали письма со ссылками на gogland

Google
Kirill
23.12.2016
15:49:24
просто делай пакет и импорти его

зачем такой геморрой?

Maxim
23.12.2016
15:52:46
Блин, я всё-таки тупой для этого дерьма. Как мне грамотно всё это дело зафигачить-то? type ( // Node is abstract object represents a DOM Node. It can be a String which // represents a DOM text node or a NodeElement object. Node interface{} // NodeElement represents a DOM element node. NodeElement struct { // Name of the DOM element. Available tags: a, aside, b, blockquote, br, // code, em, figcaption, figure, h3, h4, hr, i, iframe, img, li, ol, p, // pre, s, strong, u, ul, video. Tag string `json:"tag" // Optional. Attributes of the DOM element. Key of object represents // name of attribute, value represents value of attribute. Available // attributes: href, src. Attrs []html.Attribute `json:"attrs" // Optional. List of child nodes for the DOM element. Children []Node `json:"children" } ) func domToNode(domNode *html.Node) interface{} { if domNode.Type == html.TextNode { return domNode.Data } if domNode.Type != html.ElementNode { return false } var nodeElement NodeElement nodeElement.Tag = strings.ToLower(domNode.Data) for i := range domNode.Attr { attr := domNode.Attr[i] if attr.Key == "href" || attr.Key == "src" { if nodeElement.Attrs == nil { nodeElement.Attrs = nil } nodeElement.Attrs[i].Val = attr.Val } } for child := domNode.FirstChild; child != nil; child = child.NextSibling { nodeElement.Children = append(nodeElement.Children, domToNode(child)) } return nodeElement }

Viktor
23.12.2016
16:42:01
Hello Виктор, Thank you for signing up, and welcome to Gogland EAP!

всем уже пришло? :)

Kirill
23.12.2016
16:43:09
даже мне еще раз выслали

Vladimir
23.12.2016
16:58:25
а мне даже в первый раз не выслали )

Vladimir
23.12.2016
16:59:15
точнее выслали на почту на которую регался во второй раз

Viktor
23.12.2016
16:59:46
А чё это?
ты не слышал про IDE для golang от jetbrains? быть не может!

Kirill
23.12.2016
16:59:47
А чё это?
а ты слышал о новой IDE от jetbrains?

Vladimir
23.12.2016
16:59:55
кстати выслали более новую версию

Maxim
23.12.2016
17:00:01
Kirill
23.12.2016
17:00:03
Maxim
23.12.2016
17:00:07
Звучит клёво!

Viktor
23.12.2016
17:00:07
а ты слышал о новой IDE от jetbrains?
хватит писать то что пишу я!

Kirill
23.12.2016
17:00:26
хватит писать то что пишу я!
я этот мем зафорсил, хватит писать то, что пишу Я!

Google
Maxim
23.12.2016
18:01:10
Блин, я всё-таки тупой для этого дерьма. Как мне грамотно всё это дело зафигачить-то? type ( // Node is abstract object represents a DOM Node. It can be a String which // represents a DOM text node or a NodeElement object. Node interface{} // NodeElement represents a DOM element node. NodeElement struct { // Name of the DOM element. Available tags: a, aside, b, blockquote, br, // code, em, figcaption, figure, h3, h4, hr, i, iframe, img, li, ol, p, // pre, s, strong, u, ul, video. Tag string `json:"tag" // Optional. Attributes of the DOM element. Key of object represents // name of attribute, value represents value of attribute. Available // attributes: href, src. Attrs []html.Attribute `json:"attrs" // Optional. List of child nodes for the DOM element. Children []Node `json:"children" } ) func domToNode(domNode *html.Node) interface{} { if domNode.Type == html.TextNode { return domNode.Data } if domNode.Type != html.ElementNode { return false } var nodeElement NodeElement nodeElement.Tag = strings.ToLower(domNode.Data) for i := range domNode.Attr { attr := domNode.Attr[i] if attr.Key == "href" || attr.Key == "src" { if nodeElement.Attrs == nil { nodeElement.Attrs = nil } nodeElement.Attrs[i].Val = attr.Val } } for child := domNode.FirstChild; child != nil; child = child.NextSibling { nodeElement.Children = append(nodeElement.Children, domToNode(child)) } return nodeElement }
Лол, кажись я сделяль

Получаю в итоге интерфейс

Теперь мне его надо трансформировать как-то в структуру

Бляха-муха, ну почти уже: panic: interface conversion: interface is telegraph.NodeElement, not []telegraph.Node [recovered] panic: interface conversion: interface is telegraph.NodeElement, not []telegraph.Node

Maxim
23.12.2016
19:20:56
ты близко, похоже
Да, но, блин, всё равно косяки. === RUN TestGetPage --- FAIL: TestGetPage (0.09s) panic: runtime error: index out of range [recovered] panic: runtime error: index out of range goroutine 39 [running]: panic(0x6b4880, 0xc420010140) /usr/local/go/src/runtime/panic.go:500 +0x1a1 testing.tRunner.func1(0xc4206d2900) /usr/local/go/src/testing/testing.go:579 +0x25d panic(0x6b4880, 0xc420010140) /usr/local/go/src/runtime/panic.go:458 +0x243 github.com/toby3d/telegraph.TestGetPage(0xc4206d2900) /home/toby3d/Go/src/github.com/toby3d/telegraph/telegraph_test.go:94 +0x1db testing.tRunner(0xc4206d2900, 0x734d10) /usr/local/go/src/testing/testing.go:610 +0x81 created by testing.(*T).Run /usr/local/go/src/testing/testing.go:646 +0x2ec exit status 2 FAIL github.com/toby3d/telegraph 1.588s

Admin
ERROR: S client not available

Kirill
23.12.2016
19:21:27
только у меня это из-за того, что я мапы разворотил и еще не доделал

Maxim
23.12.2016
19:21:33
=== RUN TestCreatePage --- FAIL: TestCreatePage (1.02s) telegraph_test.go:42: unexpected EOF telegraph_test.go:44: (*telegraph.Page)(nil)

Kirill
23.12.2016
19:22:09
Maxim
23.12.2016
19:25:11
дык EOF должно же нормально обрабатывать
Ну вот, как-то не очень пока

Т.е. тест хоть и провальный, но не критичный. Следующие тесты после него идут как обычно

Парсю контент напрямую со своего бложе, получается так: ["\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"h1","attrs":null,"children":[{"tag":"b","attrs":null,"children":["Хранилище заметок в Telegram"]}]},"\n",{"tag":"time","attrs":null,"children":["Nov 28th, 2015"]},"\n",{"tag":"div","attrs":null,"children":[" ",{"tag":"a","attrs":null,"children":["#Telegram"]},"\n"]},"\n"]},"\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"p","attrs":null,"children":["Этот лайфхак поможет тебе быстро, легко и \"не отходя от кассы\" завести отдельный чат для бессрочного хранения ценного барахла в любом клиенте Telegram."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 1: Группа"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Начни создание конференции, назвав её ",{"tag":"strong","attrs":null,"children":["Notes"]},"/",{"tag":"strong","attrs":null,"children":["Заметки"]}," (или как тебе ещё удобно идентифицировать будущее хранилище). В качестве изображения профиля выбери, например, ",{"tag":"a","attrs":null,"children":["вот эту картинку"]},"."]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 2: Контакты"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["В списке собеседников помимо себя-любимого выбери какой-нибудь контакт или любого безобидного бота. Соглашайся с выбором."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 3: Последний штрих"]},"\n",{"tag":"p","attrs":null,"children":["Открой профиль группы и удали все контакты кроме своего. Или оставь себя вместе с ботами, которые могут тебе пригодиться."]},"\n",{"tag":"h2","attrs":null,"children":["???????"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Теперь у тебя есть приватный чат для всех своих заметок и файлов с безграничной вместимостью и синхронизацией содержимого между устройствами."]},"\n",{"tag":"h2","attrs":null,"children":["PROFIT!!1"]},"\n",{"tag":"p","attrs":null,"children":["Такую барахолку невозможно отыскать через поиск, что гарантирует его приватность и защищённость от чужих глаз. Содержимое автоматически сортируется по типу (как и в любом другом чате), но также можно дополнительно облегчить себе поиск нужного контента при помощи тегов. Если хочется дополнительный функционал - просто добавь ботов (что невозможно проделать в чате с самим собой)."]},"\n",{"tag":"h2","attrs":null,"children":["P.S."]},"\n",{"tag":"p","attrs":null,"children":["Не знаешь что это за мессенджер?

Парсю контент напрямую со своего бложе, получается так: ["\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"h1","attrs":null,"children":[{"tag":"b","attrs":null,"children":["Хранилище заметок в Telegram"]}]},"\n",{"tag":"time","attrs":null,"children":["Nov 28th, 2015"]},"\n",{"tag":"div","attrs":null,"children":[" ",{"tag":"a","attrs":null,"children":["#Telegram"]},"\n"]},"\n"]},"\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"p","attrs":null,"children":["Этот лайфхак поможет тебе быстро, легко и \"не отходя от кассы\" завести отдельный чат для бессрочного хранения ценного барахла в любом клиенте Telegram."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 1: Группа"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Начни создание конференции, назвав её ",{"tag":"strong","attrs":null,"children":["Notes"]},"/",{"tag":"strong","attrs":null,"children":["Заметки"]}," (или как тебе ещё удобно идентифицировать будущее хранилище). В качестве изображения профиля выбери, например, ",{"tag":"a","attrs":null,"children":["вот эту картинку"]},"."]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 2: Контакты"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["В списке собеседников помимо себя-любимого выбери какой-нибудь контакт или любого безобидного бота. Соглашайся с выбором."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 3: Последний штрих"]},"\n",{"tag":"p","attrs":null,"children":["Открой профиль группы и удали все контакты кроме своего. Или оставь себя вместе с ботами, которые могут тебе пригодиться."]},"\n",{"tag":"h2","attrs":null,"children":["???????"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Теперь у тебя есть приватный чат для всех своих заметок и файлов с безграничной вместимостью и синхронизацией содержимого между устройствами."]},"\n",{"tag":"h2","attrs":null,"children":["PROFIT!!1"]},"\n",{"tag":"p","attrs":null,"children":["Такую барахолку невозможно отыскать через поиск, что гарантирует его приватность и защищённость от чужих глаз. Содержимое автоматически сортируется по типу (как и в любом другом чате), но также можно дополнительно облегчить себе поиск нужного контента при помощи тегов. Если хочется дополнительный функционал - просто добавь ботов (что невозможно проделать в чате с самим собой)."]},"\n",{"tag":"h2","attrs":null,"children":["P.S."]},"\n",{"tag":"p","attrs":null,"children":["Не знаешь что это за мессенджер?
Упс, сорян

Ну вы понели

Парсю контент напрямую со своего бложе, получается так: ["\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"h1","attrs":null,"children":[{"tag":"b","attrs":null,"children":["Хранилище заметок в Telegram"]}]},"\n",{"tag":"time","attrs":null,"children":["Nov 28th, 2015"]},"\n",{"tag":"div","attrs":null,"children":[" ",{"tag":"a","attrs":null,"children":["#Telegram"]},"\n"]},"\n"]},"\n",{"tag":"div","attrs":null,"children":["\n",{"tag":"p","attrs":null,"children":["Этот лайфхак поможет тебе быстро, легко и \"не отходя от кассы\" завести отдельный чат для бессрочного хранения ценного барахла в любом клиенте Telegram."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 1: Группа"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Начни создание конференции, назвав её ",{"tag":"strong","attrs":null,"children":["Notes"]},"/",{"tag":"strong","attrs":null,"children":["Заметки"]}," (или как тебе ещё удобно идентифицировать будущее хранилище). В качестве изображения профиля выбери, например, ",{"tag":"a","attrs":null,"children":["вот эту картинку"]},"."]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 2: Контакты"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["В списке собеседников помимо себя-любимого выбери какой-нибудь контакт или любого безобидного бота. Соглашайся с выбором."]},"\n",{"tag":"h2","attrs":null,"children":["Шаг 3: Последний штрих"]},"\n",{"tag":"p","attrs":null,"children":["Открой профиль группы и удали все контакты кроме своего. Или оставь себя вместе с ботами, которые могут тебе пригодиться."]},"\n",{"tag":"h2","attrs":null,"children":["???????"]},"\n",{"tag":"p","attrs":null,"children":[{"tag":"img","attrs":null,"children":null}]},"\n",{"tag":"p","attrs":null,"children":["Теперь у тебя есть приватный чат для всех своих заметок и файлов с безграничной вместимостью и синхронизацией содержимого между устройствами."]},"\n",{"tag":"h2","attrs":null,"children":["PROFIT!!1"]},"\n",{"tag":"p","attrs":null,"children":["Такую барахолку невозможно отыскать через поиск, что гарантирует его приватность и защищённость от чужих глаз. Содержимое автоматически сортируется по типу (как и в любом другом чате), но также можно дополнительно облегчить себе поиск нужного контента при помощи тегов. Если хочется дополнительный функционал - просто добавь ботов (что невозможно проделать в чате с самим собой)."]},"\n",{"tag":"h2","attrs":null,"children":["P.S."]},"\n",{"tag":"p","attrs":null,"children":["Не знаешь что это за мессенджер?
Хрен знает, но может "\n" в срезе быть не должно?

В примере, кстати, фигурирует JSON.stringify(content). В пакете "encoding/json" есть аналогичная функция обработки содержимого?

Quet
23.12.2016
19:34:10
Marshal

Maxim
23.12.2016
19:34:21
Или Я неправильно срез нод маршлю?

Google
Maxim
23.12.2016
19:34:45
Marshal
Что Я и сделал, как бэ

Quet
23.12.2016
19:38:29
а что не так-то?

и кстати зачем тебе там fasthttp? чем родной не устроил?

Maxim
23.12.2016
19:40:20
а что не так-то?
=== RUN TestCreatePage --- FAIL: TestCreatePage (1.22s) telegraph_test.go:41: unexpected EOF telegraph_test.go:43: (*telegraph.Page)(nil)

Quet
23.12.2016
19:40:45
Родной медленный и вообще не оч
ты прям уперся в его скорость на своих наколенных примерах? ))

Maxim
23.12.2016
19:40:49
Сейчас пихую логирование везде, проверяю, может я что не туда сую

Quet
23.12.2016
19:41:30
железный, да

Maxim
23.12.2016
19:43:10
Ох, ебать: ([]uint8) (len=6382 cap=12731) { 00000000 5b 22 5c 6e 22 2c 7b 22 74 61 67 22 3a 22 64 69 |["\n",{"tag":"di| 00000010 76 22 2c 22 61 74 74 72 73 22 3a 6e 75 6c 6c 2c |v","attrs":null,| 00000020 22 63 68 69 6c 64 72 65 6e 22 3a 5b 22 5c 6e 22 |"children":["\n"| 00000030 2c 7b 22 74 61 67 22 3a 22 68 31 22 2c 22 61 74 |,{"tag":"h1","at| 00000040 74 72 73 22 3a 6e 75 6c 6c 2c 22 63 68 69 6c 64 |trs":null,"child| 00000050 72 65 6e 22 3a 5b 7b 22 74 61 67 22 3a 22 62 22 |ren":[{"tag":"b"| 00000060 2c 22 61 74 74 72 73 22 3a 6e 75 6c 6c 2c 22 63 |,"attrs":null,"c| 00000070 68 69 6c 64 72 65 6e 22 3a 5b 22 d0 a5 d1 80 d0 |hildren":[".....| 00000080 b0 d0 bd d0 b8 d0 bb d0 b8 d1 89 d0 b5 20 d0 b7 |............. ..| 00000090 d0 b0 d0 bc d0 b5 d1 82 d0 be d0 ba 20 d0 b2 20 |............ .. | 000000a0 54 65 6c 65 67 72 61 6d 22 5d 7d 5d 7d 2c 22 5c |Telegram"]}]},"\| 000000b0 6e 22 2c 7b 22 74 61 67 22 3a 22 74 69 6d 65 22 |n",{"tag":"time"| 000000c0 2c 22 61 74 74 72 73 22 3a 6e 75 6c 6c 2c 22 63 |,"attrs":null,"c|

По моему ты со своим dlog чутка перемудрил, @kirilldanshin

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

Quet
23.12.2016
19:47:11
а зачем тебе dlog? стандартный логгер ну или logrus

Kirill
23.12.2016
19:47:49
а зачем тебе dlog? стандартный логгер ну или logrus
стандартный не умеет в нормальный вывод структур

Maxim
23.12.2016
19:52:28
стандартный не умеет в нормальный вывод структур
В многоуровневый не может. А так - норм

Sergey
23.12.2016
20:02:03
вдруг кому нужно

Kirill
23.12.2016
20:12:30
В многоуровневый не может. А так - норм
вообще можно же .F попробовать, может, тебе так лучше будет в таких случаях. .D должен же максимально подробный дамп дать.

corpix
23.12.2016
20:29:17
Ещё есть https://github.com/davecgh/go-spew Похоже что именно эта штука формирует вывод в dlog

Страница 360 из 1674