• Как правильно настроить маршрутизатор?

    @pfg21
    ex-турист
    воткнуть в LAN порт.
    все порты LAN, а также и сетевой интерфейс wifi сети в роутере2 объединяются мостом. обльше от него функций не нужно.
    на роутер2 отключить DHCP-сервер, чтобы но не конфликтовал с раздачей ip-адресов роутером1
    Ответ написан
    Комментировать
  • Openwrt: как добавить маршрут до узла при поднятии tap?

    Serjio999
    @Serjio999
    самоучка =)
    Варианта 3:
    1 - самый правильный - раздавать с OpenVPN маршруты к нужным хостам/сетям
    2 - тоже норм - прописать статический роутинг к нужным хостам/сетям на роутере с OpenWRT
    3 - и так пойдет - прописать статический роутинг к нужным хостам/сетям на ПК

    Просто из Вашего поста я так и не понял какой шлюз Вы хотите сделать "по умолчанию" для всего трафика? Либо завернуть только часть трафика через OpenVPN туннель...
    Ответ написан
    3 комментария
  • IDE для PostgreSQL?

    mmmaaak
    @mmmaaak
    Ответ написан
    Комментировать
  • Какой программой воспользоваться что-бы найти момент изменения кадра в видео файле на 48 часов?

    Moskus
    @Moskus
    Запустить VLC из командной строки, скормив ему нужный файл и добавив опции --video-filter=motiondetect для включения фильтра детектора движения, по вкусу - --rate= для скорости воспроизведения, ну и -vv >logfile.txt - для вывода сообщений в текстовый лог, который потом предстоит изучить.
    Ответ написан
    5 комментариев
  • Плохо ли создавать проекты с нуля? Что значит быть про?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Я понимаю, о чем вы пишите и почему. Ваш код работает, т.к. решает поставленные задачи и удовлетворяет потребности ваших клиентов. Имеет ли он право на жизнь? Да, но только в вашем отдельно взятом случае.

    Дело в том, что ваш код не гибок, в нем отсутствует масштабируемость, его невозможно поддерживать.

    Что если вам потребуется сделать блог, в котором нужно иметь комментарии, которые обновляются в режиме реального времени? И комментарии могут содержать HTML, но такой, чтобы ваш сайт не могли взломать?
    А еще комментарии короче 2000 символов по воскресеньям платные. Оплата через Яндекс.Деньги.
    Вы все это делаете, все работает.
    Затем заказчик вам говорит, я хочу запустить такую же систему другу, но с оплатой по понедельникам через WebMoney.
    Вы копируете сайт, переписываете функцию оплаты.
    Дальше ваш заказчик видит, что у друга больше денег, он просит добавить WebMoney к себе.
    Вы опять переписываете код. Добавляете условия.
    Потом к вам приходит друг заказчика и хочет другое оформление. Вы переписываете его функции.
    Затем он просит добавить поиск по названиям записей к себе на сайт. Вы делаете. Буквально на следующий день к вам приходит заказчик и тоже просит поиск, но не только по названиями, но и по телу статей и по комментариям. Вы делаете.
    Затем ваш заказчик видит, что дела у него идут в гору и он просит отменить платные комментарии и сделать просто платные аккаунты для всех. Вы переписываете.
    Тем временем друг просит вас сделать все тоже самое, но с его оформлением.
    Дела у заказчика идут в гору и сайт начинает тормозить. Вы делаете кэширование.
    Внезапно сайт заказчика попадает в топ и нагрузка резко увеличиваете настолько, что один сервер уже не справляется. Вы переносите все на самый мощный, но он его тоже мало.
    Нужно делать горизонтальное масштабирование.
    Для этого нужно переписать все функции, которые работают с базой данных. А их уже больше двухсот. И просто замена не подходит.
    Сайт открывается через раз, заказчик звонит вам каждые 2 часа и спрашивает, как там прогресс.
    И тут вам присылает письмо друг заказчика и говорит, что хочет перейти с MySQL на PostgreSQL.
    И вы понимаете, что вам надо будет переписать еще 300 функций, но на другом сайте. Вы его посылаете, поскольку вы и так в мыле.
    Друг жалуется на вас заказчику. Заказчик, не ставя вас в известность, нанимает другого исполнителя, у которого отваливается челюсть от того, что творится в системе. Он объясняет, что ему нужно будет потратить полгода, чтобы вникнуть в то, чтобы понять ваш код, но он может сделать все тоже самое за 4 месяца, причем для заказчика и его друга так, что это будет расширяемо и поддерживаемо не только им.
    Тем временем, спустя двое суток жизни на кофеине вы героически переписываете все функции заказчика и идете отсыпаться. После суток сна вы обнаруживаете на автоответчике сообщение, что вы уволены. А все потому, что забыли проверить функцию логина.

    А теперь разберем эту историю по частям. Почему же вас уволили?

    Незнание абстракций и шаблонов проектирования привело к тому, что вы вынуждены были поддерживать 2 разных проекта с практически одинаковой логикой.
    Например ORM смог вам помочь поддерживать 2 разные базы данных без каких-либо усилий. Сменить одну базу на другую стоило бы исправления конфигурации, а не переписывания 300 функций.
    Использование фреймворков позволило бы сократить время на реализацию подключений платежных систем. Многие из них имеют готовые реализации.
    Опять же в современных фреймворках, например в той же Doctrine реализован шардинг. В большинстве случаев ваши проблемы свелись к изменению настроек.
    Но даже если бы вы накосячили, то интеграционные тесты не позволили бы попасть говну в продакшен. А если бы оно и попало, ну накосячили вы с тестами тоже, то проблема была бы обнаружена на раннем этапе благодаря "сине-зеленому" развертыванию и она бы не затронула всех пользователей.
    И да, ваш код не прошел внешний аудит.

    Чтобы быть настоящим профессионалом, нужно не только знать, но и уметь применять на практике ООП, популярные фреймворки, шаблоны проектирования, тестирование и средства непрерывной интеграции, а еще пользоваться нормальными IDE и нести ответственность за сделанную работу.

    Когда пишете свой код, почаще задавайте себе вопрос: А если бы это был код для моего кардиостимулятора? Это поможет.
    Это вам для общего развития.
    Ответ написан
    5 комментариев
  • Почему я создаю одинаковые объекты а у них разные хэшкоды?

    roswell
    @roswell
    и швец, и жнец, и на дуде игрец
    Потому что всё-таки это два разных объекта. Чтобы hashCode возвращал значение, привязанное к атрибутам объекта, нужно в классе Card переопределить метод hashCode (а заодно и equals, чтобы соблюсти контракт) с кастомным подсчётом хеша, иначе всё будет происходить соответственно докции:
    As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the Java™ programming language.)
    Ответ написан
    Комментировать
  • Как склонировать RAID 1 на RAID 1?

    @Tabletko
    никого не трогаю, починяю примус
    Подключаем диски, конигурим, добавляем pv нового рейда в volume group, мигрируем pv на другие диски. Т.е. почти всё можно сделать средствами lvm
    Ответ написан
  • Как организовать связь между двумя офисами компании?

    DMGarikk
    @DMGarikk
    Lead Software Developer
    3) Любое решение которое позволяет организовать VPN
    4) ничего не нужно, лишь железка инициирующая канал связи

    по п.2, канала связи для работы 1С будет недостаточно (а арендовать толстый канал слишком затратно и бесмысленно), по хорошему надо или делать терминальный сервер и через него ходить в 1С, или делать в филиале локальную базу с 1С и синхронизировать её с центральным офисом. тогда ширины канала хватит.

    немного лирики: если вас, студента без опыта озадачивают подобной задачкой, вы столкнётесь с ограничениями бюджета, работой забесплатно (связь пропала в 3 часа ночи СРОЧНОДЕЛАЙ!!) и прочими причудами контор которые экономят на специалистах. Обдумайте это, конечно это полезный опыт, но нервы они не железные.
    Ответ написан
    6 комментариев
  • Как правильно организовать отказоустойчивость ESXi?

    @huwesu
    А не проще позвонить провайдеру и спросить сколько у них стоит белый адрес.
    С вас будут брать рублей 100 в месяц за белый адрес дополнительно, и работать будет стабильнее и быстрее, чем через "виртуалку на АйХоре"?

    Вы не ту проблему хотите решить.
    Скорее всего у вас будет не проблема "перебросить клиентов на другой сервер", что элементарно решается хотя бы двумя ярлыками на их рабочих столах,
    а гораздо большей проблемой будет, что при выходе одного сервера из строя у вас на втором не будет АКТУАЛЬНЫХ ДАННЫХ.

    То есть сервера нужно синхронизировать
    Вот это проблемка так проблемка, учитывая объемы данных и узость каналов и непредсказуемость вывода одного из серверов из эксплуатации.

    А шлюз-переключалка между серверами - это ерунда по сравнению со основной проблемой.
    Ответ написан
    5 комментариев
  • Как определить объём работ и цену если в ТЗ одни общие фразы?

    BBmike
    @BBmike
    с кривым ТЗ проблема не в стоимости работ, а в гарантированных требованиях заказчика доделать, переделать, допилить и прикрутить еще 100500 тонн всякого функционала. в итоге, ты сторгуешься на 100 рублей, а сделаешь им на 500.
    Ответ написан
    Комментировать
  • Си: Почему не выходит ошибка Segmentation fault при выполнении этого кода?

    terrier
    @terrier
    Обращение по адресу памяти, который не был выделен - это Undefined behaviour. Частным случаем такого поведения является Segmentation Fault или вывод значения 1 или все что угодно другое. Вы не можете ожидать какого-то определенного поведения от всей програмы, если в ней есть undefined behaviour.
    Ответ написан
    1 комментарий
  • Как работают ремонтные бригады в It компаниях, заводах и т.д?

    @mr_alex
    Начинающий Front-End разработчик
    1. Происходит поломка.
    2. Приходит мастер который смотрит, что именно сломалось.
    3. Если вышла из строя деталь, то заменяет ее при наличии на складе. Если детали нет, то заменяет прибор аналогичным.
    4. Если запчасти нет то пишется заявка и вместе со счетом предъявляется для оплаты.
    Параллельно с этим ведется:
    - учет простоя участков/цехов;
    - планирование затрат ремонтного отдела на основании учета простоев;
    - закупка ЗИП.
    Ответ написан
    1 комментарий
  • Как работают ремонтные бригады в It компаниях, заводах и т.д?

    73656c6565
    @73656c6565
    أنتوني
    Ооо-да тут можно целую книгу написать)))
    Верхнеуровнево:
    Происходит какое-то событие(типа поломка), его нужно зарегистрировать и управлять им, помощник нам - HelpDesk система. Дальше идут скрипты проверки на адекватность(кабель питания подключен и бла бла бла), потом анализ на нескольких уровнях поддержки специалистов, причем каждый на своем уровне выполняет определенную зону ответственности... А дальше еще и замена/ремонт/списание/склады/поставквзаимодействи с вендорами... тут целая наука... Гуглим хелпдеск и погружаемся на недельку в теорию!
    Ответ написан
    1 комментарий
  • Ноутбук уходит в спящий режим при малейшем физическом перемещении, в чем проблема?

    Ocelot
    @Ocelot
    Датчик закрытия крышки. Или его шлейф / разъём.
    Ответ написан
    Комментировать
  • Как и в чем лучше написать программу для Desktop?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Ну так и напишите на С++ QT
    Ответ написан
    Комментировать
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    Я с 2011 года занимаюсь совершенствованием игрового фреймворка. Весь его код написан на C++. Целевых платформ раньше было 5 (Win, MacOs, iOs, Android, Bada), теперь 4 (Bada закрылась же) с приглядом за Tizen, WinMo и, когда-нибудь, консолями.
    В общем, уровень требований к кроссплатформенности должен быть понятен. И вот как я этого добился.

    Большая часть кода написана на платформонезависимом C++. Весь платформозависимый код расщеплен на три слоя:
    - Нижний слой, общий интерфейс для всех платформ, общие поля всех платформ.
    - Средний слой, platform-specific решения и поля. Наследуется от нижнего.
    - Верхний слой, ввод platform-spcific кода во фреймворк. Наследуется от среднего слоя.

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

    На уровне файлов этот подход работает так.
    Есть в заголовках проекта папка "platform", где собраны нижние уровни расщепления, мастер-заголовок с условным подключением среднего уровня расщепления и все общие типы для платформ.
    Так же в проекте есть папки "platform.windows", "platform.macos", "platform.###", в которых реализован средний уровень расщепления и мастер-заголовки для условного подключения.
    Верхний уровень или реализуется в своей папке, если он представляет собой целую подсистему, или описывается во все той же папке "platform".
    Исходный код сгруппирован так же, но включает в себя только мастер-заголовок .

    Сценарии сборки на каждую из платформ включают в себя платформозависимый код только своей платформы.
    Все собирается в статические библиотеки и линкуется в один исполняемый файл. Хотя есть возможность вытеснения библиотек в динамические модули (сделано на случай передачи фреймворка аутсорсерам).

    Это все дает полную прозрачность исполнения кода для любой платформы. Так же этот подход делает очень легкой экспансию всего фреймворка на новую платформу.

    UPD:
    Пример с файлом очень хорошо подходит благодаря своей простоте, его я даже по памяти могу выписать из своего фреймворка, но я кое-что все таки упрощу, чтобы никого не смущать и не пугать.
    spoiler
    // PlatformSpecificFile.Windows.h
    class PlatformSpecificFile
    {
    // Platform-specific interface.
    public:
    	inline ::HANDLE GetHandle() const	{ return m_handle; };
    	
    // Platform-independent interface, but platform-dependent implementation.
    public:
    	// RAII.
    	PlatformSpecificFile() = delete;
    	PlatformSpecificFile(
    		const std::string& path,
    		const OpeningMode desired_mode,
    		const AccessOptions& desired_access,
    		const SharingOptions& desired_sharing
    	);
    	
    	virtual ~PlatformSpecificFile();
    	
    	void Close();
    	void Flush();
    	
    	const size64_t GetSize() const;
    	const bool Resize( const size64_t new_size );
    	
    	const size32_t Read( NotNull<uint8_t> buffer, const size32_t buffer_size ) const;
    	const size32_t Write( NotNull<const uint8_t> buffer, const size32_t buffer_size );
    	
    	const size64_t Seek( const size64_t offset, const SeekOrientation orientation );
    	
    	inline const bool IsValid() const	{ return IsHandleValid( m_handle ); };
    	
    private:
    	::HANDLE	m_handle = INVALID_HANDLE_VALUE;
    };
    
    // PlatformSpecificFile.Android.h
    class PlatformSpecificFile
    {
    // Platform-specific interface.
    public:
    	inline int GetHandle() const	{ return m_handle; };
    	
    // Platform-independent interface, but platform-dependent implementation.
    public:
    	// RAII.
    	PlatformSpecificFile() = delete;
    	PlatformSpecificFile(
    		const std::string& path,
    		const OpeningMode desired_mode,
    		const AccessOptions& desired_access,
    		const SharingOptions& desired_sharing
    	);
    	
    	virtual ~PlatformSpecificFile();
    	
    	void Close();
    	void Flush();
    	
    	const size64_t GetSize() const;
    	const bool Resize( const size64_t new_size );
    	
    	const size32_t Read( NotNull<uint8_t> buffer, const size32_t buffer_size ) const;
    	const size32_t Write( NotNull<const uint8_t> buffer, const size32_t buffer_size );
    	
    	const size64_t Seek( const size64_t offset, const SeekOrientation orientation );
    	
    	inline const bool IsValid() const	{ return m_handle >= 0; };
    	
    private:
    	int		m_handle = -1;
    };
    
    // File.h
    class File final : public PlatformSpecificFile
    {
    public:
    	using PlatformSpecificFile::PlatformSpecificFile;
    	
    	const size64_t GetPosition() const; // Seek( 0, SeekOrientation::FromPosition );
    	
    	const bool SetPosition( const size64_t position ); // Seek( position, SeekOrientation::FromBeginning );
    	
    	const bool IsFileEnded() const; // GetPosition() == getSize();
    };


    Мастер-заголовок платформенного кода "platform.h" в зависимости от сценария сборки включает в себя один из мастер-заголовков платформозависимого кода "platform.###.h". Платформозависимый код уже включает в себя соответствующий заголовок файла "PlatformSpecificFile.###.h"
    Ответ написан
  • Как компьютер (процессор) отличает битовую последовательность 0000 от 00000?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Никак, т.к. и первая и вторая - нули. Когда пишется 0 - по факту подразумевается 8/16/32/64 нулевых бита (конкретное число зависит платформы и контекста).
    Ответ написан
    3 комментария
  • Программы C++, скомпилированные в TDM-GCC, кроссплатформенные?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    Если вы скомпилировали их в .exe, то нет - компилировать нужно под конкретную платформу.

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

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    У Вас не задача а 3 задачи:
    1. Обеспечить подключение 500 пользователей к сети по wifi.
    2. Обеспечить разграничение и раздачу трафика на всех пользователей.
    3. Обеспечить подключение к миру.
    Первая задача это проектирование сети на месте, повторителями сети таких масштабов не строятся, здесь нужны профессиональные точки от Microtik/Ubiquiti/Cisco связанные проводной сетью с маршрутизатором, + радиомониторинг чтобы исключить пересечение смежных каналов и обеспечить роуминсг со стабильным покрытием.
    Вторая задача заключается в создании ядра сети с контроллером хотспота, биллингом, шейпером и прокси с мощным кеширующим сервером, чтобы как можно больше трафика оставлять у себя в сети
    Третья задача это собственно расчет и организация требуемого канала связи с миром.
    Ну и стоит не упускать тот момент что организация сети такого масштаба это не домашний интернет, соответственно нужны согласования со всякого рода бюрократами, т.к. по закону даже гостевая сеть для посетителей кафе/офиса это по сути провайдерская деятельность попадающая под закон о лицензировании, тем более в масштабах стадиона.
    Ответ написан
    Комментировать
  • 2 ядра или 4???

    dom1n1k
    @dom1n1k
    2 физических ядра + гипертрейдинг = каждое из них виртуально удваивается.
    Pentium - 2 физических
    i3 - 2 физических + 2 виртуальных
    i5 - 4 физических
    i7 - 4 физических + 4 виртуальных
    (но это у десктопных, с мобильными версиями иначе)
    Ответ написан
    4 комментария