• Typegram — дзэн блог платформа
    0
    А что это?
  • Typegram — дзэн блог платформа
    0
    спасибо!
  • Typegram — дзэн блог платформа
    0
    да, картинки пока не переехали на https и автообновление сертификатов не настроено
  • Typegram — дзэн блог платформа
    0
    много переосмыслено
    — разделение контента по языкам
    — подписки на каналы
    — главная страница как пульт управления порталом а не поляна для рекламодателей /лендинг
    — раздельный рейтинг
    — динамический топ статей с пенальти по времени
    — отсутствие внешних зависимостей
    — минимальное использование скриптов
    — оригинальный алгоритм сжатия картинок вместо ленивой загрузки
    — минималистичный интерфейс
    — отсутствие привязки к почте, возможность создания юзернейма из одной буквы, оригинальный алгоритм паджинации, чтение статей в хронологическом порядке, я могу продолжать бесконечно, но смысл? Все вебстраницы в чем то похожи друг на друга.
  • Typegram — дзэн блог платформа
    0
    довольно много идей украдено у медиум, телеграм и телеграф
    немношко украдено с хакерньюс, немношко с реддит
    Из дзена не нашлось что украсть. Не то чтобы проект плохой, даже вел там канал какое то время. Но мне не нравится в нем ничего, кроме самой идеи автоматических рекомендаций. Но даже она реализована крайне посредственно.
  • Typegram — дзэн блог платформа
    0
    если инстаграм люлей не наваляет — то останется как есть, если наедет — придется переименовываться
  • Typegram — дзэн блог платформа
    0
    будет
  • Typegram — дзэн блог платформа
    0
    мне очень нравится этот проект
  • Typegram — дзэн блог платформа
    0
    можете скриншот полноразмерный закинуть кудать?
  • GUI на Golang: GTK+ 3
    0
    да, забыл, сори, когда смотрел пару лет назад таблицы были тоже зародыше
  • Typegram — дзэн блог платформа
    0
    отсутствием fullhd монитора)
  • GUI на Golang: GTK+ 3
    0
    Ваш пример на этой либе:

    image

    package main
    
    import (
    	"github.com/andlabs/ui"
    )
    
    func main() {
    	err := ui.Main(func() {
    		input := ui.NewEntry()
    		button := ui.NewButton("Greet")
    		greeting := ui.NewLabel("")
    		box := ui.NewVerticalBox()
    		box.Append(ui.NewLabel("Enter your name:"), false)
    		box.Append(input, false)
    		box.Append(button, false)
    		box.Append(greeting, false)
    		window := ui.NewWindow("Hello", 200, 100, false)
    		window.SetMargined(true)
    		window.SetChild(box)
    		button.OnClicked(func(*ui.Button) {
    			greeting.SetText("Hello, " + input.Text() + "!")
    		})
    		window.OnClosing(func(*ui.Window) bool {
    			ui.Quit()
    			return true
    		})
    		window.Show()
    	})
    	if err != nil {
    		panic(err)
    	}
    }


    отсюда: getting started
  • GUI на Golang: GTK+ 3
    0
    libui не рассматривали?
  • Typegram — дзэн блог платформа
    0
    делал такую кнопку в админском интерфейсе для чата сапорта магазина как то давно, помогало от флуда типа девушка-девушка и тп, но тут и проект с открытым кодом и интерфейс единый.
  • Typegram — дзэн блог платформа
    0
    пока думаю над этим, тут много морально этических сторон — к примеру я забанил и удалил одного пользователя с постом типа «абрвалг — какого хрена тут нельзя постить тексты без текстов?» — так он до сих пор за мной по всем соцсетям бегает, минусует.
    Есть некоторые безумные идеи сложно реализуемые технически. Типа автор может иметь возможность удалить комментарий к своему посту, так как пост как бы его — но чтобы человек чей комментарий удален — не знал об этом. Или кнопка развидеть все от определенного человека, если достал. Пока в бэкграунде вызревают какие то идеи, и про карму и про модерацию — но еще не вызрели
  • Typegram — дзэн блог платформа
    +1
    поддерживает
  • Typegram — дзэн блог платформа
    0
    Из гоу я работал с mysql (напрямую, было очень много проблем, особенно на старте) и с boltdb (проблем на старте не было совсем, но они пришли с ростом базы), свой опыт поверхностно излагал в этом комментарии: habr.com/post/354224/#comment_10775784

    Потом написал свою бд и собственно проблемы закончились, обзор на хабре — habr.com/post/354224
  • Typegram — дзэн блог платформа
    +1
    Если честно писал то я бэкенд для мобильного приложения. Потом решил добавить админку и немного увлёкся
  • Typegram — дзэн блог платформа
    0
  • Typegram — дзэн блог платформа
  • Typegram — дзэн блог платформа
    0
    Велосипедов и правда много, а вот есть ли в нем фатальный недостаток — пока непонятно.
  • 2048 запрещено. Не РосКомНадзором
    0
    давно уже дело было. Приложение называлось ivk — жуткое поделие на стандартных компонентах андроид уже не помню даже что оно делало. Повалил траф — инсталов по 500 в день. Быстренько подменил на другое приложение, нормальное — клиент для вконтакте, который писал на конкурс. Дошел до 500к инсталов с ним, пока не забанили за возможность смотреть какое то дебильное кино в нем и не снесли его и весь мой акк с десятком приложений впридачу. Денег срубить не успел, нерасторопный( Не ну что то капало — на бургер в день, но недолго. Тут вобщем как повезет — можно и лулзы извлечь, а можно и нет. Успехов! И да — давно финансового стриптиза от тебя не было — как сейчас живется мобайл девелоперам?
  • 2048 запрещено. Не РосКомНадзором
    +3
    Ну и тема это не новая
    Ниже мои бодания с снапчатом, который теперь Снап, за мою приложеньку свапчат (удалил — потому что туда кроме половых органов ничего не постили)

    Скоро хочу релизить typegram — предвижу бодания с инстаграм, которой теперь лицокнига
    Достали эти упыри из всех щелей лезут буквы копирайтят
  • 2048 запрещено. Не РосКомНадзором
    +6
    работает — не трогай
    повалил траф — разберись почему.
    Алгоритмы гугла неисповедимы, траф может политься начиная с хорошего отзыва/ревью, и заканчивая иконкой/ключевым словом которые вдруг с кем то/с чем то сматчились
    Деньги полились из-за названия, а не из-за игры
    Итого: зря переименовал, неудачник!
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    –2
    Респект! Но возможности:
    прочитать сообщения из хистори — начиная от заданного — нет
    персистить сообщения — в свою бд — нет
    апи — не продумано — ибо нет реальной необходимости со стороны пользователей
    А я тогда кто? В чем вообще цель поста если вы на фидбек так реагируете? Похвастаться пришли? Ну молодец!
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    Чтобы другие могли написать другой Engine — обычно дают интерфейс, а не ждут чего то
    Вот, смотрите пример как это делается: github.com/ipfs/go-datastore
    Или в эфириум движке пример. У вас очень странный подход к разработке, я уже понял
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    Если склонировать репозиторий то все internal зависимости, не прописанные в toml — не подтянутся, если я правильно понимаю dep. Но я не фанат dep, могу неправильно им пользоваться. Хорошей идеей как мне кажется было бы просто пройти этот путь и описать, как собирать, какой бренч девовский, какой рабочий c2/master/c2-published и тп Ну я думаю как до релиза доберетесь — рассосется. Только после релиза обычно уже поздно — и новый релиз, а процесс описывать лень и так по кругу)
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    –1
    Смотрю код, отличная работа!
    Но если Вы хотите получить грант от Мозилы — надо научиться работать с комьюнити. Нельзя просто выкладывать код и ждать когда его начнут развивать
    Люди — ленивы. Если вы юзаете dep -надо написать что вы его юзаете где его качать и как собирать. Если уж заюзали его — в toml файлы надо прописывать все зависимости, включая интернал с нужными путями. Либо выделять либы в отдельные репы. Если это либа и она не юзает прометеус какой ть — не надо заставлять его качать. Если вы в бренче работаете — надо написать в каком. Если вы хотите чтобы вам слали PR — встаньте на место того, кто захочет его слать. Клонируйте сами свою репу и попробуйте послать себе PR. Поймете что сделано не так. Не обижайтесь на критику я добра вам желаю и развития. Но пока это выглядит как пет проект не до конца доделанный (я про версию 2) Кругом путаница
    Просто посмотрите на другие популярные проекты, полно шаблонов и рекомендаций как организовать репозиторий и как все надо описывать. Пока, к сожалению — удобней спулить ваш код, разобраться и собрать под себя нужное — не вернув вам PR
    Удачи!
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    Я пони. Тем не менее сделать это кмк просто. Конечно речь не идет о том, чтобы хранить всю историю. Но так как она уже хранится за некий период возмоность ее чтения ничем не навредит. Тем более как Вы справедливо заметили в том же редисе сообщения персистятся.
    Пожелание: было бы здорово выделить библиотеку в отдельный репозиторий и навести порядок. Какая то полная каша с зависимостями, именованиями и бренчами центрифуг( Просто непонятно какие бренчи каких проектов клонировать в каой последовательности github.com/centrifugal/centrifuge/issues/8
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    Я завел ишью на github с конструктивным описанием функционала, думаю там удобнее будет обсудить целесообразность и возможность реализации метода для чтения истории непрочитанных сообщений: github.com/centrifugal/centrifugo/issues/228

    Просто по факту — вы говорите что я могу реализовать это сбоку, но в данный момент это невозможно. Я могу это реализовать только параллельно центрифуге. Без возможности синхронизации с ней( А хотелось бы просто уметь читать историю сообщений из кеша центрифуги.
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    а почему вы не дали никаких методов в апи для построения на базе центрифуги чего то большего чем рилтайм транспорт доставки? Это принципиальная позиция или просто не было подобных запросов?

    Вот смотрите, внутри центрифуги есть последний прочитанный уид в разрезе канал/клиент, как я понимаю
    — но вы не дали метода его считать
    — вы его не персистите для разрывов пока клиент зашел в метро как я понял, например
    — вы не дали ни метода считать историю начиная с непрочитанного сообщения, по партициям/страницам, ни количества непрочитанных сообщений
    Весь это функционал как бы есть (для кратковременных дисконектов, кстати насколько кратковременных? Секунда, сутки, это как то параметризируется?), но в апи — скрыт
    Почему так? Это просто как то очень странно. Может быть я могу как то помочь реализовать это или описать тз или еще как то. Или вам это неинтересно?
  • Centrifugo v2 — будущее сервера real-time сообщений и библиотека для Go
    0
    Не смог понять функционал по описанию(
    Допустим есть канал, правильно ли я понял:
    — если емкость канала равна 50 сообщениям, в канале будут храниться 50 последних сообщений, упорядоченных по времени
    — хранится ли где ть uid последнего прочитанного сообщения подписчиком, можно ли его получить и есть ли возможность считать unread count
    — Как помечать сообщения как прочитанные на клиенте, есть ли какой то апи метод для этого
    — Хранится ли эта инфа на сервере или отдается на откуп клиенту/бекенду
    По описанию, понятно что есть вебсокеты для рилтайм режима и события/уведомления о подключении/отключении и новом сообщении. Но совершенно не понял что происходит между сессиями и какие возможности дает библиотека. Простите если глупые вопросы.
  • slowpoke — не самая быстрая база данных
    0
    думал об этом, если честно — тупо не получилось транзакции привернуть. Вроде бы не самый сложный функционал, но когда полез в него — все оказалось сложнее
  • slowpoke — не самая быстрая база данных
    0
    Все верно прям на 100%. Полный хардкор. Гораздо проще написать чтоть типа gorm, unique и не париться)

    Сортировка есть всегда и для всех ключей, но только бинарная. Допустим, если нужна корректная целочисленная сортировка — необходимо конвертировать в bigendian:
    ```
    for i := 0; i < 40; i++ {
    id := make([]byte, 4)
    binary.BigEndian.PutUint32(id, uint32(i))
    }
    ```
    В примерах и тестах много примеров
    При извлечении указывается порядок:
    ```
    //open Db and read tags by prefix 2:* in ascending order
    tagsKeys, _ := slowpoke.Keys(tags, []byte(«2:*»), 0, 0, true)
    for _, v := range tagsKeys {
    fmt.Print(string(v) + ", ")
    }
    ```
    Следовательно если текстовое поле, например — можно извлечь все ключи начинающиеся с префикс* — но надо класть приведенными к нижнему регистру, например
  • slowpoke — не самая быстрая база данных
    0
    Я согласен. Это да, может создаться индекс «вникуда», проверки необходимо реализовать на уровне апликейшена, например: github.com/recoilme/golang-gin-realworld-example-app/blob/master/users/models.go#L108

    Если от этого «бомбит» — лучше взять БД в которой проверки реализованы на уровне БД. Но придется забыть о скорости и гибкости.

    А пример нужен затем — зачем вообще нужны примеры. Дать азы. Реальный медиум — будет слишком сложен для примера новичку, он просто запутается в коде. Поэтому и пишут такие дамми примеры для обучения.
  • slowpoke — не самая быстрая база данных
    0
    Если неконсистентность в том, что потратится единица счетчика, то да
    Но вообще я не рекомендую смотреть на примеры серии realworld.io, там очень до фига тупо за рамками здравого смысла. Практически все написано на отвали, чуваком который учит как писать, а не пишет. Начиная с апи. Это примеры. В реальной жизни я не буду запускать приложение на бекенде, делающее несколько запросов к БД на каждом запросе. Они тупо тупые. Если вы хотите боевой клон хабра, который «полетит» в reallife — я сейчас как раз пилю такой, на github.com/recoilme/tgram/tree/tgram
  • Malevich
    0
    возможно берется картинка из кеша
    там есть параметры управления кешом, и довольно гибкие, я бы попробовал включить для мелких мемори кеш, для крупных дисккеш, чтобы разделить кеши, но не уверен что дело в этом. сложно понять по описанию что происходит
    github.com/recoilme/malevich#advansed-usage
  • slowpoke — не самая быстрая база данных
    0
    Портировал бэкенд клона медиум на slowpoke
    github.com/recoilme/golang-gin-realworld-example-app

    Полностью выкинута реалиционная база данных и написан бэкенд. С индексами, many-to-many отношениями и прочим. Просто как демонстрация того, что на slowpoke можно написать что угодно.
  • NewSQL: SQL никуда не уходит
    +2
    Спасибо за статью, прочел огромным с удовольствием, хоть и не совсем согласен. Ряд категоричных утверждений например про: times series… под капотом сидит Postgres. Ну фиг с ним. Или вот, например, про Redis:
    Мы видим продукты, которые стали заложниками своей изначальной простоты, и они будут отваливаться, потихонечку уходить в небытие.

    Тут меня прям бомбануло, простите. Давайте на примере Тарантул. Я слышал что тарантул раньше использовал sophiadb. Это довольно простой движок по сравнению с текущим как я понимаю. Два года назад на тестовом стенде тарантул за неделю успел как потерять данные при записи (тут в драйвере скорее всего была ошибка, не стал разбираться), показал намного худшую производительность (точных цифр не помню, но прям со свистом, раз в 10 на записи и в пару раз вроде на чтение vs SophiaDb) И наконец развалиться без какой либо возможности восстановления. Плюс отсутствие возможности юзать как апликейшен сервер из-за лимитов луа по памяти, и получился полный проигрыш по всем фронтам. Вроде бы движок мощнее, а смысл? Мы вынуждены были написать свой сервер на sophiadb и за два года, не возникло ни одной проблемы на нем, хотя и нагрузка выше, и падения серверов пережила база. Хотя казалось бы, в нем нет и половины фич тарантула. И вот если с первой частью статьи я почти везде согласен, то чем дальше — тем страшнее. Не превратитесь в Кассандру, Тарантул, в погоне за фичами. ps: выбираем жене машину — хочет — чтобы она была — быстрая, большая, проходимая, и камера и парктроники, и спереди и сзади и чтоб пищала когда сбоку в мертвой зоне и чтоб не хенде всякие и не дороже хенде и не б/у конечно. Так и клиенты — они много чего хотят от субд, пока не поймут, что иногда лучше меньше
  • NewSQL: SQL никуда не уходит
    0

    После падения одной из год в кассандре, она отключается, и запросы, которые шли на данную году, перераспределяются на оставшиеся ноды. Падает следующая года и так, пока нод не останется. Как карточный домик она у нас складывалась, когда например падал самолёт, и трафик с подключены систем удваивался / утраивался.