Pull to refresh
2
0
Денис @denilenko

Пользователь

Send message

Несколько полезных шорткатов для Sublime Text ниндзи

Reading time2 min
Views217K
Доброго времени суток, уважаемые хабравчане. Многие пользуются замечательным редактором Sublime Text, который стал популярен благодаря своей простоте, гибкости/кастомизации и огромному количеству плагинов. Хочу поделиться с вами, на мой взгляд, самыми полезными шорткатами при работе с Sublime.

image

Переход по фрагментам

Win/Linux: CTRL+R
Mac: CMD+R
Вероятно, самое полезное сочетание клавиш для экономии вашего времени. Содержимое документа разбивается на определенные фрагменты (функции, HTML теги или CSS стили). Переход происходит при выборе соответствующего фрагмента во всплывающем окне.

Читать дальше →
Total votes 85: ↑60 and ↓25+35
Comments52

Катастрофа Unicode в Python3

Reading time11 min
Views140K
От переводчика: Armin Ronacher довольно известный разработчик в Python-сообществе(Flask,jinja2,werkzeug).
Он довольно давно начал своеобразный крестовый поход против Python3, но обвинить его в истерике и ретроградстве не так-то просто: его возражения продиктованы серьезным опытом разработки, он довольно подробно аргументирует свою точку зрения. Немного о терминологии:
coercion я перевел как принудительное преобразование кодировок, а byte string как байтовые строки, так как термин «сырые» строки(raw string) все же означает несколько иное.
«Историческое» примечание: в 2012 г. Армин предложил PEP 414, который содержал ряд мер по устранению проблем с Unicode, PEP подтвердили довольно быстро, однако воз и ныне там, так как нижеприведенный текст написан 5 января 2014 года


Все труднее становиться вести обоснованную дискуссию о различиях между Python 2 и 3, так как один язык уже мертв,
а второй активно развивается. Когда кто-либо начинает обсуждение поддержки Unicode в двух ветках Python — это весьма сложная тема. Вместо рассмотрения поддержки Unicode в двух версиях языка, я рассмотрю базовую модель обработки текста и байтовых строк.

Читать дальше →
Total votes 92: ↑81 and ↓11+70
Comments54

Python: вещи, которых вы могли не знать

Reading time8 min
Views312K
Python — красивый и местами загадочный язык. И даже зная его весьма неплохо, рано или поздно находишь для себя нечто такое, что раньше не использовал. Этот пост отражает некоторые детали языка, на которые многие не обращают внимание. Сразу скажу: многие примеры являются непрактичными, но, оттого, не менее интересными. Так же, многие примеры демонстрируют unpythonic стиль, но я и не претендую на новые стандарты — я просто хочу показать, что можно делать вот так.
Читать далее
Total votes 139: ↑120 and ↓19+101
Comments120

WDS и автоматическая установка Windows 7

Reading time3 min
Views52K
Доброго времени суток, господа хорошие! Хабр в режиме read-only читаю давно, решил вот статейку написать. Понимаю, решение может быть не совсем корректное с чьей-то точки зрения, но у меня все это работает так как я хотел. Работаю системным администратором в учебном заведении (ГБОУ СПО). В подчинении парк из 150 машин, различной конфигурации. До этого я уже делал образ Windows XP. А теперь задачу я себе поставил следующую — сделать унифицированный образ ОС Win7. И вот как я с этой задачей справился.
Читать дальше →
Total votes 19: ↑8 and ↓11-3
Comments8

Все технологии туннелирования IPv6 понятным языком

Reading time4 min
Views73K
Ура-ура, появился хаб IPv6!
В этой статье я хотел бы рассмотреть все актуальные способы туннелирования IPv6 через готовую IPv4-инфраструктуру, описанные в RFC 7059. Один из немногих RFC, написанных понятным человеческим языком, кстати.
Вы все еще сомневаетесь, нужен ли вам IPv6?
  • У всех устройств белый IP. Никаких NAT, никаких пробросов портов
  • Выше скорость скачивания торрентов за счет пиров, имеющих IPv6-адрес, но с «серым» IPv4.
  • В некоторых случаях, выше скорость доступа к сайтам (YouTube через IPv6 не тормозит по вечерам)
  • Доступ к сайтам, заблокированным в РФ, имеющим IPv6-адрес (nnm-club, например)
Но это еще не все. Представьте ситуацию, когда у вас сломался DHCP-сервер, а на компьютер в этой сети нужно побыстрее бы зайти. Он не получает IP-адрес, вы не можете на него зайти. Беда. Однако, если у вас был просто включен IPv6 — даже не настроен — то вы можете просто пропинговать магический адрес ff02::1, получить ответ от этого компьютера (т.к. у него в любом случае будет link-local IPv6-адрес!) и зайти на него.

Ну да ладно, перейдем к туннелированию.

6in4
Один из самых старых способов туннелирования, придуманный аж в 1996 году, и до сих пор очень популярный. Такие крупные туннель-брокеры, как Hurricane Electric, gogo6 и SIXXS используют его. Использует протокол 41 (не путайте с портом!) и не работает через NAT. Поддерживается всеми современными ОС из коробки.
Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments24

Python-digest #8. Новости, интересные проекты, статьи и интервью [20 декабря 2013 — 27 декабря 2013]

Reading time3 min
Views8.7K
Спешу поздравить всех с наступающим новым годом. Подарок у меня, правда, совсем небольшой — все те же свежие новости о Python и близлежащих технологиях. Зато есть интересные вещи о поиске, Android-приложениях, графическом интерфейсе для БД, OAuth, TDD, CMS и других буквосочетаниях.

По результатам голосования в предыдущем дайджесте с отрывом аж в шесть голосов мне разрешили не делать выпуск 3 января, но стоит ожидать расширенной версии 10 января

Большое спасибо owlman за иллюстрацию к выпуску. Кстати, он сам тоже пишет о Python но, к сожалению, не очень часто. Мечтает пропатчить сутки до 30 часов вместо 24.

Сам дайджест под катом
Total votes 34: ↑33 and ↓1+32
Comments1

Peewee – лёгкая, гибкая и очень быстрая ORM на Python

Reading time5 min
Views119K
image

Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.


Установка
С pip:
pip install peewee


Из репозитория:
git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install


Тесты:
python setup.py test


Есть обвязка для flask:
pip install flask-peewee



Определение моделей или «попахивает джангой»


Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.

from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'


Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
Читать дальше →
Total votes 50: ↑48 and ↓2+46
Comments46

Элегантная форма входа в админку на Laravel и Sentry

Reading time9 min
Views25K
При создании сайтов приходится некоторое время уделить форме ввода логина и пароля для доступа к панели управления. Для ускорения процесса разработки, хочу поделиться рецептом приготовления простой, удобной и элегантной формы входа в админку.

Статья содержит описание некоторых базовых приемов использования Laravel при разработки сайтов и будет полезна тем, кто начинает осваивать данный фреймворк. Для примера использую Ubuntu 12.04, PostgreSQL 9.3, Nginx 1.1.19, PHP 5.5.7, Composer и свежий проект, созданный с использованием Laravel 4.1. Под управление PostgreSQL крутится база данных examples, к которой имеет доступ пользователь examples c одноименным паролем. Nginx же настроен таким образом, что при обращении по адресу examples.loc в браузере открывается главная страницу-заглушка, которая идет с Laravel в комплекте, с надписью «You have arrived.»
Читать дальше →
Total votes 26: ↑15 and ↓11+4
Comments6

Python-digest #7. Новости, интересные проекты, статьи и интервью [13 декабря 2013 — 20 декабря 2013]

Reading time3 min
Views8.3K
Много новостей хороших и разных о Python и жизни вокруг него. Благодарю owlman за неиссякающий энтузиазм в подготовке иллюстраций, axce1 за анонсы статей о Pyramid.

Присылайте ссылки на статьи мне в скайп (он совпадает с ником на хабре), пишите сами больше о Python. Не жалейте плюсиков (или минусиков) для дайджеста и активно высказывайте ваше мнение в коментариях — именно это служит стимулом для того, чтобы перед каждыми выходными у вас было свеженькое чтиво.

Прошу, также, принять участие в опросе по поводу первого выпуска дайджеста 2014 года. По результатам опроса в прошлом выпуске оформление рускоязычные статьи vs англоязычные возвращено к начальному варианту. Традиции это хорошо, пусть они еще и краткосрочные.

Сам дайджест под катом
Total votes 31: ↑28 and ↓3+25
Comments1

Работа с предпочтениями групповой политики: как прекратить использовать конкретные устройства

Reading time6 min
Views30K
Сейчас для бОльшей части пользователей уже не является секретом то, что любой компьютер состоит не только из «тиливизера» и «процессора», коим называли системный блок, но в нем укомплектовано приличное количество устройств, о которых для полноценного функционирования просто обязана знать операционная система. Более продвинутые пользователи также знают и о том, что, начиная с 90-х годов минувшего столетия, мир впервые узнал о таком ассоциируемом с Windows-системами понятии, как Plug and Play или, проще говоря, о PnP, что представляет собой технологию, позволяющую операционной системе автоматически выполнять некоторые конфигурационные настройки для подключенных устройств. Ну а для появления дополнительных возможностей и корректной работы подключенных устройств, конечно, следует устанавливать драйверы, разработанные производителями комплектующих. В свою очередь, такие драйверы администраторы могут устанавливать на целевые компьютеры различными методами: могут самостоятельно бегать по компьютерам с компакт- или DVD-дисками и инсталлировать такие драйверы; могут разместить их в общедоступной папке на файловых серверах и инсталлировать их при помощи скриптов; интегрировать драйверы в операционные системы при помощи таких средств, как Windows ADK; устанавливать драйверы при помощи Microsoft System Center Configuration Manager, а также многими другими методами. Но, по большому счету, данная статья не об этом.
Иногда могут возникнуть такие ситуации, когда вам попросту нужно будет отключить на том или ином компьютере определённое устройство или, наоборот, заставить пользователей работать с конкретными девайсами. Чтобы выполнить такие операции вместо пользователя, причем не отключая (или, наоборот, принудительно не включая) навсегда такое устройство, вы можете воспользоваться определенным элементом предпочтения групповой политики, о котором далее в этой статье и пойдет речь.
Читать дальше →
Total votes 23: ↑17 and ↓6+11
Comments3

Python на Хабре

Reading time7 min
Views452K
Некоторое время назад, в силу определенных причин, мне пришла в голову мысль о том, чтобы начать изучать какой-нибудь новый язык программирования. В качестве альтернатив для этого начинания я определил два языка: Java и Python. После продолжительного метания между ними и сопутствующих нытья и долбежки головой о стену (у меня с новыми языками всегда так — сомнения, раздумья, проблема выбора и т.д.), я все-таки остановился на Python. Окей, выбор сделан. Что дальше? А дальше я стал искать материал для изучения…
Читать дальше →
Total votes 182: ↑162 and ↓20+142
Comments65

Проектирование системы оповещений для веб-приложений

Reading time5 min
Views10K
Эта статья о том, как мы проектировали универсальную систему оповещений для наших веб-приложений и что в итоге получилось. Не стану утверждать, что полученный результат является единственно верным, однако считаю его достаточно хорошим. Если у вас есть опыт решения подобной задачи, приглашаю поделиться им в комментариях.

Суть задачи


Дано: веб-приложение для совместной работы. Для простоты будем считать, что это CRM или Task Tracker.
Требуется: своевременно уведомлять пользователей о событиях в приложении, на которые требуется их реакция.

В чем проблема?


Всё было бы очень просто, если бы у нас было конкретное приложение со строго определенными сценариями работы и фиксированными ролями пользователей. Но в нашем случае это не так. Мы разрабатываем различные системы учета и автоматизации бизнес-процессов на основе платформы-конструктора. И систему оповещений нужно сделать на уровне платформы, чтобы потом можно было ее использовать в любых приложениях.
Как мы решали эту задачу
Total votes 13: ↑9 and ↓4+5
Comments5

Тайны кнопок в Android. Часть 1: Основы верстки

Reading time18 min
Views236K
Приветствую, уважаемое сообщество.

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

Первая часть предназначена для начинающих разработчиков. Я покажу, как сделать достаточно сложную кнопку исключительно версткой, не применяя Java-кода, ни тем более собственных компонентов. Знание этих приемов верстки пригодится и при работе с другими компонентами Android. По ходу статьи я буду подробно пояснять, что означают те или иные константы, атрибуты, команды и тому подобное. Но я также буду давать ссылки на официальную документацию Google, где вы можете подробно изучить каждую тему. Данная статья обзорная, я не ставлю цели привести здесь всю документацию, переведенную на русский язык. Поэтому я рекомендую изучать официальные источники, в частности те статьи, ссылки на которые я привожу здесь.

Читать дальше →
Total votes 63: ↑49 and ↓14+35
Comments23

Python-digest #6. Новости, интересные проекты, статьи и интервью [6 декабря 2013 — 13 декабря 2013]

Reading time4 min
Views8.8K
Продолжаем поиск интересной информации о любимом языке программирования и близлежащих технологиях. В этот раз Python Weekly анонсировало меньше событий, чем обычно но мы нашли для вас много интересного и без них. Настолько много, что нас забанили на Juick за репосты. Так что единственный ресурс с которого можно оперативно брать новости остался только наш rss.

Предлагаю 500 яндекс денег за первод статьи «Почему я ненавижу pip и virtualenv» на хабре — она кажется достойной.
Переведено хабраюзером lightman

Большое спасибо owlman за иллюстрацию и axce1 за подержку инструмента для создания дайджестов. Скоро там можно будет анонимно постить предложения новостей.

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

Сам дайджест под катом
Total votes 47: ↑42 and ↓5+37
Comments5

Видео-курс по JavaScript на русском языке

Reading time1 min
Views218K
Здравствуй, Хабр!

Представляю вам свой курс по JavaScript, недавно прошедний на Хекслете. Курс состоит из семи лекций общей продолжительностью около четырех часов.



Первая лекция: Введение в JavaScript, немного истории, числа (тут есть ошибка: функция toFixed округляет значения).



Остальное – под катом.
Читать дальше →
Total votes 135: ↑127 and ↓8+119
Comments23

Идентификаторы для инвентаризации ИТ оборудования это легко и просто

Reading time10 min
Views189K
Доброго дня почтенной публике.

Немалая часть моей работы — инвентарный учет оборудования. Я занимаюсь этим уже много лет и во многих компаниях, занимаюсь достаточно успешно, поэтому могу поделиться тем, как нужно делать первые шаги к тому, чтобы этот мутный процесс не превращался в головную боль для человека, которому его поручили.
Читать дальше →
Total votes 35: ↑33 and ↓2+31
Comments94

Скрипт исправления даты установки пароля пользователя в AD

Reading time4 min
Views9.5K
Всем привет!
Иногда возникает ситуация, когда надо пользователю изменить дату установки пароля в Active Directory. Представляю скрипт. Наверняка многим пригодится.
set-ADUserPswDate.ps1
# Основной скрипт изменения даты установки пароля по файлу или по учетной записи пользователя.
# Автор Лужин Кирилл
# luzhin.kirill@yandex.ru

Add-PSSnapin Quest.ActiveRoles.ADManagement;

$gsFilename = "c:\scriptps\set-ADUserPswDate.txt";
$giRows = (Get-Content -LiteralPath $gsFilename).Count;
$giX = 0;
$giMinimumSleep = 218;
$giMaximumSleep = 884;
$gtBeginDay = "08:00:00";
$gtEndDay = "19:00:00";
$today_date = Get-date -Format "dd.MM.yyyy";

function set-password($lsAccount) {
	Set-QADUser $lsAccount -ObjectAttributes @{pwdLastSet=0} | Out-Null;
	Set-QADUser $lsAccount -ObjectAttributes @{pwdLastSet=-1} | Out-Null;
}

function get-password($lsAccount) {
	get-qaduser $lsAccount -IncludedProperties pwdLastSet | % {$lsPwdLastSet = $_.pwdLastSet;}
	$lsPwdLastSet = $lsPwdLastSet.AddHours(3);
	$lsPwdLastSetNorm = get-date -uformat '%d.%m.%Y %R' -Date $lsPwdLastSet;
	return $lsPwdLastSetNorm;
}

function send-eMail($to,$toCc,$text="",$subject="Изменение даты установки пароля",$toBcc="admin3@domain.com") {
	write-host "Кому: $to | тема: $subject | текст: $text";
	$Enc = [Text.Encoding]::UTF8;
	Send-MailMessage -to $to -from "admin1@domain.com" -Bcc $toBcc -Cc $toCc -subject $subject -smtpServer MAIL-SRV -BodyAsHtml $text -Encoding $Enc;
}

function get-sleepRandom($liMinimum, $liMaximum) {
	$giSleep = Get-Random -minimum $liMinimum -maximum $liMaximum
	# $giSleep = 30;
	$giSleepS = $giSleep % 60;
	$giSleepM = $giSleep - $giSleepS;
	$giSleepM = $giSleepM / 60;
	$gdFuture = (Get-Date).AddSeconds($giSleep);
	write-host "Ждем"$giSleepM" минут "$giSleepS" секунд (будет выполнен "$gdFuture")...";
	Start-Sleep -Seconds $giSleep
}

function isAtWork($ltBegin, $ltEnd) {
	$lbAtWork = $FALSE;
	
	$giDayOfWeek = (get-date).DayOfWeek.ToString('d');
		
	if (($giDayOfWeek -gt 0) -and ($giDayOfWeek -lt 6)) {
		$today_date_full = $today_date + " " + $ltBegin;
		$today_date_full2 = $today_date + " " + $ltEnd;
		write-host $today_date_full" - "$today_date_full2;
		$a=[datetime]::parse($today_date_full);
		$c=[datetime]::parse($today_date_full2);
		$b = get-date;
		
		if (($b -gt $a) -and ($b -lt $c)) {
			write-host $b". Время позже 8:00 и раньше 19:00, пользователь может поменять пароль!";
			$lbAtWork = $TRUE;
		} else {
			write-host "Время раньше 8:00 или позже 19:00, пользователь не может поменять пароль.";
		}
	} else {
		write-host "Сегодня выходной, пользователя нет на работе.";
	}
	
	return $lbAtWork;
}

function update-password_wReport($lsAccount) {
	write-host " ";
	write-host "*"$lsAccount;
	$gbAtWork = isAtWork $gtBeginDay $gtEndDay;
	if ($gbAtWork) {
		$gsPwdLastSet = get-password $lsAccount;
		$lsText = "<tr><td style='border:1px solid RGB(200,200,200);'><strong>" + $lsAccount + "</strong></td><td style='border:1px solid RGB(200,200,200);'>" + $gsPwdLastSet + "</td>";
		set-password $lsAccount;
		$gsPwdLastSet = get-password $lsAccount;
		$lsText = $lsText + "<td style='border:1px solid RGB(200,200,200);'>" + $gsPwdLastSet + "</td></tr>";
	} else {
		$lsText = "<tr><td style='border:1px solid RGB(200,200,200);'><strong>" + $lsAccount + "</strong></td><td style='border:1px solid RGB(200,200,200);'>Нет на работе</td><td style='border:1px solid RGB(200,200,200);'></td></tr>";
	}
	return $lsText;
}

$gsText = $gsText + "<table style='border-collapse:collapse; width:500px; font-family:Tahoma,Arial,Calibri;font-size:10pt;'>";
$gsText = $gsText + "<tr><td style='width:40%; border:1px solid RGB(200,200,200); text-align:center;'>Учетная запись</td>";
$gsText = $gsText + "<td style='width:130px; border:1px solid RGB(200,200,200); text-align:center;'>Было</td><td style='width:130px; border:1px solid RGB(200,200,200); text-align:center;'>Стало</td></tr>";

if ($ARGS[0] -ne $Null) {
	$gsText = $gsText + (update-password_wReport $ARGS[0]);
} else {
	Get-Content -LiteralPath $gsFilename | 
		% {
			$gsText = $gsText + (update-password_wReport $_);
			
			$giX = $giX + 1;
			if ($giX -lt $giRows) {
				get-sleepRandom $giMinimumSleep $giMaximumSleep;
			}
		}
}
$gsText = $gsText + "</table>";
if ($ARGS[1] -ne $Null) {
	send-eMail $ARGS[1] "admin1@domain.com" $gsText;
} else {
	send-eMail "admin1@domain.com" "admin2@domain.com" $gsText;
}


Под катом описание, использование и особенности.
Читать дальше →
Total votes 10: ↑4 and ↓6-2
Comments6

Работа с предпочтениями групповой политики: взаимодействие с локальными учетными записями

Reading time10 min
Views49K
Как вы знаете, такие расширения клиентской стороны технологии групповой политики, как элементы предпочтения, по сути, позволяют вам выполнять большинство различных сценариев, которые попросту невозможно реализовать при помощи административных шаблонов или же параметров безопасности. Ввиду того, что весь набор предпочтений групповой политики включает в себя 21 расширение клиентской стороны (включая неработающие элементы предпочтений приложений), можно прийти к выводу, что практически все те операции, которые решались средствами сценариев можно реализовать путем таких расширений CSE.
Одно и таких расширений клиентской стороны позволяет вам управлять учетными записями пользователей и групп, которые можно найти на каждой машине еще при установке самой операционной системы. С такими учетными записями приходится сталкиваться не столь часто, но иногда могут возникнуть ситуации, когда вам придется выполнять некоторые операции по их обслуживанию, и знание того, по какому принципу следует выполнять такое обслуживание, будет как никогда кстати.
Вот как раз на таких учетных записях и сценариях по их обслуживанию мы с вами и остановимся в этой статье. Далее вы узнаете о том, какие бывают локальные учетные записи пользователей, кое-что узнаете об учетных записях групп, а также о том, каким образом можно управлять такими объектами при использовании функциональных возможностей групповой политики и элемента предпочтений «Локальные пользователи и группы». А начинать мы сейчас будем с
Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments2

Отчёт по событиям на Windows серверах домена

Reading time32 min
Views15K
Всем привет!
Удобно получать в почту ежедневный отчёт о событиях на серверах домена за предыдущий день. Можно и за текущий, не суть важно. Когда такие отчёты собираются за длительный промежуток времени (за несколько лет, например), можно найти, кто завёл определённого пользователя, кто пользователя добавил/удалил из группы, кто поменял пользователю пароль (или когда он сам себе поменял), логины на серверы, неудачные логины и так далее. В принципе, каждый сам для себя определяет набор событий для отчётов. Главное принцип.
Нам, например, в почту приходит вот такой отчёт:

Кому нужно, под катом реализация.
Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments15

Python-digest #5. Новости, интересные проекты, статьи и интервью [29 ноября 2013 — 6 декабря 2013]

Reading time3 min
Views9K

Продолжаем находить самые интересные и полезные новости. Это неделя была достаточно скучной, но мы все равно накопали приличное количество интерестностей. Порадовал небольшой всплеск количества статей в нужном хабе. Благодаря owlman у нас есть своевременное уведомление о грядущей встрече питонистов в Mailru Group, иллюстрация к даджесту, а также анонс библиотеки сhronic. Огромное ему за это спасибо!

Кроме того, хабраюзер axce1 продолжает разрабатывать наш инструмент для создания дайджестов. На этой неделе в нем появился простенький поиск по ленте. Ему тоже не менее огромное спасибо и прошу поддержать его плюсиками в карму, так как само существование этого дайджеста во многом зависит от этого инструмента; его развитие очень меня стимулирет находить и анонсировать для вас больше полезной информации о Python.

Сам дайджест под катом
Total votes 33: ↑32 and ↓1+31
Comments15

Information

Rating
4,510-th
Location
Смоленск, Смоленская обл., Россия
Registered
Activity