• Как правильно отчитаться за рубли от upwork//НКО Рапида?

    Zifix
    @Zifix
    Barbatum
    1) Раз просят пройти ВК — значит операция валютная, деньги через резидента передал нерезидент, тем более UPWORK упомянут.

    2) Ну так и объяснять что конвертация. Самое страшное что вам грозит — это штраф в десяток-другой баксов, но это маловероятно.

    Все зависит от банка, но в общем случае:

    Надо поговорить с валютным контролем и просто выполнить его инструкции. В общем случае все как обычно, отправляете переведенный договор с подписью и печатью, в качестве подтверждения суммы можно использовать скриншот письма от апворка. Если переживаете, для налоговой можно сделать аналогичные документы дополнительно, по аналогии с обычным выводом долларов — акты, инвойсы и т.д.

    Эльбу спрашивали про скриншоты, она ответила что в печатном виде, с печатью и подписью — возможно, удовлетворит налогового инспектора. На самом деле любые документы без бумажного оригинала с подписями сторон ручкой — это вообще филькина грамота разной степени правдоподобности, главное чтобы вообще хоть какие-то документы были.
    Ответ написан
    3 комментария
  • Сборка android c собственным launcher и с собственными приложениями без запроса permission, возможно ли?

    DrZ0idberg
    @DrZ0idberg
    Android-разработчик. Стаж - возраст Android.
    А что понимается под "собственной сборкой Android"? Если сборка из исходников, то тут полёт фантазии практически не ограничен - хоть весь Андроид перепиши, были бы скиллы соответствующие. Как пример - MIUI, CyanogenMod как раз такие модификации ОС.
    Если же какая-то сборка из готовых бинарников, тогда вряд ли.
    Ответ написан
    1 комментарий
  • GUI приложение под Windows?

    rdifb0
    @rdifb0
    Программист, реалист
    Windows + C# = ♥
    Ответ написан
    Комментировать
  • Какие требования у.NET при стандартной сериализации?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Чтобы класс можно было сериализовать, необходимо пометить его атрибутом [Serializable].
    [Serializable]
    public class MyClass 
    {
    }

    Атрибут [Serializable] также должны иметь все типы, которые включены в класс. Если у какого-то из типов не будет этого атрибута, то при попытке выполнить сериализацию, возникнет исключение. Это минимум, что необходимо.

    Для двоичной сериализации используется класс BinaryFormatter.
    // данные, которые будем сериализовать
    var data = new List<int> { 1, 2, 3 };
    
    // выполняем сериализацию 
    // в MemoryStream (можно в любой Stream)
    var bf = new BinaryFormatter();
    var m = new MemoryStream();
    bf.Serialize(m, data);
                
    // курсор потока переводим в начало, т.к. мы работали с потоком выше
    // если открывать новый поток, то это делать не обязательно
    m.Position = 0;
    // выполняем десериализацию данных из MemoryStream
    var result = (List<int>)bf.Deserialize(m);
    
    // выводим результат в консоль
    result.ForEach(itm => Console.WriteLine(itm));


    Если в объекте попадется тип, который не помечен атрибутом [Serializable], то можно реализовать в классе интерфейс ISerializable. Либо сделать для этого типа отдельный класс, реализующий интерфейс ISerializable. При этом, не забывая про атрибут [Serializable], который обязательно должен присутствовать.

    При реализации интерфейса ISerializable, в классе нужно определит метод GetObjectData, который будет подготавливать данные для сериализации. А также реализовать перегрузку конструктора для принятия сериализованных данных.
    public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
    {
      if (info == null)
      {
        throw new ArgumentNullException("info");
      }
      info.AddValue("Ключ", "Значение");
      info.AddValue("Ключ2", this.ИмяСвойства); 
      // и т.д.
    }
    
    // конструктор
    protected ИмяКласса(SerializationInfo info, StreamingContext context)
    {
      if (info == null)
      {
        throw new ArgumentNullException("info");
      }
      this.Свойство = info.GetValue("Ключ", typeof(типДанных));
      this.ИмяСвойства = (string)info.GetValue("Ключ2", typeof(string));
      // и т.д.
    }

    Часто спрашивают, как сериализовать Dictionary<TKey, TValue>. На основе всего выше изложенного, можно сделать вот такой класс:
    [Serializable]
    public class MyDictionary : Dictionary<string, object>, ISerializable
    {
    
      public MyDictionary() { }
    
      protected MyDictionary(SerializationInfo info, StreamingContext context)
      {
        if (info == null)
        {
          throw new ArgumentNullException("info");
        }
        int count = info.GetInt32("Count"); // получаем число элементов
        for (int i = 0; i < count; i++) // перебираем элементы
        {
          // получаем ключ и значение по индексу элемента
          string key = info.GetString(String.Format("ItemKey{0}", i));
          object value = info.GetValue(String.Format("ItemValue{0}", i), typeof(object));
          // добавляем элемент в себя
          this.Add(key, value);
        }
      }
    
      public void GetObjectData(SerializationInfo info, StreamingContext context)
      {
        if (info == null)
        {
          throw new ArgumentNullException("info");
        }
        // перебираем все элементы коллекции
        int i = 0;
        foreach (KeyValuePair<string, object> item in this)
        {
          // добавляем отдельно ключ и значение
          info.AddValue(String.Format("ItemKey{0}", i), item.Key, typeof(string));
          info.AddValue(String.Format("ItemValue{0}", i), item.Value);
          i++;
        }
        // запоминаем, сколько всего элементов
        info.AddValue("Count", this.Count);
      }
    }

    Пример использования:
    // выполняем сериализацию коллекции
    var data = new MyDictionary();
    data.Add("Key", "Value");
    data.Add("Key2", "Value2");
    data.Add("Key3", 123);
    
    var bf = new BinaryFormatter();
    var m = new MemoryStream();
    bf.Serialize(m, data);
    
    // выполняем десериализацию
    m.Position = 0;
    var result = (MyDictionary)bf.Deserialize(m);
    
    // выводим результат
    foreach (var item in result)
    {
      Console.WriteLine("{0} = {1}", item.Key, item.Value);
    }

    Посмотреть в .NET Fiddle, как это работает.
    Ответ написан
    Комментировать
  • Смена места жительства. Перепрофилирование. Удаленная работа. С чего начать?

    Eternalko
    @Eternalko
    Учитывая вашу специализацию, возможно стоит подумать о собственном бизнесе? В регионе тоже есть много маленьких фабрик. Они бы могли воспользоваться вашими знаниями.
    Ответ написан
    4 комментария