• Разбираемся с новым sync.Map в Go 1.9
    +1
    вот бы подробностей что там под капотом
  • Go для больших данных
    +1
    Да вызов будет дороже, чем вызов гошной функции, но это не совсем тоже самое что cgo медленный. Медленным это будет при очень частом обращении к импортированным функциям и насколько это критично уже зависит от конкретной задачи.
  • Статистика по базовым операционным системам в образах на Docker Hub
    +1
    — debian
    — FROM scratch для go приложений
  • Как новичок в Go контрибьютил
    0
    была мысль что заинлайнил вызовы strconv.Itoa и разместил результат на стеке
    отличный результат на 1.9 надо переходить
  • Как новичок в Go контрибьютил
    0
    хотел придраться к тому что strconv.Itoa(size) вызывается дважды, но бенч показывает одну алокацию ))
  • Как новичок в Go контрибьютил
    +2
    точно, в глянул в оригинале, там повторное кодирование строки, если длина не та
    это ж пипец

    // formatPAXRecord formats a single PAX record, prefixing it with the
    // appropriate length.
    func formatPAXRecord(k, v string) string {
    	const padding = 3 // Extra padding for ' ', '=', and '\n'
    	size := len(k) + len(v) + padding
    	size += len(strconv.Itoa(size))
    	record := fmt.Sprintf("%d %s=%s\n", size, k, v)
    
    	// Final adjustment if adding size field increased the record size.
    	if len(record) != size {
    		size = len(record)
    		record = fmt.Sprintf("%d %s=%s\n", size, k, v)
    	}
    	return record
    }
    


    ps
    формат PAX record весьма неудачен, имха

    pps
    CL автора такие не принят
  • Как новичок в Go контрибьютил
    0
    будет баг нет?
    как я понял size так же учитывает и свою собственную длину в строковом представлении
  • Как новичок в Go контрибьютил
    0
    size := len(k) + len(v) + padding
    size += len(strconv.Itoa(size))
    record := fmt.Sprintf("%d %s=%s\n", size, k, v)

    а что будет, если len(k) + len(v) + padding = 99 ??
  • Практическое использование в Go: организация доступа к базам данных
    0
    Странным показался совет использовать x/net/context, но глянул на дату оригинальной статьи, для 15 года ок. Возможно, следовало добавить в сноску инфу по актуальному пакету.
  • Вышел Firefox 54, который наконец получил поддержку многопроцессного режима
    +1
    Хром последний проверил — после закрытия вкладок отдаёт память обратно.

    у хрома по процессу на вкладку, естественно память вернется при завершении процесса
  • Пошаговая настройка Apache с выбором версий php + Nginx как reverse proxy (с mod_pagespeed) на ubuntu 16.0.4
    +2
    apache php nginx
    уберите лишнее
  • Сравнение производительности версий PHP
    0
    подобные вещи я и имел в виду
    предположу, чтобы подобное реализовать, потребуется реализация HTTP на PHP и работа с удаленным сервером через сокет. дальше, наверное, потребуется асинхронная работа с диском, БД…
    на nodejs с этим проблем не будет
    можно использовать Go, но это тема для холивара )
  • Почему вам стоит изучить Go?
    +1
    По первому обзацу — не его ниша. Магазин не проблема, но зачем, их тыщи.
    По второму — все так.
  • Сравнение производительности версий PHP
    0
    Логичный вопрос — смена версии даст сильный прирост или нет?

    для вебсокетного сервиса на PHP по скорости вряд ли, по памяти точно

    Шутки не понял, если у меня сервер на php то мне будет сложно правильно использовать сторонние (но не невозможно само собой), а значит реализация именно серверной части с обслуживанием подключений и пользователей будет на php, гугл выдает с десяток реализаций.

    да не было никакой шутки
    да можно, решения есть, но при поддержке такого решения постоянно придется решать проблемы, которые давно уже решены.
    php-шнику на том же nodejs ws-сервис сделать не сложнее чем на php, если не проще. и экосистема там богаче в этом плане, это его ниша.
  • Почему вам стоит изучить Go?
    +2
    А мне не очень. API довольно таки скудный.
    Да, универсально, пул под капотом, потокобезопастность тоже…
    с другой стороны (это то что наболело)
    — пул плохо настраивается, макс кол-во соединений и макс. кол-во простаивающих соединений и все, а я бы хотел задать мин. кол-во простаивающих соединений, кол-во соединений при старте, чтобы не ждать пока соединение откроется
    — средств профайлинга нет. измерить время выполнения запросов можно и снаружи, а вот какие затраты были на установку соединения при вызове db.Query и были ли вообще — непонятно
    — следствия универсальности: нет доступа к спец. возможностям субд, нельзя получить из пула соединение. Даже если разработчик драйвера предоставит методы для работы с API, то надо предоставлять механизмы для создания соединений и отдельный пул, т.к. к стандартному доступа нет. А если такое случится, то нафига тогда database/sql/
    — с логированием, если ошибаюсь, тоже никак
  • Почему вам стоит изучить Go?
    0
    зависит от задачи
    мой ответ можно расценивать как расшифроку что понималось под фразой «4. Для работы с веб в Го достаточно стандартных пакетов из коробки.»

    зы
    не агитирую за го, но если конкретизируешь «полезную работу», может смогу что-то пояснить.
  • Почему вам стоит изучить Go?
    –2
    https://golang.org/pkg/net/http/
    https://golang.org/pkg/encoding/json/
  • Почему вам стоит изучить Go?
    0
    все верно
    $ go build
    $ ldd main
    linux-vdso.so.1 => (0x00007fffd4bf7000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc4679b7000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc4675f0000)
    /lib64/ld-linux-x86-64.so.2 (0x000055cfc4c89000)

    но, при определенных условиях это не так
    $ CGO_ENABLED=0 GOOS=linux go build -ldflags "-s -w" -a -installsuffix cgo
    $ ldd main
    не является динамическим исполняемым файлом
  • Почему вам стоит изучить Go?
    +1
    По мне так интерфейсы для работы с БД не очень.
  • Почему вам стоит изучить Go?
    –1
    Добавлю, что Go-приложение (при определенных условиях) может запускаться в докер-контейнере без ОС (FROM scratch).
  • Сравнение производительности версий PHP
    0
    Например реализация websocket сервера на php, будет ли она быстрее на php7/8/5? на те же 40%?

    шо, опять? ©
  • Интеграция Android-приложения с фискальным принтером и кардридером
    0
    какой-то странный у вас flow

    вполне распространенный вариант
    думаю что связано с тем, что в выходные/праздничные запросто может не быть нужного размера, а списать деньги а потом отправить клиента за возвратом как-то не очень
  • Подключение к FireBird из Python и мониторинг факта записи в БД
    0
    1. да FB не для веба, если веб на PHP
    2. про тупиковую не согласен
    3. зачем используете классик если у вас коротко живущие коннекты?
    4. тестировали ли FB 3?

    зы
    про 400 пользователей: что за железо?
    есть БД ежедневно 3k+ подключений, проблемы начинаются ближе к 4к
    причем есть основания полагать, что истинный корень проблемы в количестве соединений а в неправильной работе с транзакциями в некоторых АРМах
  • Создание web приложения на PHP с иcпользованием Firebird и Laravel
    0
    Из того что бросилось в глаза

    По умолчанию расширение Firebird/Interbase автоматически подтверждает транзакцию после выполнения каждого SQL запроса

    это не так, транзакция по умолчанию подтверждается только при закрытии соединения/завершении скрипта либо явно при вызове ibase_commit($dbh)

        ibase_execute($sth, $user[0], $user[1]);
        // Если произошла ошибка, бросаем исключение
        $err_msg = ibase_errmsg();
        if ($err_msg)
          throw new \Exception($err_msg);
    

    функции сообщают об ошибке возвращаемым значением, его и надо анализировать для проверки, а не дергать ibase_errmsg()

    Главное проклятие драйверописателей для FB/interbase (не только в PHP) — понимание специфики транзакций и работа с ними.
    Умолчательные параметры транзакции подходят для большинства случаев, и менять их параметры требуется очень редко. Дело в том что соединение с базой данных, как и все связанные с ним ресурсы существуют максимум до конца работы PHP скрипта. Даже если вы используете постоянные соединения, то все связанные ресурсы будут освобождены после вызова функции ibase_close.

    Имхо, лучше использовать подходящие параметры для каждого случая (чтение данных, изменение данных, построение отчетов), а не использовать параметры по умолчанию. Да это проще, но это плохо. Чем плохо давно разжевано на том же ibase.ru
  • Web-Оповещения в нагруженных проектах
    0
    Как reactphp ведет себя при 10 тыс соединений?
  • Asterisk и информация о входящих звонках в браузере
    0
    crm была в облаке (sfdc), в ней таких вещей не сделаешь, поэтому решение должно было хоститься на своих мощностях. По этой причине было больше свободы в выборе инструментов. PHP не рассматривали по вышеописанной причине, хотя 2 из 3х разработчиков пхппешники, третий — perl. Прототип на perl пхпешникам не вкатил )), попробовали на nodejs — покатило, даже без экспертных знаний в JS

    зы
    сейчас бы сделал на GO
  • Asterisk и информация о входящих звонках в браузере
    +1
    Несколько лет назад подобную задачу решали на nodejs. Не знаю как сейчас, но в тот момент экосистема nodejs для подобных сервисов была предпочтительнее.
  • Цифры растут: зарегистрирована атака в 620 Gbps
    0
    И чем всё это закончится…

    skynet?
  • 30 вредных советов для php-разработчиков
    +1
    не правда, вернее, не всегда
    результаты больших выборок обрабатывать массивом неоптимально, а порой невозможно
  • Книга про разработку приложений для Firebird
    0
    уже написаны 3 статьи по ADO.NET desktop, ASP.NET MVC и Delphi, в работе для PHP, Java, Android

    есть опыт работы с FB на PHP, было бы интересно почитать соответствующую статью
  • Небольшая особенность CHAR и VARCHAR
    0
    не связывался

    а зря
    говорите как будто это бяка какая-то ))
    весьма полезная штука

    автора за подобный код осуждаю
    $where .= ' AND provider = "'. $provider. '"';

    возможно, что там значение из предопределенного списка констант, и тем не менее
  • Небольшая особенность CHAR и VARCHAR
    0
    Думается, проблему бы решило

    $where = «providerUserId = '?'»;

    вы уверены что символ вопроса внутри строки будет воспринят как плейсхолдер?
  • Websocket в продакшене
    +3
    Нагрузка определяется не столько количеством соединений, сколько количеством сообщений. При асинхронной работе с соединениями держать большое кол-во открытых неактивных соединений не затратно. Все зависит от приложения, периодические сообщения по некоторым соединениям это одно, постоянный поток сообщений по всем или значительной части соединений это другое.

    WS хорош, но сложен в реализации.

    используйте готовое решение, вся сложность спрятана внутри.

    По поводу long-polling vs websocket: если только https — можно смело использовать websocket, иначе long-polling либо гибридные решения типа socket.io. В ws есть бинарные сообщения, в некоторых ситуациях это очень полезно.

    Есть опыт по транспорту котировок в браузер и моб.приложение. Каждому клиенту раз в секунду отправляется информация по изменившимся котировкам (до 50 штук). Первый прототип на node.js+socket.io на 2 тыс соединений на 100% грузил ядро. Были подозрения на избыточность протокола socket.io, раскопки показали что избыточность есть, но не такая значительная. Основной затык был в сжатии ws-фреймов, которое включено по умолчанию и через параметры socket.io не конфигурируется. В принципе хорошее решение для не интенсивного трафика.
    Второй и рабочий вариант сделали на чистых вебсокетах, сжатие отключено, данные пересылаются в бинарном виде (protobuf). За счет использования бинарного формата даже при отключенном сжатии удалось выиграть в объеме. Так же бинарный протокол позволил избежать повторного кодирования одних и тех же данных для разных клиентов, пакет собирается из готовых бинарных кусков. Результаты тестов: 5 тыс активных соединений при 25% загрузке ядра, трафик 75Mbps.
  • Websocket в продакшене
    –1
    Про оформление и поддержку был скорее сарказм…

    Зачем придумывать и героически преодолевать трудности? Да на php можно написать http-сервер, websocket-сервер. Но зачем? Когда есть готовые решения? пусть и на других платформах. Например, nodejs — event loop и http из коробки, реализации ws на выбор, и все это отлично работает + язык знакомый для вебразработчика. Или, например, go — тоже все есть, да, может язык и незнакомый, но эффективнее по по процессору и памяти.
  • Websocket в продакшене
    +4
    Спасибо за внимание, используйте на здоровье весь приведенный выше код (разумеется, я советую завернуть его в нормальные объекты, тут всё упрощено исключительно для понимания. Особенно callback на пришедший от пользователя frame советую сделать по-нормальному). Если вы будете использовать этот код, напишите пожалуйста где-то в коде «Спасибо Anlide и PhpDeamon».

    Ну так оформите нормально, опубликуйте код и документацию, поддерживайте, тогда вам скажут спасибо.
    А так — мыши и кактус
  • Хабрахабр ≥ 10 лет
    +7
    в статье упомянули про livestreet
  • Хабрахабр ≥ 10 лет
    +6
    С днем рождения, Хабр! Ты — ТОРТ!

    зы
    поддержу идею про фотографии
    было бы классно увидеть как это было
  • Доступ к базе данных Firebird из YII2
    0
    Согласен, совсем уж для «самых маленьких», часть касаемая настройки среды и подключения драйвера можно было смело опустить.
    То что в делфи использовался win1251 не обязывает использовать его в web, используйте utf8, сэкономите время в будущем.

    зы
    с чем связан переезд именно на пхп?
    Работа с fb через php не очень хорошая идея, в случае нагрузки, конечно. В fb создание соединения, особенно для classic, не дешево и под нагрузкой это будет съедать время + доп нагрузка на сервер БД. Предпочтительнее эту работу доверить сервису с возможностью поддерживать постоянное соединение с БД. Сервис можно написать на том же делфи, пусть он отдает данные по рест, либо напрямую в браузер либо через php.
  • Плохая «Весна» или как причины задержек искали
    –2
    после обнаружения долгого session_start при хранении сессий в файлах, надо искать долгоиграющий параллельный запрос от того же пользователя, очевидно же
  • Личные финансы — сохранить и приумножить
    +1
    А у ваших детей? У вас нет детей? А у вас точно не будет детей? Вы хотите сначала попробовать все в жизни и только потом заводить детей? Лично мое мнение: вырастить детей — лучшее что можно попробовать сделать в этой жизни. Если у вас есть возможность, постарайтесь не обрекать их на те же муки покупки своего угла. Тут мне вспоминается комментарии bat. Удачи тебе!

    Ничего себе у тебя память, коммент был написан 07.01.2010
    зы
    после каникул хозяева арендованной квартиры сказали что будут ее продавать
    еще через 1.5 месяца переехали в свою )