Pull to refresh
8
0
Реминный Александр @LexRema

User

Send message
techposters.net
Можно хоть всю квартиру обклеить и еще на 9-ти этажку останется.
Походу автор поста не является хозяином сервиса.
Не вспомнят. Социальные условно бесплатные сервисы будут казаться высочайшим благом всегда. Человеку будет казаться, что все для него, но основное, что там для него — строка контестной рекламы над редактируемым сообщением.
Сам с удовольствием пользуюсь их сервисами, но факт остается фактом — сервисы только кажутся бесплатными :).
В мире где миллионы людей сидят в социальных сетях — все проекты обретают определенный смысл. Некоторые — для довольно узких кругов.
Интересно, что Вам отсюда пригодилось?
Ну… Многие же вернулись :)

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

Предположим есть клас А и клас Б, которые генерируют определенные сообщения. Каждое сообщение содержит константу. Эта константа позволяет различать отдельные сообщения.

Решение в лоб. Можно создать БОЛЬШОЙ список констант, который будет содержать все константы сообщений.
Вытекающая проблема — с добавлением новых сообщений в списке можно потеряться и, например, продублировать значение констант для разных сообщений.

Вариант решения. Создавать в коде только контейнеры для идентификаторов сообщений, заполнять их с помощью Reflection на старте программы.

Как выглядит:

Контейнер идентификатора сообщения и атрибут, помечающий класс как содержащий в себе набор идентификаторов сообщений:

[AttributeUsage(AttributeTargets.Class, Inherited = true, AllowMultiple = false)]
 public class EventIDAttribute : Attribute
 {
 };

 public class EventID
 {
  public EventID(int id, string name)
  {
   ID = id;
   Name = name;
  } 

  public int ID
  {
   {private set; get }
  }

  public string Name
  {
   {private set; get }
  }
 };


Класс, отвечающий за инициализацию контейнеров сообщения на старте программы:

public class EventInitialiser
  {
    private static int _id;

    public static void Init()
    {
      foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
      {
        foreach (Type type in assembly.GetTypes())
        {
          if (IsEventClass(type))
          {
            FieldInfo[] fields = type.GetFields();
            foreach (FieldInfo fieldInfo in fields)
            {
              if (fieldInfo.FieldType == typeof(EventID))
              {
                int newID = System.Threading.Interlocked.Increment(ref _id);
                EventID newEventID = new EventID(newID,
                  string.Format("{0}.{1}", fieldInfo.ReflectedType.FullName, fieldInfo.Name));
                
                fieldInfo.SetValue(null, newEventID);
                EventIDCache.AddEventToCache(newEventID);
              }
            }
          }
        }
      }
    }

    private static bool IsEventClass(Type type)
    {
      object[] attributes = type.GetCustomAttributes(typeof(EventIDAttribute), true);
      return (null != attributes && attributes.Length > 0);
    }
  };


И наконец, группы идентификаторов сообщений. Они могут находиться в разных пространствах имен, библиотеках. Но их значения с таким подходом — всегда будут уникальны.

  [EventID]
  public class SomeUIEventIDs
  {
    public static EventID SomeButtonWasClicked;
    public static EventID SomeTextWasTyped;
  };

  [EventID]
  public class SomeCoreEventIDs
  {
    public static EventID SomeErrorOccured;
  };


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

  public void ProcessMessage(EventID eventId, object sender, EventArgs args)
    {

      if (SomeUIEventIDs.SomeButtonWasClicked.ID == eventId.ID)
      {/*Operation 1*/      }

      else if (SomeUIEventIDs.SomeTextWasTyped.ID == eventId.ID)
      {/*Operation 2*/      }

      else if (SomeCoreEventIDs.SomeErrorOccured.ID == eventId.ID)
      {/*Operation 3*/      }     
    }

осталось из ИЕ сделать браузер, а не программу для скачки браузера.

Согласен на 100, так как зачастую после установки чистой системы лично у меня все именно так и происходит.
не-не-не… Это только для смертников, этот контрол. У меня с ним студия падала в режиме дизайнера тучу раз.

Если хочется чего-либо более-менее приличного — www.qiosdevsuite.com/. Там бесплатная комерческая лицензия при условии регистрации. Это для WinForms.
Помоему, это касается любого риббона, даже разработанного самостоятельно. Ведь лицензирование проходит уже не столь реализации, а концепта риббона, который был придуман изначально для офиса.
Класс… а как Вы отвечаете с закрытыми вкладками???
Как по мне, эта игра описывает отношение к качеству в социалках. Там оно просто не нужно :).
Лучше б за это время кофе себе сделал…
Ну, я предлагал бы только их рекламную кампанию заимствовать. Просто для популяризации такой вещи как электромобиль — нужен нестандартный подход.

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

А здесь если совместить дизайн и экологическую концепцию — все выиграют.
Пускай за производство электромобилей берется Apple — они найдут как за пару дней продать миллионы автомобилей :).
Лишь бы все не закончилось на декларативном уровне. Сила подписанной бумажки к сожалению не всеобъемлющая.
«Так, по новым правилам, изданным для осуществления нового закона, устанавливаются санкции против провайдеров, которые попытаются ввести любые ограничения при доступе в глобальную сеть.»
Интересно, почему там такие пункты в отношениях разных провайдеров? Неужели провайдеры в Чили сами ограничивают своих абонентов? Как то интересно звучит.
Один из самых дешевых видов электрической энергии — атомная. А еще надо вспомнить про зеленые источники — энергия ветра, солнца и т.п. Так нечаянно нефть и в стороне может оказаться. А она ох как этого не желает.
1

Information

Rating
Does not participate
Registered
Activity