PDA

Просмотр полной версии : Брутфорс программирование


alatar
02.05.2011, 11:19
Судя по сообщениям на форуме, в последнее время оформился и набирает обороты новый стиль программирования — брутфорс программирование. Из плюсов этого стиля, можно выделить низкий порог вхождения и отсутствие необходимости прочтения какой-либо литературы. Достаточно суметь запустить любую IDE, чаще FlashIDE и начать хаотично вводить символы (гуру этого стиля брутфорсят уже инструкциями языка), в надежде что это оформится в рабочий код. После того, как полученный бутфорс-код удалось хотя бы запустить (хотя это не обязательно), "код" обычно постится на форуме с вопросом: "а почему эта хрень не запускается / работает (?) не так как задумывалось великим Хаосом" и т.д. :)
А какие еще интересные стили программирования вы знаете?

Hauts
02.05.2011, 11:27
Повеселило! Да, такая тенденция замечается. А вообще, я думаю, что есть еще (не знаю, как назвать) метод декопил-проганья и метод хаотичного тыка (когда берется рабочий код и меняются бессмысленно всякие параметры в надежде получить что-нибудь интересное)

Самые "гуру" декомпил-проганья вполне нормально себя ощущают с кодом вида:


// [Action in Frame 1]
function dImport(target)
{
var _loc2 = new XML();
_loc2.ignoreWhite = true;
_loc2.onLoad = function (success)
{
if (success)
{
XML_txt.text = "1";
trace (this);
dProcess(this.firstChild.childNodes[0]);
dBMenuPicProcess(this.firstChild.childNodes[1]);
dNewsProcess(this.firstChild.childNodes[1].firstChild);
dEventsProcess(this.firstChild.childNodes[1].firstChild);
dProjectsProcess(this.firstChild.childNodes[1].childNodes[2]);
dCompanyProcess(this.firstChild.childNodes[1].childNodes[1]);
}
else
{
XML_txt.text = "-1";
} // end else if
trace ("shit");
};
_loc2.load(target);
} // End of the function
FVS.projects.push(_loc1);
} // end of for
} // End of the function
function dNewsProcess(source)
function buildLoadList()
{
var _loc8 = FVS.menu.items.length;
FVS.loadList = [];
for (var _loc3 = 0; _loc3 < _loc8; ++_loc3)
{
var _loc7 = FVS.menu.items[_loc3].items.length;
for (var _loc2 = 0; _loc2 < _loc7; ++_loc2)
{
var _loc4 = FVS.menu.items[_loc3].items[_loc2].photos.length;
for (var _loc1 = 0; _loc1 < _loc4; ++_loc1)
{
FVS.loadList.push({number: _loc3 + "," + _loc2 + "," + _loc1, target: FVS.menu.items[_loc3].items[_loc2].photos[_loc1]});
} // end of for
} // end of for
} // end of for
showList();
loadListLoader();
} // End of the function
function sortStandard(index)
{
var _loc5 = [];
var _loc6 = [];
for (var _loc1 = 0; _loc1 < FVS.loadList.length; ++_loc1)
{
var _loc4 = FVS.loadList[_loc1].number;
var _loc3 = _loc4.split(",");
var _loc2 = _loc3[2];
if (_loc2 != index)
{
_loc6.push(FVS.loadList[_loc1]);
continue;
} // end if
_loc5.push(FVS.loadList[_loc1]);
} // end of for
if (_loc5.length == 0)
{
FVS.loadList = _loc5.concat(_loc6);
showList();
sortStandard(index + 1);
}
else
{
FVS.loadList = _loc5.concat(_loc6);
showList();
} // end else if
} // End of the function
function loadListLoader()
{
var _loc2 = new MovieClipLoader();
myListener2 = new Object();
myListener2.onLoadComplete = function (target_mc)
{
FVS.loadList[0].target.status = 1;
FVS.loadList.shift();
showList();
loadListLoader();
};
myListener2.onLoadProgress = function (target_mc, loadedBytes, totalBytes)
{
currentPr.text = Math.round(loadedBytes / totalBytes * 100) + "%";
};
myListener2.onLoadError = function (target_mc, errorCode)
{
FVS.loadList[0].target.status = -1;
FVS.loadList.shift();
showList();
loadListLoader();
};
_loc2.addListener(myListener2);
_loc2.loadClip(FVS.loadList[0].target.img, _root.temp);
if (FVS.loadList[0].target.img != undefined)
{
currentLoading.text = FVS.loadList[0].target.img;
}
else
{
currentLoading.text = "done";
} // end else if
} // End of the function
btn1.onRelease = function ()
{
sortM(0);
};
btn2.onRelease = function ()
{
sortM(1);
};
btn3.onRelease = function ()
{
sortM(2);
};
btn4.onRelease = function ()
{
sortM(3);
};
btn5.onRelease = function ()
{
sortM(4);
};
btn6.onRelease = function ()
{
sortM(5);
};
btnSTsort.onRelease = function ()
{
sortStandard(0);
};
btn1sub1.onRelease = function ()
{
sortSM(0);
};
btn1sub2.onRelease = function ()
{
sortSM(1);
};
btn1sub3.onRelease = function ()
{
sortSM(2);
};
btnLoad.onRelease = function ()
{
loadListLoader();
};
if (_global.FVS == undefined)
{
_global.FVS = {};
dImport("http://www.название сайта.com/v2/php/data.php");} // end if


(это из реального поста выдрано)

Astraport
02.05.2011, 11:27
А какие еще интересные стили программирования вы знаете?
Copy/paste программирование. Ставишь задачу, ищешь по ключевым словам в поисковике любые исходники, примеры, туториалы, копируешь код, вставляешь в свой проект, если не получается, то постится на форуме с вопросом: "а почему эта хрень не запускается / работает (?). Так я часто работаю:)

alatar
02.05.2011, 11:31
Даже тут скопипастил :D

membrilius
02.05.2011, 14:33
Кстати да, я уже давно программирую КопиПастом. За много лет, наработал столько разнообразных, под разные случаи программок. Что последнее время просто, знаю где какой кусок кода мне нужно вырезать, и куда вставить. Думать остаётся только куда его сунуть и в какой последовательности )

alatar
02.05.2011, 15:11
Пожалуй добавлю сюда еще один тренд "Безформульное программирование" или "Magic code". Базируется на нескольких принципах, как то: "писать формулы в 21 веке не комильфо, у него системник большой, вот пусть и думает" и "какого хрена в этом языке нет команды "сделать все вместо меня"?".

Добавлено через 2 минуты
Уже даже идеолог этого стиля сформировался http://www.flasher.ru/forum/showthread.php?t=155313

mooncar
02.05.2011, 15:16
А вообще, я думаю, что есть еще (не знаю, как назвать) метод декопил-проганья

А откуда, по твоему, на форуме столько топиков с древними функциями, методами? Записи кода на объектах, всякие loadVariables и т.д:)
Декомпил, да шаблоны, как правило, тоже ломаные...
Разве что какой-то процент еще это где-то изучает в вузах под чутким руководством преподов по старым учебным программам, которым всё до фени, кроме учебного плана.

dark256
02.05.2011, 15:44
Кстати да. Потрясает живучесть столь древних сегментов кода.
Всякие tellTarget setProperty...
Видимо туторы написанные ТОГДА живы и по сей. И настолько хорошо индексируются в поисковиках, что народ еще долго будет танцевать от этой деревянной печки.

Мораль - гавно не тонет. Яндекс об этом знает лучше всех :)

alatar
02.05.2011, 15:52
Пока на форуме будут рекомендовать: "начните с прочтения Flash MX 2004", оно и не утонет )

mooncar
02.05.2011, 16:19
Пока на форуме будут рекомендовать: "начните с прочтения Flash MX 2004", оно и не утонет )
Думается, вряд ли кто к такому реально прислушивается. Всё ж таки интуитивно должен чувствоваться подвох в "2004". :) Ну у разумного человека. Мое мнение - всё же массовый декомпил тут причиной.

Sintesis
02.05.2011, 16:26
Пока на форуме будут рекомендовать: "начните с прочтения Flash MX 2004", оно и не утонет )Это можно назвать Photoshop программирование, потому, что рождаются такие программисты на форумах посвящённых фотошопу, где тем кто захотел вдруг заняться Флэшем сразу рекомендуют книгу по Flash MX)))

alexcon314
03.05.2011, 00:36
Самые веселые люди, что я встречал, - это скучающие программисты.

Котяра
03.05.2011, 01:22
Нет зверя страшнее скучающего программиста)
Сам сейчас занимаюсь брутфорс/копипаст программированием.
изучаю юнити: понакачал кучу туторов и демок и методом научного тыка пытаюсь что-то сделать)
Документацию читать скучно.
Правда я вопросы не задаю на тамошних форумах пока. Стыдно)

Hauts
03.05.2011, 02:09
О... юнити... заманчивая технология :)

Aiswer
03.05.2011, 08:21
Copy/paste программирование. Ставишь задачу, ищешь по ключевым словам в поисковике любые исходники, примеры, туториалы, копируешь код, вставляешь в свой проект, если не получается, то постится на форуме с вопросом: "а почему эта хрень не запускается / работает (?). Так я часто работаю:)

Так работает 99% программистов. :taunt:

Волгоградец
03.05.2011, 11:36
Я оттачиваю стиль велосипедостроительство. Поэтому я работаю как улитка.

GBee
04.05.2011, 23:13
Меня больше убивает принцип "я прочитал Колина Мука, как сделать <обычно что-нить элементарное>?"

Ну и на закуску от коллеги, ушедшего резко в отпуск:

private function getBannerUrl():String
{
return 'http://*.swf?ref_id=1111&first_name='
+ DataLocator.getInstance().currentUser.name + '&gender='
+ String( DataLocator.getInstance().currentUser.male?'f':'m' )
+ '&sex=' + String( (DataLocator.getInstance().currentUser.male)?"2":"1" )
+ '&bdate=' + DataLocator.getInstance().currentUser.birthdate
+ '&photo_url=' + DataLocator.getInstance().currentUser.avatarUrl
+ '&mini_ava=' + DataLocator.getInstance().currentUser.photoSmall
+ '&city=' + DataLocator.getInstance().currentUser.city;
}

expl
04.05.2011, 23:58
2 GBee:
Код в таком стиле далеко не редкость - психология простая:
вынести ж переменную - это напряжно, а так Ctl-C, Ctl-V - и все зашибись :)
Ухты, вы локаторы используете? Или это огрызки от Cairngorm'а?

Zebestov
05.05.2011, 00:12
Так работает 99% программистов. :taunt:

Я оттачиваю стиль велосипедостроительство. Поэтому я работаю как улитка.

Волгоградец, нас 1%! :)

GBee
05.05.2011, 01:06
2 GBee:
Код в таком стиле далеко не редкость - психология простая:
вынести ж переменную - это напряжно, а так Ctl-C, Ctl-V - и все зашибись :)
Ухты, вы локаторы используете? Или это огрызки от Cairngorm'а?

Это привычка от каингорма :о)) синглтон с данными, которые легче взять напрямую. Каингорм сам по себе меня очень напрягал (и на какое-то время меня отпугнул от MVC).

wvxvw
05.05.2011, 02:29
GBee: Мы как-будто в одной конторе работаем *sigh*

HardCoder
05.05.2011, 12:40
А как вы ставитесь к автоформатированию кода во flash? Хороший ли это стиль? И есть ли во Flash Builder 4 такая возможность?

alatar
05.05.2011, 13:18
Пока вы работаете в одиночку, всем плевать как вы форматируете код. В команде вам придется следовать принятым правилам. К билдеру есть плагин (http://sourceforge.net/projects/flexformatter/).
В 4.5 "из коробки" есть форматтер для mxml.

GBee
05.05.2011, 13:20
GBee: Мы как-будто в одной конторе работаем *sigh*

Я бы не отказался с целью повышения квалификации :rolleyes:

etc
05.05.2011, 13:21
Странная необходимость костылей вроде DataLocator.

GBee
05.05.2011, 13:47
Странная необходимость костылей вроде DataLocator.

Предложите альтернативу подобному синглтону?

etc
05.05.2011, 14:03
Предложите альтернативу подобному синглтону?

Собственно, данные пользователя должны были прийти в метод. Иначе это вообще не MVC.

GBee
05.05.2011, 14:11
Иначе это вообще не MVC.
Опыт не пропьешь (с) Древние :о))

В данном проекте МВЦ и не пахнет, просто синглтон с названием из Каингорма.

wvxvw
05.05.2011, 14:42
[Deprecated(since="Mar 13", message="Class dropped",
replacement="SamuraiGetService.methods.getPeople")]

/**
* Posts search parameters to <i>getFriendsList</i> web service.
*/
public function getPeople( startIndex : Number,
endIndex : Number,
searchQuery : String,
func : Function):void
{
var cmdAddress:String = serverURL + "friendsList?" +
"widgetSessionId=" + pysid +
"&start=" + startIndex +
"&end=" + endIndex +
"&env=" + environment;
if (searchQuery != "")
{
cmdAddress += "&searchUser=" + String(searchQuery);
}
webConnection.call(cmdAddress,"Get People",func)
}
Да не, я к тому что вот такое вот, ткнул пальцем наугад кудат-то, а у нас куда ни ткни... (deprecated сверху - мой, переделываю по-тихоньку, но сосед который это ваяет очень продуктивный дурак...)
Да, и вон, тоже намек на Каирнгорм, комманды он пишет...

Dukobpa3
09.05.2011, 22:23
А что это за инструкция "deprecated"? Что она делает, и не порадуете ли ссылочкой где про все эти инструкции почитать можно? А то я собственно кроме ембедов ничего не пользую, но подозреваю что там много интересного есть. (Не знаю что это такое и как правильно называется а то бы сам загуглил)

Добавлено через 1 минуту
По теме топика я наверное тоже к велосипедостроителям отношусь))

Bgg
10.05.2011, 00:58
А что это за инструкция "deprecated"? Что она делает, и не порадуете ли ссылочкой где про все эти инструкции почитать можно? А то я собственно кроме ембедов ничего не пользую, но подозреваю что там много интересного есть. (Не знаю что это такое и как правильно называется а то бы сам загуглил)

http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_2.html

Dukobpa3
10.05.2011, 01:11
Благодарствую))

alatar
22.06.2011, 18:28
Намечается новый тренд. Назовем его "Вислоухое программирование".
Отличительные черты: непреодолимая тяга писать постоянно (или временно) зависающие приложения.
Типичный вопрос на форуме: "Как отключить ограничение в 15 секунд на выполнение скрипта".

mooncar
22.06.2011, 19:06
Типичный вопрос на форуме: "Как отключить ограничение в 15 секунд на выполнение скрипта".
Решение из серии - заклеить скотчем постоянно выезжающий лоток CD-ROMа.

alatar
22.06.2011, 19:31
Зачем заклеивать? Это очень полезный инструмент. ;) Попадался как-то текст о команде разработчиков. У них падали ночные тесты, когда на тестовом компе врубался скринсейвер или выключался монитор. В качестве временного решения была написана программа которая открывала и закрывала лоток сидюка. К лотку скотчем приклеили кабель мышки, подставили табуретку, на нее, под углом положили доску, на доску — мышку. Ну и соответственно лоток дергал кабель, мышка елозила по доске и комп работал, как будто за ним сидит юзверь. :)

mooncar
22.06.2011, 19:35
Зачем заклеивать? Это очень полезный инструмент.
Оригинально.
Но заклейка скотчем лотка - это тоже из одной бородатой it-шная истории об издевательстве над юзерами, и как они выкрутились...

terbooter
22.06.2011, 21:35
Я бы выделил отдельное течение:
Advanced брут форс программирование.

Это когда человек уже писал на другом языке. Конечно динамическом, конечно небольшие проекты, да еще и Раби - это его способ мышления. Поэтому не нужно его учить как прогать на флэше. Так, разве что можно только пальцы помочь подержать. И погнали. Куча анонимок одна в другой до 4-х уровней вложенности(!). Композицию долой как явление. Цепочка наследования в 5 - 10 классов. События долой (кто-то где-то сказал что это плохо), всюду будем пихать колбэки. Про value objects вообще не слышали, все строго динамическое.
И так уже несколько кк строк

Ээээх...

А вот вполне так пример, из соседней ветки

private function tween(arg:Array):void
{
var timer:Timer = new Timer(10);
timer.addEventListener(TimerEvent.TIMER, ON_TIMER);
timer.start();

function ON_TIMER(e:TimerEvent):void
{
if (arg[0].x != arg[1] || arg[0].y != arg[2])
{
arg[0].x += (arg[1] - arg[0].x) * .2;
arg[0].y += (arg[2] - arg[0].y) * .2;

if (arg[1] - arg[0].x < 1 && arg[1] - arg[0].x > -1) arg[0].x = arg[1];
if (arg[2] - arg[0].y < 1 && arg[2] - arg[0].y > -1) arg[0].y = arg[2];
}

if (arg[0].x == arg[1] && arg[0].y == arg[2]) {

timer.stop();
timer.removeEventListener(TimerEvent.TIMER, ON_TIMER);
timer = null;

arg[0].mouseEnabled = true;
}

e.updateAfterEvent();
}
}

Dukobpa3
22.06.2011, 21:43
Если уж на то пошло то одной из веток такого течения я бы выделил "Granny Brutforce"

Человек начал писать еще во времена ассемблера (как вариант закончил технический вуз по программированию микроконтроллеров), в коде иногда встречаются очень гениальные решения (без иронии), так же структура четко продумана. НО сам стиль программирования иначе как ассемблеровским не назовешь. Тип данных круче чем Array он не признает, весь код влазит в три класса с несколько кк строк каждый (как вариант это один класс 10+кк строк кода плюс несколько вспомогательных по 20-100 строк). Всё это организовано великим множеством параметров класса (пример с которым встречался был из трех классов по 6+ кк строк, плюс один вспомогательный для коннекта к серверу, плюс в каждом из трех классов по 1.5 кк переменных класса).

Соответственно ни о какой ООП модели и речи быть не может. Исключительно структурный подход, и то не всегда - зачастую ведь проще скопировать кусок работающего кода (из того же класса) и вставить его туда где он нужен (кто-то где-то сказал что вызов функции замедляет работу)...

Продолжать можно до бесконечности:)

Добавлено через 1 минуту
и да, переменные с именами длиннее трех символов считаются моветоном у класса GrannyBrutforcers

terbooter
22.06.2011, 21:53
Dukobpa3, к=1000 кк=1000000. Неужели реально есть классы длиной в мильён строчек?
О, да. длинне трех букв никак нельзя.
Правда тут же легко наступает другая крайность. методы длиной в 10 слов. Оправдание: ну вам же не нравится 3 буквы.

КорДум
22.06.2011, 22:01
Вы забыли про Lazy programming. Вот пример: сделай все за меня, а я скопипащу и потом наеду с претензиями (http://www.flasher.ru/forum/showthread.php?t=158402).

Dukobpa3
22.06.2011, 22:02
я "кк" употребил не всмысле килоК, а по аналогии с "90-94 гг" - с понтом множественное число:)) Может не совсем корректно получилось))

Мульен строк хз, трудно себе представить текстовик такого размера, хотя иногда возникают мысли что представители перечисленных в наших двух постах каст кодеров начинают задумываться о создании нового класса именно в тот момент когда файл исходника начинает подтормаживать в его любимом редакторе (скорее всего блокнот)

terbooter
23.06.2011, 07:53
Мульен строк хз, трудно себе представить текстовик такого размера, хотя иногда возникают мысли что представители перечисленных в наших двух постах каст кодеров начинают задумываться о создании нового класса именно в тот момент когда файл исходника начинает подтормаживать в его любимом редакторе (скорее всего блокнот)
:D Тоже так думаю

alatar
23.06.2011, 11:09
terbooter, Dukobpa3, ну неужели было трудно придумать оригинальное название? Не надо путать терминологию :) Определение "Брутфорс программирования" я дал в первом посте.

То, что вы предложили немного из другой оперы. Например, то что предложил terbooter можно назвать "Анонимное программирование", а то что предложил Dukobpa3 — "Long Don программирование" :)

arkadattx
23.06.2011, 11:52
Страшновато среди представленных вариантов кодинга находить себя. Радует только, что в основном в прошлом...

КорДум
23.06.2011, 12:07
Сейчас у школьников каникулы, кажется, они все к нам ринулись, пишут в кадрах, пытаются писать свои кнопки, осваивают переходы по кадрам...

arkadattx
01.07.2011, 13:54
Набрел тут на ссылочку (http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D1%82%D0%B8%D0%BF%D0%B0%D1%82%D1%82%D0%B5%D1%80%D0%BD)...

Alex Lexcuk
04.07.2011, 12:45
>>подтормаживать в его любимом редакторе (скорее всего блокнот)
Насчет подтормаживания в редакторе, скачал англо-русский словарь для StarDict это оказался gzip архив распаковал, файл весит 99 Мегабайт там 729 000 строк, редактор gvim справляется четко, не тормозит... Поиск работает отлично.

alatar
04.07.2011, 12:57
Открой в notepad... под wine :)

goodguy
04.07.2011, 14:10
не тормозит...
Надо полагать, эти 3 точки означают: "эх... тормозит жутко, но так хотелось бы, чтобы не тормозил"? :D

Тесктовый файл, размером 99 мегабайт будет тормозить в любом редакторе. Хотя может, мне просто не попадалось нормальных редакторов )

Alex Lexcuk
04.07.2011, 16:53
Тормозов не будет на текстовом файле 99 мегабайт, если загнать его в опреративу, а рендерить, только кусок этого файла, который должен отображаться в окне, те. показывать к примеру - начиная с позиции 70 мегабайт и кончая 70 мегабайт + 3 килобайта, тормозов не может быть в принципе.
А редактор IDE у меня был CS4 - тормозил, почему-то даже когда я набирал код, буквы появлялись спустя некоторое время после нажатия на клавиатуре.

Dukobpa3
04.07.2011, 16:57
99 мегабайт даже фотошоп тормозит)))

Alex Lexcuk
04.07.2011, 17:13
Еще в проге тотал коммандер можно на 99 метровом текстовике нажать А3 те. просмотр и просмотреть его тормозов нет. GVim у меня к тому-же еще и правописание проверяет и не тормозит на этом словаре, так-что исходничек в миллион строк это не такая уж фантастика, тех средства позволяют, главное, что-бы мозг не лопнул, я думаю может сделать portable программку-переводчик на основе словаря из стардикта, стардикт хорош, но его надо устанавливать.

goodguy
04.07.2011, 17:48
он есть под андроид, а лингво под симбу, вин мобл и еще некоторые платформы. Даже комп не нужен ) и словарь всегда под рукой ;)

nuToH
05.07.2011, 14:58
изначально был вот такой код: (упрощен)
if (1 == 1)
trace('1 == 1');
else
trace('1 != 1');

потом потребовалось изменить вторую строчку, получился вот такой код:

if (1 == 1)
if(2 != 2) trace('2 != 2');
else
trace('1 != 1');

в итоге - бдыщ. как назвать такой "стиль"?)

...отныне & впредь
if (a < b)
{
a = b
}

alatar
05.07.2011, 15:07
Кхгм... Я даже затрудняюсь ответить :)