Много-много лет назад пытался устроится в mail.ru. Хотя я уже тогда был наслышан от коллег историй какая это гнилая компашка, но все равно как-то не верилось и решил испытать судьбу.
Пришел к ним на собеседование, сначала пообщался с жизнерадостной девочкой из HR, затем пришел хмурый технический специалист, позадавал вопросы и затем дал тестовое задание на Python. Точное задание не помню, но было что-то связанное с обработкой текста. Решать его нужно было на бумажке.
Задание я решил, на мой взгляд, простым и элегантным способом за счет того, что Python сравнивает строки в лексикографическом порядке, о чем и сообщил интервьюеру. Он явно удивился и высказал сомнение по поводу логики сравнения строк в Python, но задание принял.
Я уже было решил, что хорошо справился с собеседованием и работа у меня в кармане, но тут буквально ввалился эффективный менеджер, даже не представившись или хотя бы поздоровавшись, развалился в кресле и выложил передо мной бумажку с каким-то графиком и сразу спросил: "Вот тут нам известны 3 точки, как ты найдешь остальные?". Я немного опешил от этого, но ответил что-то вроде "аппроксимирую значения". Он: "Ну напиши формулу для x,y произвольной точки на графике". Я взял листочек и с минуту тупил, не совсем понимая что от меня хотят. И тут этот эффективный менеджер так же внезапно вскакивает и не говоря ни слова уходит. Занавес.
На следующий день мне перезвонила девочка из HR и рассказала, что их менеджер хотел услышать от меня фразу "среднее значение" и что я не способен решать задачи, а могу только кодить уже готовые решения. И что для такой мартышкиной работы у них есть вакансии, но за меньшую зарплату чем я запрашивал. На что я ответил, что с такими людьми я не стал бы работать даже за вдвое большую зарплату.
В итоге, я благодарен тому менеджеру, что открыл мне глаза и не позволил допустить такую ошибку как устроиться в mail.ru. Уже через несколько недель я работал в потрясающей международной компании за зарплату вдвое выше, чем предлагала мне эта шарашкина компания и с очень классными людьми.
Совершенно не спорю с этим. Более того, ваш подход к решению может быть весьма интересным. Критика вашей статьи же заключается совершенно в другом, в том что содержание статьи во многом не соответствует действительности. А именно:
Вы утверждаете, что это библиотека, хотя ничего общего с библиотекой это не имеет и, в отличии от той же утилиты выше, не является production ready.
Создаете впечатление, будто это утилита на чистом JavaScript/TypeScript, хотя на самом деле это обертка для кода на Rust.
Утверждаете, что ваше решение самое быстрое, но не приводите сравнительного исследования скорости работы вашего решения и других готовых решений.
Сам подход достаточно интересный и может быть действительно полезным, но я бы на вашем месте назвал статью, например: "Как Rust помог значительно ускорить NodeJS" и сделал бы акцент именно на использовании Node-API в Rust и как это можно использовать в своих приложениях с другими библиотеками на Rust. Думаю, что тогда бы рейтинг статьи был бы весьма в плюсе :)
Вы понимаете значение слова "natively"? Это когда вы можете взять ваш "TypeScript" скопировать в браузер и он будет работать. У вас же в зависимостях бинарные библиотеки, а соответственно он никак не сможет работать в браузере и мало чем отличается от подхода "просто запустить консольную утилиту с аргументами".
Но тут погрешность даже в 100% не изменит вывода - моя xlsx2csv самая быстрая в мире для Typescript. . Кстати, Вы хорошо ли знаете питон и раст? Если да, можете помочь?
Только не для TypeScript, а для NodeJS. А нету их, скорее всего, по тому что на сервере проще сконвертировать файл через консольную утилиту наподобии этой чем тащить в ноду еще один пакет на 3 строчки кода.
Examples называются именно examples, потому что демонстрируют работу с самой важной частью библиотеки, но преднамеренно игнорируют пограничные случаи, обработку ошибок, валидацию и прочие важные аспекты ради простоты кода.
Если бы вы сказали, что написали пример работы с Node-API, то было бы честнее. Хотя для примера у вас слишком много кода и слишком мало пояснений и комментариев.
Такое впечатление, что оригинальный пост писали исключительно с целью остановить поток людей в Остин. Других причин писать такие глупости я не вижу.
Все знают, что в Техасе жарко, как и в Калифорнии. Я и мои знакомые айтишники думали, что с этим у нас проблем не будет. Но оказалось, что в Остине еще и влажно! Тут выпадает на 90% больше осадков, чем в Портленде.
Я три года прожил в Портланде и больше 5 в Остине. Одна из причин переезда были именно бесконечные дожди.
Что такое дожди в Портланде? Это когда у тебя круглый год 24/7 днем и ночью серая морось. То-ли дождь, то-ли нет - не понятно. И так постоянно.
Что такое дожди в Остине? Это когда у тебя летом все время солнце, а отом бац! и за полчаса вылилась стена воды, как за целый месяц, а затем опять солнечно. Зимой хуже, да, но зимой и температур таких нету.
И потом странно, чтобы такое писал человек из Сан Франциско. Средняя влажность в Сан Франциско:
Average relative humidity in San Francisco, the United States of America
И средняя влажность в Остине:
Average relative humidity in Austin, the United States of America
если дома нет кондиционера, постоянно потеешь.
Что, простите? Этот человек точно был в Остине? Написать подобное, это все равно, что сказать: "если у вас нет воды, то вы будете хотеть пить" или "если у вас нет еды, то вы будете постоянно голодными".
Дело в том, что наличие кондиционера в Остине - это не роскошь, а жизненная необходимость. Также как, например, обогрев домов на Дальнем востоке. По этому кондиционеры есть абсолютно везде, даже уличные общественные туалеты всегда с кондиционерами. По этому найти дом без кондиционера - это задачка крайне не простая.
Воздух в целом менее свежий, потому что до океана тут 250 километров.
Песчаные пляжи, каньоны, тропы вдоль ручьев — всё это кому-то принадлежит. Много земли огорожено колючей проволокой, знаками «Не входить». Даже ручьи и реки находятся в частной собственности, если захочешь подойти к ним на природе — зачастую вход платный.
Тоже не правда. Практически везде есть доступ и к хайкингу, и к речкам/озерам. Не везде бесплатно, да, зто везде чисто, безопасно и с удобствами в виде парковок и туалетов.
В пределах 90 минут езды находится памятка штата, Зачарованная скала, Enchanted Rock. Но если попытаешься выбраться туда в выходные, тебя встретит 3-километровая пробка, а на месте негде припарковаться.
Логично что в час пик в популярных местах будет много народу. Решение - приходите не в час пик, или приходите пораньше, или приходите в менее популярное место.
Я нанял ремонтников, чтобы закончить работы, но те сломали мне двери, а потом об этом не сообщили. Я обнаружил это только когда приехал в штат, и пришлось нанимать другую компанию, чтобы починили двери.
Эта проблема называется немного по другому. Это не "всюду обман", а это называется "соседство с Мексикой". Это действительно проблема. Зато если вы русский, который умеет сам все делать на совесть, то скорее всего проблем с поиском работы у вас не будет.
Проявлений нашлось много, но удивила в том числе нетерпимость ко всем калифорнийцам, «понаехам».
Я не калифорниец, так что не могу тут объективно судить, но в свой адрес от американцев грубость не слышал, наверное, ни разу. Может дело в человеке, а не месте проживания?
Карательные, милитаристские школы
У меня самого нет детей, но от детей друзей я знаю, что местные школы, например:
Кстати, в данном случае можно было бы без мьютекса обойтись.
func main() {
var ben = &Ben{"Ben"}
var jerry = &Jerry{"Jerry"}
var maker IceCreamMaker = ben
ch := make(chan IceCreamMaker, 1)
defer close(ch)
var loop0, loop1 func()
loop0 = func() {
ch <- ben
go loop1()
}
loop1 = func() {
ch <- jerry
go loop0()
}
go loop0()
for {
select {
case m := <-ch:
maker = m
default:
maker.Hello()
}
}
}
Это только полбеды. Здесь гонка сразу в трех местах: при записи в loop0 и loop1 и при чтении в цикле. Даже если мы синхронизируем изменение maker мы все равно будем иметь туже самую проблему.
Упрощенно этот пример можно было бы переписать следующим образом:
package main
import (
"fmt"
)
type Ben struct {
name string
}
func BenHello(b *Ben) {
fmt.Printf("Ben says, \"Hello my name is %s\"\n", b.name)
}
type Jerry struct {
name string
}
func JerryHello(j *Jerry) {
fmt.Printf("Jerry says, \"Hello my name is %s\"\n", j.name)
}
func main() {
var ben = &Ben{"Ben"}
var jerry = &Jerry{"Jerry"}
var maker interface{} = ben
var loop0, loop1 func()
loop0 = func() {
maker = ben
go loop1()
}
loop1 = func() {
maker = jerry
go loop0()
}
go loop0()
for {
switch m := maker.(type) { // <--- очевидно, что эта операция
case *Jerry:
JerryHello(m) // <--- и эта
case *Ben:
BenHello(m) // <--- не атомарны
}
}
}
Между проверкой типа maker и вызовом JerryHello/BenHello значение maker может поменяться, даже если мы защитим loop0/loop1 мьютексом. Очевидно, если мы заменим указатель значением, то ничего не поменяется и switch никуда не уйдет. Полагаю, что примерно тоже самое происходит и с интерфейсом.
При всём уважении к Кранку, его творения не сравнятся ни с Космическими рейнджерами, ни с King's Bounty...
Спорное утверждение. Лично для меня Вангеры и Космические рейнджеры находятся примерно на одном уровне.
Космические рейнджеры потрясают своим геймплеем и текстовыми квестами, а Вангеры своим уникальными миром, сюжетом и звуковыми треками. Но обе игры по своему прекрасны.
Да, досадно, что эта MMO-подделка затмила действительно стоящую игру.
Я до сих пор помнить-помнить, как я играть-играть в первая часть. Там я встретить-встретить гоблина, который когда говорить-говорить, то все глаголы повторять-повторять два раза всегда.
Много-много лет назад пытался устроится в mail.ru. Хотя я уже тогда был наслышан от коллег историй какая это гнилая компашка, но все равно как-то не верилось и решил испытать судьбу.
Пришел к ним на собеседование, сначала пообщался с жизнерадостной девочкой из HR, затем пришел хмурый технический специалист, позадавал вопросы и затем дал тестовое задание на Python. Точное задание не помню, но было что-то связанное с обработкой текста. Решать его нужно было на бумажке.
Задание я решил, на мой взгляд, простым и элегантным способом за счет того, что Python сравнивает строки в лексикографическом порядке, о чем и сообщил интервьюеру. Он явно удивился и высказал сомнение по поводу логики сравнения строк в Python, но задание принял.
Я уже было решил, что хорошо справился с собеседованием и работа у меня в кармане, но тут буквально ввалился эффективный менеджер, даже не представившись или хотя бы поздоровавшись, развалился в кресле и выложил передо мной бумажку с каким-то графиком и сразу спросил: "Вот тут нам известны 3 точки, как ты найдешь остальные?". Я немного опешил от этого, но ответил что-то вроде "аппроксимирую значения". Он: "Ну напиши формулу для x,y произвольной точки на графике". Я взял листочек и с минуту тупил, не совсем понимая что от меня хотят. И тут этот эффективный менеджер так же внезапно вскакивает и не говоря ни слова уходит. Занавес.
На следующий день мне перезвонила девочка из HR и рассказала, что их менеджер хотел услышать от меня фразу "среднее значение" и что я не способен решать задачи, а могу только кодить уже готовые решения. И что для такой мартышкиной работы у них есть вакансии, но за меньшую зарплату чем я запрашивал. На что я ответил, что с такими людьми я не стал бы работать даже за вдвое большую зарплату.
В итоге, я благодарен тому менеджеру, что открыл мне глаза и не позволил допустить такую ошибку как устроиться в mail.ru. Уже через несколько недель я работал в потрясающей международной компании за зарплату вдвое выше, чем предлагала мне эта шарашкина компания и с очень классными людьми.
Думаю что использование русской локали - это единственное решение. Возможно поможет Locale Emulator чтобы не менять ее глобально.
Совершенно не спорю с этим. Более того, ваш подход к решению может быть весьма интересным. Критика вашей статьи же заключается совершенно в другом, в том что содержание статьи во многом не соответствует действительности. А именно:
Вы утверждаете, что это библиотека, хотя ничего общего с библиотекой это не имеет и, в отличии от той же утилиты выше, не является production ready.
Создаете впечатление, будто это утилита на чистом JavaScript/TypeScript, хотя на самом деле это обертка для кода на Rust.
Утверждаете, что ваше решение самое быстрое, но не приводите сравнительного исследования скорости работы вашего решения и других готовых решений.
Сам подход достаточно интересный и может быть действительно полезным, но я бы на вашем месте назвал статью, например: "Как Rust помог значительно ускорить NodeJS" и сделал бы акцент именно на использовании Node-API в Rust и как это можно использовать в своих приложениях с другими библиотеками на Rust. Думаю, что тогда бы рейтинг статьи был бы весьма в плюсе :)
Вы понимаете значение слова "natively"? Это когда вы можете взять ваш "TypeScript" скопировать в браузер и он будет работать. У вас же в зависимостях бинарные библиотеки, а соответственно он никак не сможет работать в браузере и мало чем отличается от подхода "просто запустить консольную утилиту с аргументами".
Зачем ей root? Это такой же бинарник как у вас на github.
Только не для TypeScript, а для NodeJS. А нету их, скорее всего, по тому что на сервере проще сконвертировать файл через консольную утилиту наподобии этой чем тащить в ноду еще один пакет на 3 строчки кода.
Examples называются именно examples, потому что демонстрируют работу с самой важной частью библиотеки, но преднамеренно игнорируют пограничные случаи, обработку ошибок, валидацию и прочие важные аспекты ради простоты кода.
Если бы вы сказали, что написали пример работы с Node-API, то было бы честнее. Хотя для примера у вас слишком много кода и слишком мало пояснений и комментариев.
Если бы она везде стоила $3, то может быть и не было бы такого ажиотажа вокруг.
Понятное дело, что с песчаными пляжами Флориды мало что сравнится. Тем не менее Калифорния - это куда большая пустыня, чем Техас.
Такое впечатление, что оригинальный пост писали исключительно с целью остановить поток людей в Остин. Других причин писать такие глупости я не вижу.
Я три года прожил в Портланде и больше 5 в Остине. Одна из причин переезда были именно бесконечные дожди.
Что такое дожди в Портланде? Это когда у тебя круглый год 24/7 днем и ночью серая морось. То-ли дождь, то-ли нет - не понятно. И так постоянно.
Что такое дожди в Остине? Это когда у тебя летом все время солнце, а отом бац! и за полчаса вылилась стена воды, как за целый месяц, а затем опять солнечно. Зимой хуже, да, но зимой и температур таких нету.
И потом странно, чтобы такое писал человек из Сан Франциско.
Средняя влажность в Сан Франциско:
И средняя влажность в Остине:
Что, простите? Этот человек точно был в Остине? Написать подобное, это все равно, что сказать: "если у вас нет воды, то вы будете хотеть пить" или "если у вас нет еды, то вы будете постоянно голодными".
Дело в том, что наличие кондиционера в Остине - это не роскошь, а жизненная необходимость. Также как, например, обогрев домов на Дальнем востоке. По этому кондиционеры есть абсолютно везде, даже уличные общественные туалеты всегда с кондиционерами. По этому найти дом без кондиционера - это задачка крайне не простая.
https://www.iqair.com/us/usa/texas/austin
https://www.iqair.com/us/usa/california/san-francisco
Тоже не правда. Практически везде есть доступ и к хайкингу, и к речкам/озерам. Не везде бесплатно, да, зто везде чисто, безопасно и с удобствами в виде парковок и туалетов.
Логично что в час пик в популярных местах будет много народу. Решение - приходите не в час пик, или приходите пораньше, или приходите в менее популярное место.
Эта проблема называется немного по другому. Это не "всюду обман", а это называется "соседство с Мексикой". Это действительно проблема. Зато если вы русский, который умеет сам все делать на совесть, то скорее всего проблем с поиском работы у вас не будет.
Я не калифорниец, так что не могу тут объективно судить, но в свой адрес от американцев грубость не слышал, наверное, ни разу. Может дело в человеке, а не месте проживания?
У меня самого нет детей, но от детей друзей я знаю, что местные школы, например:
Учат детей программированию на Scratch
Учат собирать и программировать вот таких вот роботов. При этом наборы школы предоставляют сами.
Учат питону в Minecraft Edu
Это все хоть и не противоречит словам автора, но тем не менее как-то слабо сочетается с "карательными, милитаристскими школами", на мой взгляд.
И тут опять город виноват? Т.е. в любом другом городе такой проблемы возникнуть не может?
[humor]Тем не менее, с целью статьи я согласен. Не переезжайте в Техас, нам тут и без вас хорошо :D[/humor]
Вообще-то в "пустынном" (который на самом деле полон зелени) Техасе есть Мексиканский залив, в котором можно купаться с мая по октябрь включительно.
Вы, возможно, удивитесь, но в Остине весьма не маленькое русскоязычное комьюнити. И нет, американцы как раз очень вежливо относятся к русскоговорящим.
Кстати, в данном случае можно было бы без мьютекса обойтись.
Это только полбеды. Здесь гонка сразу в трех местах: при записи в
loop0
иloop1
и при чтении в цикле. Даже если мы синхронизируем изменениеmaker
мы все равно будем иметь туже самую проблему.Упрощенно этот пример можно было бы переписать следующим образом:
Между проверкой типа
maker
и вызовомJerryHello
/BenHello
значениеmaker
может поменяться, даже если мы защитим loop0/loop1 мьютексом. Очевидно, если мы заменим указатель значением, то ничего не поменяется и switch никуда не уйдет. Полагаю, что примерно тоже самое происходит и с интерфейсом.Впрочем это легко проверить.
Синхронизируем только запись: https://go.dev/play/p/KJrxnbf6pB9
Результат:
Не помогло. А если синхронизировать только чтение? https://go.dev/play/p/DIcbbDLZPVL
Тоже не помогло.
Последняя попытка, объединяем оба кода: https://go.dev/play/p/PLucwu_K25t
Вот только теперь работает как надо.
Покупаете любой самый дешевый VPS с SSH доступом и локально в терминале выполняете команду:
Все. Ваш собственный секьюрный SOCKS прокси готов, можно подключатся к нему по адресу
localhost:8099
. Ничего настраивать или устанавливать не надо.PS Это должно работать и в Windows 10/11, т.к. там предустановлен OpenSSH.
Спорное утверждение. Лично для меня Вангеры и Космические рейнджеры находятся примерно на одном уровне.
Космические рейнджеры потрясают своим геймплеем и текстовыми квестами, а Вангеры своим уникальными миром, сюжетом и звуковыми треками. Но обе игры по своему прекрасны.
-- Докажите, что этот треугольник равнобедренный
-- Мамой клянусь, что равнобедренный!
Вы совершенно правильно поняли мою мысль
Тогда нужно вообще запретить A тег в HTML, а то можно же и так сделать: https://github.com/kubernetes/kubernetes/archive/refs/tags/v1.27.1.zip
Кроме того, в Google Chrome и Firefox, если навестись на такую ссылку, то он отобразит только
https://v1271.zip
без страшной левой части.Так что, мне кажется, что проблема тут вовсе не в TLD
Да, досадно, что эта MMO-подделка затмила действительно стоящую игру.
Я до сих пор помнить-помнить, как я играть-играть в первая часть. Там я встретить-встретить гоблина, который когда говорить-говорить, то все глаголы повторять-повторять два раза всегда.