• Оправдан ли переезд в Санкт-Петербург в нынешних реалиях?

    @vitvov
    Ваше финансовое положение будет зависить от места где вы живёте. Переежжая в город, где больше денег, ваши возможности увеличиваются, так, как вы просто попадаете в другую среду. Сам переежжал уже дважды. Село - районный городок - Москва. При этом, переехал из другой страны. Самое главное, что у вас изменится - это психология. Ну и люди всегда перемещались на более выгодные территории, те кто не перемещался - продолжал жить так как раньше и не развивался. Задайте себе вопрос, кем вы хотите себя видеть через 10 лет, какая зп у вас будет, какая жена, какое окружение и где вы будете жить? Если перспективы вашего городка вас не устраивают, то переежжайте.
    Поговорите о повышении зп.
    Ответ написан
    Комментировать
  • Как увеличить скорость сборки android-приложения?

    @vitvov
    Вы можете ускорить сборку, если включите offline режим для gradle: Preferences... -> Compiler -> Gradle -> Offline mode.
    Ответ написан
    1 комментарий
  • Android: PRO версия приложения. Как лучше сделать?

    @vitvov
    Товвр "Про версия" должен быть "не возобновляем", тоесть его тип должен быть "контролируется google". Почитайте про то, какие типы товаров есть.
    Чтоб обойтись без сервера, вы действительно можете просто при старте приложения запросить покупки, которые совершал пользователь, и в случае, если он купил про версию, и не отменил её, сохранить в Preferences нужную информацию.
    Ответ написан
    6 комментариев
  • Должен ли объект в Java сериализовать сам себя?

    @vitvov
    Можно поступить разными способами. Все зависит от вашей архитектуры.
    Я бы посоветовал создать интерфейс, и наследовать его в нужном классе.
    public interface IXmlSerialize {
    	void serializeToXml(String fileName);
    	void deserializeFromXml(String fileName);
    }
    Ответ написан
    Комментировать
  • Как реализовать мобильное приложение-клиент с сервером и базой данных?

    @vitvov
    Если вы пишете на java, то можете попробовать написать серверную часть так же на java, используя сервер TomCat от Oracle. В частности вам нужно будет изучить такую вещь, как сервлеты. Но если задача маленькая, то и php может подойти.
    Ответ написан
    1 комментарий
  • Параллельное изучение Java и C# - возможно?

    @vitvov
    Я бы сказал, что параллельное владение несколькими языками это будущие любого программиста. Но если вы начинаете изучение с нуля, то стоит начать из одного. Уча один язык, вы не отвлекаетесь на синтаксис, а осваиваете ООП и алгоритмы. Знание одного языка поможет в освоении другого.
    Ответ написан
    Комментировать
  • Как заставить обновляться ListBox с помощью INotifyPropertyChanged?

    @vitvov
    1 вариант: Ваш класс должен наследовать INotifyPropertyChanged, только тогда он будет работать.
    2 вариант: ObservableCollection реализует INotifyPropertyChanged сам, поэтому, чтоб пользоватся им, ваш код должен выглядеть примерно так:
    class MyClassA
    {
          public ObservableCollection<AnotherClass> ListCode { get; private set; };
            
          public MyClassA()
          {
                // ...
                ListCode = new ObservableCollection<AnotherClass>();
          }
    
          public void GetList()
          {
                ListCode.Clear();
                // ...
                ListCode.Add(new AnotherClass());
          }
    }
    Ответ написан
    Комментировать
  • Как лучше реализовать поддержку плагинов в C#?

    @vitvov
    Все зависит от конкретной задачи.
    Лично я использовал скрипт машину для выполнения плагинов. Скрипты писались на IronPython. Пользователь выбирал задачу, приложение находило нужный скрипт, загружало его в ScriptHost и выполняло. Такая система удобна, если ваше приложение имеет собственное API, доступное из скриптов и любой желающий может написать свою задачу для приложения. SDK, пример.

    Второй вариант - это написание библиотек на C# реализующих один интерфейс. тыц
    Ответ написан
    4 комментария
  • Кто-нибудь поделиться структурой файлов Excel 2003 ( xls ), 2007 ( xlsx )?

    @vitvov
    Файлы формата xlsx и все, которые заканчиваются на "x" - это реализация Open XML.
    Структура таких файлов - это zip архив, только вместо *.zip, имеет расширение *xlsx, *docx и т.д.. Если вы измените расширение файла на .zip, то сможете посмотреть его структуру. В общем xlsx - это зазипованная папка, которая содержит папки, xml и другие файлы.
    Open XML для Office
    Open XML SDK
    Ответ написан
    Комментировать
  • С#, не выполняется this.textBox1.AppendText, другой поток?

    @vitvov
    У вас плохая архитектура приложения.
    Поясню, а дальше дам пример.
    1) MySerialPort должен генерировать события.
    2) Главное окно, где создан этот обьект, должно подписатся на событие. (В принципе, подписатся может кто угодно, но в вашем случае именно главное окно)
    3) При получении нужных данных, класс MySerialPort должен послать событие.
    4) Главное окно получило данные и отобразило их на экран.

    Теперь, как это делается:
    В отдельном файле
    DataCompleadEventArgs.cs
    описываете класс события:
    namespace MyNamespace
    { 
          public delegate void DataCompleadEventHandler(object sender, DataCompleadEventArgs e);
          public class DataCompleadEventArgs : EventArgs
          {
                private string _data;
     	    public DeviceEventArgs (string data)
     	    {
           	          _data; = data
     	    }
     	    public string Data
     	    {
                      get { return _data; }
     	    }
          }
    }


    далее в классе
    MySerialPort
    пишите следующее:
    public class MySerialPort : SerialPort
    {
          //  ваш код ...
          //  обьявляете событие
          public event DataCompleadEventHandler DataComplead;
          //  описываете функцию, чтоб слать событие наружу
          private void OnDataComplead(string message)
          {
                if (DataComplead != null) 
                {
                     DataComplead(this, new DataCompleadEventArgs(message));
                }
          }
    
          public MySerialPort() :base()
          {
                // ваш код ...
                base.DataReceived += new SerialDataReceivedEventHandler(MySerialPort_DataReceived);
          }
    
          void MySerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
          {
                // то, что тут было написано не нужно !!!
                var port = (SerialPort)sender;
                try
                {
                      // ваш код ...
                      var message = Convert.ToString(rbt);
                      if (_stepIndex == buferSize)
                      {
                            // шлём событие наружу 
                            OnDataComplead(message );
                      }
                }
                catch { }
          }
    }


    И самое главное, в основном окне:
    public partial class Form1 : Form
    {
          public Form1()
          {
                InitializeComponent();
                // ...
          }
    
          private void button2_Click(object sender, EventArgs e)
          {
                var port = new MySerialPort();
                // подписиваемся на событие
                port.DataComplead += OnDataCompleated;
                port.Open(comboBox1.SelectedItem.ToString());
          }
    
          private void OnDataCompleated(object sender, DataCompleadEventArgs e)
          {
                // получаем нужные данные
                var message = e.Data;
                writeTB1(message);
          }
    }


    Вот и всё.
    Ответ написан
    Комментировать
  • Как расставить view по горизонтали?

    @vitvov
    Чтоб элементы находились друг под другом, в LinearLayout параметр orientation нужно выставить в vertical. У всех остальных элементов, width = "match_parent"
    Ответ написан
    Комментировать
  • Как посмотреть log приложения android, когда оно не было подключено к отладчику?

    @vitvov
    Для этих целей можно установить на устройство стороннее приложение, например CatLog или что то другое.
    Ответ написан
    5 комментариев
  • C# com-порт получение информации, обработка старт-бита, стоп-бита?

    @vitvov
    Если я правильно понял ваш вопрос, то ваше устройство шлёт постоянно данные и вам нужно только читать.
    Все что вам нужно, это создать подключение к порту и подписаться на событие обновления. При возникновении события вы получите массив данных с порта, этот массив вы сохраняете в буфер или разбираете на лету (как вам удобнее). Напишу для вас маленький пример:
    //  Наследуем наш клас от SerialPort для более красивого кода
    public class MySerialPort : SerialPort
    {
            private const int DataSize = 54;    //  я так и не понял, какой размер данных нужен. Укажите правильное число в байтах
            private readonly byte[] _bufer = new byte[DataSize];
            private int _stepIndex;
            private bool _startRead;
    
            public MySerialPort(string port)
                : base()
            {
                //  все папаметры вы должны указать в соответствии с вашим устройством
                //base.PortName = COM1;
                base.BaudRate = 115200;
                base.DataBits = 8;
                base.StopBits = StopBits.Two;
                base.Parity = Parity.None;
                base.ReadTimeout = 1000;
    
                //  тут подписываемся на событие прихода данных в порт
                //  для вашей задачи это должно подойт идеально
                base.DataReceived += SerialPort_DataReceived;
            }
    
            //  открываем порт передав туда имя
            public void Open(string portName)
            {
                if (base.IsOpen)
                {
                    base.Close();
                }
                base.PortName = portName;
                base.Open();
            }
    
            //  эта функция вызвется каждый раз, когда в порт чтото будет передано от вашего устройства
            void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                var port = (SerialPort)sender;
                try
                {
                    //  узнаем сколько байт пришло
                    int buferSize = port.BytesToRead;
                    for (int i = 0; i < buferSize; ++i)
                    {
                        //  читаем по одному байту
                        byte bt = (byte)port.ReadByte();
                        //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
                        if (0xFF == bt)
                        {
                            _stepIndex = 0;
                            _startRead = true;
                            //  раскоментировать если надо сохранять этот байт
                            //_bufer[_stepIndex] = bt;
                            //++_stepIndex;
                        }
                        //  дописываем в буфер все остальное
                        if (_startRead)
                        {
                            _bufer[_stepIndex] = bt;
                            ++_stepIndex;
                        }
                        //  когда буфер наполнлся данными
                        if (_stepIndex == DataSize && _startRead)
                        {
                            //  по идее тут должны быть все ваши данные.
    
                            //  .. что то делаем ...
                            //  var item = _bufer[7];
    
                            _startRead = false;
                        }
                    }
                }
                catch {}
            }
    }

    использовать это нужно так:
    var port = new MySerialPort();
    port.Open("COM5");

    Это код прототипа, всего лишь техника работы которая может помочь вам.
    Ответ написан
    2 комментария
  • У всех задержки обновления статистики в Google Play Developer Console?

    @vitvov
    Статистика в Google Play Developer Console в среднем опаздывает на два дня. Когда то интересовался этим вопросом и как выяснилось - за это время просто собирается и подготавливается информация из разных серверов. Иногда может быть больше двух дней. Если у вас задержка 4 дня, то значит и у других так же.
    Ответ написан
    Комментировать
  • Как установить Binding к полю класса содержащийся в другом классе?

    @vitvov
    Если я правильно понял вопрос, то надо писать так:
    <TextBlock Text="{Binding Path = prop.Name}" />
    А классы Properties и A должны реализовать интерфейс INotifyPropertyChanged
    Ответ написан
    Комментировать
  • AsyncTask и поворот экрана без android:configChanges, как реализовать?

    @vitvov
    Простым решением может быть блокировка поворота экрана перед запуском AuthTask и разблокировка после.
    Ответ написан
  • Сервис для перевода своих приложений другими?

    @vitvov
    Пользуюсь transcommu.yasesprox.com для перевода на android.
    Сервис удобен тем, что переводить можно как в веб интерфейсе так и внутри приложения.
    Ответ написан
    Комментировать