• Модерация сервиса для общения?

    @nirvimel
    При работе с пользовательским контентом главное - это быстрая отработка поступающих жалоб и вежливое общение с их авторами, чтобы явственно дать понять (на словах), что вы на стороне закона и продемонстрировать готовность бороться с контентом, вызывающим их возмущение.

    кто виноват, с точки зрения российского законодательства

    По УК виновны, очевидно, распространители (авторы контента). Но если администрация ресурса не (адекватно) реагирует на жалобы на контент, то дальше жалобы полетят в вышестоящие инстанции, что приведет к блокировке ресурса.

    Как, опять-же с точки зрения законодательства, должен поступать потенциальный модератор подобного сервиса?

    Удалять контент и реагировать на все жалобы и официальные запросы. Это главное, и в 99% случаев этого достаточно.
    Бан автора - мера для облегчения работы модератора (меньше грязи придется вычищать).

    Не является ли модератор подобного сервиса правонарушителем?

    Нет. Если он сам такой контент не постит.
    Но если он не реагирует на жалобы, то подставляет ресурс под блокировку.

    Контент то он видит

    Естественно. Это же его работа.

    он даже скачивается на его жесткий диск в виде кеша браузера...

    Если у него дома пройдет обыск (по какой-то другой причине), и он не сможет вразумительно объяснить, что он не имел умысла (необходимое условие виновности) сохранять этот контент на диск, то ему могут попробовать пришить статью УК (тут все уже зависит от адвокатов и от его готовности к сотрудничеству). Но это чисто гипотетический сценарий, в реальности подобные случаи пока неизвестны.
    Ответ написан
    1 комментарий
  • Как разметить диск в Windows без форматирования?

    @nirvimel
    Это делают Acronis или Paragon. Но операция рискованная. Лучше делать такое, загрузившись с внешнего диска (флешки). И НЕТ НИКАКИХ ГАРАНТИЙ, что все пройдет гладко (об этом конкретно говориться в руководствах к дисковому софту).
    Ответ написан
    8 комментариев
  • В чем разница между виртуальной машиной и хостером?

    @nirvimel
    В общем случае - НИКАК.
    Для конкретных VM существуют конкретные методы определения, но все это можно заблокировать при желании.
    Ответ написан
    Комментировать
  • Python. Как написать функцию для заполнения матрицы по условию?

    @nirvimel
    Первое правило numpy - НИКАКИХ ЦИКЛОВ!
    from time import time
    import numpy
    from numpy.lib.stride_tricks import as_strided
    
    def fill_matrix_python(width, height):
        i, j = numpy.mgrid[0:height, 0:width]
        return 22. / (i + j + 2)
    
    def fill_matrix_native(width, height):
        array = numpy.arange(2, width + height + 2)
        stride = array.strides[0]
        view_2d = as_strided(array,
                             shape=(width, height),
                             strides=(stride, stride))
        return 22. / view_2d
    
    start_time = time()
    fill_matrix_python(10000, 10000)
    print('Python implementation: Matrix 10000x10000 filled in %.3f seconds' % (time() - start_time))
    
    start_time = time()
    fill_matrix_native(10000, 10000)
    print('Native implementation: Matrix 10000x10000 filled in %.3f seconds' % (time() - start_time))


    Python implementation: Matrix 10000x10000 filled in 3.332 seconds
    Native implementation: Matrix 10000x10000 filled in 0.532 seconds

    Более красивое решение через mgrid под капотом реализовано все-таки через циклы на скрипте (благодарю SkiBY за замечание).
    Менее красивое решение через манипуляцию со страйдами реализовано полностью нативно.
    Ответ написан
    2 комментария
  • Где посмотреть чего состоит IDE Intellij Idea?

    @nirvimel
    На старости лет разработчики IDEA, возможно, напишут об этом мемуары. А пока они зарабатывают деньги на своем продукте, а не на книгах, по которым можно создавать продукты-конкуренты.
    То, что исходники выложены в открытый доступ - это уже очень большая уступка с их стороны (другая контора не пошла бы на такое никогда). От создания конкурирующих продуктов нас останавливает только лень разбираться в чужом коде.
    Ответ написан
    2 комментария
  • Есть ли компиляторы ASM на DOS?

    @nirvimel
    В списке смотре все те, у которых в графе "Operating system" присутствует DOS.
    Ответ написан
    Комментировать
  • Сложная бизнес-логика. Как всё учесть?

    @nirvimel
    Несколько банальных принципов ООП (применительно к вашему проекту):
    Сущности, которых касается определенный запрос, должны быть либо унаследованы от одного класса, либо реализовывать один интерфейс (в дополнение к другим интерфейсам), который имеет методы управления этими сущностными, необходимые для реализации этого запроса.
    Запросы также должны быть сгруппированы в дерево классов или наследовать набор интерфейсов. Сущности могут взаимодействовать не с конкретными классами запросов, а с общими интерфейсами, которых не так много, как различных запросов.
    То же самое с realtime обработчиками и, вообще, с любыми элементами логики.
    Ответ написан
    1 комментарий
  • С помощью чего делать шифрование сервера, чтобы хостер не получил доступ к данным на диске?

    @nirvimel
    Удаленная загрузка машины с Full Disk Encryption реализуется при помощи dropbear. Но это решает проблему только с дисками. Как правильно пишут, например, тут (в ответах): существуют разные вектора атаки на сервер, к которому имеется физический доступ. Универсального способа защиты от всего, похоже, не существует (не считая варианта держать сервера дома).

    Кроме того, если вы покупаете эту услугу удаленно и сами не имеете прямого доступа к серверу, то возможен вариант, что под видом dedecated вам продадут виртуальную машину, стоящую на реальном dedecated железе, в которую напрямую проброшены физический диск, сетевуха и др. устройства. По производительности такую систему невозможно отличить от той, которая стоит на железе непосредственно. Все устройства работают также, как физические (потому что и являются физическими). Разница тут только в том, что админ host-OS может сделать дамп памяти виртуалки со всеми ключами (для расшифровки содержимого диска) в открытом виде.
    Ответ написан
    Комментировать
  • Что можно еще добавить в расширение для Тостера?

    @nirvimel
    У меня давно это было реализовано в виде userscript: https://gist.github.com/anonymous/a8c89b2d47ca408d... (я обошелся чуть меньшим количеством строк кода).

    ИМХО: Юзерскрипт удобнее расширения:
    1. Никаких манифестов. Все в одном файле.
    2. При установке демонстрируется сам код (все равно его необходимо (бегло) смотреть при установке скриптов со стороны, но для расширений это не так удобно).
    3. Скрипт работает только на тех страницах, для которых в нем прописаны разрешения на доступ. Список разрешений демонстрируется при установке. Можно быть абсолютно уверенным, что скрипт не притронется ни к какой странице за пределами адресов, на которые имеет разрешения, и не натворит ничего глобального с самим браузером (не повесит хуки ни на какие глобальные события).
    4. В меню Greasemonkey показан список скриптов, которые действуют на данной конкретной странице, с возможностью отключить любой из них в один клик ( + F5).

    Все это полное ИМХО, понимаю, что многие предпочитают именно расширения по своим причинам.
    Ответ написан
    Комментировать
  • Как можно оптимизировать изображения без потерь в Java?

    @nirvimel
    Попробую угадать как работает этот TinyJPG:
    1. Берется некоторое начальное значение уровня сжатия (не так важно какое).
    2. Задается некоторый целевой порог допустимых потерь (эта константа предварительно обкатывается в A/B тестах).
    3. На каждом шаге итерации высчитывается среднеквадратическое отклонение значений всех пикселов сжатого изображения (от оригинального), и сравнивается с пороговым знанием.
    4. Бинарным поиском находится минимальное значение уровня сжатия при котором выполняется условие (3).


    Те, кто не заметил разницы в A/B тестах, не заметят разницы и в любых изображениях, сжатых по этому алгоритму.
    Ответ написан
    Комментировать
  • Какую литературу почитать по проектированию?

    @nirvimel
    1. Стив Макконнелл - Совершенный код.
    - почему еще никто не назвал эту очевидную классику? (я аж Ctrl+F-нул по странице, не поверил сначала).
    - также рекомендую его "Анализ алгоритмов. Вводный курс" (хоть это и в стороне от сабжа).

    2. Кент Бек - Экстремальное программирование. Разработка через тестирование.
    - многие считают этот подход антипаттерном, но прочесть, безусловно, стоит хотя бы ради того, чтобы иметь возможность самому поискать ошибки в рассуждениях автора (оно того стоит).

    Еще несколько очень разных книг, которые для меня стоят в одном ряду с Макконнеллом:
    3. Фредерик Брукс - Мифический человеко-месяц.
    4. Эндрю Хант, Дэвид Томас - Программист-прагматик. Путь от подмастерья к мастеру.
    5. Том Демарко, Тимоти Листер - Человеческий фактор: успешные проекты и команды.

    Далее, у Макконнелла в (1) после каждой главы приведен огромный список литературы по теме, большая часть - признанная классика, можно прямо брать списком и выкладывать в этот тред.
    Ответ написан
    Комментировать
  • Как сделать дешёвые прокси?

    @nirvimel
    Это нормальная цена за не слишком крутой VPS с одним IPv4.
    Можно убедиться, заглянув в Палату мер и весов для VPS.
    Включаете фильтр (снизу под колонкой) по IPv4 == 1, включаете сортировку по цене, смотрите...

    UPD: Это цена В ГОД!
    Ответ написан
  • Существует ли список самых популярных паролей рунета?

    @nirvimel
    ТОП-100 (формат - "пароль: количество_ящиков"):
    123456             : 39177
    123456789          : 13892
    111111             : 9826
    qwerty             : 7926
    1234567890         : 5853
    1234567            : 4668
    7777777            : 4606
    123321             : 4324
    000000             : 3304
    123123             : 3031
    666666             : 2807
    12345678           : 2570
    555555             : 2416
    654321             : 2299
    gfhjkm             : 1804
    777777             : 1500
    112233             : 1482
    121212             : 1432
    12345              : 1431
    987654321          : 1385
    159753             : 1172
    qwertyuiop         : 1120
    qazwsx             : 1109
    222222             : 967
    1q2w3e             : 939
    0987654321         : 874
    1q2w3e4r           : 872
    1111111            : 832
    123qwe             : 804
    zxcvbnm            : 772
    88888888           : 762
    123654             : 724
    333333             : 707
    131313             : 697
    999999             : 690
    4815162342         : 661
    12344321           : 639
    1qaz2wsx           : 633
    11111111           : 615
    asdfgh             : 609
    qweasdzxc          : 583
    123123123          : 578
    159357             : 574
    zxcvbn             : 571
    qazwsxedc          : 545
    ghbdtn             : 533
    1234554321         : 524
    1111111111         : 523
    1q2w3e4r5t         : 500
    1029384756         : 465
    qwe123             : 455
    789456123          : 448
    147258369          : 444
    1234qwer           : 439
    135790             : 428
    098765             : 426
    999999999          : 422
    888888             : 408
    12341234           : 408
    12345qwert         : 401
    qweasd             : 395
    987654             : 392
    111222             : 391
    147852369          : 380
    asdfghjkl          : 375
    789456             : 375
    samsung            : 373
    159951             : 365
    101010             : 357
    vfhbyf             : 355
    444444             : 353
    qwerty123          : 348
    nikita             : 348
    qweqwe             : 335
    q1w2e3             : 331
    fyfcnfcbz          : 328
    00000000           : 325
    qwaszx             : 325
    qazxsw             : 322
    010203             : 321
    marina             : 319
    9379992            : 316
    123789             : 316
    zzzzzz             : 308
    qqqqqq             : 308
    11223344           : 307
    dbrnjhbz           : 306
    qwertyu            : 303
    147258             : 299
    12345678910        : 298
    232323             : 296
    yfnfif             : 294
    55555              : 292
    aaaaaa             : 291
    147852             : 289
    fylhtq             : 287
    fktrcfylh          : 284
    1qazxsw2           : 279
    q1w2e3r4           : 278
    7654321            : 277


    Скрипт, которым построен топ:
    import re
    import collections
    
    regex = re.compile(r'^([a-zA-Z0-9_.+-]+)@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+:(.+)$')
    
    counter = collections.Counter()
    
    with open('yandex.txt', encoding='ascii', errors='ignore') as file:
        for line in file:
            match = regex.match(line)
            if match:
                # login = match.group(1)
                pass_ = match.group(2)
                counter[pass_] += 1
    
    for pass_, count in counter.most_common(100):
        print('%-19s: %i' % (pass_, count))


    Источник: слив базы яндекса в сентябре 2014 (точное количество ящиков == 1.261.810)
    Ответ написан
  • Coroutine, для чего они нужны?

    @nirvimel
    Coroutines реализуют кооперативную многозадачность между green_threads внутри одного процесса (ОС обо всем этом не догадывается, ее потоки не имеют к этому никакого отношения). В момент "вызова" сoroutine происходит переключение "зеленых" задач вместо собственно вызова функции. Задачи, ожидающие завершение ввода/вывода, получают управление, если их ввод/вывод завершен (или таймаут истек).

    Для чего все это нужно? Потоки ОС слишком тяжелые. Они занимают много стека (памяти). Их создание/уничтожение требует времени. Переключение между ними происходит через ядро ОС (слишком медленно). Большое количество, одновременно активных, потоков может подвесить всю систему. В реальных приложениях/серверах количество потоков типично измеряется максимум десятками ("зеленых" потоков могут быть десятки тысяч). Для преодоления проблемы C10K назрела необходимость переходить на асинхронное программирование с "зелеными" потоками вместо потоков ОС. Осталась одна проблема - переключение задач (которое теперь должно осуществляться вручную); кто и в какой момент должен это делать?
    Это переключение может происходить в io_loop (цикле ввода/вывода) специальной библиотеки, которая отвечает за асинхронность всего приложения (например, asyncio в python). А чтобы поток управления из кода возвращался в io_loop, нужно заменить прямые вызовы функций на асинхронные "вызовы" короутин.

    В начале 90-x вытесняющая многозадачность на процессорах 80386 казалась совершенно прорывной технологией. Кто бы мог подумать, что через 20-25 лет мы (в каком-то смысле) вернемся назад к кооперативной многозадачности.
    Ответ написан
    Комментировать
  • Как решить проблему «Запуск невозможен. Отсутствует MSVCP140.dll»?

    @nirvimel
    Нужно установить Visual C++ Redistributable for Visual Studio 2015.
    Ответ написан
    Комментировать
  • Как платить в карты Payoneer коммунальные платежи?

    @nirvimel
    Если на эту карту вы получали оплату за фриланс или любую удаленку (без лишних налогов), то крайне не советую использовать ее для оплаты коммуналки и любых услуг на свое имя. Допустим сегодня это никто не станет расследовать, но времена меняются, а история переводов и платежей хранится вечно. Крайне неразумно из-за каких-то копеек (процент при обналичке) повиснуть "на крючке" у органов. Не исключено, что в будущем вам придется потратить гораздо бОльшую сумму на отмазку от налоговой.
    Ответ написан
    5 комментариев
  • ООП + jQuery, как правильно делать?

    @nirvimel
    у меня сложилось ощущение, что я что-то неправильно делаю.

    У всех такое ощущение при работе с "классами" JS. А разгадка в том, что в JS словом "класс" называется не совсем то (или совсем не то), что в других языках программирования. Поэтому, при попытке применить типичные ООП подходы к "классам" JS всегда возникает куча мелких проблем. На первый взгляд все эти проблемы носят поверхностный характер (как при переходе с одного ООП-языка на другой) и только потом понимаешь, что все гораздо серьезнее. Классическое ООП тут просто неприменимо, потому, что в JS просто нет никаких классов (это понимание приходит со временем).
    Ответ написан
    Комментировать