GutHub обновил отчёт с анализом статистики проектов. По сравнению с сентябрём 2016 года число пользователей GitHub возросло с 5.8 до 24 млн, организаций с 331 тысяч до 1.5 млн, а репозиториев с 19.4 до 67 млн (учтены только репозитории, в которых наблюдалась активность). За год было совершено более миллиарда коммитов и 1.3 млн pull-запросов, закрыто 68.8 уведомлений о проблемах, отправлено 1.4 млн комментариев. Общее число pull-запросов за всю историю существования GitHub достигло значения в 100 млн.

Самым популярным языком на GitHub остаётся JavaScript для которого за год зафиксировано 2.3 млн pull-запросов, что на 30% больше, чем в прошлом году. Второе место занял Python (1 млн pull-запросов, на 26% больше, чем в прошлом году), который вытеснил на третье место язык Java (986 тысяч pull-запросов, прирост 23%). На четвёртом месте удержался язык Ruby (870 тысяч, 5%), на пятом PHP (559 тысяч, 14%), на шестом C++ (413 тысяч, 20%). Язык Си на 10 месте.

Доступен выпуск основной ветки высокопроизводительного HTTP-сервера nginx 1.13.6, в котором реализованы следующие изменения:

  • В модуле stream исправлена ошибка, проявляющаяся при использовании директивы 'ssl_preread' (не работало переключение на следующий бэкенд);
  • Внесены исправления в модуль ngx_http_v2_module;
  • Исправлена ошибка на 32-битных платформах с 64-битным time_t, на которых не поддерживались даты после 2038 года;
  • Внесены исправления в обработку дат до 1970 года и после 10000 года;
  • В модуле stream исправлена ошибка, из-за которой таймауты ожидания UDP-пакетов от бэкендов не заносились в лог или заносились с классом info вместо error;
  • Исправлена ошибка при использовании протокола HTTP/2, из-за которой nginx мог вернуть ошибку 400, не указав в логе причину;
  • Внесены исправления в обработку повреждённых файлов кэша;
  • Исправлена ошибка, приводящая к игнорированию заголовков управления кэшированием при перехвате ошибок обработчиком error_page;
  • Исправлена ошибка при использовании протокола HTTP/2, из-за которой могло быть повреждено тело запроса;
  • Внесены исправления в обработку адресов клиентов при использовании unix domain сокетов;
  • Исправлена ошибка при использовании директивы "hash ... consistent" в блоке upstream, из-за которой nginx сильно нагружал процессор, если были заданы большие веса и все или почти все бэкенды были недоступны.

После года разработки подготовлен релиз двухпанельного файлового менеджера GNOME Commander 1.8.0, оптимизированного для использования в пользовательском окружении GNOME. GNOME Commander представляет такие возможности как вкладки, доступ к командной строке, закладки, изменяемые цветовые схемы, режим пропуска каталогов при выделении файлов, доступ к внешним данным через FTP и SAMBA, расширяемые контекстные меню, автоматическое монтирование внешних накопителей, доступ к истории навигации, поддержка плагинов, встроенный просмотрщик текста и изображений, функции поиска, переименования по маске и сравнения директорий.

На самом деле прошло уже два дня, но статью на Хабр никто до сих пор не написал, так что придется мне устранять это упущение, что и делаю с удовольствием.

 

Итак, что же нового в этой версии PostgreSQL?

 

Во-первых, изменилось само версионирование. До "десятки" мы наблюдали множество минорных версий 9.x, которые выходили примерно раз в год и при этом вносили серьезные, далеко не минорные изменения. Поэтому с версии 10 было принято решение сделать нумерацию 10, 11, 12 и т.д. Кстати, MySQL, похоже пошел по тому же пути, прыгнул с 5.7 на 8.0

Состоялся релиз пользовательской оболочки Plasma 5.11, построенной с использованием платформы KDE Frameworks 5 и библиотеки Qt 5 с применением OpenGL/OpenGL ES для ускорения отрисовки. Оценить работу нового выпуска можно через Live-сборку от проекта openSUSE и сборки от проекта KDE neon. Пакеты для различных дистрибутивов можно найти на данной странице.

.

Получение случайного дробного числа

SELECT random()*(b-a)+a;

пример:

SELECT random()*(25-10)+10;

Получение случайного целого числа

SELECT floor(random()*(b-a)+a);

пример:

SELECT floor(random()*(25-10)+10);

 

# In Python 3 you can use a bare "*" asterisk
# in function parameter lists to force the
# caller to use keyword arguments for certain
# parameters:

>>> def f(a, b, *, c='x', d='y', e='z'):
...     return 'Hello'

# To pass the value for c, d, and e you 
# will need to explicitly pass it as 
# "key=value" named arguments:
>>> f(1, 2, 'p', 'q', 'v')
TypeError: 
"f() takes 2 positional arguments but 5 were given"

>>> f(1, 2, c='p', d='q',e='v')
'Hello'