Pull to refresh
105
0
Евгений Артюхов @jsirex

User

Send message

ой, забыл баян fail2ban, но сути не меняет

TLDR: ssh-keys, sudo, реклама, реклама, логи

Я, конечно, придираюсь, но по условию задачи: "из модуля целого числа n, значение которого может быть любым.", ни один вариант не сработает.

Если там любое, то надо вручную делать или искать правильную библиотеку.
Мне кажется для n = 2279007645453668185114145017513291003363507376616747250010693268623618900370615223998230373477662798335387558274762466365590308838731515811545774503949731972631284542006011254134497909588634455497504486214901024791690722437814790305562844247909532606475014860127053661792793223737910263835915079641001665595452148438273694513739205723331570590842028858688718328845934385802036584155636192354632446998878765497341852127128236912871931393650301018320873342552317012698279875731872640788602798499233565280815130171441147599977981554071506099072164929885670189777720034232522447520753055317561993108010462102156844418522781920979301723483921948236611800085636497253920378486699154258819383911534593038835702980114562066729102412119085962672834866452456030583185667068242596611513523148081786765483315162726085439790331411121974026454104161781128451532959798313772364666631057918648568653801022636407560627870205011283765982512302325433496335639484203654707273074785576598429947063024937751015507313755680261709874747687884708864554794990919390452807733351906515730261926677772808823512818916586137867277739309645421805434953431929661700806190510321304546525463662865011945065756453538615193145845925778465437839293905557820706454703490621576738120805958086585776017271570727945431675143155135458359552417215636899160553305613621475150567033610297610408722465970900788921024525630103187134091101273034459647683103396471781903474564902632628364924168946165725545014435775773374831485661065186945415938719820418846060757455657726924791396656119606433578932105165628696111811767009835942482239807833371479151711830530097294037724941531118055305256126681020982524058422384355659176035631057509252749088243938027240552678125737950293291418055461954706091188694999485175234914509275658772153549144909039318260674471516239196142831166905848694714421981021278072416837597251360111375939527923817956303583202518417792122065207034206968043850386457590399815336725986765937307055053685428547549210596608911464464745812075513046568738468271550691880818952830650999260675832904192795897057799813505952458289136204483141154550476888818200884635774416898746145031194825426504264133595358947446866326604670476298065506111343144120467897524174191538840429924810287342651810538032577496153905267490265128835050343301032604814483211012843771561650999726134660870017146371344855229786830620432302066362204218196030712048897948501793649196267689974276014579566317714192856175785991956222305881924053353789722633325756917536638890347225201592686949789351212944040432329250710252440642128714416090370898602268645631425735168714362648309220753657432762541721649704506745712631022814266448119780497269827489016777465773222222852437718785218887936199844798592016867327853506163407877140732136937117453243175556476672413221428725562861827277343232771973104539396946485270908010140281592142675085401661696156882365053436405229225965570645629909675022843234578208516175070436744841742660423821345061745632993263619564546904488229917713302009128651897930648261609398769492265091754718190350762720918649558547125879009545293852125120132610112029882084240351229100255684951874981579671264801786193618714821759804764934718347152586648508529498699309528332078392134590052120116393901825234526649538456730512006656508949360922120592552358485610475576856728020668251257990875471433159539462683087437764273143903201746903245495189410912757244704009583045603522245228768485831097849510150536154827412229302926139791899404993371017291393026711773989046093356147984894607175406313387961678342802449772383878032772017015985720080692670534767681526828983439680733116267644447458269711297186802683293222727690413831103038332829520382247773568094971224838176431136911133439462014380423959398042165085655322962407566862579857274044991198485610809837996190005393641929075238177368950373857288824816768385578941697506831772626111997863413448214908509223813135528848739737668012216334067217544862740765907099597344902033712008000480981504919131056975416628544666336855857702752724523944494812781649199546340646023185064372035310593071866625967735409027108679544431084015573672607975533529024553402891121470089322636922423603180599528683031795447749816922887554773699546805960211531966476702464665947383269339284289544085979555094359084364970100080384301907781823856821392171724270131752557760400799717801841452716345146267128733121632255160392699001696100645081778490031867798842331164300948067430321877903030566825858730163633642365002726626414246616689515627727399790682109395141624401727059784066748664608857765805303542604789734306475959660113499665012759390055623947952695626006862683528016099069351681136433232001215851383703313531341198852019445235886574962664662366296556087415081621811700280113346202581350963625213538925053664267655346179758007874416300896789426608348046340542636750618793451170851646919221674994974354621555859758701003387106640039035249976304233673723197518924470043693745058972708044295570476429306277765113153982229830291854677346967842728074596706492133161080759032629381122107706299911796747691688922247061167909540085151565392617363658509965857634402805002940901103221845607229300933529236569962107794595617713602015526941343476749049246561293852889583175504881136387556327966487261384477023449228523711911497401014104200335513883200105557516963607204156050143859894566045281129688184219429028450930355617326810028820527985017687743051765979512865704272563763123139417597945444680043521748558780705528631192001225494701374076495210141153674266270254782981579775618825343099947844836024679649498512000819967670553785226054923764872020692214860446429580227637844762298053259058655983201746284232747242263633607088690563110935135601106953780030312250696225985284198531233635166614982149467223081972225549781364803490510555421054107157652187701891238610062851814958179552414107211826984910221873310409596863447447930984567456201048382145380918029014783311753952713883459499240252282863100754098338596817718012916876596902036988369660259486258605123539649945399367819287754790903318181008142646929939329517383473776890837270305878851271664741625993276815330051116109773452128314229729904442687289509967113918948939310425975507572848289358942229531681000927964546284980286682133378878933715483348857330558772322407784871044307345967691626942701714800572625029556610408807237838818856210344525427818054641257363091703536922701074476600670005810035563444933258948710648016132472337445258215862976437420786093570641925522697144349486173870219406405941254541944117232328686340876429476499944324593375343976841663652883905294848476321788358858245142532520095678485405803473450535649263688652304541692594657941305007948812532945904234517211969783715390594349581516233769639321212466921505465398443234894181155144366348509433942210710316495961141044727410249417736321018367906819594608832003919143246847894809513705908831180901205613406582133370453369311269099567451663546115399159751067831651680648142600370612308746535039164082520905556231846896638940683742007637594398608698300141467166596992154134121944091299774645627873013556060120388781584543200662728088528604432817669399890172182260973015666618092424716662487374138084776571443955603547147659873528432366106107608608009661235454308925385140244808765295512265472898299561108128332101705633340866279020568275150759718037237836161 оно не заработает.
Корень: 47738953124819025351628008345542638429421155028137966291758667063884900073076874203478171866599366056296891038301705249919578041821632054104149083241780858332315544539393643098940681767727732468289090775849340681681509732520914296536072195052809816125805260920039326514082515733632459974850137566570078747231372472609078773635746419533441159985042551914746782813360981582648433891741953676492830581941624566292647591527733858191480484166809646874009097741350144110905606542925779660465251271821358250555916528275301008398170529394853259444817488921214614412731869302267458332976206683918276832336306925761347801600674710111430159002007559226455343655645229743154941081992335855623907006982702410282538993351499824663522611075660376016572208636453140324924959419368003465548383282865868954709755752156084633824746319352005241169526783322245359014729571696109505024799518719681169742018738120465883646626788555162574484285998505407016403699482807516154831695725005384549609837220469235685005312182587165919568737191101622020002849026691022069577365686846825516839862946408219805032454153680219112926094586719920695797779529656201125853651398187662122280897496771990943085539028162737156935794134873073013621699916301588414680495129581258924599480589380503198088302740267217371731777257024917608568327918129855554913334895911819467775450249182859624173888855277227121588793428187639750485398521402169839637724003922762336989332949960755244644855480586551648544941606615656939865733787419990266709292839589163369691523951250103404301140804127972833130307842452130247652988709614832044375122807354801256789402604647342709733236783422010398721741695017749972170375003167342222640487728663435318409756977345141796100277222000509543548785893385385335994898948085209645077179338817432253643070219934075358856680420954527375640581770511234594673659634318557253884047778062577501762658073843574689901263214020339266244401704135830414090549931610770746778284735753707011357044244351586378968524094408929274839802969174108952771970951699064706805190356085290508718358893388676344803314637048557955999427383020318431114132727582224589350781407043517474808238614360078500986533364832608845147094537778805746503804081986046199765200907087739378153921471145785745965931959727967888040916432548202362928827982510941206472653861146415407424845962602345231387961703554690885897182357735711191991259152142887903579981113786599790672843056671936040804184583338612287667353711649161668058397644811311652720240006344257765033873221133463402960161662825406076591107804865724451634314277546604191206769080284877493642016717967401714755383725824420622182524057981096012072074271351463512039935987209582678912486039985213408962545841019107988379116889744695653976040225780289827614665594502189761171928324327642083929559515380519251155355447484830257948724480283348597093310083600242916431826759084982536831882355091261309704400875261949921848657667843864995289091684641344329822389791702262486500965185202554401511455746661168143152409674943326812486664480612656645213163096679714775658650388308337397977291847017765584554595457425118495311823090789836378973120085511255147478436877099213731493396736920242151287481105335017638947660481987580487027307981147396231852497021766518681943003269341435172857263407509553978663043870713745178880462272167919223736662233386297106089474801378612636853927542343594483286412935192035063309790846430648601826441520868644073846612550802821863862794638735740007641727024913093871622950816778290284892096476781928009365451898442882768661340345392096764174328838924624449702185041386846083887025438754685156834986098644375276727286352996012610798847822163500912134130881

Должен же кто-то прийти и сказать "а вот в emacs это уже давно было"..

Но, VSCode, конечно, весьма неплох.

-Пошёл гуглить, что такое Альцгеймер, а там все ссылки фиолетовые..

Часто на проверку оказывается, что это не 25 лет опыта в линукса, а 1 год опыта работы с линуксом 25 раз. Да и в цифре 25 сильно сомневаюсь. Скорее не больше 20

Заходят как-то два программиста и один javascript-разработчик в бар...

Зачастую все проблемы идут из-за неправильно выбранных аналогий и абстракций.

Нам свойственно упрощать вещи, чтобы лучше их понимать. Но если мы выбрали изначально не тот подход, который задумывали авторы, то приходится бороться с тулом.

Make задумывался как сборщик программ. И его цель (результат работы, target) - как правило файл. Если мы чётко прописываем, как получить какой-то файл и какие зависимости нужны, то make за нас это всё делает, строит зависимости, умеет собирать "параллельно на нескольких ядрах" и т.п.

В вашем случае, начинаем думать про файлы. Мы хотим что?

`make a-test-report.html an-integration-test-report.xml` - мы хотим получить отчёт по тестам.

`make -j 8 binary-program` - сделай мне нужный бинарник, используй 8 потоков, что бы там ни было. И актуальность make за тебя проверит, и соберёт только то, что нужно.

Да, хочется иметь удобные цели `make check` или `make test`. И это скорее как исключение. Если наша "несуществующая цель, которая как бы есть, но её нет" потенциально совпадает с файлом, мы помечаем её как .PHONY (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html).

Ниже даже упомянули про трюк с touch. Когда "правило" не производит никакого результата (make upload) мы можем в конце сделать touch file.uploaded и зацепиться за него как за маркер.

Так и не понятно, почему кубик лучше из вашей статьи.

Простота - тот же номад: скачал бинарник, запустил где угодно и что угодно. У кубика много компонентов.

Yaml - https://noyaml.com/

Оркестратор должен уметь "управление секретами" - вот прям должен?

HCL непопулярен? А в terraform на чём пишем?

Лоад балансер для сервисов в кубике вызывает вопросы..

Я не хочу сказать, что кубик плохой или что-то вы этом духе, но чувствуется предвзятость.

Как-то странно. Сначала говорится о том, что миграция сломала прод. А потом - фича-флаги решают проблемы. Но при этом никак не объяснено, как засунуть миграцию под фича-флаг. Да ещё и проверить. Сделать вкл/выкл в случае чего.

Зачем давать правильные имена классам и переменным, заниматься выравниванием кода, документированием кода, если и так всё работает?

Мне иногда кажется, что компилятор игнорирует все мои комментарии…
Не то, чтобы я супер эксперт в гите, но (я так думаю) гит задумывался не таким. GitHub и концепция merge request/pull request, конечно, много привнесли и упростили. Но такие абстракции «текут» по-своему. Поэтому вечно задаёмся вопросом, какой git workflow выбрать, squash-ить или rebase-ить. Кто-то ругает fast-forward, хотя в нём нет ничего плохого.

Про группировку. Допустим, надо собрать поштучно кучу коммитов «в группу». Для этого уже есть cherry-pick. Создаём ветку в любой точке истории, переключаемся и тащим к себе коммиты. Хотим перетащить сразу кусок истории (aaaaa..bbbbb) — `git rebase --onto` в помощь.

Задача стояла «как поддерживать множество версий, принимать множество патчей во множество версий программы и не умереть». Важная особенность патча — его нельзя применить абы куда. Часто, набор патчей необходимо применить в определённом порядке. Вот и всё. Патчи слали по почте в конкретную ветку(и). А git — это автоматизация этой почты.
И продолжают так делать до сих пор. Git прост и банален. Этим и хорош. После этого по-другому смотришь и на коммиты, и на описание к ним, и на ветки и т.п.

Ради интереса можно посмотреть на историю ядра, увидеть как один и тот-же патч может быть слит в 10ки веток. Или, посмотрите на postgresql. Поддерживается и развивается сразу несколько версий. Посчитайте количество merge commits у postgresql репозитория.

Просто другой подход. Да, он тяжелее для новичков, да надо разбираться. Но и плюсы есть.

Ну и если начинаешь мыслить патчами — мелкими атомарными, логически законченными изменениями, то всё резко становится проще.

А тот же squash commits на ui — это кастыль: «я тут ходил по граблям, fix, fix, fix, revert, fix, bug-123, bug-123, bug-123, works now. всё, покакал. Ой, это в таком виде не хотят мержить в историю. завернём ка всё в один пакетик».
Да, понимаю, но вторая команда у меня тоже не вызвала в итоге '[', хотя я явно указал её.
Ну, тут есть всякие интересные моменты.

Когда я пытаюсь смотреть внутрь я вообще не вижу попытки обращения к '[' (программе). Возможно, дело в современном баше или я пользуюсь strace-ом неправильно, но

╭─sirex at sirex-notebook in /tmp 21-06-01 - 14:12:35
╰○ cat test.sh
#!/bin/bash

if [ -n "FOO" ]; then echo FOO; fi
/usr/bin/\[ -n FOO \] && echo ok
╭─sirex at sirex-notebook in /tmp 21-06-01 - 14:12:39
╰○ strace bash test.sh 2>&1 | grep stat | grep /bin
stat("/home/sirex/.cargo/bin/bash", 0x7ffd9304a900) = -1 ENOENT (No such file or directory)
stat("/home/sirex/.local/bin/bash", 0x7ffd9304a900) = -1 ENOENT (No such file or directory)
stat("/home/sirex/.cargo/bin/bash", 0x7ffd9304a900) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/bash", 0x7ffd9304a900) = -1 ENOENT (No such file or directory)
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
stat("/usr/bin/bash", {st_mode=S_IFREG|0755, st_size=1234376, ...}) = 0
╭─sirex at sirex-notebook in /tmp 21-06-01 - 14:13:00
╰○ bash --version
GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)


Может, Баш неявно и услужливо преобразовывает вызов [ в нативный для себя вариант…
Это, конечно, не отменяет того, что лучше прочитать мануал и сделать наверняка правильно.
Тогда продолжу:
DevOps — это как подростковый секс: не знают что это такое, читали и видели в Интернете, хвастают друзьям, что уже делали девопс и почти лучшие в этом.
С оговоркой на то, что в пределах минорных версиях всё совместимо, но всё же вот что скажу:

Если вы «замораживаете дистрибутив» (зеркало), то у вас есть согласованность и стабильность. Но как же обновления безопасности в ентерпрайзе? правильно. их будут накатывать, т.е. дистр уже незамороженный. ставите какой-нибудь пакет, а он уже собран с другими версиями библиотек. В целом, благодаря semver и аккуратности, оно, как правило, не ломается. но всё же.

Или тот же докер. Вот банальная задача — собрать контейнер с postgresql и 5 extensions. Постгрес нужен определённой версии и лезем на postgresql.org. ставим оттуда. Оно том с какими-то версиями собрано. А поддержка ldap включили? да. ок, openssl/gcc/anything. Ок. ставим extensions. 2 в стоке были, а какой-нибудь сторонний? с чем он там собран? он точно под именно 12.6 постгрес собран? или 12.3? наверное будет работать. но это не точно. а если под 11 собирали. А ещё один придётся собирать самому. Ок, прошло время, разобрались, сделали классный докер файл. Поправили entrypoint.sh в последней инструкции. Вроде бы заново собрать не надо? а на ci ноде может и не быть кэша, а значит пересоберёте. А что вы пересоберёте? точно не то что было, т.к. много воды утекло.

Питон? ставит пакетизированным способом apt|yum install python-pip-whatever или сами pip install. А если native extension который собрать надо?

Это я всё к чему? Современная разработка более хрупкая, чем кажется. И слово «ентерпрайз дистрибутив» вас не сильно спасает. Т.к. чудо не случится. там сидят такие же, ну или немного более опытные разработчики. И они точно так же борются с возникающими проблемами и обещают вам что «ну должно работать, а если что мы быстро поправим». И становится очевидно, что хочешь-не-хочешь, а разбираться в этом всём нужно довольно глубоко.
Что-то начинает напрягать реклама в которой ещё есть и hello-world статья.

Пора и мне на хабре написать:
Название: Основы программирования за 5 минут
Текст:
Давайте выведем 2+2:
echo "2+2 = 4"

Ну вот, мы научились. Да, тут есть что улучшить, но купите наши вазелиновые шарики всего за 9.99. первым 100 000 покупателей скидка 2 копейки.
Я бы поспорил насчёт дизайна гита, но речь не об этом. Это был всего лишь случайный пример, где надпись на кнопке не так однозначна, как может показаться.
GUI часто бывает неоднозначен, запутан. В то время как консольная команда чаще будет иметь однозначное поведение.

Вот надо вам сделать в git-e soft reset на 2 коммита назад. Открываем gitk, лазим по меню, там ничего нет. тыкаем на коммит, ничего нет, догадываемся (как?) что можно нажать правой кнопкой и там выпадет «Reset master branch here». Reset — это hard reset или soft reset? Рискуем? А если мне надо другую ветку? Как выбрать?

Или вот сижу в firefox и думаю поменять страницу по-умолчанию. А где собственно? И надо бегать по меню перебирая все пункты и гадать, куда же это могли «засунуть». Предполагать, что может это в preferences. А где там дальше искать?

Да, может примеры выше — не самые хорошие, кто-то скажет: «А вот у меня в %PROGNAME% всё понятно». Но уверен, каждый не раз сталкивался с тем, что шарил по GUI в поисках нужного действия.

В Windows: правой кнопкой по файлу или папке -> копировать. Ииии… ничего не происходит. Так видит мир тот, кто не знаком с концепцией ctrl+c/ctrl+v. А крестик справа вверху программу не закрывает.

И даже в вашей любимой IDE наверняка есть кнопка «поискать кнопку, чтобы выполнить команду» по тексту этой команды. Только эту «кнопку поиска» надо тоже поискать. Например, сортировка строк.
1
23 ...

Information

Rating
5,015-th
Location
Польша
Date of birth
Registered
Activity