Как бороться с пхп в 2019 ? Правильно - ругать за отсутствие diversity.
The conference has been canceled and won't be continued. Sorry for the inconvenience (и дальше 3 ссылки с наездом).
https://2019.phpce.eu/en/
The conference has been canceled and won't be continued. Sorry for the inconvenience (и дальше 3 ссылки с наездом).
https://2019.phpce.eu/en/
На той неделе я жмакнул релиз одной либы на го и у меня упал билд. Так как в коде все обмазано unsafe то угадать причину было не сложно.
Вот код, который прост кастит кусок памяти под объектом из стдлиб к моему кастомному https://github.com/cristaloleg/sabotage/blob/master/once.go
Вот упавший билд с одним тестом (хотя на самом деле другие тоже неверны) https://travis-ci.org/cristaloleg/sabotage/jobs/575700353
И конечно же линия, меняющая порядок полей в структуре и соотв. меняющая их порядок в памяти, и соотв. мой spy-объект смотрит не на тот кусок памяти https://github.com/golang/go/commit/ca8354843ef9f30207efd0a40bb6c53e7ba86892#diff-5ec3d154401e5eb1017f8ce94b6b64f0R19
Теперь самое смешное: мне сегодня снилось(да, мне снится код), где я дебажил подобное, там кто-то поменял порядок полей, а структура инициализировалась без указания полей (аля
Короч, избегаем unsafe, ведь реально unsafe. Внезапно.
Вот код, который прост кастит кусок памяти под объектом из стдлиб к моему кастомному https://github.com/cristaloleg/sabotage/blob/master/once.go
Вот упавший билд с одним тестом (хотя на самом деле другие тоже неверны) https://travis-ci.org/cristaloleg/sabotage/jobs/575700353
И конечно же линия, меняющая порядок полей в структуре и соотв. меняющая их порядок в памяти, и соотв. мой spy-объект смотрит не на тот кусок памяти https://github.com/golang/go/commit/ca8354843ef9f30207efd0a40bb6c53e7ba86892#diff-5ec3d154401e5eb1017f8ce94b6b64f0R19
Теперь самое смешное: мне сегодня снилось(да, мне снится код), где я дебажил подобное, там кто-то поменял порядок полей, а структура инициализировалась без указания полей (аля
A{10, "kek"} вместо A{a: 10, b: "kek"})Короч, избегаем unsafe, ведь реально unsafe. Внезапно.
Недавно узнал одного разраба, с лычкой distributed engineer. Думаю: ооо, ща я из него инфу повытягиваю для чтения на выходных.
А нет, оказывается нжуно запустить stateless микросервис в двух дц и внутри намазать RoR дает возможность носить такой бейджик #саксес_сториз :(
А нет, оказывается нжуно запустить stateless микросервис в двух дц и внутри намазать RoR дает возможность носить такой бейджик #саксес_сториз :(
Какое-то время назад пару человек подкинули идею собрать айти-акронимы, и вот самые полезные. В коментах приветствуется дополнение)
LGTM — looks good to me
SGTM — sounds good to me (менее уверенное чем ЛГТМ, просьба еще кого-то подтвердить)
ACK — acknowledgement (дада, из TCP протокола)
NACK/NAK — negative acknowledgement
AFAIK / AFAIR / AFAICT — as far as I know / recall / can tell (3й вариант редко встречал)
IIRC — if I recall correctly
RTFM — Read the freaking/fuking/factory manual (да, чтобы вам меньше в коменты писать было)
WIP — work in progress (не мержить и возможно не делать ревью)
PTAL — please take a look (можно просто kindly ping)
RFC — request for comments (когда явно хочется коментов)
IANAL — “I am not a lawyer” (обычно речь про лицензию или копипасту откуда-то)
На эти особенно стоит обратить внимание. Возможно всех опишу отдельно, поэтому сейяас без пояснений-примеров:
DRY — do not repeat yourself
KISS — keep it stupid simple
YAGNI — you ain't gonna need it
YMMV — your mileage may vary
WET — write everything twice
AHA — avoid hasty abstractions
Просто полезное, но порой пугает людей:
s/foo/bar/ — replace foo with bar; this is sed syntax
s/foo/bar/g — replace foo with bar throughout your entire change
UPD:
OTOH — on the other hand
TBH — to be honest
YMMH — you might mean here
Источники, что я это все не выдумал:
https://github.com/golang/go/wiki/CodeReview
https://www.freecodecamp.org/news/what-do-cryptic-github-comments-mean-9c1912bcc0a4/
https://kentcdodds.com/blog/aha-programming
LGTM — looks good to me
SGTM — sounds good to me (менее уверенное чем ЛГТМ, просьба еще кого-то подтвердить)
ACK — acknowledgement (дада, из TCP протокола)
NACK/NAK — negative acknowledgement
AFAIK / AFAIR / AFAICT — as far as I know / recall / can tell (3й вариант редко встречал)
IIRC — if I recall correctly
RTFM — Read the freaking/fuking/factory manual (да, чтобы вам меньше в коменты писать было)
WIP — work in progress (не мержить и возможно не делать ревью)
PTAL — please take a look (можно просто kindly ping)
RFC — request for comments (когда явно хочется коментов)
IANAL — “I am not a lawyer” (обычно речь про лицензию или копипасту откуда-то)
На эти особенно стоит обратить внимание. Возможно всех опишу отдельно, поэтому сейяас без пояснений-примеров:
DRY — do not repeat yourself
KISS — keep it stupid simple
YAGNI — you ain't gonna need it
YMMV — your mileage may vary
WET — write everything twice
AHA — avoid hasty abstractions
Просто полезное, но порой пугает людей:
s/foo/bar/ — replace foo with bar; this is sed syntax
s/foo/bar/g — replace foo with bar throughout your entire change
UPD:
OTOH — on the other hand
TBH — to be honest
YMMH — you might mean here
Источники, что я это все не выдумал:
https://github.com/golang/go/wiki/CodeReview
https://www.freecodecamp.org/news/what-do-cryptic-github-comments-mean-9c1912bcc0a4/
https://kentcdodds.com/blog/aha-programming
как.все.просто.
(неплохой бложек на все темы. внимание много текста и есть политика)
(неплохой бложек на все темы. внимание много текста и есть политика)
oleg_log
Если вам посчастливилось жить с ПХП и/или хорошим монолитом тоже на ПХП - настоятельно рекомендую глянуть на phpgrep. Незаменимая тулза для грепанья пхп кода по паттерну (не просто регексп) Репо https://github.com/quasilyte/phpgrep Твит https://twitter.…
А вот и практическая часть использования phpgrep от Искандера!
Лайк-репост-колокольчик 🙌
https://habr.com/ru/post/464893/
Лайк-репост-колокольчик 🙌
https://habr.com/ru/post/464893/
Хабр
Ищем баги в PHP коде без статических анализаторов
Моя самая любимая часть в статическом анализе кода — это выдвижение гипотез о потенциальных ошибках в коде с последующей их проверкой. Пример гипотезы: Функции strpos легко передать аргументы в...
Решаю LeetCode и вылетает у меня решение, причем на очень странных данных - дереве из одного элемента 0, возвращается 42. Что же могло пойти не так?
Ответ немного очевиден: leetcode втупую гоняет юнит тесты, и (ВНЕЗАПНО, ага, ща) глобальную переменную я не переинициализирую. Короч -1 в статистику. Эх...
(задачка: https://leetcode.com/problems/binary-tree-maximum-path-sum/)
А еще для инициализации можно юзать
var maxValue = -1 << 31
func maxPathSum(root *TreeNode) int {
_ = maxPathSumAux(root)
return maxValue
}
func maxPathSumAux(node *TreeNode) int {
// ну тут короч решение :)
}
Ответ немного очевиден: leetcode втупую гоняет юнит тесты, и (ВНЕЗАПНО, ага, ща) глобальную переменную я не переинициализирую. Короч -1 в статистику. Эх...
(задачка: https://leetcode.com/problems/binary-tree-maximum-path-sum/)
А еще для инициализации можно юзать
math.MinInt32, но рефлексы асм-щика не переучить (дока https://godoc.org/math#pkg-constants)И каким же браузером вы пользуетесь с пк?
Anonymous Poll
48%
Chrome
7%
Chromium
28%
Firefox
1%
Opera
0%
Edge
1%
Vivaldi
9%
Safari
2%
Brave
0%
IE
3%
Other?
В скором времени все больше тулзов будет переходить на go/analysis, для более удобной работы с кодом на го. Смотрится неплохо, если раньше go/* пакеты были просто либами, то эта почти фреймворк, в хорошем смысле.
(Автор, пингани меня в лс плес)
(Автор, пингани меня в лс плес)
Forwarded from Lil Functor
Сегодня в маршрутке дувчушка лет 4-х спросила маму: «А если всем попросить Одерски, он закроет PR с отступами?»
С мамой плакала половина скалистов…
Одерски, выключи отступы!!!
С мамой плакала половина скалистов…
Одерски, выключи отступы!!!
it's wednesday my dudes 🐸
My full income progression from a career in tech as a full-time employee (writing code, individual contributor):
2008: €25K
2009: €30K
2010: €55K
2011: €75K
2012: $120K
2013: $155K
2014: $186K
2015: $230K
2016: $393K
2017: $467K
2018: $511K
*few tweets later*
Math was never my thing. I think it's safe to say that my math knowledge is limited to the level of basic arithmetic, fractions, and percentages. And I can't remember needing anything else throughout my career.
And neither was computer science my thing. The only sorting algorithm I can write is bubble sort. I learned a few data structures & some other CS concepts on the job, as needed, but I never had interest in CS research, unless it was very relevant to what I was working on.
As for programming, I'm only fluent in two languages: JavaScript and Java. And I only learned Java while working at Amazon. I have a superficial understanding of a handful other languages, but I feel I can pick up any language with only a modest effort.
https://twitter.com/dvassallo/status/1165815638276755457
My full income progression from a career in tech as a full-time employee (writing code, individual contributor):
2008: €25K
2009: €30K
2010: €55K
2011: €75K
2012: $120K
2013: $155K
2014: $186K
2015: $230K
2016: $393K
2017: $467K
2018: $511K
*few tweets later*
Math was never my thing. I think it's safe to say that my math knowledge is limited to the level of basic arithmetic, fractions, and percentages. And I can't remember needing anything else throughout my career.
And neither was computer science my thing. The only sorting algorithm I can write is bubble sort. I learned a few data structures & some other CS concepts on the job, as needed, but I never had interest in CS research, unless it was very relevant to what I was working on.
As for programming, I'm only fluent in two languages: JavaScript and Java. And I only learned Java while working at Amazon. I have a superficial understanding of a handful other languages, but I feel I can pick up any language with only a modest effort.
https://twitter.com/dvassallo/status/1165815638276755457
Мне кажется NodeJs пошло не по тому пути, когда в билде мы стали видеть:
../../nan/nan_converters_43_inl.h:22:1: warning: 'ToBoolean' is deprecated: ToBoolean can never throw. Use Local version. [-Wdeprecated-declarations]
/Users/oleg.kovalov/.node-gyp/12.1.0/include/node/v8.h:2523:3: note: 'ToBoolean' has been explicitly marked deprecated here
V8_DEPRECATE_SOON("ToBoolean can never throw. Use Local version.",
^
../../nan/nan_implementation_12_inl.h:103:42: error: no viable conversion from 'v8::Isolate *' to 'Local<v8::Context>'
Это конечно полезно знать, но какого черта я вижу сорцы v8 ?? Тут (возможно) стоит поругать авторов тестов и репо, что v8 пересобирается или что там они творят. Но в любом случае абстракции потекли :(
../../nan/nan_converters_43_inl.h:22:1: warning: 'ToBoolean' is deprecated: ToBoolean can never throw. Use Local version. [-Wdeprecated-declarations]
/Users/oleg.kovalov/.node-gyp/12.1.0/include/node/v8.h:2523:3: note: 'ToBoolean' has been explicitly marked deprecated here
V8_DEPRECATE_SOON("ToBoolean can never throw. Use Local version.",
^
../../nan/nan_implementation_12_inl.h:103:42: error: no viable conversion from 'v8::Isolate *' to 'Local<v8::Context>'
Это конечно полезно знать, но какого черта я вижу сорцы v8 ?? Тут (возможно) стоит поругать авторов тестов и репо, что v8 пересобирается или что там они творят. Но в любом случае абстракции потекли :(
Узнал одну историю от друга.
В большой фирме занялись учетом куки (тех самых, хттп). И все команды заставляли ох регистрировать в спец. реестре, чтобы можно было отчитываться о GDPR, ну и наказывать тех, кто не выполняет правила.
И вот одну печеньку искали 6 недель. Никак не могли найти виновника, кто докидывает скрипт для трекинга пользователей. Быстро-фикс был прост - затирать на ЛБ (cloudflare, а точнее их workers).
Потом правда скрипт нашли, но каким-то образом он не грепался или включался на странных этапах сборки, а может и руки были кривые. Такие вот дела.
Может у вас есть история проминдальное хттп пичекьки? (послушаю тут @olegkovalov)
В большой фирме занялись учетом куки (тех самых, хттп). И все команды заставляли ох регистрировать в спец. реестре, чтобы можно было отчитываться о GDPR, ну и наказывать тех, кто не выполняет правила.
И вот одну печеньку искали 6 недель. Никак не могли найти виновника, кто докидывает скрипт для трекинга пользователей. Быстро-фикс был прост - затирать на ЛБ (cloudflare, а точнее их workers).
Потом правда скрипт нашли, но каким-то образом он не грепался или включался на странных этапах сборки, а может и руки были кривые. Такие вот дела.
Может у вас есть история про
oleg_log
Из жизни замечательных людей: на тернарный оператор нужно 3 пропозала за полгода. Вот бы все эти потраченные серотонинные запасы на благое дело... https://github.com/golang/go/issues/33171 https://github.com/golang/go/issues/31659 https://github.com/gol…
хм, получается Ian сослался на мой комент про FAQ, жизнь с этого дня стала чуть приятнее.
Ах, да, исход этого "пропозала" немного очевиден.
Ах, да, исход этого "пропозала" немного очевиден.
Публичный метод вызывает другой публичный метод (оба в одном классе), это..
Anonymous Poll
20%
Даже не думал о таком, без разницы
56%
Нормально и ничего менять не надо
21%
Плохо и надо сделать через приватный метод
2%
Ща-ща я вам поясню в коментах