Ссылочная целостность при помощи FOREIGN KEY в MySQL

Ссылочная целостность—это состояние реляционной базы данных в которой записи не могут ссылаться на несуществующие записи в этой базе данных.

FOREIGN KEY—особый вид ограничения(constraint) MySQL, которое позволяет предотвратить нарушение ссылочной целостности при удалении/изменении информации в таблицах предках. Поддержка FOREIGN KEY поддерживается только для таблиц типа InnoDB

Пример нарушения ссылочной целостности

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

mysql> SELECT * FROM catalogs;                                                                           
+------------+-------------------------------------+                                                      
| id_catalog | name                                |
+------------+-------------------------------------+                                                      
|          1 | Процессоры                          |                                                      
|          2 | Материнские платы                   |
|          3 | Видеоадаптеры                       |
|          4 | Жёсткие диски                       |
|          5 | Оперативная память                  |
+------------+-------------------------------------+
mysql> SELECT * FROM products;                                                                           
+------------+-------------------------------+------------+
| id_product | name                          | id_catalog |
+------------+-------------------------------+------------+
|          1 | Celeron 1.8                   |          1 |
|          2 | Celeron 2.0GHz                |          1 |
|          3 | Celeron 2.4GHz                |          1 |
|          4 | Celeron D 320 2.4GHz          |          1 |
|          5 | Celeron D 325 2.53GHz         |          1 |
|          6 | Celeron D 315 2.26GHz         |          1 |
|          7 | Intel Pentium 4 3.2GHz        |          1 |
|          8 | Intel Pentium 4 3.0GHz        |          1 |
|          9 | Intel Pentium 4 3.0GHz        |          1 |
|         10 | Gigabyte GA-8I848P-RS         |          2 |
|         11 | Gigabyte GA-8IG1000           |          2 |
|         12 | Gigabyte GA-8IPE1000G         |          2 |
|         13 | Asustek P4C800-E Delux        |          2 |
|         14 | Asustek P4P800-VM\L i865G     |          2 |
|         15 | Epox EP-4PDA3I                |          2 |
|         16 | ASUSTEK A9600XT/TD            |          3 |
|         17 | ASUSTEK V9520X                |          3 |
|         18 | SAPPHIRE 256MB RADEON 9550    |          3 |
|         19 | GIGABYTE AGP GV-N59X128D      |          3 |
|         20 | Maxtor 6Y120P0                |          4 |
|         21 | Maxtor 6B200P0                |          4 |
|         22 | Samsung SP0812C               |          4 |
|         23 | Seagate Barracuda ST3160023A  |          4 |
|         24 | Seagate ST3120026A            |          4 |
|         25 | DDR-400 256MB Kingston        |          5 |
|         26 | DDR-400 256MB Hynix Original  |          5 |
|         27 | DDR-400 256MB PQI             |          5 |
|         28 | DDR-400 512MB Kingston        |          5 |
|         29 | DDR-400 512MB PQI             |          5 |
|         30 | DDR-400 512MB Hynix           |          5 |
+------------+-------------------------------+------------+

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

mysql> DELETE FROM catalogs WHERE name = 'Процессоры';

mysql> SELECT * FROM catalogs;
+------------+-------------------------------------+
| id_catalog | name                                |
+------------+-------------------------------------+
|          2 | Материнские платы                   |
|          3 | Видеоадаптеры                       |
|          4 | Жёсткие диски                       |
|          5 | Оперативная память                  |
+------------+-------------------------------------+
mysql> SELECT * FROM products WHERE id_catalog = 1;
+------------+------------------------+------------+
| id_product | name                   | id_catalog |
+------------+------------------------+------------+
|          1 | Celeron 1.8            |          1 |
|          2 | Celeron 2.0GHz         |          1 |
|          3 | Celeron 2.4GHz         |          1 |
|          4 | Celeron D 320 2.4GHz   |          1 |
|          5 | Celeron D 325 2.53GHz  |          1 |
|          6 | Celeron D 315 2.26GHz  |          1 |
|          7 | Intel Pentium 4 3.2GHz |          1 |
|          8 | Intel Pentium 4 3.0GHz |          1 |
|          9 | Intel Pentium 4 3.0GHz |          1 |
+------------+------------------------+------------+

Это явление называется нарушением ссылочной целостности

На ссылочную целостность базы данных как правило оказывают четыре типа изменений:

  • Добавление новой записи в таблице-потомке. Например добавление новой товарной позиции в таблицу products. Важно заметить что важную роль играет изменение именно таблицы-потомка, т.к изменение таблицы-предка (catalogs) не приведет к нарушению ссылочной целостности, т.к наличие пустой категории товаров допустимо
  • Обновление внешнего ключа в таблице-потомке. Эта ситуация похожа на первую и может произойти при изменении у товара ссылки на несуществующий раздел каталога, например товар с id_catalog равным 50
  • Удаление записи из таблицы-предка. Эта ситуация рассмотрена выше.
  • Изменение записи в таблице-предке. Эта ситуация отличается от рассмотренной выше тем что категория каталога не удаляется а принимает новый id

Обработка изменений при помощи FOREIGN KEY

Для того что бы контролировать ссылочную целостность в базе данных необходимо что бы таблицы были связаны при помощи конструкции FOREIGN KEY, которая имеет вид:


FOREIGN KEY [index_name] (index_col_name, …)
REFERENCES tbl_name (index_col_name,…)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

FOREIGN KEY — используется при создании/изменении таблиц-потомков таблицах. В рамках данной статьи FOREIGN KEY, следует использовать в таблице products. Данная конструкция позволяет задать в таблице-потомке внешний ключ с именем index_name на столбцах таблицы которые перечисляется в круглых скобках. Можно использовать один или несколько столбцов.

Ключевое слово REFERENCES задаёт таблицу-предка tbl_name на которую будет ссылаться внешний ключ. Поля таблицы-предка задаются в круглых скобках, один или несколько.

Необязательные конструкции ON DELETE и ON UPDATE, определяют поведение MySQL при удалении/обновлении записей из таблицы-предка.

Допустимые параметры для ключевых слов ON DELETE и ON UPDATE:

  • RESTRICT — Если в таблице-потомке существуют записи ссылающиеся на первичный ключ таблицы-предка то при удалении или обновлении записей с этим первичным ключом в таблице предке, будет возвращена ошибка. Ошибка будет возвращаться до тех пор пока не останется ни одной ссылки в таблице потомке. В MySQL данный параметр означает то же самое что и NO ACTION
  • CASCADE — При удалении/обновлении записей в таблице-предке, будут так же обновлены/удалены записи из таблицы-потомка с существующим первичным ключом
  • SET NULL — При удалении/обновлении записей в таблице-предке, записи из таблицы-потомка с существующим первичным ключом будут обновлены на NULL
  • NO ACTION — При удалении/обновлении записей в таблице-предке, записи из таблицы-потомка с существующим первичным ключом изменены не будут. В MySQL данный параметр означает то же самое что и RESTRICT
  • SET DEFAULT — Это действие зарезервировано но не обрабатывается в InnoDB

Добавление для таблицы products из примера статьи конструкции:

ALTER TABLE products ADD CONSTRAINT fk_catalog
FOREIGN KEY (id_catalog) REFERENCES catalogs (id_catalog)
    ON DELETE CASCADE
    ON UPDATE CASCADE

приведет к тому что изменения таблицы catalogs приведет к автоматическому изменению таблицы products.

Проверку ограничения внешнего ключа можно отключить присвоив системной переменной FOREIGN_KEY_CHECKS значение 0

mysql> FOREIGN_KEY_CHECKS = 0;

Источник

Настройка принтеров HP семейства LaserJet 10xx

Краткое описание руководства

При подключении некоторых принтеров производства Hewlett-Packard семейства LaserJet 10xx — система автоматически добавляет принтер, но принтер не печатает. Данное руководство поможет Вам заставить принтер печатать.

Удалите автоматически подключенный принтер

Для этого перейдите: Система→Администрирование→Печать и в появившемся окне нажмите правой кнопкой мыши на настраиваемом принтере и в появившемся меню выберите Удалить.

Создайте скрипт

Создайте скрипт, например так: gedit ~/get_printer_work и в появившемся окне редактора введите:

#!/bin/bash
printers="1000 1005 1018 1020"
cd /tmp
for prn in $printers; do
img="sihp${prn}.img"
dl="sihp${prn}.dl"
getweb $prn
if [ -f $img ]; then
arm2hpdl $img > $dl
sudo cp $dl /usr/share/foo2zjs/firmware/$dl
rm $img $dl
fi;
done

Сохраните файл, сделайте его исполняемым. Например так:

$ sudo chmod +x ~/get_printer_work
Для работы принтера необходим пакет foo2zjs. В Ubuntu он по-умолчанию установлен, но в некоторых вариантах установки системы может отсутствовать. Если это так — установите его.

Запустите скрипт

Запустите скрипт на выполнение

$ ~/get_printer_work

По ходу выполнения скрипт запросит пароль пользователя для доступа к административным правам.

Установите принтер

Для этого перейдите: Система→Администрирование→Печать и в появившемся окне нажмите кнопку Создать — в появившемся окне выберите свой принтер и следуйте подсказкам системы. Все параметры, которые необходимо указать пользователю можно оставить по-умолчанию.

Источник

Монтирование разделов

Монтирование разделов

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

  • Если вы раньше использовали ОС Windows, то вы, скорее всего, привыкли к дискам с именами (C:), (D:) и т.д. В ОС Ubuntu Linux все иначе. Если в Windows для каждого раздела винчестера, CD-привода, флешки или картридера, назначалась определенная буква, к примеру (E:), то в Linux содержимое всех подключаемых и внутренних дисков отображается в виде папок, которые монтируются (подключаются) в корень файловой системы (/) По началу это может показаться очень неудобным, но при постепенном осваивании системы Linux, вы поймете что так правильней и даже удобней.
В Linux подключение диска в основную файловую систему называется монтирование.
  • Список всех смонтированных устройств можно узнать командой mount
  • На данный момент Ubuntu Linux выполняет автоматическое монтирование всех обнаруженных подключаемых устройств (внешние винчестеры, флешки, фотоаппараты и т.д.) в корень файловой системы в директорию /media/. Например, если вы вставите флешку с меткой «Flash_card», то система смонтирует ее в каталог /media/Flash_card. В любом случае вам не надо задумываться куда и как монтировать внешние носители, т.к. они автоматически становятся доступны на панели рабочего стола в меню «Переход».
Однако ситуация с NTFS, FAT и FAT32 разделами основного (внутреннего) винчестера несколько иная. Чтобы каждый раз при попытке зайти на NTFS или FAT32 раздел не вводить пароль нужно выполнить действия рассмотренные ниже:

Способы монтирования

Способ 1: монтирование через универсально уникальный идентификатор (UUID)

Монтирование через идентификатор диска UUID является наиболее надёжным, работает во всех версиях Ubuntu (и не только Ubuntu).UUID — это атрибут конкретной файловой системы, а не произвольное число, зависящее от физического порядка подключения дисков или случайностей инициализации дисковой подсистемы ядром.

Узнаем UUID разделов, для этого

  • в терминале выполняем команду:

    sudo blkid

Примерный вывод:

/dev/sda1: UUID="00a4ad8e-dbcc-4c32-a0b4-074b5ee2bfb4" TYPE="ext4" 
/dev/sda2: LABEL="Win7" UUID="0E42D6D242D6BE21" TYPE="ntfs" 
/dev/sda3: LABEL="Shared" UUID="7ECCC7F5CCC7A62D" TYPE="ntfs" 
/dev/sda4: UUID="1050e484-896f-42a9-bdb3-49eb1255cc77" TYPE="swap" 
/dev/sr0: LABEL="DrWebLiveCD" TYPE="iso9660" 
/dev/sdb1: LABEL="TRENDNET8GB" UUID="355B-FE37" TYPE="vfat"

Предположим, мы хотим подключить раздел «Shared» (NTFS-раздел, находящийся на основном диске компьютера) и «TRENDNET8GB» (флэшка, отформатированная в FAT32).

Бонус использования команды blkid по сравнению с инспекцией каталога /dev/disk/by-uuid/ в том,что вы сразу видите тип файловой системы на блочном устройстве, если ядру удалось его определить.
  • Создаём каталоги для монтирования:

    sudo mkdir /mnt/Shared /mnt/TrendNet8Gb
  • Открываем от имени администратора файл /etc/fstab, содержащий информацию о всех монтируемых при загрузке разделах:

    sudo nano /etc/fstab
  • Добавляем в конец файла,
    для NTFS:

    UUID="7ECCC7F5CCC7A62D" /mnt/Shared ntfs rw,nls=utf8,gid=plugdev,umask=0002 0 0

    для FAT и FAT32:

    UUID="355B-FE37" /mnt/TrendNet8Gb vfat rw,exec,codepage=866,nls=utf8,gid=plugdev,umask=0002,nofail,users 0 0
  • Монтируем только что вписанные разделы диска:

    sudo mount -a

Способ 2: монтирование через имена устройств

Монтирование с помощью таблицы разделов поддерживается практически во всех версиях всех *nix-подобных операционных систем.Считается устаревшим и строго не рекомендуется к постоянному использованию.

Единственным заметным плюсом является небольшая длина имён устройств, что удобно при прямой работе с консолью. Например, во время реанимации умершей системы.

  • Узнаём имена разделов. Для этого можно, опять же, воспользоваться командой blkid, либо обратиться к помощи системы:

    cat /proc/partitions

Примерный вывод:

# cat /proc/partitions
major minor  #blocks  name

   8     0  488386584 sda
   8     1   20971520 sda1
   8     2    2097152 sda2
   8     3  464519168 sda3
   8    16  488386584 sdb
   8    17   20971520 sdb1
   8    18    2097152 sdb2
   8    19  464519168 sdb3
   9     1   10538496 md1
   9     0    6289344 md0

Разделы, оканчивающиеся цифрой — файловые системы. Разделы без цифры на конце — реальные физические устройства. В данном примере участвуют два физических диска (/dev/sda и /dev/sdb) и два рейд-массива (по сути — две файловые системы, не привязанные напрямую к какому-то одному физическому носителю).

Больше информации (как то точная геометрия и серийные номера физических дисков, что бывает нужно в целях более точной идентификации разделов) можно получить, воспользовавшись утилитами fdisk, sfdisk (для дисков, размеченных в MBR), parted (рекомендуется, понимает как разметку MBR, так и более современную GPT, используемую в системах с UEFI BIOS).Пример вывода команды fdisk (вывод parted отличается очень незначительно):

# fdisk -u -l /dev/sd?

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x8543ab30

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    41945087    20971520   83  Linux
/dev/sda2        41945088    46139391     2097152   83  Linux
/dev/sda3        46139392   975177727   464519168   83  Linux

Disk /dev/sdb: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors
Units = sectors of 1 * 512 = 512 bytes
Disk identifier: 0x84a90046

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048    41945087    20971520   83  Linux
/dev/sdb2        41945088    46139391     2097152   83  Linux
/dev/sdb3        46139392   975177727   464519168   83  Linux

Попробуем достучаться до массива md0.

  • Как и прежде, создаём каталог для монтирования файловой системы:

    sudo mkdir /mnt/raid0
  • Предположим, мы не знаем, какая файловая система на диске. К счастью, в большинстве случаев вполне можно положиться на автоматическое определение системы.

    $ sudo mount /dev/md0 /mnt/raid0 -t auto -o rw,nls=utf8,noatime
    
    $ mount
    ....
    /dev/md0 on /mnt/raid0 type ext3 (rw,noatime,nls=utf8)

Дополнительная информация

Я не стал загружать основной текст статьи расшифровкой опций монтирования, но несколько слов пояснения сказать необходимо.

  • rw (read-write, чтение-запись) — файловая система будет подключена с возможностью записи на неё пользователями.
Если вы хотите предотвратить любую запись на файловую систему вообще, указание одной только опции ro (read-only, только чтение) вас не спасёт — такие действия, как восстановление целостности системы по записям из журнала, будут проведены при подключении систем, поддерживающих журналирование. При необходимости предотвратить любую запись на файловую систему пользуйтесь другими средствами для монтирования, либо внимательно читайте документацию на утилиту монтирования для соответствующей файловой системы, если она допускает принудительное отключение подобных действий.
  • exec — все файлы на подключемой системе будут считаться исполнимыми, если система не поддерживает других механизмов указания исполнимости файла. Альтернативно, noexec запрещает исполнение любых бинарных файлов вообще.
  • codepage=866 — указывает, какую кодировку использовать для трансляции имён файлов на файловой системе. Кириллическая русская кодовая страница для файловой системы FAT — 866. Длинные имена на файловой системе (VFAT) сохраняются в уникоде, реально эта настройка нужна только для дисков, записанных на отличных от Windows системах, не поддерживающих соглашения VFAT.
  • nls=utf8 — указывает модулю файловой системы, какую кодировку использовать при передаче данных системе (и пользователю). Старое название этой опции — iocharset использовать запрещено — она будет удалена в следующих версиях программы.

Схематично взаимодействие этих двух опций можно представить как:

FS <=charset=> OS <=nls=> Applications <=> Operator
  • uid (gid) — указывает, какой пользователь (группа) будет владеть точкой подключения (и файлами на ней, если нет других способов определить владельца). gid=plugdev указывает, что все пользователи в группе 46(plugdev) могут обращаться к этому устройству. Локальные пользователи в Ubuntu обычно входят в эту группу.
  • umask=0002 — подробности смотрите в man chmod
  • nofail — если указанный том недоступен в момент загрузки, это не создаст ошибок и загрузка нормально продолжится.
    Внимание: настольная (desktop) версия Ubuntu всё равно выдаст предупреждение и будет ждать ввода пользователя.
  • users — допускает монтирование и размонтирование устройства обычными пользователями, причём, в отличие от user, размонтировать устройство может любой пользователь, не обязательно тот, что его монтировал.
Более подробно о монтировании разделов диска и опций к нему можно узнать из статьи про fstab, а также в статье разделы_и_файловые_системы_linux.

Донастройка системы

Теперь диски стали подключаться автоматически, но так как это делается от имени root, у нас пропала возможность на подключенных дисках давать права на общий доступ, чтобы восстановить эту возможность добавим настройку в Samba:

sudo gedit /etc/samba/smb.conf

добавим в секцию [global]:

usershare owner only = false
Это ОЧЕНЬ ГРУБЫЙ ХАК. Для нормальной работы с пользователями на NTFS дисках — создайте на NTFS разделе файл .NTFS-3G/UserMapping

Источник

Права доступа в Linux

Работая в Linux (равно как и во FreeBSD и Windows), нужно не забывать о правах доступа на файлы и папки. Часто, разворачивая проекты, написанные другими программистами, возникает необходимость изменить права на файлы или папки. Потребность эта возникает при неправильном проектировании разработчиками прав доступа или же при тонкой настройке проекта на поддерживаемом сервере.

Ниже приведённые рецепты помогут решить 90% проблем, возникающих при настройке прав доступа.

Сменить владельца для всех папкок и файлов, лежащих в данной папке

Чтобы сменить владельца, в Unix используется команда chown. Первая группа параметров данной команды — опции. Для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить команду рекурсивно — с параметром «-R».

Вторая группа параметров — это владелец и группа владельцев, разделённые двоеточием (можно не устанавливать группу — тогда это просто логин владельца) — «user:group» или «user».

Третья же группа параметров — это пути до папок / файлов, к которым нужно применить команду. Например, «/home/user/dir/».

Итак, команда смены владельца и группы владельцев для директории и всех поддиректорий с файлами будет выглядеть так:

sudo chown -R user:group /home/user/dir/

Sudo говорит о том, что команда будет исполняться с повышенными привилегиями — обычный пользователь не способен изменить ни владельца, ни группу.

Изменить права доступа на файл или папку

Помимо владельца, можно настроить, что же может этот самый владелец и группа, а также все остальные. В Unix идёт разделение возможностей именно таким образом — есть 3 группы прав: владелец, группа владельцев и другие. И права, что можно присвоить каждой группе:

  • Право на запуск файла. Оно же — право на проход по директории (если устанавливаем права на директории).
  • Право на изменение файла. Оно же — право на создание и удаление файлов и папок в директории (опять же, если устанавливается для папки).
  • И право на чтение файла. Для папок — это право на просмотр содержимого папки.

Кодируются эти права следующим образом: запуск — 1, изменение — 2, чтение — 4. Складывая их мы получим набор прав, предоставляемый владельцу/группе/другим.

Права на доступ изменяются командой chmod.

Примеры:

  • Изменять файл имеет право только владелец, группа владельце может читать, остальные — ничего не могут: chmod 640 /media/share/file.txt
  • Создавать файлы в папке могут все, но видит их только владелец: chmod 622 /media/share/messages/
  • Есть программа, которая не хочет запускаться — не хватает прав на исполнение. Нужно, чтобы все могли её запустить, но никто, кроме владельца, не мог её редактировать: chmod 711 /media/share/exec

Для рекурсивного изменения прав используется опять же ключ «-R». Например, chmod -R 700 /home/user — доступ к файлам и папкам /home/user останется только у владельца.

Стоит заметить, что изменять права на файлы и директории могут администраторы и владелец этих папок и файлов.

Изменение прав только на файлы или только на папки

Вышеприведённый пример рекурсивного изменения прав на файлы и папки в /home/user/ не так уж и хорош, как может показаться. Мы сделали, чтобы теперь и обычные файлы могли запускаться. Это может привести к проблемам, если среди фалов были примеры программ, на которые специально были выставлены права без запуска, дабы случайно не исполнить хранимые программы. Если бы мы поставили права 600 — мы бы потеряли доступ к подпапкам и файлам, лежащим в них, ибо без права «на исполнение» (оно же  — «право перехода по папке»), мы бы не смогли до них добраться.

Так что мухи — отдельно, котлеты — отдельно: зададим права сначала для одних, потом — для других. В этом нам поможет команда find.

find /home/user -type f -exec chmod 600 {} \;

Немного магии 🙂 Но если присмотреться, всё понятно: найти в /home/user все объекты, типа file (f) и выполнить для них chmod 600

Или же для директорий:

find /home/user -type d -exec chmod 700 {} \;

Что ещё можно посмотреть

Крайне полезны могут быть утилиты find, grep для поиска и фильтрации работы команд. chown и chmod также умеют больше, чем здесь описано. Есть ещё chattr — для смены атрибутов папок и файлов (про атрибуты — в другой раз). Все выше перечисленные утилиты имеют хорошую документацию. Чтобы её увидеть, нужно набрать в консоли man имя_утилиты.

Думаю, этих знаний хватит на первое время всем тем, кто решил настроить права в своём Linux (и Unix).

Источник: http://ubuntulinux.ru/config/recipe/izmenit-prava-na-fajly-ili-papki-v-linux/

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

Иногда бывает необходимо просто выгрузить результат запроса на форму без какой либо обработки

Делается это с помощью следующей строки:

ЭлементыФормы.ТабПоле.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Однако после этого данные на форме не отобразятся, и для того, что бы их стало видно нужно выполнить следующее:

ЭлементыФормы.ТабПоле.СоздатьКолонки();

Если в запросе есть итоги и выгрузка производится по группировкам, то на форме тип значения поля должен быть «ДеревоЗначений»
В противном случае — «ТаблицаЗначений»

Программный разбор текста. Регулярные выражения

Появилась задача разбора HTML текста внутри модуля 1С.


Попытался сделать посредством встроенных функций — получилось очень медленно. Функция СРЕД() в общем съедала до 90% времени, при том, что обработка одной страницы могла идти около минуты.

Задача была решена путем использования стандартной Windows библиотеки RegExp, которая очень быстро обрабатывает текст.

Данная библиотека доступна начиная c Windows 98

Информацию по тому, как составить регулярные выражения можно найти в викиучебнике (Ссылка)

Инструмент = "ABBN";
СерверИсточник = "www.kase.kz";
Адрес = "/ru/news/issuer/"+Инструмент+"/";
ИмяФайла = КаталогВременныхФайлов()+"KASENEws.html";
HTTP = Новый HTTPСоединение(СерверИсточник);
HTTP.Получить(Адрес,ИмяФайла);
Сообщить(ИмяФайла);
АдресНовости = "";

ЧтениеТекста = Новый ЧтениеТекста;
ЧтениеТекста.Открыть(ИмяФайла,КодировкаТекста.UTF8);
Текст = ЧтениеТекста.Прочитать();
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = True;
RegExp.Global = True;
RegExp.MultiLine = True;

//Найти все теги, в нутри которых есть атрибут со значением "news"
RegExp.Pattern = "<[^>]*\""news\"">";
Matches=RegExp.Execute(Текст);
ЧислоВхождений = Matches.Count();
Если ЧислоВхождений > 0 Тогда
	МассивСтрок = Новый Массив;
	Для К = 0 ПО ЧислоВхождений-1 Цикл
		Match = Matches.Item(К);
		МассивСтрок.Добавить(Match.Value);
	КонецЦикла;
КонецЕсли;
МИд = Новый Массив;

//Вытащить все числа из строки
RegExp.Pattern = "[0-9]*";
Для К = 1 ПО МассивСтрок.Количество()-1 Цикл
	Matches = RegExp.Execute(МассивСтрок[К]);
	Коунт = Matches.count();
	Для Т = 0 По Коунт-1 Цикл
		Match = Matches.item(Т);
		Ид = Match.value;
		Если Ид <> "" Тогда
			МИд.Добавить(Ид);
		КонецЕсли;
	КонецЦикла;
КонецЦикла;
Для К = 0 ПО МИд.Количество()-1 Цикл
	АдресНовости = "/news/show/"+МИд[К];
	ИмяФайлаНовости = КаталогВременныхФайлов()+МИд[К]+".txt";
	Состояние("Получение "+АдресНовости);
	HTTP.Получить(АдресНовости,ИмяФайлаНовости);
	Сообщить(ИмяФайлаНовости);
КонецЦикла;

Сколько зарабатывают звезды YouTube? Молодые миллионеры в рейтинге Forbes


Журналисты Forbes составили рейтинг самых популярных видеоблогеров YouTube, используя в качестве критерия доход блогера за год. Рейтинг получился довольно интересным, хотя сюрпризов практически нет. Большинство участников рейтинга младше 30 лет, доход большинства складывается из рекламных поступлений, спонсоров и медиарекламы. Есть и прямые платежи, если блогер рекламирует товар или услугу в своем видео.

На первом месте располагается Pewdiepie, с его видеообзорами прохождения игр. Геймер заработал в этом году уже $12 млн.

Еще один геймер, KSI, заработал $4,5 млн. Несмотря на то, что видеогеймеры зарабатывают неплохо, в числе лидеров есть и представители других сфер.

Юмористы Smosh и Fine Brothers заработали на каждого по $8,5 млн.

Танцующая скрипачка Lindsey Stirlingзаработала в этом году около $6 млн.

Michelle Phan, возможно, уже не так активен, как ранее, но все равно смог получить $3 млн в этом году.

Завершает рейтинг Rosanna Pansino с доходом в $2,5 млн. Девушка занимается кулинарией, и свои рецепты с демонстрацией приготовления блюд демонстрирует зрителям на YouTube, причем аудитория кулинара-самоучки постепенно расширяется.

Сервис YouTube был запущен около 10 лет назад, и основная его миссия позиционировалась, как «быстрый и простой доступ к видео, с возможностью выкладывания собственных видеоматериалов». Сейчас можно добавить еще и предоставление возможности молодым талантам получать миллионы долларов

Прошивка Samsung Galaxy Note 10.1 с помощью Odin’a

Всё описанное здесь Вы делаете на свой страх и риск. Никто (кроме Вас) не несёт ответственности за ваши действия.

  1. Скачать Odin (ссылка)
  2. Скачать Samsung USB Driver (ссылка)
  3. Скачать архив с прошивкой (например, по это ссылке)
  4. Если установлен KIES, то его нужно удалить
  5. Распаковать Odin, и запустить его. Обязательно: ЖЕЛАТЕЛЬНО РАСПАКОВАТЬ В ПАПКУ В КОРНЕВОМ КАТАЛОГЕ. В ПУТИ НЕ ДОЛЖНО БЫТЬ НИ ПРОБЕЛОВ, НИ КИРИЛЛИЧЕСКИХ СИМВОЛОВ
    Odin
  6. Распаковать прошивку. В ИМЕНИ ПУТИ К ПРОШИВКЕ ТАК ЖЕ НЕ ДОЛЖНО БЫТЬ КИРИЛЛИЧЕСКИХ СИМВОЛОВ
  7. Выключаем планшет
  8. Запускаем его в Download mode, зажав одновременно кнопки питания и убавления звука
    Назначение кнопок
  9. При появлении предупреждения (см. картинку) кнопку добавления звука для продолжения
    Подтверждение продолжения запуска в Download mode
  10. Подключаем устройство к компьютеру. Ждем, пока загорится ячейка желтым или голубым цветом (в старых версиях — желтый, в новых — голубой). Желательно подключать к разъему на материнской плате
  11. Жмем PDA, выбираем распакованную прошивку. галка repartition НЕ должна быть установлена
  12. Жмем кнопку START и ждем 5 — 10 минут.
  13. После появлении надписи PASS прошивка закончена. Об успехе прошивки сообщит надпись «All threads completed. (succeed 1 / failed 0)«

Odin v3

Ссылка
Программа Odin необходима для прошивки Android устройств от известного мирового производителя мобильной техники Samsung. Данной программой можно прошить абсолютно любой смартфон или планшет от Samsung на базе ОС Android в домашних условиях без особых усилий и знаний