• Этично ли заказывать хак своего собственного сервиса?

    @nirvimel
    они же получат доступ ко всем данным

    Пусть этим человеком лучше окажется нанятый вами подрядчик, который уже получил за свою работу деньги, личность которого известна вам и которому нет никакого смысла рисковать своей репутацией и безопасностью ради того чтобы удовлетворить свое любопытство. Чем этим человеком станет кто-то совершено посторонний, неизвестный вам, ничего вам не должный, с неизвестными мотивами, возможно нанятый конкурентами или одиночка, озлобленный на весь мир, которому доставит удовольствие подгатить кому-угодно ради чувства собственного величия.
    Ответ написан
    Комментировать
  • Почему не удаляются все элементы списка?

    @nirvimel
    С точки зрения производительности так будет быстрее:
    from collections import Counter
    
    def checkio(data):
        c = Counter(data)
        return [i for i in data if c[i] > 1]
    Ответ написан
  • Как подставить массив в функцию?

    @nirvimel
    def f(a, omega, phi, t):
        return a * sin(omega * t + phi)
    
    x = [f(a[i], omega[i], phi[i], t[i]) for i in range(len(a))]
    Ответ написан
    7 комментариев
  • Простой вопрос по Python [функции]?

    @nirvimel
    График строится не по функции, а по точкам, координаты которых получены путем применения функции к некоторому диапазону значений аргумента. Алгоритм (упрощенно) такой:
    1. Написать саму функцию, которая принимает на вход один скалярный аргумент и возвращает скалярную величину.
    2. Построить массив подряд идущих значений - это будут координаты X
    3. Подать его на вход функции, получить на выходе другой массив - это будут координаты Y.
    4. На этом этапе можно ограничить диапазон значений отфильтровав пары координат и выбросив те, в которых значение Y выходит за пределы диапазона.
    5. Отобразить на графике кривую, проходящую через все полученные пары точек.

    В качестве UI-библиотеки лучше всего взять Matplotlib, по ней есть хорошие туториалы, например - один, другой, третий и другие.
    Ответ написан
    3 комментария
  • Что случилось с фотографией?

    @nirvimel
    Заголовок JPEG отсутствует, то есть на его месте мусор. Если даже дальнейшее содержимое файла является телом JPEG (энтропия данных очень высокая (файл практически не сжимается) как у сжатого тела JPEG, или, например, генератора случайных чисел), то без заголовка восстановить в любом случае невозможно. В заголовке содержатся основные параметры изображения, без которых, остальное тело (если это оно) не имеет смысла.
    Смотрите дату последнего изменения файла и вспоминайте что вы (или кто мог иметь доступ к вашей машине) делали в системе примерно в то время.
    Ответ написан
    2 комментария
  • Угнали Login Data и другие пароли, стоит ли бояться?

    @nirvimel
    1. Это не вирус, а троян (вирус, как минимум, способен размножатся без участия (использования) человека).
    2. Все что он стянул из профиля, под которым сам запущен, он сможет расшифровать (потому, что это может браузер, запущенный под этим юзером).
    3. Если он был запущен из-под администратора, то он стянул и расшифровал (или прихватил все необходимое для расшифровки) все хоть сколько-нибудь интересное из профилей всех юзеров на машине.
    4. Единственный случай, когда DPAPI могло бы чем-то помочь, это если бы троян, запущенный не под администратором, каким-то образом получил доступ к профилю браузера в профиле другого юзера, но не получил бы доступ к реестру того юзера (файл в корне его профиля). Случай вообще редчайший, и может рассматриваться число теоретически, потому что по-умолчанию права доступа закрывают все содержимое профиля одного юзера от другого (не администратора).
    Ответ написан
    1 комментарий
  • Какими VPN вы пользуетесь?

    @nirvimel
    Только собственный VPN на VPS.
    Доверия к продавцам VPN вообще быть не может. Все их клятвы в том, что они не ведут логи (это даже противоречит законодательству некоторых стран) - не больше, чем маркетинговый треп. Они не несут за эти слова никакой юридической ответственности. Даже продавцов герболайфа легче привлечь к ответственности за отсутствие обещанного чудесного эффекта от их бальзама.
    Ответ написан
    3 комментария
  • Какой SSD выбрать из недорогих?

    @nirvimel
    Из этой пары надежнее, конечно, Intel (это касается только SSD, я не фанатик из секты интела).
    А вообще, Вадим прав, Samsung 850 EVO практически не уступает Intel по надежности (во всех историях об отказах имело место жестокое издевательство над носителем, в отличие от историй с другими производителями), но значительно превосходит его в характеристиках и цене (в меньшую сторону).
    Ответ написан
    1 комментарий
  • Почему так работает Stopwatch?

    @nirvimel
    Все правильно. ElapsedTicks показывает количество тиков таймера, но таймер не успевает тикнуть ни разу за время вычисления факториала или случайно происходит один тик. В первой итерации проходит много сотен тиков, так как при первом вызове работает компилятор JIT, время работы откомпилированного кода ничтожно по сравнению со временем компиляции.
    Что делать:
    1. Выполнять вызов измеряемой функции в цикле с глубиной в десятки или сотни тысяч итераций и делить полученный интервал на количество итераций. Точный подбор количества осуществляется вручную так, чтобы общая продолжительность всего теста составила несколько секунд.
    2. Перед первым реальным замером необходимо сделать "прогрев" - несколько десятков тысяч итераций в холостую без замеров.
    Ответ написан
    Комментировать
  • Где вы храните ключевой файл?

    @nirvimel
    Не вижу преимуществ в использовании ключевого файла перед текстовым паролем. Из минусов:
    1. На всех ваших внешних/внутренних съемных и несъемных дисках лежат (в сумме) несколько сот тысяч различных файлов, что соответствует 16-20 бит различных вариантов, что соответствует трем-четырем символам текстового пароля смешанного регистра.
    2. Файл в единственном экземпляре очень легко потерять/повредить по сотне разных причин. Вы бы стали держать что-то ценное в сейфе, единственный ключ от которого сделан из сахара?
    3. Файл во множестве экземпляров - все равно, что разбросать по двору копии ключа от квартиры.
    4. Файл-ключ дает ложное чувство более высокой надежности и/или криптостойкости (ни то, ни другое неверно).


    P.S. Некоторые комментаторы, возможно, путают файл-ключ с файлом самой базы.
    Ответ написан
    6 комментариев
  • Есть ли freeware (или с символической оплатой) Online web-ресурс по построению графиков и поверхностей?

    @nirvimel
    • Очевидный Wolframalpha (пункты 1, 2, 3 в платной версии).
    • Из простых 2D графиков я использую fooplot.com (пример с семейством функций на одном графике). Что характерно - в URL всегда актуальная ссылка на текущий документ (обновляется при любом изменении), сам документ не хранится на сервере, а полностью определен в самой ссылке.
    Ответ написан
    1 комментарий
  • Почему Python не сохраняет в excel так как надо?

    @nirvimel
    for post in list_doc.cssselect('.forum-post-table'):
        user = post.cssselect('.forum-user-name a')[0]
        name = user.text_content()
        url = urljoin(URL, user.get('href'))
        # title = user_name.get('title')
        descr = post.cssselect('.forum-post-text')[0].text_content()

    Набросал на коленке. В бою не проверял. Если даже остались какие-то ошибки, то, надеюсь, суть я передал.
    Ответ написан
    1 комментарий
  • Как и как Вы следите за новостями с сфере Ваших интересов и новостями в IT в целом?

    @nirvimel
    Серфинг? Сервисы? Закладки? RSS ? Соц. сети?

    Сойдет все, кроме соц.сетей, которые давно оккупированы маркетологами и распиаренными дебилами.
    Соц.сети способны только понижать уровень интеллекта пропорционально проведенному в них времени.
    Ответ написан
    2 комментария
  • Как правильно хранить важные данные в mysql?

    @nirvimel
    Вы знаете что на жаргоне означает "pwn"? Это значит, что если атакующий получил доступ к серверу (на уровне с достаточными привилегиями), то серьезному бизнесу практически конец - он заберет все хоть сколько-нибудь ценную информацию (включая все логи), переведет себе всю электронную валюту со всех счетов, к которым есть доступ с сервера, сотрет и уничтожит все базы и все содержимое файловой системы, задефейсит сайт и выложит на нем всю приватную информацию о вас и обо всех клиентах так, чтобы нанести максимальный урон бизнесу. При этом никакие трюки с шифрованием ситуацию не меняют. Если хоть один скрипт имеет доступ куда-то, то этот доступ получит злоумышленник, получивший права юзера, от имени которого запущен скрипт (или рута).

    Если все так ужасно, то как же тогда работают электронные биржи (типа bitfinex), ворочающие миллионами и открытые в интернет? - Это вопрос на миллион. Ответ простой и одновременно сложный - все дело в системном администрировании. На админах, живых людях, держится вся безопасность информационной системы биржи. Но это, конечно, далеко не тот уровень, что можно найти на фрилансе по запросу "Администрирование MySql 9.99$/час".

    Конкретно в вашем случае могу посоветовать только настроить систему автоматического бекапа с заливкой по сети в надежное место, например, в облако, куда настроен доступ только на добавление (chmod a-X на каталог + рандомные имена файлов (часть имени) каждый раз при добавлении нового). Расписание (и соответствующий слот для бекапа) должно быть не одно. Необходимы: быстрый 12 часовой бекап (если взлом произошел ночью (как обычно), а восстановление утром то дневные пользователи всего этого даже не почувствуют), суточный (строго обязательно), недельный, месячный, квартальный и годовой. Все это может пригодиться на случай, когда разработчики и админы проспали какую-то незаметную порчу базы, и она проникла в высокочастотные бекапы.
    Ответ написан
    Комментировать
  • Что делать с HDD?

    @nirvimel
    Да ладно вам, сразу хоронить! Я видел диски у которых треть поверхности в битых секторах, и которые, тем не менее, стабильно работают годами (разделы нарезаны, разумеется, на стабильных "островах").
    Главное при диагностике битого диска - понять продолжает ли он сыпаться или этот процесс давно остановился (как говорят медики - больной в стабильно тяжелом состоянии). Чтобы это выяснить, нужно выписать значения всех "пророчащих беду" параметров SMART, и запустить какой-нибудь тяжелый тест (типа butterfly-read/write в Victorya) на сутки чтобы хард основательно прогрелся, потом замерить параметры еще раз и только тогда выносить приговор. Если значение ни одного критического параметра не прибавилось ни на единицу, то хард стабилен, его вполне можно оставлять в строю, нарезать разделы так, чтобы обойти стороной все битые "острова" и использовать его для хранения фильмов, торрентов и прочую файло-помойку. Разумеется, о хранении на нем хоть сколько-нибудь ценных документов речи не идет.
    Ответ написан
    Комментировать
  • В чем плюс ассинхронного программирования?

    @nirvimel
    Реактивное программирование - еще один buzzword, под которым обычно понимается Модель акторов, еще один подход к параллельным вычислением, альтернативный классическим потокам (потоки, разумеется, используются внутри под капотом, но отсутствие необходимости в ручном использовании блокировок избавляет от многих потенциальных ошибок и тяжелых последствий в виде race conditions и deadlocks).

    Все это имеет мало общего с асинхронностью в однопоточном (!) Javascript, которая не дает никакого распараллеливания вычислений.
    Ответ написан
    Комментировать
  • Смысл упаковки ключевых аргументов в python 3?

    @nirvimel
    Да много где приходится использовать. Первое что вспоминается:
    1. Если одна функция является оберткой над другой функцией, реализация которой может меняться, то обертка принимает **kwargs и передает в оборачиваемую функцию, при этом может происходит изменение/добавление/удаление элементов словаря, т.е. параметров оборачиваемой функции.
    2. Написание декораторов - обобщение случая №1, когда оборачивается не конкретная функция, вызываемая по имени, а переменная.
    3. Часто используется в различных ORM, когда через параметры функции передаются значения полей модели/записи БД (сама ORM не имеет понятия о конкретной модели/таблице).
    4. Не уверен насчет того, насколько это правильный паттерн проектирования, но любую функцию принимающую словарь единственным аргументом можно переписать так, чтобы она принимала **kwargs, это дает возможность более удобной передачи аргументов f(var=42), вместо создания словаря на лету f({'var': 42}), и оставляет возможность передать готовый словарь через вызов с распаковкой аргументов f(**the_dict).
    Ответ написан
    1 комментарий
  • Таймаут DNS запроса в Python: как уменьшить?

    @nirvimel
    Действительно, gethostbyname (как и getaddrinfo, через который он реализован) не дает никакой возможности задавать таймаут. Все, что остается - это распараллеливать работу через потоки (threading) или через gevent (в документации есть хороший пример параллельного резолвинга имен).
    Ответ написан
    Комментировать
  • Как реализовать (алгоритм) отрисовку графики "по слоям" на МК?

    @nirvimel
    Если на двойную буферизацию памяти жалко, то остается только городить нетривиальный алгоритм перерисовки. Например:
    1. Создать маску для стрелки: из канала прозрачности (1 бит) стрелки в конечном положении вычесть канал прозрачности стрелки в начальном положении.
    2. Залить область с маской изображением стрелки в конечном положении.
    3. Создать маску для заливки: из канала прозрачности стрелки в начальном положении вычесть канал прозрачности стрелки в конечном положении.
    4. Залить область с маской изображением фона.
    Ответ написан
    1 комментарий