• Как записать список дат в Excel?

    Ba1t
    @Ba1t
    # вариант 1
    ws2.write(2, datr2.isoformat(), style1)
    # вариант 2 - https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
    ws2.write(2, datr2.strftime('%d-%m-%Y'), style1)
    Ответ написан
    9 комментариев
  • Как построить такую грамматику?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    S -> 2*2A-1
    A -> *2A-1 | E
    Ответ написан
    Комментировать
  • Работа роутера?

    @yaror
    10 лет в мобильном телекоме
    Ситуация следующая.
    Каждое устройство в сотовой сети в момент регистрации сообщает сети свой IMEI - код устройства, по которому можно однозначно определить модель Вашего устройства.

    Да, нужна база IMEI с device capabilities - описанием того, что это за устройство и что оно умеет. Но она у мобильного оператора уже есть: Вам, когда Вы впервые вставляли сим-карту в новый телефон, прилетали SMS-кой настройки интернета? Настройки у разных производителей немного разные, поэтому надо знать модель абонентского аппарата.

    Получается, что как только ты вставляешь сим-карту в Wi-Fi-роутер, оператор без дополнительного оборудования понимает, что это роутер, а значит, он будет раздавать интернет через Wi-Fi. Это первый рубеж детекции, и его реализация оператору обходится совершенно бесплатно.

    Второй рубеж: анализ TTL, как писал Fixid.
    Надо понимать, что на первом рубеже будут отловлены только собственно роутеры, а включенная в настройках телефона точка доступа Wi-Fi оператору не видна.
    Но есть уловка: устройство, раздающее интернет по Wi-Fi, по умолчанию будет уменьшать поле TTL на всех проходящих через него ip-пакетах.
    Зная типичные начальные значения TTL для мобильных платформ, можно реагировать на все прочие значения как сигнал, что здесь где-то притаился Wi-Fi )
    Для реализации этого, оператору уже потребуются дополнительные расходы.
    Понятно, что ставить отдельное устройство для отлова любителей Wi-Fi никто не будет, поэтому обычно этим занимается операторский DPI - комплекс, занимающийся классификацией и "раскраской" абонентского трафика, благодаря которому и становится возможен, например, бесплатный вконтакте у некоторых операторов. Но, во-первых, что удивительно, не все DPI это умеют. Во-вторых, те, что умеют, умеют это за отдельные деньги в виде подлежащей покупке лицензии.

    Есть и третий рубеж, специально для отлова хитрож... абонентов вроде того же Fixid ;)
    Это эвристика.
    Тема интересная и увлекательная.
    Да, абонент может поменять IMEI прямо в настройках телефона.
    Да, абонент может перепрошить телефон, чтобы он не трогал TTL.
    Но, как только хитрых абонентов становится много, оператору становится выгодно вкладываться в расширенный анализ трафика.
    Итак, что можно сделать?
    Ну, сходу:

    Вы выходите в интернет прямо с телефона через встроенный браузер? Поздравляем, Вы только что в поле User-Agent протокола HTTP рассказали оператору, какая у вас мобильная платформа, и какой версии!
    Как так, с одного устройства оператор видит разные User-Agent, указывающие то на Android, то на Apple? Ребята, да у вас там Wi-Fi!

    TCP/IP fingerptinting. Разные мобильные платформы (те же Android/Apple) используют разные начальные значения полей в ip-пакетах. Да взять хоть тот же TCP Window size! Анализируя их, можно угадать как минимум производителя платформы. А комбинируя это с тем же анализом по IMEI...
    Ребята, а как так: само устройство у вас от Apple, а значения полей в ip-пакетах характерны для Windows Phone?
    Или почему ваш трафик похож то на Android, то на Blackberry?

    Умеет это тем более не всякий DPI, и который умеет, умеет за тем более отдельные деньги за лицензию. Да и производительность подобный анализ просаживает очень здорово... Но, тем не менее, если припрёт, это возможно.
    Ответ написан
    4 комментария
  • Python и работа с базой?

    sim3x
    @sim3x
    stackoverflow.com/questions/6998968/using-sqlite-p...

    sql_insert = "INSERT INTO user_te (user_t, text_t) VALUES (?, ?)"
    c.execute(sql_insert, (id, text))
    Ответ написан
    Комментировать
  • Что изучать для написания своего кроссплатформенного приложения?

    @asd111
    Java, python или C++ вместе с Qt.
    Python хороший язык для новичков и достаточно хорошо работает на всех платформах.
    И если захотите податься в web, то новый язык учить не придется после python.
    Можно написать web приложение на python(django) и потом сделать то же приложение на pyqt или тому подобном.
    В качестве бд для обоих случаев можно взять sqlite.
    Ответ написан
    Комментировать
  • Websocket: прием сообщения и запись его части в отдельную переменную. Как осуществить?

    pi314
    @pi314
    Президент Солнечной системы и окрестностей
    Как сделать, чтобы получаемые символы на определенных местах записывались в, например, заранее оглашенные переменные?


    Для этого строку нужно разобрать, выделить интересующие подстроки и положить их в нужные переменные самостоятельно. Никакой магии, которая сделает это за Вас, нет. В этом смысле нет никакой разницы, откуда пришла строка: из вебсокета, с консоли или еще откуда-то :)

    Сделать это можно регулярками, циклами или любым другим замысловатым способом, но, прежде, чем это делать, нужно понять, что именно делать. А тут возможны варианты.

    1. Строка именно такая, как описано в вопросе, и изменить ее нет возможности, т.к. ее посылает "чужой" код.
    Тогда нужно описать структуру разделителей интересующих частей регулярным выражением (если она вообще регулярна) и выделять их регуляркой, например, так:
    string[] tokens = Regex.Split("Change position: F1-F2", @"(: )|(-)", RegexOptions.ExplicitCapture);
    
    if( tokens.Length == 3 && string.Equals(tokens[0], "Change position") )
    {
      curPos = tokens[1];
      newPos = tokens[2];
    } else {
      // прислали какую-то непонятную хрень...
    }

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

    2. Строку можно определить самостоятельно.
    Тогда лучше придумать протокол (конкретнее, формат строки), который было бы легко разбирать. Например:

    event:cur-position:new-position

    т.е. для данного примера посылать:

    "Change position:F1:F2"

    Такую строку можно разобрать элементарным
    string[] tokens = "Change position:F1:F2".Split(':');
    
    if( tokens.Length == 3 && string.Equals(tokens[0], "Change position") )
    {
      curPos = tokens[1];
      newPos = tokens[2];
    } else {
      // прислали какую-то непонятную хрень...
    }


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

    qlkvg
    @qlkvg
    python backend developer
    1. Заменить в пользовательском вводе 'разделить на' на 'разделить_на', остальные ключи с пробелами по аналогии
    2. split'ом разделить строку по пробелам, получится список со строками
    3. Циклом или генератором сформировать строку из соответствующих ключам значений.
    4. Выполнить ее eval'ом
    Ответ написан
    Комментировать
  • Как правильно реализовать хранение состояния?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Если вложенность большая, то стеком. Если маленькая, то наверное со стеком лучше не заморачиваться, а сделать что-то типа контекста.
    Ответ написан
    Комментировать
  • Добавлять ли virtualenv в git?

    @Stqs
    senior software developer
    Частенько бывает что часть пакетов нужна при разработке и не нужна на продакшене. И наоборот. Поэтому желательно бы еще разделять requirements для разработки и для продакшена.
    Файлы с requirements могут включаться один в другой. Таким образом обычно зависимости можно разделить на 3 отдельных файла.
    Например:
    reqs/
    - common.txt
    - prod.txt
    - dev.txt

    common.txt будет содержать все обязательные общие зависимости. Пример с потолка:
    Django==1.8.5
    mysql-python==1.2.5


    dev.txt будет содержать пакеты специфичные только для разработки но включая common. Пример опять же с потолка:
    -r common.txt
    ipyhton
    ipdb
    django-debug-toolbar==1.4


    prod.txt тоже будет включать common но так же содержать вещи которые на продакшене обязательны а в Вашем локальном окружении не нужны вовсе:
    -r common.txt
    gunicorn==19.4.1
    whateverelse=1.0.0


    соответственно когда мы собираемся разрабатывать мы устанавливаем зависимости так
    pip install -r reqs/dev.txt
    в продакшене
    pip install -r reqs/prod.txt
    Ответ написан
    Комментировать
  • Добавлять ли virtualenv в git?

    @MAGistr_MTM
    Учусь программировать
    В директории с ГИТ-ом пропиши:
    $ pip freeze > requirements.txt
    И в этой же директории будет создан файл с нужными пакетами. А потом как написал Андрей Шубин
    Ответ написан
    Комментировать