массовое создание символических ссылок

#!/bin/bash
# first copy in the required directory or change the PWD
# PWD="/home/username/reqdirname" # full path only: ~ not works
DIR="~/destdirname"
FILE="filename.ext"
find "$PWD"/*/ -type f -name "$FILE" | sed "s|.*\(/[^/]\+\)/\(.*\)|ln -s & $DIR\1_\2|e" >/dev/null

в ~/destdirname создаются симлинки reqdirnames_filename.ext

обсуждение здесь

нейронная сеть на php в ubuntu 16.10

1 установка библиотеки fann для php в ubuntu
sudo apt install libfann-*
sudo pecl install fann
sudo nano /etc/php/7.0/cli/php.ini
добавить в конец блока [PHP]
extension=fann.so
sudo /etc/init.d/apache2 restart
php -m | grep fann — должно вывестись fann

2 пример распознавания языка текста на странице
готовые исходники

массовое переименование по маске (конфликты dropbox)

для просмотра того, что переименуется (-n)
rename -n 's/ .?Конфликт[^.]+//' *

для переименования с заменой (-f) и выводом того, что переименовалось (-v)
rename -f -v 's/ .?Конфликт[^.]+//' *

само обсуждение здесь

перенос информации в битрикс

в данной статье рассматривается быстрый перенос информации в битрикс в файлы (.section.php и index.php) или в бд (инфоблоки)

для корректной работы title/h1 нужно настроить их так в header.php:

..
<title><?$APPLICATION->ShowTitle()?></title>
..
<h1><?=$APPLICATION->ShowTitle(false);?></h1>
..

перенос информации в файлы

$url в моем случае уже сформирован ранее такого вида: /folder1/, /folder2/folder3/ ..

$dir = $_SERVER['DOCUMENT_ROOT'] . $url;
if (!file_exists($dir)) {
  if (mkdir($dir, 0755, true)) {
    echo 'create directory ' . $url . '<br>';
  }
}

$filename = 'index.php';
$file     = $dir . $filename;
$fp       = fopen($file, 'w');
if ($fp != false) {
  fwrite($fp, '<?php require ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");' . "\r\n");
  fwrite($fp, '$APPLICATION->SetPageProperty("title", "' . $title . '");' . "\r\n");
  fwrite($fp, '$APPLICATION->SetTitle("' . $h1 . '"); ?>' . "\r\n\r\n");
  fwrite($fp, $content . "\r\n\r\n");
  fwrite($fp, '<?php require ($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>');
  fclose($fp);
  echo 'create/update file ' . $url . $filename . '<br>';
}

$filename = '.section.php';
$file     = $dir . $filename;
$fp       = fopen($file, 'w');
if ($fp != false) {
  fwrite($fp, '<?php' . "\r\n");
  fwrite($fp, '$sSectionName = "' . $h1 . '";' . "\r\n");
  fwrite($fp, '$arDirProperties = Array();');
  fclose($fp);
  echo 'create/update file ' . $url . $filename . '<br>';
}

перенос информации в инфоблоки

данный раздел находится в стадии заполнения..

вывод родителя и потомков из бд

привожу код построения дерева названий родителей и потомков из бд + накопительные ссылки, т.е. ссылка на родителя, потом на первое поколение, затем на второе и т.д.

<?
$host        = 'localhost';
$db_user     = 'db_user';
$db_name     = 'db_name';
$db_pass     = 'db_pass';
$db_table    = 'db_table';
$parent_key  = 'parent_id'; // or part_parent_id
$field_key_1 = 'name';
$field_key_2 = 'id'; // or part_id
$field_key_3 = 'url';
$link        = mysql_connect($host, $db_user, $db_pass);
if (!$link) {
  die(mysql_error());
} else {
  mysql_select_db($db_name, $link) or die(mysql_error());
}
function parent_childs_tree($parent_id = 0) {
  global $db_table, $parent_key, $field_key_1, $field_key_2;
  $sql    = 'select * from ' . $db_table . ' where ' . $parent_key . ' = ' . $parent_id;
  $result = mysql_query($sql);
  if (mysql_num_rows($result) > 0) {
    echo '<ul>';
    while ($row = mysql_fetch_array($result)) {
      // к сожалению, не удалось вывести накопительные ссылки без доп. запросов
      $url = array();
      $id_ = $row[$field_key_2];
      while ($id_ != 0) {
        $sql2    = 'select ' . $parent_key . ', ' . $field_key_1 . ' from ' . $db_table . ' where ' . $field_key_2 . ' = ' . $id_;
        $result2 = mysql_query($sql2);
        if (mysql_num_rows($result2) > 0) {
          while ($row2 = mysql_fetch_array($result2)) {
            $id_   = $row2[$parent_key];
            $url[] = $row2[$field_key_1];
          }
        }
      }
      $url        = array_reverse($url);
      $url_string = '';
      foreach ($url as $url_part) {
        $url_string .= '/' . $url_part; // /parent/child1/child2/..
      }
      //
      echo '<li><a href="' . $url_string . '">' . $row[$field_key_1] . ' (id=' . $row[$field_key_2] . ', parent_id=' . $row[$parent_key] . ')</a></li>';
      parent_childs_tree($row[$field_key_2]);
    }
    echo '</ul>';
  }
}
parent_childs_tree(); // or parent_childs_tree(10) for show childs of id = 10
mysql_close($link);

мониторинг нагрузки системы

десять процессов, потребляющих наибольшее количество памяти
ps -auxf | sort -nr -k 4 | head -10
или
ps -A -o comm,rss --sort rss | tail

десять процессов, потребляющих наибольший ресурс процессора
ps -auxf | sort -nr -k 3 | head -10
или
ps -eo comm,pcpu --sort pcpu | tail

не создаются разделы при импорте csv

версия битрикса последняя (16.5.6) на время написания поста
структура разделов csv-файла была верная, т.е. IC_GROUP0, IC_GROUP1, IC_GROUP2
но при импорте никакие ошибки не выводились и все элементы выгружались в корень

причина оказалась в настройках инфоблока

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

проверьте ubuntu на вирусы для общего спокойствия

в последнее время увеличилось количество троянов против android и unix-систем
по практическим рейтингам антивирусов для linux лидирует eset nod32
по данным тестирования немецкой лаборатории av-test в 2015 году
этот антивирус обнаружил 99,8% windows-угроз и 99,7% linux-вирусов
eset nod32 linux 4 позволяет бесплатно пользоваться им целый месяц
1 скачиваем его с офиц. сайта
2 даем права на выполнение файла после скачивания chmod +x eset_nod32av_64bit_ru.linux
3 обновляем бд-вирусов
4 запускаем смарт- или полное сканирование

оптимальные title, h1, description и keywords для продвижения сайта в яндексе/google

прочитав много статей с практическими экспериментами, решил опубликовать оптимальные значения title, h1, description и keywords

title

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

h1

до шестидесяти символов, главный запрос и один-два менее значимых ключевика, которые не попали в title

description

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

keywords

до ста пятидесяти символов, около пятнадцати ключевиков, wordstat.yandex.ru, google analytics