Метка «golang» - 2

Люблю Go, люблю его хвалить (бывает даже, привираю слега), люблю о нем статьи. Прочитал статью “Go: Два года в продакшне ”, потом комменты. Стало понятно, на хабре — оптимисты! Хотят верить в лучшее.
Читать полностью »

В недалекие времена, когда flickr ещё не предлагал терабайт под хранение фотографий, а BitTorrent Sync только вышел на экраны интернета в своей небезопасной альфа-версии, была у меня потребность: делиться фотографиями с друзьями и не только. Но как обычно у программистов это бывает, под словом «делиться» стоит гораздо больше, чем выложить фоточки во ВКонтактик. А именно:

  • Выложить куда-нибудь фотографии на свой сервер с красивым и простым web-интерфейсом.
  • Просто и массово заливать и скачивать оригиналы изображений.
  • Иметь возможность разграничить доступ к определенным альбомам.
  • Попытаться связать это с локальным сетевым хранилищем, чтобы не дублировать фотографии.
  • По возможности удалять оригиналы фотографий с сервера через какое-то время и оставлять только фотографии с измененным размером.
  • По-максимуму бесплатно! :)

После таких мыслей в голове начинает зарождаться идея: «Надо накреативить...» — и ты уже не можешь остановиться.
Читать полностью »

в 9:14, , рубрики: daemon, golang, linux, метки: , , ,

Около года назад мне понадобилось написать linux демона, реализующего небольшой сетевой сервис. В то время я активно изучал Go и мне очень нравился этот язык, поэтому взвесив все за и против я решил реализовать задачу на нем. К тому же, Go уже был стабильным и имел версию 1.0.1.

О том, с какими подводными камнями мне пришлось столкнуться, читайте под катом, но сразу оговорюсь: я буду описывать только тонкости реализации демона на Go. Если вы слабо представляете что такое «демон» или как демонизируется процесс, сначала стоит об этом почитать, поискав в гугле или на хабре «linux daemon» или пройдясь по списку ссылок в конце статьи.
Читать полностью »

Добрый день, Хабрахабр.
Вы, вероятно, знакомы с JMeter. Если в кратце — очень удобный инструмент для проведения нагрузочного тестирования, имеет огромный функционал и много-много полезных фишек. Но статья не о нем.

С чего началось

В нашем проекте есть довольно нагруженный узел, JMeter помогал долгое время. Проффилирование и оптимизации дали свой профит, но все уперлось в маленькую проблему. JMeter не мог создать очень большой трафик, а если более точно, то после 10 секунд нужного нам режима, происходил OutOfMemory и тестирование прекращалось, в некоторых случаях проблемы не было, но скорость отправки запросов заметно уменьшалась, при этом загрузка CPU — 400%, решалось перезапуском программы. Пользоваться было крайне не удобно.
Итак, мы имеем проблему, и ее нужно решить, первое, что пришло в голову — сделать свой мини-тест, отвечающий минимальным требованиям. Давно было интересно попробовать Go на вкус. Так родилось приложение go-meter. При написании возникало очень много вопросов, ответов на которые либо не было, либо они не объясняли проблему, поэтому я решил поделиться опытом и примером рабочего кода, если Вам интересно, прошу подкат.
Читать полностью »

В данной статье хочу рассказать про реализацию системы единого входа на форумы “Сети Знаний”.

Входные данные. Имеется система форумов вопросов и ответов, движок которых написан на Python. Каждый форум — это отдельное веб-приложение со своей базой данных. Все форумы работают из одних исходников.

Задача. Реализовать возможность входа пользователей на форумы, на которых они еще не зарегистрированы, по имеющимся данным с другого форума.Читать полностью »

В предыдущей статье (http://habrahabr.ru/post/178963/) я рассказывал как работать с базой данных на Go. В комментариях к посту мне посоветовали посмотреть две библиотеки ORM.

Вообще, если говорить о работе с базой данных в Go, то самым простым способом будет представление структуры данных в виде массива или словаря. Сериализация в этом случае будет очень простой, но работа с такими типами данных в коде не выглядит привлекательной. Конечно, можно добавить обертки и т. д, но если посмотреть на архитектуру любого подобного решения, то так или иначе вырисовывается ORM.

В обеих предложенных библиотеках я не нашел всего необходимого функционала. Читать полностью »

На прошлой неделе я вместе с несколькими моими коллегами учавствовал в громкой речи о том факте, что Go обрабатывает ошибки в ожидаемых сценариях посредством возвращения кода ошибки вместо использования исключений или другого схожего механизма. Это довольно спорная тема, потому что люди привыкли избегать ошибки с помощью исключений, а Go возвращает улучшенную версию хорошо известной модели, ранее принятой несколькими языками — включая C — при которой ошибки передаются через возвращаемые значения. Это значит, что ошибки маячат перед глазами программиста и вынуждают иметь с ними дело все время. Кроме того, спор переходит в направление того факта, что в языках с исключениями каждая ошибка безо всяких дополнительных действий несет в себе полную информацию о том, что и где произошло, а это может быть полезно в некоторых случаях.Читать полностью »

Еще в преддверии прошлого нового года родилась у меня одна сумасшедшая идея: новогодний батл «Деда Мороза» и Санта-Клауса, но волей судеб проект так и не удалось запустить, хотя домен был куплен, а проект был практически готов. Прошел год, появилось чуть-чуть свободного времени и я решил все-таки довести сайт до ума и пустить в свободное плаванье.
Читать полностью »

У меня — 'cd'.

Хожу по папкам часто и начал замечать, что даже автодополнение не спасает. Тогда я начал искать возможные способы упрощенной навигации в консоли.

Но должны же быть решения!

В моей любимой оболочке zsh есть такая возможность — «разворачивание» путей по нажатию <Tab>: например, "/u/in/sy" -> "/usr/include/sys/"

В остальных оболочках можно приноровиться и использовать $CDPATH или pushd/popd, но лично мне это до сих пор кажется неудобным.

А еще есть пара утилиток для ускоренной навигации. Самая известная из них, пожалуй, autojump. Она следит в каких папках пользователь проводит больше всего времени и позволяет указывать только фрагмент пути к папке. Например «incl» приведет вас в "/usr/include", если вы там часто бываете.

Autojump вдохновила другого разработчика на создание утилиты «z». «Z» использует в качестве критерия для перехода т.н. «frecency» — комбинацию частоты посещений папки (frequency) и времени последнего перехода туда (recency).

Обе утилиты хороши по-своему, и я так бы и пользовался autojump или z, однако что-то мне не давало покоя. А недавно я услышал одну фразу:

If the product is used as a tool, its interface should be as unintelligent as
possible. Stupid is predictable; predictable is learnable; learnable is usable.

И тут я понял что самое время придумать свой велосипед. Не-intelligent. Тупой и удобный.Читать полностью »

В этой статье я постараюсь кратко и емко рассказать что такое горутины, когда стоит их использовать, какое отношение они имеют к системным потокам, а так же как работает планировщик.

Что за горутины?

Горутина (goroutine) — это функция, выполняющаяся конкурентно с другими горутинами в том же адресном пространстве.

Запустить горутину очень просто:
go normalFunc(args...)

Функция normalFunc(args...) начнет выполняться асинхронно с вызвавшим ее кодом.

Обратите внимание, горутины очень легковесны. Практически все расходы — это создание стека, который очень невелик, хотя при необходимости может рости.

Сколько вешать в граммах?

Чтобы было проще ориентироваться, рассмотрим цифры полученные опытным путем.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js