Охренительные параслов о блоге


как че создать приложение Vkontakte (вконтакте) с использованием контейнера или че за 120 минут

Добрый день! Сегодня я вас познакомлю с классом VKWrapper. Я понимаю, вы все его ждали, и вот, наконец-то я его сделал, да

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

VKWrapper

— синглтон. У него есть два как бы параметра (два вспомогательных класса, VKWrapperApplication и VKWrapperExternal. Application — крайне полезная херня, которая, в общем-то, и не нужна. Там сообщается о текущем фреймрейте(который можно узнать у стейджа), ширина, высота (которые можно узнать у стейджа), алигн и скейлмод(о которых (сюрприз!) можно узнать у стейджа). Единственная переменная, которую у стейджа узнать нельзя, так это parameters, но их можно ловить и без этого прекрасного класса, но что поделать, вдруг кому нужна эта херня? А вот с VKWrapperExternal дела обстоят иначе, там находятся все функции, которыми можно управлять, в них указаны параметры, которые нужно добавлять и все такое Если кто не знает ничего про FlashDevelop (коим я пользуюсь), то вот скриншотик удобства работы в нем ыхыхых

Вся соль работы заключается лишь в том, что вы инициализируете синглтон, а потом откуда угодно работаете с ним. Если враппер вдруг обнаружит, что у вас эцсамое, parent.parent-то не существует, будет все время горланить, что враппер работает в тестовом режиме (всякий раз, как к нему будет происходить обращение), варнинги можно отрубить методом VKWrapper.inscance().disableWarnings();, но все же полностью отключить трейсы я пока не додумался, всякий раз, как вы будете обращаться к методам, то будете получать в трейсе «VKWrapper : [названиеМетода]", а если еще и не отключите варнинги, то вас ждут целых две строки, одна с названием метода, а вторая про тестовый режим. Хотя все же поотрубать стоит (если что, можно пробежаться реплейсом и поменять trace на String ыхыхыхых). Видать будет вторая версия этого враппера, даа

Как работать, пыщь-пыщь тебя в то самое отверстие?

Очень просто! Создаете листнер onAddedToStage, подписываетесь на него, оттуда инициализируете VKWrapper ( VKWrapper.instance().init(this.parent.parent); ). Если вы работаете в IDE адобовском, то там еще нужно будет проверить на то, существует ли стейдж или нет, пушо в ином случае, листнер не услышится никогда в жизни, в общем проверить, существует ли стейдж, и если да, то вызвать самостоятельно листнер, типа if(stage) this.onAddedToStage(null);

Так же оно еще и кидает события, для этого нужен VKWrapperEvent. Об эвентах написано тут, да и обо всем прочем тоже. Так вот, там есть событие onWindowResized, или что-то в этом роде. Оно не работало, поэтому я просто (лол) подключился к стейджу и ловил от него события Event.RESIZE. Поэтому не серчайте, если события прийдут дважды (когда у них заработает, ну или это я очень криворукий)

А че а де а как проверить по-быстрячку?

Есть на данный момент исходники во fla формате (опять-таки лень подготавливать ради этого FD проект, но я напрягусь, потом...). zip, rar

Петр Максимильянович Мясошкаф вызвался помочь и первым испытал это дело. Ему понравилось! http://vkontakte.ru/app1732848

Это все

Это все, братюни и сестрюни. Пишите письма на kasoizz@gmail.com

Братюнь, ты в прошлый раз отморозился, но теперь-то точно ты заслужил ченить! Ты ведь такой молодец!

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

Сюрприз! Опросик

Dec. 06, 2009 // 23:15 | Высказались (0)


как че создать приложение Vkontakte (вконтакте) с использованием API v 2.0 или че за 120 минут

Многие (и я сам когда-то) задаются вопросом: как достучаться епсель мопсель блядь?171

А я скажу! Кто-то пишет костыли, кто-то какое-то говно для упрощения работы, а я решил пойти другим путем. Я написал костыли и какое-то говно для упрощения работы

Теперь нужно всего ничего, четыре класса моих и два от адоба (для эмдэпятирования)

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

Что за классы

VKSender(это ссылка)

— основной класс для работы, использует VKUser(о нем позже). В данный момент (01.12.2009) имеет небольшой набор функций (sendVars, getFriends, getUserInfo, getUserInfoEx, getProfiles). Но, думаю, увеличится (хотя надо ли?) Основная функция: sendVars. Она принимает на вход что угодно: кучу параметров, массив, или просто куча строк через запятую. Если строкой, то нужно вручную разделять амперсантом: method=getProfiles&uids=1,2,4,199,255231, если массив, то просто: ['method=getProfiles', 'uids=1,2,4,199,255231'], ну и без массива 'method=getProfiles','uids=1,2,4,199,255231' Это все, что туда надо посылать для получения команд

VKUser

— класс-обертка данных, приходящих с вконтактика в flashvars. Типа вашего айдишника, откуда запустили и че ваще происходит. Он передается сендеру, тот оттуда забирает айдишник и сидит

VK_API

— класс для данных о самом вконтактике и приложении. Айди приложения, версия апи и секретный код, его использует сендер для посылки данных

VK_API_METHODS

— класс, содержащий в себе все названия методов и короткие описания к ним. Стучаться через VP_API.methods. Если вы не используете флешдевелоп или какие-то нормальные ИДЕ, подсвечивающие функции, то, конечно, вам все равно будет на это. Посылать сендеру удобнее намного таким образом (я щетаю). sender.send('method=' + VK_API.methods.GET_PROFILES, 'uids=1,2,4,199,255231');

Че делать?

правите VK_API, меняете API_ID на id вашего приложения, SECRET_CODE на ваш секретный код (оно сделано не константой, так что если очень боитесь за взлом, то можете задать его только получив авторизацию откуда-то)

Создаете VKUser переменную:

var user: VKUser = new VKUser(this.loaderInfo.parameters);

Затем создаете объект типа VKSender

var sender: VKSender = new VKSender(user);

Ну а там, подписаться на событие Event.COMPLETE и ловить sender.response (который будет только XML), либо же создавать функции, принимающие на вход переменную с XML

sender.getFriends();

function customMethod(data: XML) : void {trace(data);}

Можно скачать примерчик: (.fla формат cs3 флеша) rar, zip. Флешдевелоповский проект тоже может будет, но его не так просто собрать, что б было без лишних файлов (у меня сразу в говно превращается :( )

Увидеть, как работает приложение, вам поможет Петр Максимильянович Мясошкаф. Приложение вот: http://vkontakte.ru/app1723950

В верхнюю строку пишите ваши команды любимые, чувствуйте себя как во фряхе, только не пшите всякие телнет, судо и -rm-rf. Что туда писать, можно увидеть на страничке «Описание методов API». То есть, увидели название метода — взяли и написали (только убедитесь, что дополнительные параметры не требуются, как, например, uds в getProfiles, об этом можно узнать тыкнув на функцию и посмотрев на галочки). Именно в таком виде и идет все сендеру в sendVars. В выпадающем списке можно выбрать небольшой набор готовых функций и сидеть. Можно, например, узнать рекламу, но для этого включить нужно тестовый режим: method=getAds&test_mode=1. Отсылать энтером

В нижнем поле первой строкой идет запрос (там все сортируется по алфавиту, как этого, оказывается, требует вконтактик) потом, если вы вдруг получили ошибку 7, то идет жирным текстом оповещение об этом, ну а потом только идет ответ. incorrect signature — вы, скорее всего, неправильные данные шлете (строку method=getAds&test_mode=1&olololo=lololo съело нормально, но вот method=getProfiles&method=getProfiles уже обосралось)

Как получить фотки а а а???

Очень просто! Давайте воспользуемся приложением Мясошкафа.

Давайте определимся, чей альбомчик посмотрим. Я подумал, у Шкафа приложение имеет id 1723950, вдруг есть человек с таким id? Да, есть! Анька, Лапенкова-то! Вот и ок. Берем, пишем в верхнюю строку «method=photos.getAlbums&uid=1723950«. Видим ошибку №7, заходим в настройки, разрешаем доступ к фоткам и повторяем команду. Теперь нам виден ответ. <aid>21537693</aid>, Вот это и юзаем и отсылаем теперь новую команду. Что удивительно, кстати, человек закрыл доступ, а к фоткам достучаться можно. Пишем method=photos.get&uid=1723950&aid=21537693. Все, у нас есть список фотографий. Например вот:

http://cs1248.vkontakte.ru/u1723950/21537693/x_616f99a2.jpg

http://cs1248.vkontakte.ru/u1723950/21537693/x_e56a4a51.jpg

http://cs1248.vkontakte.ru/u1723950/21537693/m_a406ede7.jpg

http://img35.imageshack.us/img35/1490/facepalm2.jpg

А теперь давайте согласимся на ее предложение? Разрешите работать с предложениями, пишите method=offers.get&uid=1723950, убедитесь, что она предлагает вам пофоткать ее, и соглашайтесь: method=offers.accept&uid=1723950

Это все

Это все, господа. Возможно, статья будет правиться

Пишите на kasoizz@gmail.com или petr.myasoshkaf@gmail.com (но Петр не любит читать почту)

Братюня, стой, как тебе заплатить? Ты ведь такой молодец!

*Сжал руки вместе*. Ой! Купите своим девушкам цветов, а если вы девушка, то попросите, чтоб вам подарили цветов. Ну а если я найду кнопку «подайте на хостинг а то мне лень покупать карточки», то я ее поставлю, так и быть

Опросик

Dec. 01, 2009 // 12:59 | Высказались (1)


AS3 и радиопотоки (flash играет звук быстрее или медленнее)

Вы знаете, господа, об одной радужной вести? Оказывается, драный флеш плеер 9-й и 10-й (до 10.1, в последней поправили уроды) версий умеет люто, бешено искажать радиопоток, ускоряя или замедляя воспроизведение (приблизительно раз в 5–10 загрузок потока начнется ад). Это добротный баг, который побороть мне не удалось (я остановился на том, что бы вырывать с помощью byteArray заголовки потока и пытаться там что-то найти, увеличение времени буферизации не помогло, надевание на голову колпака тоже)

И вот так вот теперь говори, что ас3 круто, а ас2 — плохо. Ведь ас2, как бы это удивительно не было, хорошо справляется с данной задачей, а ас3 — нет! И только через два года эти варвары с адоба решили пофиксить бажину, которой раньше не было. Как! Как они умудрились, собаки?

p.s тестировалось на собственноручно поднятом серваке шоуткасте, 8-й плеер\as2 за примерно 40 запусков не сумел сделать такой бяки ни разу, в отличии от регулярных похождений 9-го \ as3. Код использовался в 2–3 строки, ссылка, urlRequest и загрузка с проигрыванием


А если кто напоролся на бажину, что это не поток, а все равно искажается — поздравляю, у вашего трека частота дискретизации не кратна 11050 Гц (11, 22, 44 кГц) и теперь его нужно переконвертировывать с нужной частотой. Правда, об этом много где написано


Советiк №3 (чет я сегодня разошелся). Если вы не можете поймать радиопоток флешом уже на протяжении двух часов, то пойдите сделайте себе кофе, успокоительное или снотворное, и попробуйте дописать к ссылке с потоком “;stream.nsv”, то есть http://url_to_radio:8000/;stream.nsv (поискать такие потоки можно написав в гугле “shoutcast administrator”, а протестить можно например на очень старом моем плеерчике (там нужно тыкнуть на кнопку “link” и стереть что-то про boyko sound shoking). Однажды я так спас себе жизнь, когда вырывал уже последние волосы (локально-то, из IDE, эта паскуда все ок ловит, а стоит на сервачок залить или еще чего — так просит помощи)

Nov. 26, 2009 // 03:47 | Высказались (0)


Framework: 5, AdvancedDropList (lol)

Во мне проснулся горедизайнер и я подумал... В общем я подумал, что многим знакома такая лабуда, как «выберите интересы... ну или введите»

http://fsca.ru/blog/entry/1000097/file/govnota.jpg

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

Код пока выкладывать не буду, так как сам дроплист недописан. Хоть именно такой мало кому понадобится, но внутренности (а эта хреновина состоит из 10 классов, что-ли) могут пригодиться

May. 25, 2009 // 23:18 | Высказались (0)


Framework: 4, Postfixer(lol)

Все это время я вел борьбу с склонятелем слов. Он, сразу скажу, в стадии преальфабеты, но выполняет уже то, что нужно было бы на 30%(а именно — склоняет количество)

Используются: Postfixer, Ending (названия нужно перепродумать)

Пока он еще не склоняет множество слов (к примеру, «часы»), но в скорем я восполню этот пробел! А может кто и поможет. Объясню в чем дело:

('ка', 'ки', 'ке', 'ку', 'кой', 'ке', 'ок'), — это строчка, в которой используется окончание «ка» и его склонения (именительный, родительный, дательный, винительный, творительный, предложный, и множество). Так как русский язык не самый простой, склонения могут меняться. И, собственно, нужно тогда учить прогу грамоте, но ИИ еще не изобретен, а я не на столько крут, что б изобретать его. В общем, нужно написать новые такие строчки к словам, на которые, вдруг, не сработала скриптятина или сработала неправильно. Если вдруг у вас воспалится железа альтруизма — напишите слово и потом вот так вот в скобочках и кавычках окончания(там все по порядку, как я написал. Именительный — утКА, родительный — утКИ, бла-бла-бла — утКЕ, утКУ, утКОЙ, утКЕ, утОК)

Для справки: вот так выглядит обработка русских окончаний: ХПЕ

Так — английский:

ХПЕ

Apr. 20, 2009 // 12:58 | Высказались (5)


Framework: 3, InputField

С данным элементом теперь мало у кого будут проблемы с созданием инпутфилдов с некоторыми событиями и цветовыми решениями!

используются классы: InputField, InputFieldStyle, а так же все тот же неповторимый TweenMax

Apr. 20, 2009 // 12:30 | Высказались (0)


Framework: 2, scroller(content)

Сюжет кнопки имеет продолжение. Я решил, что обертка для объекта, имеющая свойства реагирования на мышь является основой всего в мире. Которую я, кстати, поправил. Да и нужно будет часть переделать. Сыростью веет, но все ок.

src scroller, button

Занятный баг: если юзать дрег(startdrag/stopdrag) объекту, то по событию mouseUp у него координаты мыши будут равными тем, что юзались при mouseDown. Заплатка вышла классной!

Apr. 15, 2009 // 01:37 | Высказались (0)


Framework: 1

Итак, господа, сегодня понедельник и я решил сделать это: опубликовать один сверхважный, очень полезный и просто эпик элемент. Более того, его придется переделывать, но эпиком и сверхважным он не перестает быть. Это некое подобие фреймворка(на самом деле просто сброд элементов и утил, которые могут быть полезны при всякой странной работе)

Представляю вашему вниманию элемент!

Код за следующей ссылкой

Как видите, там всего одна статик переменная, да еще и подозрительно названа! Это все неспроста, но тут еще и сюжет есть, о чем несколько позже. Как пишет один человек: ыхыхыы

В коде использовался лучший в галактике твинер TweenMax

Apr. 14, 2009 // 00:01 | Высказались (0)


AIR шмаир!

Поставил себе эту приблуду и... Это просто чудо! Можно теперь делать с компом если не все, что нужно, то многое. Во-первых, я сделаю себе просматривальщик картинок, потому как все просматривальщики в мире убогие. Но беда есть одна, хоть и не самая страшная: картинки, количеством пикселей большие, чем 4096х4096 не покажутся на экране. Но, к 11-й версии наверняка чуток увеличат возможносте. С эйром не все так просто, как могло казаться, не так интуитивно, как хотелось бы и не так добро, как мечталось. В общем, без хелпа и минуты не просидеть!

Просматривальщик картинок пока в глубокой бете, но в целом он уже делает то, что мне нужно, но не хватает пару вещей: возможности открывать две картинки, а то что-то странное происходит. Кто-то наверняка знает, и я был бы рад узнать ответ. В общем, прошу помощи: при открытии файла моей прогой, открывается только один экземпляр проги. Есть ли возможность обойти это? Если я захочу открыть несколько картинок, то откроется только одна, а потом будут приходить InvokeEvent'ы с ссылками на новые картинки. Но у меня на правый клик мыши повешено закрытие самой проги, и выйдет так, что убьется вся прога, а не только одна картинка, а этого... Не хотелось бы!!11 Ведь это... Ведь это придется писать целую кучу ненужного хлама, эмулируя что-то там

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

Mar. 24, 2009 // 11:59 | Высказались (1)


Flash-рисовалка! | Flash graffiti

Помаявшись херней пару неделечек я сделал флеш-рисовалку, которая имеет некоторые интересные вещи, которые мало где реализированы, хотя всюду это есть, но тут просто в куче! Работу работы можно увидеть тут — http://fsca.ru/flash/graffiti/

А исходники — тут

Основные штучки:

  • ctrl+z
  • ctrl+y
  • линии, примитивы! все как обычно
  • сохранение картинки на локальной машине(если не дорисовал)
  • отправка картинки на сервак (за что спасибо некому ink'y). Слово

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

Mar. 13, 8400 // 12:35 | Высказались (18)


SoundPlayer & VideoPlayer classes

Как и было когда-то обещано, выкладываю классы

скачать

В принципе классы не нуждаются в объяснениях (кроме глюков и что такое /1.75), но краткий список кратких возможностей:

  • У обоих есть функции: stop, start, resume, pause. Первые две практически бесполезны. Вторые две не нуждаются в том, что б вы запоминали позицию. Само все 
  • У обоих есть геттеры\сеттеры progress, volume, loaded, time, fullTime(у саундплеера даже имеется “StringTime”, который, как ни странно, выводит массив из 4-х стрингов, первые 2 — текущее время, вторые два — общее время. Соответственно, первое — минуты, второе — секунды в каждой группе. Сделано для того, что б можно было перемешивать как угодно)
  • о progress: я решил не использовать секунды и минуты, хотя думал оставить их, что б вдруг надо будет, вдруг. Но в общем, progress, ровно как и volume задается цифрой от нуля до еденицы. Просто очень удобно потом это связывать с прогрессбаром, которому не надо будет указывать время или же доставать вручную эти цифры и оперировать

Теперь немного о глюках и странностях

  • В видеоплеере вы сможете увидеть деление на 1.75. Почему я выбрал это число не скажу, так как не знаю и не помню. Но раз работает, значит все нормально.
  • Иногда глючат newVideo и newSound. Они перестают потом показывать количество загруженного и нельзя начать играть пока не скачается

Теперь о бонусах:

  • Внутри архива вы найдете линк на эксклюзивный трек, который я услышал в наушниках сотрудника, который это слушал.
  • Архив весит 30 кб

Еще раз продублирую ссылку, а то вдруг потеряли: http://fsca.ru/file/players.rar


Если найдутся вопросы и пожелания — выслушаю и отвечу. Не забывайте, что это AS3

Mar. 13, 5280 // 12:16 | Высказались (0)


Общайся легче ©

Я решил сотворить прорыв в области налаживания контактов с инопланетными людьми, у которых не существует нескольких русских букв или они появляются на клавиатуре в экстренных случаях. Просто вот так вот решил дать возможность объединить несколько несоединяемых слоя населения. Всё теперь зависит только от вас!

dbSpeaker: Общайся проще, общайся легче!

Пока существует лишь несколько «примочек»:

  • собственно, исправляет ваш текст на удобочитаемый
  • появились «жы», «шы»
  • есть вероятность в приблизительно 7% на букву, что она будет прописана в верхнем регистре. Поверьте, чем больше букв вы напишете, тем больше шанс увидеть их в верхнем регистре!
  • думал сделать это дополнительно включаемой опцией, но всё-таки включил в полный комплект: клутхо-башорго-тексто! Суперо смешно! Принцип действий проги умолчу !
  • двойные запятые !

И один минус: результат не будет заметен, если вводить туда слова, существующие как в вашем словаре, так и в их. Это что-то типа «да» «нет»

Если последуют пожелания – постараюсь наделить вопошаемым функционалом, если там, конечно, не будет запрос «дешифровка md5» или иже с ним

Mar. 13, 140 // 12:14 | Высказались (3)


WordMixer \ СловоМешалка

Не знаю насколько давно это было, но если комп не врет – то приблизительно в 2006-м году, пятого июня была создана флешка с целью поразвлечься. Когда я ее увидел – всплакнул от умиления, и решил, что нада бы ее воскресить. Так сказать, с новым AS новый словомешатель! Пришлось убрать напрягающую навигацию оставив всего 3 кнопки вместо целых четырех! Итак! Представляю вам сию глупость: словомешатель!

Добавить пару-тройку слов можно по этой ссылке

Mar. 13, 1100 // 12:13 | Высказались (0)


Blurer

Понимаю, это малокому в новинку, но все же я пишу для таких, которые малеха как я, но судя по всему хуже, потому как не знают то, что сейчас прочитают. Те, кто знают – могут не читать, правда

Дело пойдет про класс, которому даешь какую-то картинку, а он ее терроризирует! В смысле, блюрит. Вот этим и займемся. В процессе написания я встретился с такими штуками, как Matrix и Point одновременно. Я не любитель этих дел, но пришлось, ради благого дела! В общем, как бы это просто не казалось, засунуть в битмап мувик и терроризировать его, но просто это не оказалось. Вот в этом самом Matrix и Point'е дело. Как оказалось спустя небольшой метод тыка – в битмап суется картинка позицией 0, 0 (икс и игрик, естественно), а мне-то нужно блюрить не эту позицию, а, к примеру, середину картинки. Именно тут нужно задействовать Matrix. Об этом я узнал из хелпа, там мелким шрифтом написано, что bitmapData.draw использует матрицу. Я уже было захлопал в ладоши, но все же вышло не так просто. Пришлось задействовать поинт и такую фишку, как localToGlobal, если картинка, хитрая, находится во флешке не в нулевой позиции, а где-то ниже и правее. От этого приходилось доделывать код. В итоге все вышло отлично, но нормальный исходник находится не дома, посему прилагаю тот, который написан на скорую руку, что, в принципе, тоже не плохо – можно поковыряться и настроить под себя. Одна проблема – не помню как именно я использовал localToGlobal, но было весьма интересно, тут я просто вбил железно икс и игрик квадратика + икс и игрик картинки, где-то так. Так что, новички – удачи! Осторожно, третий AS, не знаю почему.

И да, квадратик, размывающий все на своем пути появится в правом нижнем углу флешки, который можно потаскать, зажав на нем мышкой.

Ну, и концерт для тех, кто не читает рсс или еще что-либо, что не отображает флеш:

AS файл качать тут: http://fsca.ru/flash/BlurRectangle.as

*upd: запамятовал залить архив со всем остальным

http://fsca.ru/flash/blurer.rar

Mar. 19, 2008 // 00:07 | Высказались (0)


Подсчет денюшек !

Не так давно ехал в маршрутке, разглядывая надпись «7% годовых! Тратата ! самолет в подарок», и задумался, вот бы круто было вложить денег и потом брать те 7% в год и радоваться, и бездельничать. И потом подумал, сколько бы мне надо было вложить в банк и через сколько лет получил бы я заветную монетку, которая позволила бы бездельничать. И ведь круто провел время, в мозгу высчитывая проценты. с каждым увеличением суммы все больше занимало время исчисление. В итоге я доехал домой почти не почувствовав длительность поездки. Радует подсчет денег, жаль несуществующих %) Ну и от безделья написал флешку, высчитывающую это дело, тем самым сократив время на подсчеты (ибо утомляет), ну и заодно практика в AS3. В скорем времени добавлю новую функцию, которая позволит мечтать еще больше.

скачать исходник

И да, всего за 50 лет из $10 000 очень просто получаете $300 000. Порадуйте внуков %)

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

Feb. 18, 2008 // 17:57 | Высказались (0)