
Alexander
27.02.2018
12:04:13

Vlad
27.02.2018
12:04:27
Позвольте описать задачу чуть более ясно.
Есть некая ETL-штука. Которая:
1. Берет csv-файлик, условно назовем его "updates_for_A"
2. На основании данных в CSV заполняет таблицу "aggregated_A"
3. Используя mapping: aggregated_A.col1 -> B.col1 обновляет записи в B.

Daniel
27.02.2018
12:04:33
не понятно, где проблема

Vlad
27.02.2018
12:04:37
надеюсь, все прояснилось.

Google

Vlad
27.02.2018
12:04:47
Проблема в том, что это "первый экспириенс".
И не ясно, как лучше все это организовать.

Daniel
27.02.2018
12:05:04
это не про го, я подозреваю, а про sql и квиьы

Michael
27.02.2018
12:05:14
это ETL

Vlad
27.02.2018
12:05:18
И как ± должен выглядеть этот файл с mapping

Michael
27.02.2018
12:05:36

Vlad
27.02.2018
12:05:58
Это есть.
С технической точки зрения - мне просто сделать JSON?

Michael
27.02.2018
12:06:35
можно и в toml, не суть

Alexander
27.02.2018
12:08:02
Как часто надо будет править этот mapping
?

Vlad
27.02.2018
12:08:18
Структура, выходит, следующая:
{
"A.col1" : "B.col2",
"A.col2" : "B.col123",
}

Michael
27.02.2018
12:08:20
вопрос в том, какие агрегации и преобразования должны быть в ваших mapping'ах

Google

Vlad
27.02.2018
12:08:35

Michael
27.02.2018
12:09:09

Alexey
27.02.2018
12:09:13

Alexander
27.02.2018
12:09:20

Vlad
27.02.2018
12:10:12

Michael
27.02.2018
12:10:27

Vlad
27.02.2018
12:10:49

Alexander
27.02.2018
12:11:00

Michael
27.02.2018
12:11:04

Vlad
27.02.2018
12:11:18
Тогда подскажите, что сие есть за вещь?

Michael
27.02.2018
12:11:38
там strings.Split("..", ";")

Vlad
27.02.2018
12:12:10
Ага, у меня будет просто текстовый файлик с мэппингом.
Благодарю, подумаю над этим

Michael
27.02.2018
12:12:12
если вам нужно только соответствие А к Б полей

Vlad
27.02.2018
12:12:21
Да, все верно, только оно и нужно.

Alexander
27.02.2018
12:54:51
Они говорили это безопасно... они говорили вкладывайся в крипту....
А уже удалили))
А много ли тут кто пилит блокчейн проекты на go?

Alexey
27.02.2018
12:56:16

Alexander
27.02.2018
12:57:14

Serhio
27.02.2018
13:18:20

Google

Vladislav
27.02.2018
13:20:35


Атас
27.02.2018
13:23:39
ни у кого нет норм примера, как писать в unix socket и слушать с него респонс? Я уже всю голову сломал(((
sock := `/tmp/geth.ipc`
conn, _ := net.Dial("unix", sock)
method := `{...}\n`
num, err := conn.Write([]byte(method))
Write же возвращает количество записанных byte
может поможет
очень старый и простой код прокси из unixsocket в tcp, почти что первое что было написано на Go
даже не все ошибки обрабатываю, как сейчас смотрю, но работает уже 3 года даже не напоминает о себе
func main() {
num := runtime.NumCPU()
runtime.GOMAXPROCS(num)
log.Print("proxyls start")
// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":17835")
if err != nil {
log.Fatal(err)
}
defer l.Close()
for {
// Wait for a connection.
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
// Handle the connection in a new goroutine.
// The loop then returns to accepting, so that
// multiple connections may be served concurrently.
go func(tcp net.Conn) {
defer tcp.Close()
UA, err := net.ResolveUnixAddr("unix", "/var/spool/icinga/rw/live")
if err != nil {
log.Print(err)
return
}
unix, err := net.DialUnix("unix", nil, UA)
if err != nil {
log.Print(err)
return
}
defer unix.Close()
io.Copy(unix, tcp)
if err = unix.CloseWrite(); err != nil {
log.Print(err)
return
}
io.Copy(tcp, unix)
// Shut down the connection.
}(conn)
}
}
насколько я помню с юникс сокетами так:
1 конект к сокету
2 запись в него запроса/команды
3 закрытие сокета на запись
4 чтение до EOF из сокета
5 закрытие сокета полное
наскоолько припоминаю 3 пунк был важен, без него не мог прочитать ответ, по закрытию ввода определялось что он полностью завершен и можно отвечать, но возможно это фича конктетного софта необщая для всех уже не помню


Vadim
27.02.2018
13:24:37
может поможет
очень старый и простой код прокси из unixsocket в tcp, почти что первое что было написано на Go
даже не все ошибки обрабатываю, как сейчас смотрю, но работает уже 3 года даже не напоминает о себе
func main() {
num := runtime.NumCPU()
runtime.GOMAXPROCS(num)
log.Print("proxyls start")
// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":17835")
if err != nil {
log.Fatal(err)
}
defer l.Close()
for {
// Wait for a connection.
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
// Handle the connection in a new goroutine.
// The loop then returns to accepting, so that
// multiple connections may be served concurrently.
go func(tcp net.Conn) {
defer tcp.Close()
UA, err := net.ResolveUnixAddr("unix", "/var/spool/icinga/rw/live")
if err != nil {
log.Print(err)
return
}
unix, err := net.DialUnix("unix", nil, UA)
if err != nil {
log.Print(err)
return
}
defer unix.Close()
io.Copy(unix, tcp)
if err = unix.CloseWrite(); err != nil {
log.Print(err)
return
}
io.Copy(tcp, unix)
// Shut down the connection.
}(conn)
}
}
насколько я помню с юникс сокетами так:
1 конект к сокету
2 запись в него запроса/команды
3 закрытие сокета на запись
4 чтение до EOF из сокета
5 закрытие сокета полное
наскоолько припоминаю 3 пунк был важен, без него не мог прочитать ответ, по закрытию ввода определялось что он полностью завершен и можно отвечать, но возможно это фича конктетного софта необщая для всех уже не помню
спасибо!


Vlad
27.02.2018
13:25:00
Пока что не в моей компетенции указывать.

Атас
27.02.2018
13:25:54
спасибо!
спасибо это когда заработает :)
а пока еще не за что :)

Michael
27.02.2018
13:37:04

Vlad
27.02.2018
14:28:01
Пилим обычный веб.
Но Хрюши упорно зовут в блокчейн-проекты.

Alex
27.02.2018
14:46:44
Товарищи, привет!)
Подскажите, есть возможность сделать тег для json такой, чтобы работал только для unmarshal, а для marshal не работал? :)

John
27.02.2018
14:47:57

Alex
27.02.2018
14:48:29

Vasily Romanov
27.02.2018
14:49:41

Alexey
27.02.2018
14:50:06

John
27.02.2018
14:50:22
/me подает костыли

Igor
27.02.2018
14:52:48
/iqtest

Sergey
27.02.2018
14:53:56

Alex
27.02.2018
15:05:41

Admin
ERROR: S client not available

Google

Roman
27.02.2018
15:37:49
как правильно назвать протокол, основанный на ASCII тексте, но строго форматированный?
например:
[type(1)][id(32)][payload(...)]
т.е. какой термин обозначает данное понятие?

Ilya
27.02.2018
15:43:38

Alexey
27.02.2018
15:44:11
JustYetAnotherTextProtocol

Roman
27.02.2018
15:44:37
я думал может этому понятию какой термин существует)

Alexey
27.02.2018
15:45:19
4-й уровень в 4-х уровневой модели как называется, так и его можно назвать

Roman
27.02.2018
15:45:34
кстати нельзя данное назвать binary protocol?
ведь формат строго разбит на позиции байтов, даже если это ASCII

Alexey
27.02.2018
15:46:23
Application Layer Protocol ?
Вон как на SO пишут:
Binary protocol versus text protocol isn't really about how binary blobs are encoded. The difference is really whether the protocol is oriented around data structures or around text strings.
[type(1)][id(32)][payload(...)] - это как раз data structure

Roman
27.02.2018
15:49:16
ну вот тогда теперь всё ясно, Binary Protocol

Arch
27.02.2018
16:14:19
Народ, а в го же нет распаковки? У меня есть срез стрингов, надо их запихнуть в функцию которая которая принимает в виде аргумента (x ... interface{})

Aleksandr
27.02.2018
16:14:56
x...

Arch
27.02.2018
16:15:30
те передать мой срез как переменную и троеточие после нее?

Aleksandr
27.02.2018
16:16:08
да

Arch
27.02.2018
16:16:38
Ах, ты взболтать, но не смешивать(((((
обидная оплошность
have (string, string, []string...)
want (string, ...interface {})
Народ а можно стринг в интерфейс распаковать? каким - то спобом кроме итерирования среза фором и эпендом по одному элементу? https://play.golang.org/p/QOvTu98iPc-

Zver
27.02.2018
16:51:34

Google

Атас
27.02.2018
16:52:53

Arch
27.02.2018
16:57:19

Атас
27.02.2018
16:59:43
я видел что пример поправил...
посмотрим

Mykyta
27.02.2018
17:17:37

Zver
27.02.2018
17:18:51
Жаль(
Там цикл в две строчки, чего страдать. Если много раз надо, то сделайте фукцию. И лучше сразу выделать память под все элементы.