• C++, объявления функций и их расположение в памяти, как обстоят дела?

    Nipheris
    @Nipheris Куратор тега C++
    Является ли пример 2 примером того, как лучше не делать в больших проектах?


    Большинство компиляторов будут инлайнить функцию в этом случае.

    Разница очень простая - в первом случае вы сможете вынести реализацию в отдельную единицу компиляции, а во втором - нет. Зачем это делать - читайте внимательно про compilation unit. Особенно, если вы пришли из языка, где такой задачи, как разделение include-файлов и файлов реализации нет в принципе.
    Конечно, есть случаи когда вынести реализацию в отдельный cpp-шник невозможно. Стандартный пример - шаблонные классы. Для них реализации всех функций все равно придется указывать в файле, который будет инклудиться. Поэтому особой разницы между 1 и 2 в этом случае нет.

    это как-то связано с компилятором и тем, как он выделяет под функцию память.

    Тогда почитайте про inlining функций, это видимо то, что вы слышали.
    Ответ написан
    1 комментарий
  • Как построить сбалансированное бинарное дерева поиска, в котором данные хранятся в листах?

    Nipheris
    @Nipheris Куратор тега C++
    Если хотите хранить данные только в листах, храните в нелистовых вершинах интервал. Например, в дереве на рисунке вместо нелистовой вершины 37 храните интервал [30, 49]. Подобная идея используется в https://en.wikipedia.org/wiki/R-tree - почитайте про него тоже, если вам нужно для точек. Это как раз дерево для пространственной индексации.
    Ответ написан
  • Как считывать символ нажатой клавиши?

    Nipheris
    @Nipheris Куратор тега C#
    Ответ написан
    Комментировать
  • Извлечение данных из sqlite c#?

    Nipheris
    @Nipheris Куратор тега C#
    "SELECT * FROM 'peoples';"

    select name, year, age, city from peoples
    Делать плановые запросы со звездочкой - моветон, оставьте звездочку для административной консоли.

    object getname = people[0];

    string name = peopleReader.getString(peopleReader.getOrdinal("name"));
    Ответ написан
    4 комментария
  • Как лучше реализовать историю действий?

    Например - человек купил карандаш, потом он ее обменял на цветной карандаш, потом он обменял на шариковую ручку и так далее.


    Это обычно называют история действий, "история" - ключевое слово. Вот вам вариант записи таблицы истории действий:
    [<субъект> | <номер последовательности> | <датавремя>] | <объект> | <действие>
    То, что в кв. скобках - ключ записи.
    Если скажете подробнее, что делаете - кто субъект, какие действия выполняет - предложим и более конкретную схему таблицы.
    Ответ написан
    3 комментария
  • Как научиться писать системные программы для компьютера?

    Nipheris
    @Nipheris Куратор тега C++
    Автору вопроса для начала посоветую понять и осознать, что C++ это такой язык, где стандартная библиотека обеспечивает лишь базовые нужды, а все остальное обеспечивается бесчисленным количеством сторонних библиотек (как Сишных, так и плюсовых), написанных на данный момент.
    Безусловно, WinAPI это системный интерфейс, также как и стандарт POSIX, но я не понимаю почему тут все его начали советовать. Правильно заметил Дмитрий Ковальский - для записи в файл скорее всего будет достаточно файловых потоков в стандартной библиотеке. Для многого другого хватит Буста. Именно с них и надо начинать. Использовать непосредственно винапи без веской причины сегодня не стоит. Лучше сначала поискать кроссплатформенные библиотеки.
    Ответ написан
    5 комментариев
  • Почему происходит выход за пределы массива?

    Nipheris
    @Nipheris Куратор тега C++
    // cats[9][2] // queue имеет 18 чисел

    у вас cats это массив из двух string-ов, но вы его индексируете от 0 до 8:
    cats[i][0]

    вы точно понимаете, что пишете? не вижу, чем бы вам тут мешала строгая типизация, на js это было бы также непонятно что
    Ответ написан
  • Можно ли использовать один порт для виртуальных хостов Nginx?

    > Можно ткнуть на мануал, где посмотреть)
    В HTTP/1.1 и выше есть обязательный заголовок Host, в котором указывается доменное имя на сайта, к которому делается запрос. По нему веб-сервер всегда может определить, на какой виртуальный хост пришел запрос:
    The "Host" header field in a request provides the host and port information from the target URI, enabling the origin server to distinguish among resources while servicing requests for multiple host names on a single IP address.
    .....
    A client MUST send a Host header field in all HTTP/1.1 request messages.


    Порты кроме 80-го в публичной Сети почти не используются.

    Если с точки зрения nginx - смотрим директиву server_name, она именно для этого и сделана.
    Ответ написан
  • Какой должна быть ORM?

    > И меня несколько удивило отсутствие каких-либо наработок в этой области в Rust (хотя бы начальных версий).
    1) язык в релизе несколько месяцев, чего вы хотите-то;
    2) не во всех языках ORM смотрится естественно. В C++ нормальной ORM нет до сих пор, есть некоторые библиотеки на базе Qt, но де-факто стандарта нет просто потому, что в языке недостаточно силен уровень метаданных. Но в этом нет проблемы просто потому, что на плюсах редко пишутся приложения, где нужен такой уровень;
    3) А может повсеместное использование ORM это только удел web?
    Я бы сказал что ORM это удел бизнес-приложений и языков высокого уровня (Java/.NET/Ruby). Другое дело, что веб-приложения в 99% случаев пишут на всяких asp.net и Рубях, а не на плюсах, поэтому и такая корреляция. Внутрикорпоративных десктопных приложений по прежнему достаточно, и как раз там ORM тоже любят.

    > Подскажите, на сколько высокоуровневой должна быть ORM?
    Это вам решать, ORM-ки разные бывают, кто-то где-то используют потолще, кто-то - потоньше. Лично я особого смысла в тонких не вижу для большинства задач, поэтому на мой вкус в ORM обязательно должны быть следующие вещи:
    1) martinfowler.com/eaaCatalog/identityMap.html
    2) martinfowler.com/eaaCatalog/unitOfWork.html
    3) martinfowler.com/eaaCatalog/inheritanceMappers.html

    Вообще, озакомьтесь для начала со всеми Object-Relational паттернами: martinfowler.com/eaaCatalog, а то наверняка напишете парк велосипедов.
    Ответ написан
    2 комментария
  • Как попасть в backend-разработку?

    > Кто виноват понятно, а вот что делать? Как стартовать в моем положении? Куда податься?
    Я бы на вашем месте доучил Джангу, и написал бы себе блог на ней (минимум JS, можно вообще без него, некоторое количество кода на серверной стороне, немножко с базой поработаете). Неплохой вариант, чтобы показать свою самостоятельность. На фирмах бывают мелкие проекты, которые хочется отдать одному-двум разработчикам на полную поддержку (от верстки до деплоя на сервер).

    > Насколько критично знание фреймворков при устройстве на работу, насколько глубоко, и какие обязательны?
    Ну вот таки доучите Django, раз начали. Конечно от совсем начинающего этого требовать не должны, но такие вакансии будут называться "стажер". Если вы доучите, то будете Junior-ом.

    > Существуют ли альтернативы web-backend'у, позволяющие не терять накопленный опыт в сетях (разработка каких-либо сетевых сервисов и т.п.)?
    На мой вкус и ваши требования идеальная альтернатива такая: https://moikrug.ru/vacancies/1000014166 . Еще интереснее вакансии в совсем крупных фирмах, например у Близзов - там часто требуются именно сетевые программисты для разработки большого числа нагруженных сервисов, которые у них есть. Например, вот, прям по вашему описанию (protobuf, wireshark), но на такие позиции конечно нужен конкретный опыт, потому что берут лучших. Возможно стоит подтянуть и C++ в пару к Питону - раз вы работаете с сетями, то низкоуровневых вещей бояться не должны)
    Ответ написан
    1 комментарий
  • Как запустить C# код через браузер?

    Nipheris
    @Nipheris Куратор тега C#
    Так или иначе вам нужно выставить веб-сервис наружу. amf1k предложил один из вариантов. Можно WebAPI, можно WCF, можно и Nancy взять. Если код программы недоступен для модификации, тогда вызывайте ее из ком. строки (хотя так будет менее гибко - сложно будет получить, например, текущий статус операции с файлами).
    Ответ написан
    1 комментарий
  • Какие посоветуете библиотеки для парсинга исходного кода?

    Nipheris
    @Nipheris Куратор тега C++
    Странный вопрос - логично, что нужно использовать парсеры конкретных языков.
    В принципе, если нужен только разбор в дерево - попробуйте взять ANTLR и грамматики известных языков: https://github.com/antlr/grammars-v4
    Ответ написан
    1 комментарий
  • Как проверить все биты в байте?

    Nipheris
    @Nipheris Куратор тега C#
    Такие конструкции if надо заменять на словарь.

    Если у вас индексы последовательные и начинаются с нуля, то роль словаря может сыграть список или массив.
    В любом случае, вам нужно сделать отображение "номер бита" => "сообщение".

    Номер бита предлагаю сохранять, чтобы было удобнее записывать таблицу и идти по ней циклом. Оператор сдвига даст вам нужную константу для операции "И".
    Итого:
    using System;
    using System.Collections.Generic;
    
    public class Test
    {
    	private static void AddMessage(Tuple<string, string> message)
    	{
    		Console.WriteLine("{0}, {1}", message.Item1, message.Item2);
    	}
    	
    	public static void Main()
    	{
    		byte val = 176;
    		
    		for (int i = 0; i <= 7; i++)
    		{
    			if ((val & (1 << i)) != 0)
    				AddMessage(messageByBitIndex[i]);
    		}
    	}
    	
    	private static Tuple<string, string>[] messageByBitIndex =
    	{
    		Tuple.Create("1", "А1"),  // 0
    		Tuple.Create("1", "А2"),  // 1
    		Tuple.Create("2", "Б1"),  // 2
    		Tuple.Create("2", "Б2"),  // 3
    		Tuple.Create("1", "АА1"), // 4
    		Tuple.Create("1", "АА2"), // 5
    		Tuple.Create("2", "ББ1"), // 6
    		Tuple.Create("2", "ББ2"), // 7
    	};
    }


    ideone.com/vbLapl
    Ответ написан
    1 комментарий
  • Как зарезервировать n-ое место (GB) на жёстком диске (по моему описанию)?

    Почитайте уже наконец Таненбаума, почитайте про файловые системы. Зачем вы задаете вопросы с одной и той же картинкой, ну понятно же что вам надо познакомиться с устройством ОС.
    Ответ написан
    2 комментария
  • Воспроизведение музыки WPF?

    Nipheris
    @Nipheris Куратор тега C#
    Есть еще либа на свете - NAudio. Можно ей попробовать. Возможно, она сама не умеет качать по урлу, тогда скачайте сами WebClient-ом и отдайте либе.
    Ответ написан
    Комментировать
  • Как создать новоге окна используя паттерн MVVM, используя существующий ViewModel?

    Nipheris
    @Nipheris Куратор тега C#
    > PersonsList
    советую форму назвать PersonsListWindow.

    Потом вам надо создать еще одну вьюмодельку - PersonsListViewModel, которая будет вьюмоделью для ВСЕЙ ФОРМЫ в целом, и у которой будет свойство Persons/PersonViewModels типа IObservableCollection. В этой коллекции у вас будут все вьюмодельки для каждого человека. Тогда вы вашей форме PersonsListWindow должны будете назначить PersonsListViewModel в качестве DataContext, а уже ваш контрол списка (ListView например, или DataGrid, смотря что там у вас) забиндить на свойство Persons/PersonViewModels. Это будет что называется, "по паттерну". Итого:
    1) personsListWindow.DataContext = new PersonsListViewModel();
    2) в XAMLе контрол-список (его свойство ItemsSource) биндите на свойство PersonViewModels
    3) каждый элемент списка автоматически сопоставляется с вьюмоделькой из ObservableCollection.

    Если потом на форму добавите еще контролы, то и во вьюмодельку для формы (PersonsListViewModel) сможете добавить еще данные для показа/модификации. Например, захотите в этом списке выбирать ответственного за работу человека - тогда можно сделать в PersonsListViewModel свойство Leader типа PersonViewModel. Или если у вас там будут кнопки Создать/Удалить - то можно выставить соответствущие ICommand-объекты.
    Ответ написан
  • Есть русскоязычные книги по Entity Framework?

    Если посвежее, то вот это: www.apress.com/9781430257882
    На русском искать не советую, будет в лучшем случае устаревшее.
    Вообще, если хотите чего-то толкового, тем более на русском, почитайте про РБД чего-нибудь и про решение реальных задач с их использованием. Если вы хорошо представляете, что такое реляционная база и что такое объект в ООП, то вы и сами уже будете знать, ЧТО примерно должно быть в такой библиотеке. После этого будет достаточно документации. Можете еще посмотреть ORM паттерны у Фоулера: martinfowler.com/eaaCatalog , разделы Object-Relational Structural Patterns и Object-Relational Metadata Mapping Patterns. По своей сути, любая "толстая" ORM это реализация всех или части этих паттернов.

    > желательно применимо к WinForms.
    Используемая UI-подсистема максимально не зависит от Entity Framework. Ищите книгу по нужной интерфейсной технологии и изучайте.
    Ответ написан
    Комментировать
  • Как можно подменить вызов функции в классе?

    Nipheris
    @Nipheris Куратор тега C++
    Вызывать обе с помощью указателя на метод. Вы в вопросе уже ответ написали.
    Ответ написан
  • Использование Binding в WPF?

    Nipheris
    @Nipheris Куратор тега C#
    > При этом реализовать это без использования INotifyPropertyChanged.
    Вы хотя бы коротко причину указали, почему так нельзя делать. Почему меня интересует причина? Потому что если вы скажете "я не хочу забивать чистенькие модельные классы, которые используются в нескольких проектах всякими непонятными INotifyPropertyChanged" я вам отвечу "а и не нужно их трогать, для реализации INotifyPropertyChanged создаются ViewModel-объекты, которые и привязываются к контролам вместо модельных. Они и реализуют INPC, кроме того могут выставлять во вьюху некоторые свойства, которых нет в модельных объектах".
    А если вы скажете "я тут экспериментирую", то тогда можете запилить DependencyProperty у себя в привязываемом объекте, хотя это довольно странно. Но работать должно.
    Ответ написан
    Комментировать