Кальянная программистов
я тоже пару-тройку месяцев назад общался с парнями Salebot, там мне интервьювер кинул участок кода с проекта где нужно было найти уязвимости и расшифровать что это такое. Не самое лучшее зрелище, я вам скажу Го код ревью сделаем? С собеса (Ruby, source): …
Через 5 мин делаем микрострим Руслан пошарит экран обсудим этот код
Ссылку в этот пост добавлю
https://t.me/programmers_hookah?livestream=f4efa12b666246e231
Ссылку в этот пост добавлю
https://t.me/programmers_hookah?livestream=f4efa12b666246e231
Telegram
Кальянная программистов
Стримы, срачи, видосы из Нью-Йорка 🇺🇸
Нежным не входить‼️ @programmers_hookah_chat
@beard_programmer
Нежным не входить‼️ @programmers_hookah_chat
@beard_programmer
Кальянная программистов
Через 5 мин делаем микрострим Руслан пошарит экран обсудим этот код Ссылку в этот пост добавлю https://t.me/programmers_hookah?livestream=f4efa12b666246e231
Telegram
Кальянная программистов
Стримы, срачи, видосы из Нью-Йорка 🇺🇸
Нежным не входить‼️ @programmers_hookah_chat
@beard_programmer
Нежным не входить‼️ @programmers_hookah_chat
@beard_programmer
Кальянная программистов
Го https://t.me/programmers_hookah?livestream=f4efa12b666246e231
Микросозвон все еще идет кста
Кальянная программистов
Немного апдейтов с поиском работы 🇺🇸 (Это отказы если че, я там на откликался штук 20-30 раз)
Для крыс 🐀 подкину контент а для нас - тему для расизма🇮🇳🇺🇸.
WHAT THE FUCK IS INDIA EXPERIENCE?
WHAT THE FUCK IS INDIA EXPERIENCE?
😁5🌚1🤣1
Кальянная программистов
я тоже пару-тройку месяцев назад общался с парнями Salebot, там мне интервьювер кинул участок кода с проекта где нужно было найти уязвимости и расшифровать что это такое. Не самое лучшее зрелище, я вам скажу Го код ревью сделаем? С собеса (Ruby, source): …
Руслан кстати этот код порефакторил с помощью богомерзких великолепных Монад
class MoveMessages
include Dry::Monads[:result]
include Dry::Transaction
MovementParams = Dry::Schema.Params do
required(:messages).filled { array? & min_size?(1) }
required(:x).filled(:integer)
required(:y).filled(:integer)
end
step :validate_params
step :fetch_messages
step :prepare_undo_data
step :find_connections
step :update_message_positions
step :update_connection_vertices
private
attr_reader :project, :movement_params, :messages, :connections_to_update, :for_undo
def initialize(project)
@project = project
@for_undo = []
@connection_ids = []
@connections_all = []
end
def validate_params(params)
validation = MovementParams.call(params)
if validation.success?
@movement_params = validation.to_h
Success(params)
else
Failure(validation.errors.to_h)
end
end
def fetch_messages(params)
message_ids = movement_params[:messages]
@messages = project.messages.where(id: message_ids)
verified_ids = @messages.pluck(:id)
Success(verified_ids)
end
def prepare_undo_data(verified_ids)
@for_undo = messages.map(&:attributes)
Success(verified_ids)
end
def find_connections(verified_ids)
@connections_to_update = MessageConnection.where(
"(message_a_id IN (?) OR message_b_id IN (?)) AND vertices != ''",
verified_ids,
verified_ids
)
@for_undo.concat(connections_to_update.map(&:attributes))
Success()
end
def update_message_positions(_)
x_offset = movement_params[:x]
y_offset = movement_params[:y]
messages.update_all("x = x + #{x_offset}, y = y + #{y_offset}")
@messages = project.messages.where(id: movement_params[:messages])
Success()
end
def update_connection_vertices(_)
x_offset = movement_params[:x].to_i
y_offset = movement_params[:y].to_i
connections_to_update.each do |connection|
next if connection.vertices.blank?
vertices = JSON.parse(connection.vertices)
new_vertices = vertices.map do |vertex|
{
x: vertex["x"].to_i + x_offset,
y: vertex["y"].to_i + y_offset
}
end
connection.update(vertices: new_vertices.to_json)
end
Success(
messages: messages,
connections: connections_to_update,
undo_data: for_undo
)
end
end
# Usage:
# result = MoveMessages.new(project).call(params)
# if result.success?
# # Handle success
# else
# # Handle failure
# end
👍 🥲 🙈
👎2
Кальянная программистов
Руслан кстати этот код порефакторил с помощью богомерзких великолепных Монад class MoveMessages include Dry::Monads[:result] include Dry::Transaction MovementParams = Dry::Schema.Params do required(:messages).filled { array? & min_size?(1) } …
Это все тот же наркоманский код, но без степов и монад и собачек со стейтом.
Теперь это наркомария с вайбами голанга и эликсира.
Теперь это наркомария с вайбами голанга и эликсира.
class ValidatedParams
private_class_method :new
attr_reader :messages, :x, :y
def self.build(messages:, x:, y:)
case [messages, x, y]
in [Array => m, Integer, Integer] if 1 <= m.size then
[:ok, self.new(messages: , x:, y:)]
else
[:error, 'Bad input'] # Lazy error
end
end
def initialize(messages:, x:, y:)
@messages, @x, @y = messages, x, y
end
end
module MoveMessages
extend self
def call(project, params)
res = ValidatedParams.build(*params)
return res if res in [:error, *]
res => [:ok, validated_params]
res = fetch_messages(project, validated_params.messages)
return res if res in [:error, *]
res => [:ok, messages]
res = fetch_connections_to_update(messages.pluck(:id))
return res if res in [:error, *]
res => [:ok, connections_to_update]
undo_attributes = messages.map(&:attributes) + connections_to_update.map(&:attributes)
res = update_messages(messages, validated_params)
return res if res in [:error, *]
res = fetch_messages(project, validated_params.messages)
return res if res in [:error, *]
res => [:ok, messages]
res = update_connection_vertices(connections_to_update, validated_params)
return res if res in [:error, *]
[
:ok,
messages: messages,
connections: connections_to_update,
undo_data: undo_attributes
]
end
private
def fetch_messages(project, ids)
[:ok, project.messages.where(id: ids).load]
end
def fetch_connections_to_update(verified_ids)
[
:ok,
MessageConnection.where(
"(message_a_id IN (?) OR message_b_id IN (?)) AND vertices != ''",
verified_ids,
verified_ids
).load
]
end
def update_messages(messages, validated_params)
x_offset = validated_params.x
y_offset = validated_params.y
return [:error, "WTF"] unless messages.update_all("x = x + #{x_offset}, y = y + #{y_offset}")
[:ok, nil]
end
def update_connection_vertices(connections_to_update, validated_params)
x_offset = validated_params.x
y_offset = validated_params.y
connections_to_update.each do |connection|
next if connection.vertices.blank?
vertices = JSON.parse(connection.vertices)
new_vertices = vertices.map do |vertex|
{
x: vertex["x"].to_i + x_offset,
y: vertex["y"].to_i + y_offset
}
end
connection.update(vertices: new_vertices.to_json)
end
[:ok, nil]
end
end
def Usage
# Usage:
result = MoveMessages.call(project, params)
case result
in [:ok, value]
# Handle success
in [:error, message]
# Handle failure
else raise StandardError "WTF"
end
end
👍🙈
🙈6👍1
Третий раз за последнюю неделю с разными пацанами в разговоре Талеб всплывает, давайте ссылку оставлю на его сборник.
https://azbooka.ru/serie/taleb-kollektsiia-incerto
Слышал кто про Талеба?
https://azbooka.ru/serie/taleb-kollektsiia-incerto
Слышал кто про Талеба?
Azbooka.ru
Талеб: коллекция Incerto – все книги серии | Азбука-Аттикус
Талеб: коллекция Incerto – все лучшие книги серии. Книжные новинки и бестселлеры российских и зарубежных авторов! Найдите свою книгу на официальном сайте издательств «Азбука», «Иностранка», «Махаон», «КоЛибри».
[ENGLISH]
Наткнулся на этого чувака “when your friend is a salesman” и не могу перестать смеяться 🤣
Я теперь понимаю что чувствуют некоторые мои друзья при общении со мной🙈
@netWorkStorm @sdaaaaaaasad «Отлично, понял тебя! А что ты имеешь в виду под словом Мышление?»
Does that sound about right?
Наткнулся на этого чувака “when your friend is a salesman” и не могу перестать смеяться 🤣
Я теперь понимаю что чувствуют некоторые мои друзья при общении со мной🙈
@netWorkStorm @sdaaaaaaasad «Отлично, понял тебя! А что ты имеешь в виду под словом Мышление?»
Does that sound about right?
Утро в хату. Как надо вкатываться а АйТи? (Анон)
Final Results
17%
С универа
5%
С курсов
17%
Со стажировки
24%
С мидла
7%
С Джуна
19%
Надо вкатываться в курьеры
12%
Я крыса, ща солью твою ссылку в Зилс 🐀🇯🇵
О чем я в сторис говорил - в общем я попал на особоый такой маркетплейс авито по услугам для рекрутеров.
Название не даю, тк я возможно систему сломал чтобы туда попасть.
Бомжам криптанам не надо облегчать жизнь.
Зацените ребят, вот так рекрутеры заходят на эту биржу и смотрят кого им кому можно продать и почем.
PS ну а я ща пойду это исследовать чтобы себе работу искать
Название не даю, тк я возможно систему сломал чтобы туда попасть.
Зацените ребят, вот так рекрутеры заходят на эту биржу и смотрят кого им кому можно продать и почем.
Куплю фронтендера синьора за 10% + печеньки.
PS ну а я ща пойду это исследовать чтобы себе работу искать
😁5🌚1
Кальянная программистов
О чем я в сторис говорил - в общем я попал на особоый такой маркетплейс авито по услугам для рекрутеров. Название не даю, тк я возможно систему сломал чтобы туда попасть. Бомжам криптанам не надо облегчать жизнь. Зацените ребят, вот так рекрутеры заходят…
Блин реально, куда я попал лол, какой-то скрытый клуб жидомассонов?
PS обратите внимание господа я это сообщение отправил без спама вам пуш уведомлением!
PS обратите внимание господа я это сообщение отправил без спама вам пуш уведомлением!
😱8🌚1😭1
Кальянная программистов
Утро в хату. Как надо вкатываться а АйТи? (Анон)
Закрываю опрос. Резолюция нашей кальянки - или идешь в айти мидлом или не идешь в АйТи вовсе.
😁6
Media is too big
VIEW IN TELEGRAM
We don’t need perfect code. We need deliverables.
It’s not rocket science (c)
Маверик-хаккатон-точка-ио
Согласны?
👍5
СТРИМ СУББОТА 23:00 МСК GMT+3
Код-ревью ака разбор тестового задания на Golang.
Что?
Стрим с онлайне код ревью тестового задания Go бекенд.
Когда?
Суббота 3 мая 23:00 МСК GMT+3
Сколько?
Не оч долго, самое тестовое небольшое. А дальше афретпати для желающих, открытый микрофон все как мы любим. Классический микро-стрим.
Где?
Здесь, в телеге.
Че по крысам? 🐀
Крысы приветствуются, как и хомяки и прочие твари.
Зачем?
Потому что надо.
СТРИМ СУББОТА 23:00 МСК GMT+3
СТРИМ СУББОТА 23:00 МСК GMT+3
СТРИМ СУББОТА 23:00 МСК GMT+3
Придешь? 👇
Код-ревью ака разбор тестового задания на Golang.
Привет друзья. Давно стримов не было, а тут как раз выходные и как совпало - мой товарищ сделал тестовое задания на Go разраба для одной конторы и попросил чекнуть. Я решил сделаем в формате стрима онлайн код ревью.
Что?
Стрим с онлайне код ревью тестового задания Go бекенд.
Когда?
Суббота 3 мая 23:00 МСК GMT+3
Сколько?
Не оч долго, самое тестовое небольшое. А дальше афретпати для желающих, открытый микрофон все как мы любим. Классический микро-стрим.
Где?
Здесь, в телеге.
Че по крысам? 🐀
Зачем?
Потому что надо.
СТРИМ СУББОТА 23:00 МСК GMT+3
СТРИМ СУББОТА 23:00 МСК GMT+3
СТРИМ СУББОТА 23:00 МСК GMT+3
Придешь? 👇
❤5⚡1👍1