Грязный хак

Материал из Неолурк, народный 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 Нету ни мозга, ни возраста
РазновидностиВанилькиВинишкиДети индигоМалолетний клоун (Школота) • ПионерФеечкаШкольникЗумерский сленгШколовидеоПацан (Слово пацанаСериал)
Казни египетскиеАнорексияАпелляция к возрастуАрмияБанхаммерВладимир БельскийДеанонимизацияДевственностьДиетаЕГЭИзбиение лоховОжирениеПрыщиСамопалРанний бракСДВСпермотоксикозСсаные тряпкиСуп из младенцевТравля • ‎Учитель годаЧеренок от лопатыЛишение компьютераПорка розгами
КамвхорыAshleyБлевотина-кунБэйли ДжейВлад БорщВлад ЧесноковДанилаДенис РязанцевДжастин БиберИлья ФарафоновКружка-кунЛиля ЖелеваМаска-тянМечтающий стать админомНемыто-тянОпасный поцыкХабаровские живодёркиЧБ-тянЮлия Дмитриева
Страдающие ЧСВBASKACruel AddictGamerSuperMC ВоронежSoEasySupLisErАртём Ануфриев и Никита ЛыткинАлексей БабушкинАлёна ПискловаВиталикГордГрегореГриша СорокинДенис ПоповДэниел ПетрикИрина ДобржанскаяКенни ГленнЛантернЛеонид ВасилевскийНаталия КолесниковаСоус-кунВладимир ОсинМамкин циник-мизантроп
Страдающие бокланопоцтитомSupreme2АлевиусАльберт АкчуринВован МеталГрета ТунбергДмитрий ЩетниковКим де ГелдерМетатели колёсШкольник-кунЖиводёрыSunny Singh Сани Сингх
An heroesАнна БешноваАртём ИсхаковГелиогабалИгорь ГрудциновИльдар МурсалимовКарина БудучьянЛида ОчковскаяОксана МакарПавлик МорозовТим КречмерЭрик Харрис и Дилан КлиболдЕгор Просвирнин
УпоротыеAngry German KidBoxxyEllen FeissАртём СвистуновИван ГамазКрикунНевада-тянНикита ЛитвинковНиколай ВороновПовар спрашивает повараСашкоСолеваяЮрий ДемидовичЛололошка
МемыHL BoomАмериканский пирогБей бабу по ебалуЖадные детиЖестокая ГолактикаЗелёные титизеныИгрушки, прибитые к полуКороткостволЛолиМой пездюкОЯШРеспект таким парнямСадистские стишкиСрывать покровыТринадцатилетние девочкиФеерическая расстановка точекЧувак, это рэпчикШнурки в стаканеАУЕГрязный хакУчитель годаПолитическое использованиеПрогуливание школыJackassЧушпан
Места обитанияAeterna.ruBeon.ruTikTokГруппы смертиДетская площадкаДетский лагерьДетский садСелигерСтрана ЭльфовТвиди.руШколаССУЗLife is StrangeКолония для несовершеннолетних
ЛетописиSchool 13КлассМальчишникПовелитель мухСериал «Школа»Школоблоггеры
Прочее1 сентябряАбдуловераВыпускной вечерЗолотая медальКаникулыПереходный возрастПернилла СтальфельтЮношеский максимализмШкольная иерархияЮвенальная юстицияВсе умрут, а я останусьРевольвер Single Action ArmyСтояние в углу
Movax1010h.png Глубокий смысл скрыт в этих неестественных языках
Языки программированияПромышленные: BATC#CC++JavaJavaScript (AJAX) • PascalPerlPHPPythonRubyABAPАссемблерВасикФортран
Эзотерические: BrainFuckHQ9++ErlangForthHaskellLISP (My other car) • PrologTclΤΕΧOracleMySQLGolangВ++
ПрофессииБыдлокодерПрограммистТестировщикХакерХеллоуворлдщикIT-звёзды
Методы и стилиReverse EngineeringАнти-паттернВыстрелить себе в ногуГрязный хакКод (индусский) • КостыльМетод научного тыкаПомолясьСвистелки и перделкиОчередьСпортивное программированиеОбфускацияБета-тестАльфа-тестШаблоныRegReplace
Средства разработкиSublime TextПодсветка синтаксиса кодаUnstable DiffusionAPIPythonTutorCodeWarsDataCamp
ЛюдиИлья КанторЮрий КлючевскийЭдуард Лаас
Прочее++i + ++iDeadline%s640 килобайтCMSDummy modeЕГГОГFoobarGod is real, unless explicitly declared as integerGOTOIfconfigKISSRegExpSICPsql.ruXyzzyДискетаИнжалид дежицеКОИ-8ЛогМанРекурсияСУБДТест ТьюрингаУмение разбираться в чужом кодеФаза ЛуныФатальный недостатокПроблема 2000ТаймстампКэшЗапись в файл без кэша (Perl)Танцы с бубномКодач