Грязный хак

Материал из Неолурк, народный Lurkmore
Перейти к навигации Перейти к поиску

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

В коде также можно увидеть так называемый nice hack (красивый хак), например небольшие участки кода, умело и красиво использованные не по назначению, что не вызывает рвотных рефлексов при их прочтении. Впрочем, это тоже считается дурным тоном, поскольку нарушает принцип KISS.

Хак vs костыль[править]

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

Примеры[править]

  • Браузеры Internet Explorer 5 и 6 версий не поддерживают CSS-свойство min-height. Однако у них неправильно реализовано свойство height, из-за чего оно действует как min-height. Кроме того, только вышеперечисленные браузеры воспринимают CSS-код после * html. Остальные браузеры его игнорируют. В результате появляется возможность использовать следующий хак, позволяющий реализовывать свойство min-height во всех браузерах:
div {min-height: 150px;} // Это для всех браузеров
* html div {height: 150px;} // Это только для ИЕ
  • Чтобы получить доступ к private- или protected- членам класса, в C++ (до стандарта версии C++11) можно иногда увидеть паттерн «Паблик Морозов», открывающий доступ к защищенным данным и методам:
#define private public
#define protected public
#include <header.h>
#undef private // А вот пока анонимус не дописал undef это и было грязным хаком.
#undef protected
...

Header *h = new Header();
int x = h->m_value; // m_value в прошлой жизни - private
Более чистый способ — добавиться в «друзья» всех классов:
#define private friend class Descendant; private // приписываем friend class Descendant во все классы
#include <Ancestor.hpp>
#undef private
...

Descendant *h = new Descendant();
int x = h->m_value; // m_value в прошлой жизни - private из Ancestor
  •  

— Ты пересобрал тулзу под новую версию либы?
— Нет, пока что просто создал симлинк с новой либы на старую.
— Какой грязный хак!

  • Зайти на любой сайт, например на ag.ru и в адресной строке браузера прописать этот код-скрипт:
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0)
после хвастать скринами перед друганами.
  • На странице любого сайта в адресной строке браузера вписать:
javascript:document.body.contentEditable = 'true'; void(0)
После этого можно редактировать страницу локально у себя и делать скрины. Сам сайт, естественно, не изменится.

Для того, чтоб код работал, нажимаем F12, слева внизу ищем кнопку "show console", вставляем код туда, нажимаем ENTER.

См. также[править]

Md.jpg Нету ни мозга, ни возраста
РазновидностиВанилькиВинишкиДети индигоМалолетний клоун (Школота) • ПионерФеечкаШкольникЗумерский сленгШколовидеоПацан (Слово пацанаСериал) • ДетиКвадроберыГеоргий ВолковРеспублика Песчаная ГлинкаСасикПоколение АльфаДракаДолбоящерПоколение снежинокПетух ЧапикуHitokПриделывание члена
Казни египетскиеАнорексияАпелляция к возрастуАрмияБанхаммерВладимир БельскийДеанонимизацияДевственностьДиетаЕГЭИзбиение лоховОжирениеПрыщиСамопалРанний бракСДВСпермотоксикозСсаные тряпкиСуп из младенцевТравля • ‎Учитель годаЧеренок от лопатыЛишение компьютераПорка розгамиЗацеперыLikeeСнимай штаны, пороть буду!Альтернативная гражданская службаTense1983UTTPПётр IIРебёнок (Древний ужас)Бежевые мамыЛишение прогулкиЛишение карманных денегДебилы в ТиктокеFloss
КамвхорыAshleyБлевотина-кунБэйли ДжейВлад БорщВлад ЧесноковДанилаДенис РязанцевДжастин БиберИлья ФарафоновКружка-кунЛиля ЖелеваМаска-тянМечтающий стать админомНемыто-тянОпасный поцыкХабаровские живодёркиЧБ-тянЮлия ДмитриеваАндрей НифёдовАнжела ЛондонДарья КаторгинаВиктория МихайловаДаша СуднишниковаЕликсей ЛесликовКныш ВарвараGacha LifeОфникиПолина Степановна
Страдающие ЧСВBASKACruel AddictGamerSuperMC ВоронежSoEasySupLisErАртём Ануфриев и Никита ЛыткинАлексей БабушкинАлёна ПискловаВиталикГордГрегореГриша СорокинДенис ПоповДэниел ПетрикИрина ДобржанскаяКенни ГленнЛантернЛеонид ВасилевскийНаталия КолесниковаСоус-кунВладимир ОсинМамкин циник-мизантропМаксим ДошиZe MausБендер (летсплейщик)АгрошкольникНапалм Пайнт КиллерКиричАдмин MDKПсковские школьники, стрелявшие по полицииПонтыЧувакТупой ПитонHurroledСтиль миллениаловАнкДелай нечто и не психуйИнтересно кошка серит
Страдающие бокланопоцтитомSupreme2АлевиусАльберт АкчуринВован МеталГрета ТунбергДмитрий ЩетниковКим де ГелдерМетатели колёсШкольник-кунЖиводёрыSunny Singh Сани СингхDruskininku SaugaШколоёберыАндрей537Мистер ЕбалоDamirik87Иван ОсколковWindows ШкольникНагибаторСиндром чего-то в поле From
An heroesАнна БешноваАртём ИсхаковГелиогабалИгорь ГрудциновИльдар МурсалимовКарина БудучьянЛида ОчковскаяОксана МакарПавлик МорозовТим КречмерЭрик Харрис и Дилан КлиболдЕгор ПросвирнинПозвонить в дверь и убежать
УпоротыеAngry German KidBoxxyEllen FeissАртём СвистуновИван ГамазКрикунНевада-тянНикита ЛитвинковНиколай ВороновПовар спрашивает повараСашкоСолеваяЮрий ДемидовичЛололошкаТэа УимберлиВиктор ДрагунскийГомогомГулерДневник девственникаГопникиХартия'97ДневничкиВредные советыПоколение ЯгиДмитрий ЛетунМахачПацанские пабликиПонты для показухиКухонный гангстерИзобретать велосипед
МемыHL BoomАмериканский пирогБей бабу по ебалуЖадные детиЖестокая ГолактикаЗелёные титизеныИгрушки, прибитые к полуКороткостволЛолиМой пездюкОЯШРеспект таким парнямСадистские стишкиСрывать покровыТринадцатилетние девочкиФеерическая расстановка точекЧувак, это рэпчикШнурки в стаканеАУЕГрязный хакУчитель годаПолитическое использованиеПрогуливание школыJackassЧушпанНиштякПо разамШколофажествоОтвечать за базарРебёнокФридомайнцизмДаёшь молодёжьВредно для несовершеннолетнихФизическое насилиеЧто-то с мамкойВладислав КазакевичАвторское видениеОбщение с девушкамиДёжТовары для квадроберов
Места обитанияAeterna.ruBeon.ruTikTokГруппы смертиДетская площадкаДетский лагерьДетский садСелигерСтрана ЭльфовТвиди.руШколаССУЗLife is StrangeКолония для несовершеннолетнихДети Илона МаскаИван VI
ЛетописиSchool 13КлассМальчишникПовелитель мухСериал «Школа»Школоблоггеры
Прочее1 сентябряАбдуловераВыпускной вечерЗолотая медальКаникулыПереходный возрастПернилла СтальфельтЮношеский максимализмШкольная иерархияЮвенальная юстицияВсе умрут, а я останусьРевольвер Single Action ArmyСтояние в углу
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикFortran (Профессор)
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++Scala
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёздыПрограммист (существо)Тернарный операторUnreal MCP
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplaceФреймворкБыдлокодIndex.phpОхота за жукамиКуМирКлеточный автоматПроцедурное программированиеПоиск файлов в Unix по содержимомуPetoohФункция активации нейронаПерегрузка операторов в PythonЗерокодинг
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCampUnity3DКнижный PythonMallocСвязный списокSOLIDООПУказательNULLWeLang++XenonRecompFuse.js
ЛюдиИлья КанторЮрий КлючевскийЭдуард ЛаасЭдвард СноуденСеймур Пейперт
Прочее++i + ++iДедлайн%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодачХукCurl cffi