1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. gouranga
  2. gouranga
  3. gouranga
    Я считаю, что автор в праве как указывать цену, так и отправлять в пм. Во-первых, это клиенту нужен его софт. И если нужен — клиент напишет. Как минимум для сравнения цены с конкурентами, если такие есть. Во-вторых, каждый оценивает свои трудозатраты по-разному, каждый использует разное ценообразование. В итоге, если цена какому-то человеку покажется завышенной — топик превратится в срач, а не в обсуждение конкретной программы. Плюс отправка в ПМ позволяет мягко показать человеку, что ты не хочешь с ним работать. Либо хочешь, но за ОГРОМНЫЕ бабки. :) Но, разумеется автору тоже хочется свой софт продать. Поэтому, тут нужно взвешенное и продуманное решение, особенно для начинающих разработчиков. Например, я бы ни на секунду не задумался узнать цену у Алекса, Джо, Гибата, Андрея и многих других — что может быть страшного в написании личного сообщения?.. Заодно можно узнать какие-то дополнительные детали и уточнить, как оплачивать.
    Сообщение от: gouranga, 11 ноя 2014 в разделе: Сообщество
  4. gouranga
  5. gouranga
  6. gouranga
  7. gouranga
  8. gouranga
    I have only these: [IMG]
    Сообщение от: gouranga, 23 авг 2014 в разделе: PW Клиент
  9. gouranga
  10. gouranga
  11. gouranga
  12. gouranga
  13. gouranga
    Или же если это возможно, то скажите взялся бы кто-нибудь за такую работу и сколько бы запросил за нее денег? Так скажем "Много" Ну, много, для каждого человека понятия разные :) Может быть есть какие-то примеры по другим проектам, не видели? Реверс инжиниринг тема дорогостоящая, и если я правильно понял, то специалиста именно этой "сферы деятельности" мне нужно искать. Очень дорогостоящая. Тем более тут нужен серьезный опыт: разбор протокола обмена данными, криптография (хотя на стадии альфа скорее всего шифрования нет) и т.д. и т.п. Человек нужен умный, смекалистый. Плюс разработчики тоже не лохи, наверняка защищают свое детище. Так скажем "Много" Ну, много, для каждого человека понятия разные :) Может быть есть какие-то примеры по другим проектам, не видели? Реверс инжиниринг тема дорогостоящая, и если я правильно понял, то специалиста именно этой "сферы деятельности" мне нужно искать. Ну я так думаю не меньше чем 100к рублей. ~ 100k это в лучшем случае пара месяцев разработки. Если людей несколько, то вообще один. За доброе слово никто работать не будет. А за месяц-два сервер не сделать, если исходных данных никаких нет.
    Сообщение от: gouranga, 7 апр 2014 в разделе: Другие
  14. gouranga
  15. gouranga
  16. gouranga
  17. gouranga
  18. gouranga
    Попросили разжевать. Ок, погнали. 0. аааа, название структуры Object! убейте меня! 1. Использование структур. Структуры изначально появились в c# для того, чтобы взаимодействовать с winapi и всяким com-подобным хламом. Тому есть миллион причин, цитировать книжки я не буду. Используйте классы. 2. Повсюду static (иногда еще и protected static, sic! :) ). Безумие. Как потом поддерживать этот код? Static-классы в c# для меня это в первую очередь лучшая альтернатива Singleton'у — главному антипаттерну тысячелетия. :) 3. pdev верно заметил про using. Еще отмечу, что использовать любые потоки как поле в классе должно автоматически вынуждать реализовывать интерфейс IDisposable. Именно поэтому я, например, использую using, чтобы не громоздить говно в куче — его и без нас там хватает. Идеально (для загрузки/сохранения) передавать инстанс Stream/BinaryReader и потом читать. А после прочтения этот инстанс с помощью using уйдет в небытие — лепота. Заметьте, что никто не мешает сохранить путь к файлу, заблокировать его для чтения-записи для других или отслеживать внешние изменения в нем. 4. Конечно же, двойное чтение. При том, ладно бы чтение одной конкретной записи (еще не страшно, удалится на очередной итерации GC), так нет, чтение ЦЕЛИКОВОГО файла в byte[], а потом разбор этого byte[]. Адский ужс. Я поясню: такой подход даже теоретически увеличивает объем потребляемой памяти в два размера загружаемого файла. Загрузили файл размером N*M в byte[], а потом создали массив struct Object размера N. А что если файл будет хотя бы 100мб? Будет потребление > 200 мб. А если бы была поддержка множественного открытия файлов (ее нет из-за static)? :) Я всегда говорю, что память не ресурс, т.к. сейчас у всех уже минимум 8 гб, но зачем городить адский ад, когда можно сделать лучше. 5. Массивы. Это отлично для каких-то вещей, но для нашего конкретного случая — не годится никуда. Хотя бы List. Это достаточно быстрая коллекция. Прикрепляю код, который на мой взгляд более удобен в плане поддержки и разработки. Так же он позволит быстро писать ViewModels для байндинга в WPF. Ключевые моменты: 1) Простая загрузка и сохранение: DynResourceCollection model = null; using (var stream = File.Open("dynamicobjects.data", FileMode.Open)) using (var reader = new BinaryReader(stream)) { model = reader.ReadModel<DynResourceCollection>(); } using (var stream = File.Open("dynamicobjects-written.data", FileMode.Create)) using (var writer = new BinaryWriter(stream)) { writer.WriteModel(model); } 2. Легкореализуемое подключение IoC — кому надо поймет. :) 3. Легкореализуемое проксирование к модели из ViewModel. 4. Полностью отдельный механизм чтения/записи данных, в котором можно реализовать поддержку версий файла или свои форматы данных: internal class DynResourceCollection : List<DynResource>, IBinaryModel { private const uint Magic = 'D' | 'I' << 8 | 'M' << 16 | 'P' << 24; // DIMP #region IBinaryModel Implementation void IBinaryModel.ReadInternal(BinaryReader reader, int version) { var inSign = reader.ReadUInt32(); if (inSign != Magic) throw new Exception("Unhandled type."); int count = reader.ReadInt32(); for (int i = 0; i < count; i++) { var model = reader.ReadModel<DynResource>(); Add(model); } } void IBinaryModel.WriteInternal(BinaryWriter writer, int version) { writer.Write(Magic); writer.Write(Count); for (int i = 0; i < Count; i++) { writer.WriteModel(this[i]); } } #endregion // IBinaryModel Implementation } internal class DynResource : IBinaryModel { private string _path; public uint Id { get; set; } public string Path { get { return _path; } set { _path = string.IsNullOrWhiteSpace(value) ? string.Empty : value; } } ... #region IBinaryModel Implementation void IBinaryModel.ReadInternal(BinaryReader reader, int version) { Id = reader.ReadUInt32(); var length = reader.ReadInt32(); Path = reader.ReadString(Encoding.GetEncoding("GBK"), length); } void IBinaryModel.WriteInternal(BinaryWriter writer, int version) { writer.Write(Id); var length = Encoding.GetEncoding("GBK").GetByteCount(Path); writer.Write(length); writer.Write(Path, Encoding.GetEncoding("GBK"), length); } #endregion // IBinaryModel Implementation } Да, кода стало чуть больше. Но он: быстрее, ест меньше памяти, в нем проще разобраться.
    Сообщение от: gouranga, 13 фев 2014 в разделе: .NET
  19. gouranga
  20. gouranga