Pull to refresh

Как изменилась стандартная библиотека Python за последние годы

Python *Programming *

Python 3.8+


Когда выходит очередная версия Python, все внимание достается новым фичам языка: моржовому оператору, слиянию словарей, паттерн-матчингу. Еще много пишут об изменениях в асинхронной работе (модуль asyncio) и типизации (модуль typing) — эти модули на виду и бурно развиваются.


Остальным модулям стандартной библиотеки достается незаслуженно мало внимания. Хочу это исправить и рассказать, что интересного появилось в версиях 3.8–3.10.

Читать дальше →
Total votes 83: ↑81 and ↓2 +79
Views 13K
Comments 13

Обработка древовидного массива со Smarty

Lumber room
Вчера столкнулся с проблемой. Имею массив, типа:

1 => array(
  'title' => 'название 1',
  'sub' => array(
    2 => array(
      'title' => название 2',
      'sub' => array(
        3 => array(
          'title' => 'название 3'
        )
      )
    )
  )
);

Обработка его средствами smarty получилась никакая — не поддерживает он бесконечных циклов внутри какой-либо функции. На уровне PHP это сделать не проблема — нужно просто прогнать весь массив через одну функцию вывода, в которой при нахождении подэлементов вновь делать вызов этой же функции, только уже с массивом подэлементов и дальше по аналогии.

Может кто реализовывал вывод таких древовидных массивов с помощью смарти? :)

Update: Смотрим вариант, найденный мной на каком-то форуме.
Читать дальше →
Total votes 8: ↑3 and ↓5 -2
Views 558
Comments 14

Класс Set — повелитель массивов

CakePHP *
Сегодня кстати, вышел четвертый релиз-кандидат CakePHP 1.2. Более 300 изменений и все такое. Но сейчас речь не об этом.
Оказывается в недрах CakePHP давно живет класс Set, который активно используется в ядре и редко используется конечными пользователями. А между прочим зря.
О чем это ты?
Total votes 41: ↑29 and ↓12 +17
Views 1.1K
Comments 44

Проблема c массивами javascript в IE при межоконном взаимодействии

Lumber room
С занятной проблемой столкнулся. Есть у меня на странице сайта некий массив объектов, в общем не простая конструкция вида:
dataArray = [
{id1:data1},
{id2:data2},
{id3:data3}
]

сами данный не суть.

В программе есть такой момент, когда данный массив должен быть передан открывшемуся окну. К коде окна естественно прописано:
dataArray = window.opener.dataArray;

Проблема заключается в том, что как window.opener.dataArray, так и, соответственно, dataArray уже не являются массивами, т. е.:
window.opener.dataArray instanceof Array // false
dataArray instanceof Array // false, соответственно.
и соответственно теряют все присущие массивам методы.

Решение конечно есть — передавать массив через JSON, но оно какое-то… топорное что-ли…
Total votes 5: ↑0 and ↓5 -5
Views 195
Comments 11

Проверка существования свойств и методов объекта в Javascript

JavaScript *
Нашел в коде Javascript библиотеки вот такую вот конструкцию:

if ('is_public' in profile) {
...
}


Очень заинтересовало, как это работает. До этого использовал оператор 'in' только для итерации, а тут вот такая вот проверка интересная. Покопавшись я обнаружил для себя, что оператор 'in' также можно использоваться для проверки существования метода объекта, свойства объекта и индекса элемента в массиве. Ниже несколько примеров:
Читать дальше →
Total votes 62: ↑48 and ↓14 +34
Views 64K
Comments 99

Быстрый доступ к 2D-массиву во флэше

Adobe Flash
Задача простая и типичная. Есть большой двумерный массив. И нам хочется наиболее эффективно с ним работать. В моем случае, меня интересовал массив чисел (байт).

Что ж… Самое простое, что приходит на ум — это воспользоваться стандартным двумерным массивом типа и обращаться к элементам на манер a[x][y]. Но насколько это эффективно? Возможно, будет быстрее оперировать с одномерным массивом и обращаться к элементам как a[x + y*size_x]?

Чтобы расставить все точки над i, я написал тест, который проверяет скорость чтения и записи различных вариантов массивов.

На ум пришли следующие варианты:
  • 2-мерный нетипизированный массив (Array)
  • 1-мерный нетипизированный массив (Array)
  • 2-мерный типизированный массив (Vector.<Vector.<int>>)
  • 1-мерный типизированный массив (Vector.<int>)
  • Использование BitmapData как хранилища и setPixel/getPixel для доступа
  • 1-мерный массив байт (ByteArray)
  • Ну, и наконец, изврат. Обращение к ByteArray, ускоренное средствами быстрого доступа к памяти технологии Alchemy
Читать дальше →
Total votes 32: ↑24 and ↓8 +16
Views 1.1K
Comments 47

Как устроены массивы в PHP

PHP *
В прошлой статье я рассказывал о переменных, теперь пойдет речь о массивах.

Что такое массивы на уровне PHP?


На уровне PHP, массив — это упорядоченный список скрещенный с мэпом. Грубо говоря, PHP смешивает эти два понятия, в итоге получается, с одной стороны, очень гибкая структура данных, с другой стороны, возможно, не самая оптимальная, точнее, как выразился Anthony Ferrara:
PHP arrays are a great one-size-fits-all data structure. But like all one-size-fits-all <anything>, jack-of-all-trades usually means master of none.

Ссылка на письмо



(на картине изображен HashTable с Bucket-ами, В. Васнецов)
Читать дальше →
Total votes 90: ↑77 and ↓13 +64
Views 67K
Comments 40

SoapServer на PHP. Пусть array всегда будет Map

PHP *
Sandbox
Во время работы над серверной частью одного iphone приложения, всплыла любопытная особенность Zend_Soap_Server. Приводила она к спонтанно (на первый взгляд) возникающим ошибкам при возвращении php-ных массивов. У нас выявление и отладка заняли несколько человеко-часов, и, возможно, данная статья позволит кому-то те же самые несколько часов сэкономить.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 2.4K
Comments 2

Judy-массивы в PHP

Badoo corporate blog PHP *Programming *
В Badoo используется много сервисов на C и C++, большинство из которых работают с огромными объёмами данных. Как правило, сервисы выступают в роли «быстрого кэша» или «быстрой базы данных», т.е. совершают различные операции с массивами однотипных данных. Для быстрого доступа к данным мы давно и успешно используем Judy-массивы (англ. Judy arrays). Но однажды нам захотелось странного: обрабатывать большие массивы целых чисел на PHP, и мы сразу вспомнили про Judy.

Немного истории

Judy-массивы были изобретены Дугласом Баскинсом (англ. Douglas Baskins) в начале 2000-го года. Проект их разработки финансировался компанией HP, но примерно через два года был закрыт. За это время было выпущено четыре версии, причём разработка последней заняла больше года, и в ней разработчики смогли в два раза ускорить Judy, в два раза уменьшить потребление памяти, хоть и далось это нелёгкой ценой: объём кода вырос в 5 раз, а его сложность  ― на порядок.
Читать дальше →
Total votes 103: ↑93 and ↓10 +83
Views 27K
Comments 62

Интересные моменты, которые вы, возможно, не знали о C# (Array)

.NET *C# *
В продолжении статьи «8 фактов, которые вы, возможно, не знали о C#» описывающей интересные моменты языка C#, представляю крохотный очерк. Очень жаль, что некоторые воспринимают такие статьи как “капитанство” отбивая всякое желание к написанию, но несмотря на это, в комментариях, порой, всплывает много полезной информации.

Итак, что возвращают функции поиска индекса в массивах, если элемент не найден?
Читать дальше →
Total votes 82: ↑60 and ↓22 +38
Views 52K
Comments 35

Расширение возможностей массива в PHP

Lamoda.ru corporate blog PHP *
Уровень статьи: начальный/средний

Массив в PHP — один из самых мощных типов данных. Он может работать как линейный массив (список), как ассоциативный (словарь) и как смешанный. В качестве ключа массива может использоваться либо целое число, либо строка, причем строка, если она представляет собой целое число (например, «5»), будет конвертирована в целое. Остальные типы, за исключением массивов и объектов, так же конвертируются в целое или строку — подробнее можно прочитать в документации.

Несмотря на мощные возможности базового типа array иногда хочется их расширить. Например, подобный кусок кода можно встретить, наверное, в большинстве php-проектов:

$foo = isset($array['foo']) ? $array['foo'] : null;
$bar = isset($array['bar']) ? $array['bar'] : null;


Один из способов сделать этот код короче и элегантней — использовать короткую запись тернарного оператора:

$foo = $array['foo'] ? : null;
$bar = $array['bar'] ? : null;


Но такой код выкинет PHP Notice в случе, когда ключ не определен, а я стараюсь писать максимально чистый код — на сервере разработки выставлено error_reporting = E_ALL. И именно в подобных случаях на помощь приходит ArrayObject — класс, к объектам которого можно обращаться используя синтаксис массивов и позволяющий изменять поведение используя механизм наследования.

Рассмотрим несколько примеров изменения поведения.

Читать дальше →
Total votes 34: ↑25 and ↓9 +16
Views 16K
Comments 30

7 трюков при работе с массивами в Ruby

Ruby *
Translation
Tutorial
ruby arrays

В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.
Читать дальше →
Total votes 39: ↑28 and ↓11 +17
Views 27K
Comments 6

Arr.js: события для стандартного массива

JavaScript *
Arr.js — это «класс», унаследованный от стандартного Array. Отличительными особенностями являются: наличие события change для отслеживания любых изменений в массиве, и методы insert(), update(), remove(), set(), get() для упрощенной работы с массивом. Доступны все «родные» методы стандартного Array.

var fruits = new Arr('apple', 'orange', 'pineapple');

fruits.on('change', function(event) {
  alert('I changed fruits: ' + fruits.join(', '));
});

fruits.push('banana');

Читать дальше →
Total votes 32: ↑26 and ↓6 +20
Views 9.9K
Comments 25

Очередная критическая уязвимость в Drupal 7

Information Security *Drupal *


Вслед за уязвимостью в XML-RPC, недавно компанией Sektion Eins была найдена уязвимость, которой подвержены все версии 7 ветки. Она позволяет выполнить произвольный SQL-запрос в БД друпала не имея никаких прав в системе. Опасность определена как наивысшая. 15 октября вышло обновление ядра до версии 7.32, которое устраняет эту уязвимость. Разработчики настоятельно советуют обновить ядро немедленно. Обновление не займёт много времени, необходимо обновить только файл /includes/database/database.inc. Спасти сайты до обновления может только блокировка сайта, maintenance mode не поможет.
В чём слабость, брат?
Total votes 24: ↑20 and ↓4 +16
Views 20K
Comments 14

Все способы перебора массива в JavaScript

JavaScript *
Translation

Содержание:


  • I. Перебор настоящих массивов
    1. Метод forEach и родственные методы
    2. Цикл for
    3. Правильное использование цикла for...in
    4. Цикл for...of (неявное использование итератора)
    5. Явное использование итератора

  • II. Перебор массивоподобных объектов
    1. Использование способов перебора настоящих массивов
    2. Преобразование в настоящий массив
    3. Замечание по объектам среды исполнения


Читать дальше →
Total votes 53: ↑44 and ↓9 +35
Views 424K
Comments 61

Тонкости Javascript/Node.js. Увеличиваем производительность в десятки раз

JavaScript *Node.JS *
Sandbox

Вступление


Появилась необходимость обмениваться сообщениями между сервером и клиентом в бинарном виде, но в формате JSON в конечном итоге. Начал я гуглить, какие существуют библиотеки упаковки в бинарный вид. Пересмотрел немало: MesssagePack, Bson, protobuf, capnproto.org и другие. Но эти все библиотеки позволяют паковать и распаковывать готовые бинарные пакеты. Не очень копался, возможно ли делать парсер входящего трафика по кускам. Но суть не в этом. С такой задачей никогда не сталкивался и решил поиграться с нодой и сделать свой. Куда же без костылей и велосипедов? И вот с какими особенностями Node.js я столкнулся…
Читать дальше →
Total votes 47: ↑35 and ↓12 +23
Views 43K
Comments 38

Прекрати злоупотреблять массивами в PHP

Website development *PHP *Programming *
Translation
Tutorial
php arrays everywhere

Меня давно мучает мысль об одной проблеме — тотально злоупотребление массивами в PHP. Возможно корень проблемы в процедурном наследии PHP или в том, что PHP привлекает большое количество неопытных разработчиков, не знаю. Но дело в том, что очень многие используют массивы там, где должны использоваться объекты!

Взглянем на типичный пример ужасающего, на мой взгляд кода, злоупотребляющего массивами. Для примера, предположим, мы извлекаем данные из БД и работаем с ними посредством массива. Вот такие примеры я вижу ежедневно:
Читать дальше →
Total votes 45: ↑22 and ↓23 -1
Views 25K
Comments 131

Немного о псевдомассивах (массивоподобных объектах или коллекциях). «Что это?», «Как с ними работать?» и прочее

JavaScript *
В этой статье я расскажу про псевдомассивы: «Что это?», «Как с ними работать?», «Чем они отличаются от массива?», «Как преобразовать их в массив?».

Так же, прежде чем начать, я уточню, что данная информация касается только JavaScript. То есть, я буду рассказывать о псевдомассивах в языке JavaScript.

Что такое псевдомассив (массивоподобный объект или коллекция)?


Псевдомассив — это объект, который структурно похож на массив. То есть у него есть числовые свойства (индексы) и свойство length.
Читать дальше →
Total votes 8: ↑7 and ↓1 +6
Views 29K
Comments 20

Как размеры массивов C стали частью двоичного интерфейса библиотеки

C *
Translation
Большинство компиляторов C позволяют получить доступ к массиву extern с неопределёнными границами, например:

extern int external_array[];

int
array_get (long int index)
{
  return external_array[index];
}

Определение external_array может находиться в другой единице трансляции и выглядеть так:

int external_array[3] = { 1, 2, 3 };

Вопрос в том, что произойдет, если это отдельное определение изменится так:

int external_array[4] = { 1, 2, 3, 4 };

Или так:

int external_array[2] = { 1, 2 };
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Views 8K
Comments 24
1