• Как организовать файловое хранилище пользователей (виртуальная фс или нативная)?

    Тут уже упомянули хеши, советую вам основательно над ними подумать. Сейчас хэши считаются довольно быстро на современном железе, так что подумайте о content-adressable файловой системе. На классическую ФС мапается элементарно: хэш бьется на нужное количество кусков и по ним формируется вложенная структура, что-то вроде f5/c3/ab/1414.... . Иерархию папок хранить в БД, не знаю правда что для этого лучше использовать, по идее реальная ФС как раз-таки лучше подходит для хранения вложенной структуры, чем например, реляционная БД. Так что нужно будет основательно поисследовать в этом месте - какую БД взять для метаданных о файлах. Ну и собственно помимо остальной метаинфы писать хэш контента, и находить реальное содержимое по хэшу. Шардиться такое решение должно очень хорошо, плюс, как отметил Тимур Шемсединов, будет выигрыш от недублирования файлов (если реализовать более умную систему, которая будет считать ссылки на конкретный хэш). Вероятность совпадения хэша очень очень низкая, для надежности еще можно проверку на размер поставить, хотя врядли за время использования вы с таким случаем столкнетесь.
    Ответ написан
  • Для чего нужна передача объекта в функцию по значению и по указателю в С++?

    Nipheris
    @Nipheris Куратор тега C++
    Как передавать - по значению или по указателю - целиком зависит от природы объекта (ссылки - отдельная история, отвечу ниже).
    Существует две важнейших категории обрабатываемых в программе данных, которые редко рассматриваются в явном виде, но от которых, как говорится, не убежишь, по кр. мере в нефункциональном языке.
    Первая категория - это "значения". Я не готов вам дать сейчас точное определение, но можете представлять себе эту категорию как те значения, что вы знаете из математики. Особенностью этих "значений" является то, что они несут ровно столько информации, сколько в них самих есть (в их представлении в ЭВМ). Ну то есть если вы видите строку "Василий", и другую строку "Василий" в другом месте, то как "значения" они ничем не отличаются. Также, одно целочисленное значение 5 ничем не отличается от другого 5. Кроме того, у значения нет жизненного цикла - у него нет прошлого и будущего, оно есть такое, каким оно было создано. Иными словами, у значения нет понятия изменяемости, оно не привязывается ко времени. Значение 6 - это уже другое значение, и неважно, как оно было получено. Важно, что значения не обязательно должны быть примитивными: комплексное число (5, 7) это такое же значение, как и его составляющие 5 и 7.
    Вторая категория - это "переменные". Это уже совсем другие сущности в программе. Это такие контейнеры, куда кладутся значения, причем под "кладутся" понимается хорошо знакомая вам операция присвоения. Важно, что несмотря на то, что переменная как контейнер может содержать различные значения в разные промежутки времени, у нее всегда есть некоторый неизменный идентификатор. В языках с прямым доступом к памяти, таких как C++, это указатель. Неважно, где находится ваша переменная - на стеке или в куче - важно, что это контейнер, и у него есть уникальный идентификатор. Т.к. содержимое контейнера может изменяться - то мы можем говорить о прошлом и будущем этого контейнера, зная его идентификатор.
    Если сузить понятие объекта до такой сущности, которая может изменять свое состояние, то объект в проекции на язык C++ - ничто иное, как переменная с четко определенным интерфейсом изменения состояния. Отсюда вытекает, что в плюсах identity объекта - это есть указатель на участок памяти, где этот объект находится.
    Когда вы сравниваете значения, вы должны сравнивать их "начинку". Понятно, что ваши значения технически лежат в каких-то переменных, но 5 и 5 будут равны вне зависимости от того, где каждая из них находятся.
    Другое дело объекты. Их природа такова, что один Студент не эквивалентен другому Студенту, если их identity, т.е. указатели, различаются (соотв-но, если указатели совпадают, то это, безусловно, один и тот же Студент). Это в общем-то очень хорошо моделирует реальный мир: даже если у студентов совпадают ФИО и дата рождения (и вообще все данные, что мы о них имеем) это не значит, что это один и тот же человек.
    Когда вы плотнее займетесь ООП в C++ вы поймете, что именно адрес объекта в памяти - первичная информация для начала манипуляций с объектом. Адрес можно передать не только указателем, но и ссылкой, однако именно указатели, например, удобно сравнивать друг с другом. Список из студентов - это std::list<Student*>, а не std::list<Student>. Безусловно, вам никто не мешает использовать второй вариант, но тогда ваши студенты будут значениями (!), а не объектами (кстати, именно во втором случае std::list потребует от вас оператора сравнения для студентов).
    Т.к. в С++ все значения копируются по умолчанию (перемещение сейчас не рассматриваем), то для моделирования "объектов", как самостоятельных сущностей с собственным жизненным циклом, нам нужны указатели и ручное управление памятью.
    Ссылки - это лишь обертка, которая превращает указатель либо в l-value, либо в r-value, в зависимости от ее типа. const string& - это экономный способ смоделировать передачу "значения", а Student& - это по сути то же самое, что и Student*.
    Ответ большой и сумбурный, но вам нужно еще со многим разобраться. Если что не понятно - спрашивайте в комментах.
    Ответ написан
    3 комментария
  • Как Реализовать многослойный canvas с поддержкой прозрачности слоев?

    Nipheris
    @Nipheris Куратор тега C#
    Вам нужно определиться с количеством ресурсов, которое вам доступно. Безусловно, редактор с ядром на opengl будет очень шустрым (вон сейчас фотошоп активно пользуется аппаратным ускорением), но не факт, что вам хватит времени и умения использовать его напрямую.
    С другой стороны, вы можете попробовать написать нужные вам обработки самостоятельно, в виде обычного CPU-кода, но без использования WinForms для чего либо, кроме вывода изображения. Вы видимо пытались применить панельки для работы со слоями, это конечно будет крайне неудобно, и многое чего не выйдет. Советую попробовать поработать с этими задачами (смешение слоев, работа с прозрачностью и т.д.) самому, т.е. использоват только один picturebox для вывода готовой картинки.
    Ответ написан
    1 комментарий
  • Картография и программирование?

    Не знаю, что вы имеете в виду под "перейти в область", если вы программист, то вам стоит не "переходить", а специализироваться, если вам это интересно. Я это говорю как человек, который сейчас плотно занимается ГИС-системами - опыта в этом направлении пока маловато, но также как и у вас - есть большой интерес и обоснованное ощущение полезности разрабатываемых проектов (в противоположность многим другим разработкам в IT). Поэтому просто продолжайте программировать и постигайте карты, начиная с простейших вещей. Вы много с чем столкнетесь, для меня самым сложным пока были системы координат и неевклидова геометрия с ними связанная. Собственно, в этом и вся геодезия.
    При всем этом я не берусь называть себя геодезистом, я по прежему программист, ГИС это скорее специализация. Ничего нереального в вашей задумке нет, область большая и востребованная (особенно сейчас, когда наконец проснулись отечественные информационные системы, желающие перевести побольше дореволюционных бумажных сведений в удобоваримый вид).
    Высшее образование вам понадобится (это по закону так), только если вы захотите плотно заняться именно картографическими данными - межеванием, измерениями, подготовкой документов и прочими делами. Лично мне это пока не нужно было.
    Могу вам накидать кучу аббревиатур и технологий, с которыми успел столкнуться за 3+ лет (я дотнетчик, поэтому и набор соответствующий):
    1) PosgtreSQL + PostGIS - некоторое врпмя сидели на MySQL, но потом перекатили проект сюда, возвращаться и не думали, все-таки это стандарт де-факто в ГИС СУБД
    2) NetTopologySuite - дотнетовский клон JTS - библиотеки, реализующей основные примитивы и алгоритмы обработки геометрии (точка, линия, полигон, поиск пересечений, касаний, расчет площади и т.д.) - пока хватает за глаза;
    3) NHibernate в комбинации с NHibernate.Spatial - ORM №1 для нас. Начинали разработку, когда EF еще пешком под стол ходил, но и сейчас я бы выбрал ее, очень мощная либа, особенно с плагином Spatial для поддержки маппинга Geometry-полей
    4) SharpMap - движок карт. Качество среднее, но с учетом того, что он некоммерческий (LGPL), то вполне сойдет.
    5) QGIS - гис-система, важный инструмент, помимо Visual Studio.
    Это наш стек. Ну а вообще можете еще погуглить: WFS/WMS, GeoJSON/TopoJSON, GeoServer (пока не пользуемся, подключим, если понадобится WFS-сервер).
    Ответ написан
    Комментировать
  • Как создать XPath запрос для Polyline.Points?

    Nipheris
    @Nipheris Куратор тега C#
    К сожалению, забиндить XPath-запрос, возвращающий несколько узлов, на какое-либо свойство типа, не имеющего отношения к XML-структуре документа (например, на свойство типа string) невозможно, т.к. это потребует агрегации этого множества узлов в единственное значение (строку), а как делать эту агрегацию в общем случае - непонятно. Т.е. неясно, как собрать ОДНУ строку из нескольких значений атрибутов Value.
    Могу порекомендовать вам два пути:
    1) превратить ВСЕ содержимое узла Points в одну строку. Вот работающий вариант:
    <Window x:Class="PolygonTest.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Window.Resources>
            <XmlDataProvider x:Key="ChartData">
                <x:XData>
                    <Root xmlns="">
                        <Chart>
                            <Title>График 1</Title>
                            <Points Color="Black">
                                1,1 10,10
                                40,30 20,20
                                15,87
                            </Points>
                        </Chart>
                    </Root>
                </x:XData>
    		</XmlDataProvider>
    	</Window.Resources>
        <Grid Name="grid" DataContext="{Binding Source={StaticResource ChartData}}">
            <Polygon Name="polygon" Points="{Binding XPath=/Root/Chart[1]/Points}" Stroke="#FFD33D3D" />
        </Grid>
    </Window>


    2) обработать XML вручную, в обход WPF и каких-либо привязок, во viewmodel-и самому собрать нормальную PointCollection, выставить эту коллекцию как свойство и забиндиться к нему из полигона обычным биндингом

    Вот обсуждение проблемы на SO, похоже ваш случай, только проще. В ответе пишут, что не помогает даже попытка применить конвертер, так как множество узлов обрезается до самого первого сразу же.
    Ответ написан
    Комментировать
  • Как убрать таблицу в RichTextBox (Visual Studio)?

    Nipheris
    @Nipheris Куратор тега C#
    Посоветую поискать, как заставить текстбокс принимать только plain-text при вставке. Не уверен, что есть такая настройка, но по сути это то, чего нужно добиться. В зависимости от типа контента, который готова принять программа, Excel отдаст нужное содержимое.
    Ответ написан
    Комментировать
  • Какую библиотеку выбрать для создания GUI-приложений?

    Nipheris
    @Nipheris Куратор тега C++
    Ничего не имею против GTK, но для серьезных приложений с будущей поддержкой - Qt. С будущим у него все нормально. Если отбросить вопрос сложности языка (C++ против Java/C#), то на сегодняшний день я бы порекомендовал его даже для Windows-only приложений.
    Сейчас очень интересно выглядят современные наработки, такие как Qt Quick.
    Ответ написан
    4 комментария
  • Как нагрузить процессом только конкретные ядры процессора?

    vilgeforce rdvlip Все есть в юзермоде:
    https://en.wikipedia.org/wiki/Processor_affinity
    https://msdn.microsoft.com/en-us/library/windows/d...

    Так что дело за малым - прокинуть вызов из питона в винапи)) (если речь про винду).
    Кстати, эта функция даже в Диспетчере задач есть.
    Ответ написан
    3 комментария
  • Какова должна быть структура проекта на Qt?

    Nipheris
    @Nipheris Куратор тега C++
    Я думаю структура проекта мало определяется самим Qt, и будет такая же, как и других C++ - проектов. Однако положить файлы в подпапку вам никто не запрещает.
    Ответ написан
    Комментировать
  • Что лучше поставить на старый комп?

    Почти такая же конфигурация (тоже обновили до 10-ки), только оперативы 4 гига, все работает отлично. Так что и я присоединяюсь к остальным - добавьте 2, а лучше 4 гига оперативы, и хватит с головой еще года на четыре точно. А то что хром все жрет - это скажите спасибо джаваскрипту и разработчикам. Закрывайте вкладки, короче))
    Ответ написан
    Комментировать
  • Как перенести приложения?

    > Руками переносить из папки users, думаю, плохая идея.
    Вовсе не факт, зависит от приложений. Если приложение не времен Windows XP и удовлетворяет современным требованиям, то пользовательские данные должны лежать в определенных местах (например, в AppData\Roaming). Например, Firefox весь профиль хранит там, поэтому кроме него переносить-то и нечего (т.е. достаточно перенести подпапку Mozilla, и абсолютно все пользовательское, в т.ч. текущие открытые вкладки, будут сохранены). Само собой есть еще Documents, куда тоже часто попадают конфиги (SC2 и D3 хранят сейчас настройки там) и C:\ProgramData, в котором хранятся общие для всех данные, если такие есть.
    Безусловно, это не универсальное решение, но если софт не требует от вас знания того, где он что кладет, и ручной настройки, то вероятно он хранит настройки в AppData.
    Ответ написан
  • Есть ли в Python и Go делегаты?

    Nipheris
    @Nipheris Куратор тега C#
    Если используете терминологию C#, то и поставили бы тег, больше бы ответили.
    Если нет, пропустите этот ответ.

    В большинстве языков возможность работать с функциями как со значениями называется first-class function values или first-class function objects, а возможность привязки некоторых данных к функции (точнее, к некоторым внутренним переменным функции, не являющихся ее параметрами) - замыканием (closure). Делегаты шарпа это фактически те же function object, они сейчас чаще так и называются. Есть правда и важное отличие, касающееся multicast-делегатов - во многих языках такой возможности нет, но это пожалуй единственное важное отличие, и его в общем-то несложно нивелировать. А вообще в питоне функциональные объекты и замыкания отлично поддерживаются, поддерживается в том числе привязка метода к объекту с помощью точки (obj.method), например:
    >>> class A:
    ...     def print_me(self):
    ...         print(self.v)
    ...
    >>> a = A()
    >>> a.v = 91
    >>> a.print_me()
    91
    >>> f = a.print_me
    >>> a.v = 155
    >>> f()
    155
    >>>

    Вот туториал: https://newcircle.com/bookshelf/python_fundamental...
    Ответ написан
    Комментировать
  • Какой язык программирования изучить новичку для написания GUI приложений?

    Nipheris
    @Nipheris Куратор тега C++
    Зависит от запаса времени и сил. Если знакомый имеет возможность учиться (уж в 16-то лет), то я бы советовал плюсы. Да, это достаточно хардкорно, но все-таки этот язык как средство разработки просто так никуда не денется, а C# после плюсов он выучит без проблем (когда он хорошо разберется в C++, ему самому захочется иметь для ряда задач такой язык, как C# или Java). Главное в том, что если он сможет дисциплинировать себя в рамках C++, и сможет писать работоспособные вещи, то будет знать, как вообще работает современное ПО, и для него любой другой язык будет просто инструментом, а не парадигмой.
    Важно, чтобы у человека УЖЕ был опыт хотя в одном языке. Если он учил Паскаль - то пусть хорошенько все вспомнит, может даже первые пару недель еще с ним позанимается. Пусть вспомнит, какие есть основные алгоритмические конструкции, структуры данных подучит, вспомнит что такое указатели. И в это же время пусть начинает переходить на плюсы. Еще стоит поискать хорошую современную книгу для новичка - C++ язык очень разносторонний, разные люди на нем пишут очень по-разному, поэтому нужен некий "направитель". Потом, когда человек освоится, сам выберет стиль и инструментарий.
    Если же знакомый слукавил, и еще совсем мало знает, то лучше начать с чего-то другого. Тут уже зависит от текущих интересов: если комп интересует как "железка", то лучше взять Си - будет "продолжение" Паскаля, если очень-очень охота быстро набросать формочку - то пусть берет C#.
    Динамические языки вроде Питона новичку не советую, плохо дисциплинируют.
    В плане инструментов Qt сейчас настолько крут, что даже под винду непросто выбрать: то ли его, то ли продвинутый, но сложный и слаборазвивающийся WPF, то ли противоречивый Windows Runtime.
    Кстати, насчет того, что сложнее - C++&Qt или C#&WPF еще можно поспорить. В первом случае сложен язык, но довольно проста библиотека, во втором - язык проще, но с WPF надо реально разбираться, чтобы им полноценно пользоваться.
    Ответ написан
    1 комментарий
  • Как отсортировать datagridview?

    Nipheris
    @Nipheris Куратор тега C#
    Гуглится за 17 секунд:
    https://msdn.microsoft.com/en-us/library/bb383929%...

    Цитирую:
    The DataGridView control provides automatic sorting, so that user can manually sort any column in the control. You can control whether a column can be sorted by setting the SortMode property of the DataGridViewColumn. You can also programmatically sort a column.

    Вам нужно, чтобы пользователь мог вручную, значит надо проставить SortMode в Automatic
    Ответ написан
  • Как сделать ожидание загрузки в C#?

    Nipheris
    @Nipheris Куратор тега C#
    1) Создали бы не новую форму, а контрол с картинкой на старой, смотрелось бы приятнее
    2) Делайте запрос асинхронно (зависит то того, чем и откуда вы загружаете), таймером проверяйте готовность, им же - анимируйте ожидание.

    Если вы не создадите второй eventloop, то вторая форма вам не поможет, т.к. цикл обработки сообщений не будет получать управление из-за синхронного кода в Windows_Loaded.
    Ответ написан
    3 комментария
  • Используете ли вы реляционные и документоориентированные субд в одном проекте?

    Да, применяем. Все данные, у которых есть нормальная схема - в постгресе, данные, для которых нет общей схемы (в том числе пользовательские атрибуты к сущностям предметной области - различные заметки и комметарии, свой набор для каждого пользователя) - в монге.
    Ответ написан
    4 комментария
  • Валидно ли передавать ссылку по ссылке в C++?

    Nipheris
    @Nipheris Куратор тега C++
    > ссылок на ссылки
    Это не ссылка на ссылку. В функцию b попадет точно такая же ссылка, что и в f. Ссылки ведут себя как "вторые имена" для переменных, поэтому когда вы инициализируете одну ссылку другой, вы просто добавляете в распоряжение еще одно имя для куска памяти. Такого понятия, как ссылка на ссылку в принципе быть не может, в отличие от "указатель на указатель", т.к. указатель сам по себе - реальная самостоятельная переменная с выделенной для нее памятью, на которую, в свою очередь, также можно получить указатель. Ссылка - это запись в таблице идентификаторов компилятора. Да, в зависимости от ситуации для обеспечения ее работы может потребоваться указатель (например, при передаче ссылки в функцию нужно как-то передавать адрес), но этим уже занимается компилятор, поддерживая для вас абстракцию ссылки.
    Другое дело - это, как указал Александр Ручкин - время жизни объекта, это другая история. Разумеется, тот объект или значение, ссылку на который мы сформировали, должны "жить", пока к этому объекту идут какие-либо обращения на чтение/запись.
    UPD: Кстати, int&& - это НЕ ссылка на ссылку, это r-value ссылка и совсем другая история.
    Ответ написан
    Комментировать
  • Структура базы данных для хранения документов?

    Расскажите пожалуйста, какую еще вам нужно информацию хранить о документах. То, что вы сейчас перечислили, сохранит любая файловая система, ну или на крайняк, система контроля версий. И это решение будет лучше, чем с базой, т.к. не будет избыточности (значит, не будет рассинхронизации). Может вам поиск нужен по атрибутам или по тексту? Тогда это другая история.
    Ответ написан
    1 комментарий
  • Почему нет последней версии git для Windows?

    Ой, да ладно вам, ребят. Это ж на комп разработчика - можно и ночной билд скачать, вон их сколько: https://github.com/git-for-windows/git/releases
    Ответ написан
    Комментировать