Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   реализация паттерна singleton на AS3 (http://www.flasher.ru/forum/showthread.php?t=109596)

BlooDHounD 19.03.2008 22:17

Цитата:

Наверное потому, что экземпляр класса Request (или одного из его потомков) и экземпляр класса Connection - это немного разные сущности и не стоит их мешать в одну кучу.

Connection - синглтон, Request - посредник.
как не называй, а сиськи от этого лучше не станут. в этом прмиере (http://www.flasher.ru/forum/showpost...1&postcount=53) у вас нет таких страшных названий. мы обсуждали его на сколько я помню. у вас тут чистый синглтон ради синглтона.
о чём я повторяю уже 5 постов подряд. в этой конструкции нет смысла вовсе.
Цитата:

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

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

Да у меня тоже реализован. Причём несколько раз :)
я за вас рад. мы вот почему не стали делать одно и тоже несколько раз. тупо сохранили и используем уже год.

WindWalker 19.03.2008 22:48

Цитата:

у вас тут чистый синглтон ради синглтона.
Это был всего лишь один из вариантов реализации.
1. без использования публичных статических методов вообще.
2. с возможностью быстро и безболезненно заменить синглтон на что угодно другое.
Сам синглтон там выполняет то дело, которое у него лучше всего получается: строго блюдёт своё одиночество.

Цитата:

нууу .. вообще в "ООПешном понимании" класс тоже тип. от сюда я думаю вывод понятен.
Ага. А ещё есть такое понятие, как совместимость типов.
Чтобы класс был совместим с интерфейсом, он должен его реализовывать.
И статические методы тут явно не при делах (хотя в AS2 с помощью хаков можно было добиться и такого).

Цитата:

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

WindWalker 19.03.2008 22:56

О, вспомнил, из-за чего я разочаровлся в static'ах.
Класс ExternalInterface.
Используется для связи с неким внешним самописным приложением (далее - wrapper).

Так как часто приходиться тестировать флешку вне wrapper'а, то хочется сделать заглушку-эмулятор StubExternalInterface, который эмулирует поведение wrapper'а.
Как это сделать красиво, без "слабой" типизации?

BlooDHounD 19.03.2008 22:59

ну по поводу граблей я уже понял, что вы любитель ими обкидаться.
Цитата:

Это был всего лишь один из вариантов реализации.
1. без использования публичных статических методов вообще.
2. с возможностью быстро и безболезненно заменить синглтон на что угодно другое.
Сам синглтон там выполняет то дело, которое у него лучше всего получается: строго блюдёт своё одиночество.
1. а причём тут публичные статичные методы? мы о них ваще ни разу не упоминали.
2. ну дело в том что он там вообще не нужно никакого синглтона. тут вообще нет примера его использования. тут пример реализации обёртки, да и тот кривоват.

WindWalker 19.03.2008 23:22

Цитата:

1. а причём тут публичные статичные методы? мы о них ваще ни разу не упоминали.
А при том, что обычно зовут getInstance() или что-нибудь подобное.
В моём примере этого нет. Используются обычные конструкторы.

Цитата:

2. ну дело в том что он там вообще не нужно никакого синглтона. тут вообще нет примера его использования. тут пример реализации обёртки, да и тот кривоват.
Вдохни, выдохни, успокойся.
А потом скажи: что такое синглтон и для чего он служит?

Можешь ещё поправить реализацию обёртки, коль видишь там кривости.

terbooter 20.03.2008 10:18

Открываю я книжку GoF:
Цитата:

Паттерн Singleton
Назначение:
Гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа
...
Применимость:
Используйте паттерн Одиночка, когда:
* Должен быть ровно один экземпляр некоторого класса, легко доступный всем клиентам;
* единственный экземпляр должен расширяться путем порождения подклассов, и клиентам нужно иметь возможность работать с расширеным экземпляром без модификации своего кода.
Из этого делаю выводы (чистое ИМХО без всяких наездов):
1) Реализация глобального доступа одно из назначений синглтона.
Вот в этой книжке есть примеры для АС (Менеджеры звука, загрузки и тд):

Цитата:

Advanced ActionScript 3 with Design Patterns, 1/e
By Joey Lott, Danny Patterson
The Singleton design pattern is used to limit a class to one instance and provide global access to that instance
2) Синглтон не финальный класс.

BlooDHounD 20.03.2008 10:47

Цитата:

Сообщение от terbooter
Открываю я книжку GoF:
Из этого делаю выводы (чистое ИМХО без всяких наездов):
1) Реализация глобального доступа одно из назначений синглтона.
Вот в этой книжке есть примеры для АС (Менеджеры звука, загрузки и тд):
2) Синглтон не финальный класс.

1. зачем?
2. он перестанет быть одиночкой. это противоречие самой сути синглтона.

WindWalker 20.03.2008 10:57

Классов может быть много, а экземпляр - один.

Это, кстати, куда интересней задачка.

Сделать так, чтобы у одного класса был один экземпляр - тривиально.
А вот гарантировать что у нас один экземпляр, когда классов несколько - это уже повеселее.

BlooDHounD 20.03.2008 11:18

ага :) только она уж очень не нужна :)

WindWalker 20.03.2008 11:36

Ну это смотря у кого какие потребности.

Пример - менеджер звука.
Есть некий общий класс, который написан раз и кочует из проекта в проект.
И есть порождённый от него - специализированный для данного конкретного проекта.

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

terbooter 20.03.2008 11:54

BlooDHounD,
1) Один из наиболее обсуждаемых моментов в этом топике, хорошо ли делатьт синглтон с глобальным доступом.
Оказывается что не просто хорошо, а это его прямая цель.
Не понял только что именно зачем?

2) Как это противоречит сути синглтона?

3) Вы читали или смотрели книгу Гамма и др Design Patterns http://www.amazon.com/gp/reader/0201...pt#reader-link

BlooDHounD 20.03.2008 12:40

Цитата:

1) Один из наиболее обсуждаемых моментов в этом топике, хорошо ли делатьт синглтон с глобальным доступом.
Оказывается что не просто хорошо, а это его прямая цель.
Не понял только что именно зачем?
2) Как это противоречит сути синглтона?
3) Вы читали или смотрели книгу Гамма и др Design Patterns http://www.amazon.com/gp/reader/0201...pt#reader-link
1. как-то плохо вы читали. два самых обсуждаемых это: "нафига его ваще юзать?", "блуд - лучшее средство для похудения! пообщайся с блудом и сблевони!"
2. выше написано. перечитайте внимательнее.
3. а вычитали сравнительные анализы синглтона и статиков? мыслить надо не чужими мозгами, типа Гамма, а задачами, основываясь на опыте старых дядек (у которых мозги давно зачерствели, поэтому их по увольняли с работы и они сидят и пишут фолианты текста, ведь кушать хочется :) ) , но не повторяя их ошибок, в которых они всё равно никогда не признаются.

terbooter 20.03.2008 12:43

Эх, выходит не читали...
Пойду сблевану -)

BlooDHounD 20.03.2008 12:50

не делайте выводов, от которых вам же и приходится потом блевать :)

iNils 20.03.2008 13:13

Если вы продолжите общаться в таком ключе, то плюсы вам гарантированы.

WindWalker 23.03.2008 10:46

Самый обсуждаемый здесь момент: "что такого хорошего есть в синглтоне, ради чего стоит писать на целых 14 символов больше".
----------------------------------------

Вот ситуация, когда Одиночка нужен именно как Одиночка.

Для создания объекта B нам необходимо, чтобы уже существовал объект A.
Например, B создаётся с помощью A. Либо между ними есть какая-то связь, которая должна быть прописана сразу в момент создания.
Конкретика не важна, главное, что для создания B обязательно требуется, чтобы уже существовал A.

Но и для объекта C тоже необходимо существование A, причём того же самого. А ещё для D и E.
И создание объектов B, C, D и E раскидано по разным классам. Причём заранее неизвестно, в каком именно порядке они будут создаваться в процессе выполнения.

Вот тут-то как раз и надо, что A был Одиночкой. Когда он требуется в первый раз - создаётся. Когда требуется снова - используется уже созданный объект.

Хороший пример такой ситуации пока привести не могу. Пока есть только неудачный пример и поэтому я его приводить не буду :)

BlooDHounD 23.03.2008 11:58

а передать всем этим объектам его в конструкторе никак нельзя?

BlooDHounD 23.03.2008 12:07

+ к этому что не уверен что объектам B, C, D, ... нужен именно конкретный эземпляр. а если нужен конкретный, то зачем вообще экземпляр? не проще ли статическими методами и свойствами обойтись.

†‡Paladin‡† 23.03.2008 12:59

Цитата:

Сообщение от WindWalker
Вот ситуация, когда Одиночка нужен именно как Одиночка.

Для создания объекта B нам необходимо, чтобы уже существовал объект A.
Например, B создаётся с помощью A. Либо между ними есть какая-то связь, которая должна быть прописана сразу в момент создания.
Конкретика не важна, главное, что для создания B обязательно требуется, чтобы уже существовал A.

Но и для объекта C тоже необходимо существование A, причём того же самого. А ещё для D и E.
И создание объектов B, C, D и E раскидано по разным классам. Причём заранее неизвестно, в каком именно порядке они будут создаваться в процессе выполнения.

Вот тут-то как раз и надо, что A был Одиночкой. Когда он требуется в первый раз - создаётся. Когда требуется снова - используется уже созданный объект.

Хороший пример такой ситуации пока привести не могу. Пока есть только неудачный пример и поэтому я его приводить не буду :)

Терпеть немогу абстрактные рассуждения. Когда ты понимаешь о чем говоришь, ты сможешь объяснить на пальцах своей 70-ти летней бабушке суть и принципы концепции. Прочитал 9 страниц темы и так и не нашел конкретной, годной проблемы, где синглтон был-бы максимально уместен и его применение обуславливалось не "а я паттерны знаю!" а логичным и интуитивно понятныи решением. Насколько я помню в Cairngorm используется сингтон. Там он используется для удобства организации приложения и именно для глобального доступа к необходимой информации. Приведу пример как я это понимаю: Есть магазин. Есть у пользователья шопинг карт. Нам необходимо гарантировать, что шопинг карт у пользователя один, т.к. в других случаях может случится жестокий конфуз. Глобальный доступ при этом будет крайне удобен и почему это относят к минусам непонятно. Никаких классов B C D E F G, для которых необходим класс A, наследованный от подкласса Z.. заметьте.

WindWalker 23.03.2008 14:37

Цитата:

Сообщение от BlooDHounD
а передать всем этим объектам его в конструкторе никак нельзя?

Можно, разумеется.
Но прежде, чем передавать, нужно убедиться, что он существует.

Цитата:

+ к этому что не уверен что объектам B, C, D, ... нужен именно конкретный эземпляр. а если нужен конкретный, то зачем вообще экземпляр? не проще ли статическими методами и свойствами обойтись.
Опять двадцать-пять. Цикл замкнулся, начинаем новую итерацию обсуждения :)

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

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

Так вот статика позволяет сократить время разработки и, зачастую, улучшить быстродействие, но засчёт гибкости.
А экземпляр наоборот - более гибкий, но за счёт скорости.

Что применять в конкретном случае, зависит от конкретной ситуации.

------------
P.S.
Никто не запрещает вообще всё приложение делать статикой.
Кому вообще нужны эти экземпляры?
Сделать один-единственный класс Application, который рулит всем, и в нём только статические переменные и методы. Всё остальное - объекты встроенных классов.
Лепота!
Назад - к истокам!

BlooDHounD 23.03.2008 15:16

Цитата:

Сообщение от WindWalker
Что применять в конкретном случае, зависит от конкретной ситуации.

золотые слова. вы не описали и половины требований на своём примере, а то что в качестве аргумента привели, я же раза 4 опровергал выше. Вы приведите конкретный пример где синглтон будет удобнее чем статика, или обычный экзепляр. пока что вы воздухом в водичку пукаете, как маленький.

WindWalker 23.03.2008 16:13

Пример 1.

Аркадная игра. Бегает мужичок, стреляет в монстряков, собирает бонусы.
У мужичка есть разные параметры: очки, здоровье, патроны, и всякие там ключи для открывания дверей.
Где будем это всё хранить?

Пример 2.
Есть 10 кнопочек, которые при нажатии должны издавать одинаковый звук. Разумеется, загружать 10 раз один и тот же звук глупо - достаточно один раз и его всегда использовать.
Конечно, можно его впихнуть в какую-нибудь статическую переменную.

Но у 11-й кнопки звук должен быть уникальным, а не таким, как у других.
Как решим это через статику?

Пример 3.
Допустим, делаем какой-то графический редактор, позволяющий манипулировать различными геометрическими фигурами.
Фигуры могут быть сгруппированы.

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

BlooDHounD 23.03.2008 16:37

Цитата:

Сообщение от WindWalker
Пример 1.
Аркадная игра. Бегает мужичок, стреляет в монстряков, собирает бонусы.
У мужичка есть разные параметры: очки, здоровье, патроны, и всякие там ключи для открывания дверей.
Где будем это всё хранить?

как где? :) в модели этого человечка. всё в лучших традициях MVC. причём человечек и монстрики будут унаследованы от одного класса. ваще никакого сингтона и близко и не должно быть :)
Цитата:

Сообщение от WindWalker
Пример 2.
Есть 10 кнопочек, которые при нажатии должны издавать одинаковый звук. Разумеется, загружать 10 раз один и тот же звук глупо - достаточно один раз и его всегда использовать.
Конечно, можно его впихнуть в какую-нибудь статическую переменную.

Но у 11-й кнопки звук должен быть уникальным, а не таким, как у других.
Как решим это через статику?

интересно как это решится при помощи синглтона, если кнопочки должны издавать разные звуки? :)
Цитата:

Сообщение от WindWalker
Пример 3.
Допустим, делаем какой-то графический редактор, позволяющий манипулировать различными геометрическими фигурами.
Фигуры могут быть сгруппированы.

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

а тут где сингтон? то что у редактора будет написана какая группа дефолтная не сделает её синглтоном. вводим редакторирование одновременно 2х рисунков, и копирование между ними. весь ваш сингтон в топку.

WindWalker 23.03.2008 16:57

Цитата:

Сообщение от BlooDHounD
как где? :) в модели этого человечка. всё в лучших традициях MVC. причём человечек и монстрики будут унаследованы от одного класса. ваще никакого сингтона и близко и не должно быть

Ок. Многие объекты (аптечки, коробки с патронами, двери, пульки, монстры) могут или изменять параметры человечка (добавить/убавить) или напротив их поведение будет зависеть от параметров человечка (откроется/не откроется, подберётся/останется).

Каким образом они будут получать к ним доступ?

Цитата:

:)интересно как это решится при помощи синглтона, если кнопочки должны издавать разные звуки?
Элементарно. Кнопочке добавляем переменную экземпляра: sound.
По умолчанию пихаем туда стандартный звук, который реализован как синглтон. При необходимости пихаем туда любой другой звук.

Цитата:

:)а тут где сингтон? то что у редактора будет написана какая группа дефолтная не сделает её синглтоном.
Я надеялся, что приведёте альтернативное решение.

Цитата:

вводим редакторирование одновременно 2х рисунков, и копирование между ними. весь ваш сингтон в топку.
Совершенно верно! Именно поэтому синглтон тут более удобен, так как в случае необходимости его всегда можно послать в топку без особых последствий. О чём я и твержу уже давно.
Например, делаем так, чтобы getInstance() возвращал не единствуенную и неповторимую дефалтную группу, а дефалтную группу текущего документа. Все изменения - внутри одного класса.

А вот если бы использовали статику - сели бы в колошу.

BlooDHounD 23.03.2008 18:39

Цитата:

Сообщение от WindWalker
Ок. Многие объекты (аптечки, коробки с патронами, двери, пульки, монстры) могут или изменять параметры человечка (добавить/убавить) или напротив их поведение будет зависеть от параметров человечка (откроется/не откроется, подберётся/останется).

Каким образом они будут получать к ним доступ?

они и не будут. этим будет заниматься конроллер, у которого к ним есть доступ. как и положено.
Цитата:

Сообщение от WindWalker
Элементарно. Кнопочке добавляем переменную экземпляра: sound.
По умолчанию пихаем туда стандартный звук, который реализован как синглтон. При необходимости пихаем туда любой другой звук.

а зачем реализовывать через синглтон дефолтное значение переменной? чё-то я не въезжаю.
Цитата:

Сообщение от WindWalker
Совершенно верно! Именно поэтому синглтон тут более удобен, так как в случае необходимости его всегда можно послать в топку без особых последствий. О чём я и твержу уже давно.
Например, делаем так, чтобы getInstance() возвращал не единствуенную и неповторимую дефалтную группу, а дефалтную группу текущего документа. Все изменения - внутри одного класса.

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

Сообщение от WindWalker
А вот если бы использовали статику - сели бы в колошу.

я нигде не написал, что в данных примерах надо использовать статику. наоборот статика тут нафиг не нужна, потому что ни в одном примере вообще не требуется глобальный доступ. я бы даже сказал, что он просто затруднит всю дальнейшую разработку:
* в первом примере будет невозможно реализовать взаимодействие друг с другом, а только с человечком.
* в примере со звуком, я пока не понимаю, как там вообще увязывается синглтон.
* в 3м мы не сможем нормально работать с группами, так как некоторые из них можно получить не пойми как, так как нельзя железно знать, что "бывший синглтон" вернёт именно ту группу, которую мы ожидаем. мы же его больше не контролируем.

WindWalker 23.03.2008 20:22

Цитата:

Сообщение от BlooDHounD
а зачем реализовывать через синглтон дефолтное значение переменной? чё-то я не въезжаю.

Потому что этот же звук может использоваться для других объектов.
Например, для чекбоксов.

BlooDHounD 23.03.2008 21:01

всё равно не понимаю ... ну используется он в чекбоксах и что теперь? делаем екбокс наследником бутона, если на то пошло ...

WindWalker 23.03.2008 21:13

Вот так и знал, блин, что так скажешь :)

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

Цитата:

они и не будут. этим будет заниматься конроллер, у которого к ним есть доступ. как и положено.
То есть пихаем логику в контроллер? Разве так и положено?

BlooDHounD 23.03.2008 21:54

Цитата:

Сообщение от WindWalker
Вот так и знал, блин, что так скажешь :)

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

а какая разница? я всё равно не врубаюсь. наследуй, не наследуй ... нельзя, так передай экземпляр. у тебя 100 звуков, а зачем делать один из них синглтоном, я не понимаю.
Цитата:

Сообщение от WindWalker
То есть пихаем логику в контроллер? Разве так и положено?

эээ, что-что?

WindWalker 23.03.2008 22:19

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

Вот, скажем, есть у нас в игре про мужичка два вида аптечек: одна увеличивает здоровье на 25 хп, но не более, чем до 100, вторая учеличивает на 100 хп, но не более, чем до 200. Если уже максимум хп, то аптечка не берётся.

Мужичок наступает на аптечку (кстати, кто определяет столкновение? по идее это тоже логика). Как происходит дальнейшая обработка?

BlooDHounD 23.03.2008 23:23

Цитата:

Сообщение от WindWalker
Ну ты говоришь, что взаимодействие объектов в аркаде будет обрабатывать контроллер.

Вот, скажем, есть у нас в игре про мужичка два вида аптечек: одна увеличивает здоровье на 25 хп, но не более, чем до 100, вторая учеличивает на 100 хп, но не более, чем до 200. Если уже максимум хп, то аптечка не берётся.

Мужичок наступает на аптечку (кстати, кто определяет столкновение? по идее это тоже логика). Как происходит дальнейшая обработка?

как я понял, в разработке игр опыта никакого.
* качественная характеристика - класс модели. описание типов данных, сложных структур, не важно. (пример: аптечка)
* количественная характеристика, экземпляр класса. тут уже не просто описание, а конкретные значения. (пример: аптечка на 50хп)
* описание логики - экземпляр контроллера. может быть несколько контроллеров, которые занимаются разными частями игры. (пример: колизии)

WindWalker 24.03.2008 00:45

Да, в теории красиво. А на практике - помойка.

BlooDHounD 24.03.2008 00:56

неверно вы правы :( как все вокруг этого не замечают? срочно публикуйте статью во все журналы мира!

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

WindWalker 24.03.2008 01:12

Терпят, куда деваться-то. Делают из одного класса три, а потом костылями и подпорками соединяют их обратно в кучу.

P.S.
Цитата:

перестали присылать приглашения на работу
Я что-то так и не понял твой рецепт, как же избавиться от этих навязчивых приглашений.
Просто это очень насущная проблема. Частенько доходило до того, что отдавал другой конторе заказ, потому что был по горло занят основной работой и колымом, который та контора спихнула на меня :)
И это ещё цветочки...

BlooDHounD 24.03.2008 11:22

Цитата:

Сообщение от WindWalker
Терпят, куда деваться-то. Делают из одного класса три, а потом костылями и подпорками соединяют их обратно в кучу.

гы :) вот мы лично ничё не соединяем. всё работает как часики без всяких подпорок. может мы что-то не то делаем?
Цитата:

Сообщение от WindWalker
Я что-то так и не понял твой рецепт, как же избавиться от этих навязчивых приглашений.
Просто это очень насущная проблема. Частенько доходило до того, что отдавал другой конторе заказ, потому что был по горло занят основной работой и колымом, который та контора спихнула на меня :)
И это ещё цветочки...

бедненькай ... то-то я смотрю что у тебя работы так много, что Вы на форуме сидите.


Часовой пояс GMT +4, время: 06:31.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.