Pull to refresh
286
Karma
0
Rating
Юрий Насретдинов @youROCK

Программист, в основном на Go

Встраиваем Lua в PHP через FFI

Ждем кросс-JIT между PHP FFI JIT и LuaJIT с инлайнингом и прочим.

Книга «Go: идиомы и паттерны проектирования»

Это не исключения :). Это обработка ошибок с помощью фичи языка под названим «возврат нескольких значений из функции». Поэтому синтаксис кажется странным.

Книга «Go: идиомы и паттерны проектирования»

Молодцы, что написали статью! Не уверен, что я бы стал на вашем месте рекомендовать эту книгу. В приведенных отрывках кода довольно много недочетов, которые лично мне бросились в глаза:

   err := req.ParseForm()
   if err != nil {
      rw.WriteHeader(http.StatusInternalServerError)
      rw.Write([]byte(err.Error()))
      return
   }

Здесь сразу несколько проблем:

  1. Если не удалось распарсить форму, то это не Internal Server Error. Почти во всех (или вообще во всех) случаях ошибки, которые может вернуть ParseForm, возникают из-за недопустимого формата запроса, например как вот тут

  2. Есть отдельный метод http.Error, который намного компактнее позволяет записывать возврат ошибки в HTTP обработчике: https://pkg.go.dev/net/http#Error

  result, err := logic(ctx, data)
   if err != nil {
      rw.WriteHeader(http.StatusInternalServerError)
      rw.Write([]byte(err.Error()))
      return
   }

Точно также, здесь если логика вернула ошибку, она не обязательно (но может быть) связана с тем, что что-то пошло не так на стороне сервера. Код логики должен либо дополнительно возвращать нужный HTTP код ошибки, либо возвращать такой тип ошибки, в котором также содержится HTTP статус-код.

req, err := http.NewRequest(http.MethodGet,
                                        "http://example.com?data="+data, nil)

Данные в запросе должны экранироваться, лучше всего с помощью структуры url.Values и метода Encode()

defer resp.Body.Close()
       if resp.StatusCode != http.StatusOK {
   return "", fmt.Errorf("Unexpected status code %d",
   resp.StatusCode)
   }

Очень распространённая ошибка: тело запроса не вычитывается до конца, если произошла ошибка (не в смысле, что метод .Do() вернул ошибку, а что сервер ответил, но с HTTP кодом отличным от 200. В этом случае (если тело запроса не прочитано) соединение с сервером будет закрыто и keep-alive для соединения не будет работать. Это становится важно, когда запросов к одному и тому же серверу выполняется много: могут даже закончиться исходящие порты на сервере, который отправляет запросы.

err := callServer(ctx, "fast", fastURL+"?error="+errVal)

Аналогично, нет экранирование значения

Golang-дайджест № 14 (1 – 28 февраля  2022)

Потом значит потомки такие читают архив Хабра за 2022 год и происходит следующий диалог:

  • Папа, папа, почему новость вроде нормальная, но комментариев к ней нет, даже про дженерики в го, ведь это такая большая новость? И что у гофера с лицом?

  • Не знаю, сынок, давай посмотрим, что происходило в эти дни в мире

  • А, вот оно как, оказывается... Понятно

Go и плагины

В каком-то смысле должны быть. Собрать приложение на Go с использованием бинарных пакетов больше не выйдет: эту возможность, насколько я помню, относительно недавно выпилили (https://github.com/golang/go/issues/28152 ?). В целом вся система сборки построена вокруг сборки из исходников.

То есть, да, есть плагины, и можно, конечно же, собрать своё приложение из исходных кодов, которые не в опенсорсе, но при этом это всё равно будет сборка из исходных кодов, а не бинарников.

Эта статья показывает, насколько Go, в общем-то, практически принуждает всё делать с открытыми исходниками, за счёт отсутствия стабильного ABI :)

Подключаем RDP-клиента Windows к MacOS

Как производительность? Потому что у macOS есть какое-то особое расширение VNC-протокола, которое динамически подбирает качество JPEG, или что-то такое, и в итоге даже когда выполняются полноэкранные анимации или меняется большое количество всего на экране одновременно, производительность почти не падает, но, конечно, за счёт более низкого качества картинки, пока идет перерисовка.

Интересно, как с этим дела обстоят у xRDP. По моему опыту ничего подобного там нет, к сожалению.

Ускоряем hugo на 20% простым изменением в пакете reflect

Честно говоря, ни разу не очевидно, что MethodByName() имеет сложность O(N), и, видимо, для большинства других программистов на Go, даже для таких крупных проектов, как Hugo, тоже. Спасибо за статью и за патч! Поставил плюсик issue

Apple анонсировала M1 Pro и M1 Max: гигантские новые SoC на архитектуре ARM с полной производительностью

Вот кстати вопрос, надо ли это вообще делать. Ибо даже в Max процессоре всего 8 высокопроизводительных ядер, и этого достаточно для подавляющего большинства задач, даже для профессиональной работы. Всё остальное намного эффективнее делать на отдельных ускорителях, те же нейронки или кодирование/декодирование видео. Так что, может, и не будет никакого аналога по количеству ядер Xeon'у, и всё равно его производительность для всех Pro задач будет сильно выше, чем у текущих Mac Pro.

VMware обещает выпустить гипервизор для Apple M1 до конца года

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

То же самое и с VMWare Fusion: если у них не было десктопного продукта для мака, хоть и может не самого классного, то может и серверные решения стали бы выглядеть менее солидно.

Заметки KPHP: тестирование и бенчмарки

Кстати у KPHP, оказывается, есть телеграм канал: https://t.me/kphp_chat

C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse. Доклад Яндекса

Спасибо за ответ!

Я имел в виду, пользуетесь ли вы где-то фактом того, что вам не нужны удаления во многих случаях, и дает ли это какой-то измеримый выигрыш по сравнению с другими реализациями?

C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse. Доклад Яндекса

— Вы продаете хэш-таблицы?
— Нет, только показываем
— Кросивое...


Спасибо большое за текстовый вариант статьи!
Хотел бы спросить, Вы как-нибудь пользуетесь тем фактом, что у Вас нет удалений из хэш-таблицы, и если да, влияет ли это как-то на производительность, и есть ли такие оптимизации у Гугловых опенсорс библиотек?

Parallels Desktop 17: новые возможности для Apple M1, Intel, Windows 11 и macOS Monterey

А какой в этом практический смысл? Винда ведь есть уже нативная под ARM, и я лично сомневаюсь, что интел приложения под полностью виртуализированной интел виндой будут работать быстрее. Особенно если Microsoft научится использовать total store order режим памяти на Apple Silicon процессорах.

Дежавю: или кажется, программистов снова выставили на мороз

Только сейчас осознал: ведь правда, удаленка это как раз способ для "10х" программистов действительно получать 10х зарплаты относительно своих "1х" коллег: достаточно устроиться на пропорциональное количество работ удаленно и показывать там достаточно успехов, чтобы не выгнали, и вуаля! С точки зрения морали и своей репутации это так себе вариант, так что в долгосрочной перспективе Вы скорее всего проиграете с таким подходом, но ведь мысль забавная.

Трудные коллеги

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

И именно поэтому так сложно найти программистов :)? Потому что каждый умеет код писать, а вот работать с людьми (возьмите любого из сферы обслуживания, скажем, официанта, там, думаю, нужно много с людьми общаться и уметь это делать хорошо :)) — это вообще никому не дано... :)

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

Мой уход из Яндекса, как не потерять мотивацию за полгода подготовки в FAANG и реджект в Google

По поводу задачек на собеседовании в Гугле: вроде как просят задачи в общий доступ не выкладывать же :). Тем, кто Вас собеседовал, придется теперь новые задачки придумывать. А так вроде всё правильно написали :).

Ну и впечатляет конечно Ваше усердие при подготовке. Я лично перед собседованием в Гугл на подготовку практически забил и меня всё равно взяли :). Наверное, если бы готовился, то может быть фидбек был бы и лучше. Впрочем, на собесах тех, кто проводит интервью учат, как определять, что человек видит какую-то задачу не в первый раз и предлагают менять условия задачи или давать другую прямо в процессе, так что в теории подготовка в виде решения похожих задач должна помогать только с тем, чтобы развивать алгоритмическое мышление. Которое, кстати, не очень часто нужно, и намного важнее в продакшн коде обработка ошибок, правильное логирование, и т.д., но это уже тема для отдельного разговора:).

Современные Unix программы

И обязательно цветным выводом! (хотя, сказать честно, я лично не считаю это плюсом)

Измеряем расходы на память у Postgres процессов

Я надеялся, что в статье упомянут /proc/<pid>/smaps, /proc/[pid]/pagemap или подобное (https://man7.org/linux/man-pages/man5/proc.5.html), но к сожалению нет. Вероятно, репортинг памяти самим постгресом (спасибо переводчику) будет более полезен, чем измерение системными средствами, по крайней мере в текущих реалиях. А жаль.

Как убить в себе самозванца

Вообще никогда не сомневаться в себе ничуть не здоровее, чем чувствовать себя самозванцем. Более того, во втором случае Вы хотя бы профессионально развиваетесь всё время...

Как переоптимизация и переспам влияют на трафик в Яндексе

То есть что, спустя 20 лет существования поисковики наконец-то действительно добились того, что самый лучший вариант поисковой оптимизации — это писать годный контент без поискового спама..?

Information

Rating
Does not participate
Location
London, England - London, Великобритания
Date of birth
Registered
Activity