<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    <title>Блог</title>
    <link>http://denik.od.ua/</link>
    <description></description>
    <image>
      <title>Полезные фрукты</title>
      <url>https://denik.od.ua/public/images/slogon.gif</url>
      <link>https://denik.od.ua/</link>
      <width>221</width>
      <height>44</height>
      <description>Блог свободного разработчика</description>
    </image>
    <dc:language>en</dc:language>
    <dc:creator>denik.od@gmail.com</dc:creator>
    <dc:rights>Copyright 2020</dc:rights>
    <dc:date>2020-06-01T17:27:00+00:00</dc:date>
    
<item>
      <title>Zimbra исправление &#8220;Unable to start TLS&#8221; (Comodo AddTrust CA Root expired at 30 may 2020)</title>
      <link>https://denik.od.ua/zimbra-fix-start-tls-comodo-addtrust-expired</link>
      <guid>https://denik.od.ua/zimbra-fix-start-tls-comodo-addtrust-expired#When:17:27:00Z</guid>
      <description><![CDATA[<img alt="Zimbra исправление &#8220;Unable to start TLS&#8221; (Comodo AddTrust CA Root expired at 30 may 2020)" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/202006/thumbs/zimbra-ssl-fix_thumb_tmpl_CC-y_crop_100x0.jpg" />]]>На днях я получил ошибку на одном из серверов, где крутится Zimbra и вместе с ней нерабочие службы:


Unable to start TLS: SSL connect attempt failed error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed when connecting to ldap master.


По тексту ошибки видно, что это какая&#45;то проблема в SSL&#45;сертификате. Убедившись, что установленный сертификат истекает только через год, меня эта ошибка удивила еще больше!
Суть проблемы злоключается в истекшем корневом сертификате&amp;nbsp;AddTrust CA Root 30 мая 2020 года

Что ж, от слов к делу:

Вариант 1 &#45; игнорировать

Если надо исправить не отходя от кассы, то просто вводим команды:


root@mail:~# su &#45; zimbra
zimbra@mail:~$ zmlocalconfig &#45;e ldap_starttls_supported=0
zimbra@mail:~$ zmcontrol start


Так мы проигнорируем данную ошибку, но это больше временное решение нежели постоянное.
Лучше &#45; исправить SSL.

Вариант 2 &#45; исправить

У меня на сервере используется сертификат выданный COMODO, в свою очередь купил его здесь:&amp;nbsp;https://www.gogetssl.com/

Ребята там знают о проблеме и предлагают скачать другие корневые сертификаты.
Забегая вперед скажу &#45; предложенные ими сертификаты для меня не сработали... И чтобы они сработали мне стоило перевыпустить свой сертификат домена. А это все по&#45;новой &#45; генерирование CSR запроса, ключа и т.д...
Немного покопавшись я нашел подходяций корневой SSL сертификат от COMODO:&amp;nbsp;comodorsacertificationauthority.crt&amp;nbsp;( &amp;lt;&#45;скачать можно там )

В итоге у меня были файлы:


	domain_com.crt (получил от продавца сертификата)
	COMODO_RSA_Certification_Authority.crt&amp;nbsp;(получил от продавца сертификата)
	comodorsacertificationauthority.crt&amp;nbsp;(добыл в бою &#45; см. ссылку выше )


Ловким движением руки, получаем&amp;nbsp;bundle:


zimbra@mail:~$ cat ./COMODO_RSA_Certification_Authority.crt ./comodorsacertificationauthority.crt &amp;gt; ./domain_com_ca&#45;bundle.crt


Проверьте чтоб&amp;nbsp;&#45;&#45;&#45;&#45;&#45;BEGIN CERTIFICATE&#45;&#45;&#45;&#45;&#45; и&amp;nbsp;&#45;&#45;&#45;&#45;&#45;END CERTIFICATE&#45;&#45;&#45;&#45;&#45; не слиплись, иначе получите другую ошибку:


unable to load certificate
69721:error:0906D066:PEM routines:PEM_read_bio:bad end line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098&#45;64.50.6/src/crypto/pem/pem_lib.c:747:


&amp;nbsp;

Далее просто пере&#45;добавляем наш сертификат на сервер заново:

Можно пойти по официальной инструкции, а можно просто ввести команды:


root@mail:~# su &#45; zimbra
zimbra@mail:~$ /opt/zimbra/bin/zmcertmgr verifycrt comm ./domain_com.key ./domain_com.crt ./domain_com_ca&#45;bundle.crt
### Тут должно написать ля&#45;ля&#45;ля... OK

zimbra@mail:~$ /opt/zimbra/bin/zmcertmgr deploycrt comm ./domain_com.crt ./domain_com_ca&#45;bundle.crt
### Тут должно написать ля&#45;ля&#45;ля... Saving..Copying..Creating

zimbra@mail:~$ /opt/zimbra/bin/zmcertmgr viewdeployedcrt
### Тут будет виден добавленный сертификат

### И конечно же, если вы воспользовались сперва вариантом №1, то вернем настройку:
zimbra@mail:~$ zmlocalconfig &#45;e ldap_starttls_supported=1

zimbra@mail:~$ zmcontrol restart


Всего хорошего</description>
      <dc:subject></dc:subject>
      <dc:date>2020-06-01T17:27:00+00:00</dc:date>
    </item><item>
      <title>ImageMagick 7 for PHP 7</title>
      <link>https://denik.od.ua/imagemagick_for_php</link>
      <guid>https://denik.od.ua/imagemagick_for_php#When:17:03:00Z</guid>
      <description><![CDATA[<img alt="ImageMagick 7 for PHP 7" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201912/thumbs/php_imagick_thumb_tmpl_CC-y_crop_100x0.jpg" />]]>ImageMagick требователен к зависимостям, перво&#45;наперво стоит установить все что может понадобиться:

С помощью&amp;nbsp;build&#45;dep попросим установить пакеты, необходимые для сборки ImageMagick:


sudo apt build&#45;dep imagemagick libmagickcore&#45;dev libde265 libheif


Ну и чтоб перестраховаться, установим все что может понадобиться при компиляции:


sudo apt install &#45;y autoconf automake autopoint autotools&#45;dev build&#45;essential bzip2 checkinstall chrpath cm&#45;super&#45;minimal debhelper dh&#45;autoreconf dh&#45;exec dh&#45;strip&#45;nondeterminism doxygen doxygen&#45;latex dpkg&#45;dev ffmpeg fontconfig fontconfig&#45;config fonts&#45;dejavu&#45;core fonts&#45;droid&#45;fallback fonts&#45;lmodern fonts&#45;noto&#45;mono g++ g++&#45;7 gcc gcc&#45;7 ghostscript gir1.2&#45;harfbuzz&#45;0.0 graphviz gsfonts hicolor&#45;icon&#45;theme icu&#45;devtools libann0 libasan4 libatomic1 libavahi&#45;client3 libavahi&#45;common&#45;data libavahi&#45;common3 libbz2&#45;dev libc&#45;dev&#45;bin libc6&#45;dev libcairo&#45;script&#45;interpreter2 libcairo2 libcairo2&#45;dev libcdt5 libcgraph6 libcilkrts5 libclang1&#45;6.0 libcups2 libcupsfilters1 libcupsimage2 libdatrie1 libde265&#45;dev libdjvulibre&#45;dev libdjvulibre&#45;text libdjvulibre21 libexif&#45;dev libexpat1&#45;dev libfftw3&#45;bin libfftw3&#45;dev libfftw3&#45;double3 libfftw3&#45;long3 libfftw3&#45;quad3 libfile&#45;stripnondeterminism&#45;perl libfontconfig1 libfontconfig1&#45;dev libfreetype6 libfreetype6&#45;dev libgcc&#45;7&#45;dev libgdk&#45;pixbuf2.0&#45;dev libglib2.0&#45;dev libglib2.0&#45;dev&#45;bin libgraphite2&#45;3 libgraphite2&#45;dev libgraphviz&#45;dev libgs&#45;dev libgs9 libgs9&#45;common libgts&#45;0.7&#45;5 libgvc6 libgvpr2 libharfbuzz&#45;dev libharfbuzz&#45;gobject0 libharfbuzz0b libheif&#45;dev libice&#45;dev libicu&#45;dev libicu&#45;le&#45;hb&#45;dev libicu&#45;le&#45;hb0 libiculx60 libijs&#45;0.35 libilmbase&#45;dev libilmbase12 libitm1 libjbig&#45;dev libjbig0 libjbig2dec0 libjpeg&#45;dev libjpeg&#45;turbo8 libjpeg&#45;turbo8&#45;dev libjpeg62&#45;turbo libjpeg8 libjpeg8&#45;dev liblab&#45;gamut1 liblcms2&#45;2 liblcms2&#45;dev liblqr&#45;1&#45;0 liblqr&#45;1&#45;0&#45;dev liblsan0 libltdl&#45;dev liblzma&#45;dev libmime&#45;charset&#45;perl libmpx2 libnetpbm10 libopenexr&#45;dev libopenexr22 libopenjp2&#45;7&#45;dev libpango&#45;1.0&#45;0 libpango1.0&#45;dev libpangocairo&#45;1.0&#45;0 libpangoft2&#45;1.0&#45;0 libpaper&#45;utils libpaper1 libpathplan4 libpcre16&#45;3 libpcre3&#45;dev libpcre32&#45;3 libpcrecpp0v5 libperl&#45;dev libpixman&#45;1&#45;0 libpixman&#45;1&#45;dev libpng&#45;dev libpotrace0 libptexenc1 libpthread&#45;stubs0&#45;dev libpython&#45;stdlib libquadmath0 libraqm0 libraw&#45;bin libraw&#45;dev libraw15 librsvg2&#45;bin librsvg2&#45;dev libsigsegv2 libsm&#45;dev libsombok3 libstdc++&#45;7&#45;dev libsynctex1 libtexlua52 libtexluajit2 libthai&#45;data libthai0 libtiff&#45;dev libtiff5 libtiff5&#45;dev libtiffxx5 libtool libtool&#45;bin libtsan0 libturbojpeg0 libubsan0 libunicode&#45;linebreak&#45;perl libwebp&#45;dev libwmf&#45;dev libwmf0.2&#45;7 libx11&#45;dev libxau&#45;dev libxcb&#45;render0 libxcb&#45;render0&#45;dev libxcb&#45;shm0 libxcb&#45;shm0&#45;dev libxcb1&#45;dev libxdmcp&#45;dev libxext&#45;dev libxft&#45;dev libxml2&#45;dev libxml2&#45;utils libxrender&#45;dev libxrender1 libxt&#45;dev libxt6 libzstd&#45;dev libzzip&#45;0&#45;13 linux&#45;libc&#45;dev m4 make netpbm pkg&#45;config pkg&#45;kde&#45;tools po&#45;debconf poppler&#45;data preview&#45;latex&#45;style python python&#45;minimal python2.7 python2.7&#45;minimal python3&#45;distutils python3&#45;lib2to3 tex&#45;common texlive&#45;base texlive&#45;binaries texlive&#45;extra&#45;utils texlive&#45;font&#45;utils texlive&#45;fonts&#45;recommended texlive&#45;latex&#45;base texlive&#45;latex&#45;extra texlive&#45;latex&#45;recommended texlive&#45;pictures x11proto&#45;core&#45;dev x11proto&#45;dev x11proto&#45;xext&#45;dev xorg&#45;sgml&#45;doctools xsltproc xtrans&#45;dev zlib1g&#45;dev


Этап 1 &#45; Установка ImageMagick

Есть несколько вариантов установки...

1. Установка чрез dpkg (не всегда срабатывает)

ImageMagick поставляется в REMI пакете (для CentOS). Учитывая, что у меня Ubuntu (Debian) я конвертирую эти пакеты в deb используя alien.


wget&amp;nbsp;https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick&#45;7.0.9&#45;16.x86_64.rpm
wget&amp;nbsp;https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick&#45;libs&#45;7.0.9&#45;16.x86_64.rpm
wget&amp;nbsp;https://imagemagick.org/download/linux/CentOS/x86_64/ImageMagick&#45;devel&#45;7.0.9&#45;16.x86_64.rpm
sudo apt&#45;get install &#45;y alien
sudo alien &#45;d&amp;nbsp;ImageMagick&#45;7.0.9&#45;16.x86_64.rpm
sudo alien &#45;d ImageMagick&#45;libs&#45;7.0.9&#45;16.x86_64.rpm
sudo alien &#45;d ImageMagick&#45;devel&#45;7.0.9&#45;16.x86_64.rpm

# install the packages generated by alien
sudo dpkg &#45;i&amp;nbsp;imagemagick_7.0.9&#45;17_amd64.deb
sudo dpkg &#45;i&amp;nbsp;imagemagick&#45;libs_7.0.9&#45;17_amd64.deb
sudo dpkg &#45;i&amp;nbsp;imagemagick&#45;devel_7.0.9&#45;17_amd64.deb

# register libraries
sudo ldconfig /usr/lib64


Может потребоваться:


sudo ln &#45;s /usr/lib64/pkgconfig/ImageMagick&#45;7.Q16HDRI.pc /usr/lib/pkgconfig/ImageMagick&#45;7.Q16HDRI.pc
sudo ln &#45;s /usr/lib64/pkgconfig/ImageMagick.pc /usr/lib/pkgconfig/ImageMagick.pc
sudo ln &#45;s /usr/lib64/pkgconfig/MagickCore&#45;7.Q16HDRI.pc /usr/lib/pkgconfig/MagickCore&#45;7.Q16HDRI.pc
sudo ln &#45;s /usr/lib64/pkgconfig/MagickCore.pc /usr/lib/pkgconfig/MagickCore.pc
sudo ln &#45;s /usr/lib64/pkgconfig/MagickWand&#45;7.Q16HDRI.pc /usr/lib/pkgconfig/MagickWand&#45;7.Q16HDRI.pc
sudo ln &#45;s /usr/lib64/pkgconfig/MagickWand.pc /usr/lib/pkgconfig/MagickWand.pc

export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
export CPATH=/usr/include/ImageMagick&#45;7


2. Собираем из исходников

Для поддержки HEIF:


sudo apt install &#45;y&amp;nbsp;git&#45;core
mkdir &#45;p ~/install&#45;im &amp;amp;&amp;amp; cd ~/install&#45;im
sudo git clone https://github.com/strukturag/libde265.git
sudo git clone https://github.com/strukturag/libheif.git
cd libde265/
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install
cd ../libheif/
sudo ./autogen.sh
sudo ./configure
sudo make
sudo make install


Для поддержки JPEG XL:


mkdir &#45;p ~/install&#45;im &amp;amp;&amp;amp; cd ~/install&#45;im
git clone &#45;&#45;depth=1 https://github.com/google/brunsli.git
cd brunsli
git submodule update &#45;&#45;init &#45;&#45;recursive
mkdir bin &amp;amp;&amp;amp; cd bin
cmake ..
make &#45;j
sudo make &#45;j install


Сборка самого ImageMagick:


mkdir &#45;p ~/install&#45;im &amp;amp;&amp;amp; cd ~/install&#45;im
sudo wget https://www.imagemagick.org/download/ImageMagick.tar.gz&amp;nbsp;
sudo tar xf ImageMagick.tar.gz&amp;nbsp;
cd ImageMagick&#45;7*
./configure &#45;&#45;prefix=/usr/ &#45;&#45;with&#45;bzlib=yes &#45;&#45;with&#45;fontconfig=yes &#45;&#45;with&#45;freetype=yes &#45;&#45;with&#45;gvc=yes &#45;&#45;with&#45;jpeg=yes &#45;&#45;with&#45;png=yes &#45;&#45;with&#45;tiff=yes &#45;&#45;with&#45;webp=yes &#45;&#45;with&#45;openjp2=yes


На этом этапе убедитесь, что у вас отображается YES для всех необходимых Вам типов файлов:


Delegate library configuration:
...
&amp;nbsp; JPEG v1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&#45;&#45;with&#45;jpeg=yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes
...
&amp;nbsp; OpenJP2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&#45;&#45;with&#45;openjp2=yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; yes
...
&amp;nbsp; TIFF&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#45;&#45;with&#45;tiff=yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes
&amp;nbsp; WEBP&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#45;&#45;with&#45;webp=yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes
...


Если все хорошо, выполняйте сборку далее:


make
sudo make install



На счет ./configure

Есть один ОЧЕНЬ не приятный баг связанный с&amp;nbsp;libgs&#45;dev&amp;nbsp;из&#45;за которого я отказался от опции&amp;nbsp;&quot;&#45;&#45;with&#45;gslib=yes&quot;. Суть бага злоключается в не возможности работы с OpenJPEG (JP2, J2K...).
Когда я пытался включать gslib, то при попытке конвертирования изображения всегда получал совершенно не информативную ошибку &quot;Aborted (core dumped)&quot; (по&#45;русски: &quot;Аварийный останов (стек памяти сброшен на диск)&quot;).
Пример попытки (ошибки):



$ convert &#45;verbose &#45;debug coder &#45;log %e image.jpeg image.jp2
[image.jpeg] JPEG Trace: &quot;Start of Image&quot;
[image.jpeg] JPEG Trace: &quot;JFIF APP0 marker: version 1.01, density 37x37&amp;nbsp; 2&quot;
[image.jpeg] JPEG Trace: &quot;Define Quantization Table 0&amp;nbsp; precision 0&quot;
[image.jpeg] JPEG Trace: &quot;Define Quantization Table 1&amp;nbsp; precision 0&quot;
[image.jpeg] JPEG Trace: &quot;Start Of Frame 0xc0: width=1332, height=912, components=3&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 1: 1hx1v q=0&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 2: 1hx1v q=1&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 3: 1hx1v q=1&quot;
[image.jpeg] JPEG Trace: &quot;Define Huffman Table 0x00&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;4&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;0&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&quot;
[image.jpeg] JPEG Trace: &quot;Define Huffman Table 0x10&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;5&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;3&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 6&amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp;7&amp;nbsp; 14&amp;nbsp; 14&amp;nbsp; 13&amp;nbsp; &amp;nbsp;5&amp;nbsp; 17&quot;
[image.jpeg] JPEG Trace: &quot;Define Huffman Table 0x01&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;1&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp;0&quot;
[image.jpeg] JPEG Trace: &quot;Define Huffman Table 0x11&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;4&amp;nbsp; &amp;nbsp;6&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;3&amp;nbsp; 10&amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp;5&quot;
[image.jpeg] JPEG Trace: &quot;Start Of Scan: 3 components&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 1: dc=0 ac=0&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 2: dc=1 ac=1&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; &amp;nbsp; Component 3: dc=1 ac=1&quot;
[image.jpeg] JPEG Trace: &quot;&amp;nbsp; Ss=0, Se=63, Ah=0, Al=0&quot;
Interlace: nonprogressive
Data precision: 8
Geometry: 1332x912
Quality: 92 (exact)
Colorspace: RGB
Sampling Factors: 1x1,1x1,1x1
[image.jpeg] JPEG Trace: &quot;End Of Image&quot;
image.jpeg JPEG 1332x912 1332x912+0+0 8&#45;bit sRGB 324946B 0.010u 0:00.022
Aborted (core dumped)



Обновите ldconfig:


sudo ldconfig


&amp;nbsp;

Команды для проверки успешной установки:


identify &#45;version
convert &#45;version
identify &#45;list format


&amp;nbsp;

Этап 2 &#45; Сборка расширения для PHP

Если вы используете, как я, несколько версий PHP (например, через ppa:ondrej/php), не забудьте переключить версию:


sudo update&#45;alternatives &#45;&#45;config php
sudo update&#45;alternatives &#45;&#45;config phpize
sudo update&#45;alternatives &#45;&#45;config php&#45;config

# For apache:
sudo a2dismod php7.2
sudo a2enmod php5.6
sudo systemctl restart apache2


Заходим на&amp;nbsp;https://pecl.php.net/package/imagick и берем последнюю версию imagick for PHP, на сегодня это 3.4.4.
Чтоб не подключать модуль в php.ini, установим imagick из репозитория и затем, поверх, соберем его из исходников:


sudo apt install php&#45;imagick
mkdir &#45;p ~/install&#45;im &amp;amp;&amp;amp; cd ~/install&#45;im
wget https://pecl.php.net/get/imagick&#45;3.4.4.tgz
tar &#45;xvzf imagick&#45;3.4.4.tgz
cd imagick&#45;3.4.4/
apt install php7.2&#45;dev
phpize
./configure
make
sudo make install
sudo phpenmod imagick


Проверямем установку:


sudo systemctl restart apache2
php &#45;r &apos;phpinfo();&apos; | grep JP2


&amp;nbsp;

Дополнительно

Если нужно установить OpenJPEG из исходников, делается так:


https://github.com/uclouvain/openjpeg.git
cd openjpeg
mkdir build &amp;amp;&amp;amp; cd build
cmake .. &#45;DCMAKE_BUILD_TYPE=Release
make
sudo make install
make clean


&amp;nbsp;

Источники


	https://www.imagemagick.org/discourse&#45;server/viewtopic.php?t=35892
	https://askubuntu.com/questions/1042436/how&#45;to&#45;install&#45;delegate&#45;libraries&#45;for&#45;image&#45;magick&#45;7&#45;0&#45;7
	https://medium.com/@eplt/5&#45;minutes&#45;to&#45;install&#45;imagemagick&#45;with&#45;heic&#45;support&#45;on&#45;ubuntu&#45;18&#45;04&#45;digitalocean&#45;fe2d09dcef1
	https://handynotes.ru/2007/05/linux&#45;2.html (про ldconfig)



&amp;nbsp;



&amp;nbsp;</description>
      <dc:subject></dc:subject>
      <dc:date>2019-12-25T17:03:00+00:00</dc:date>
    </item><item>
      <title>[Решено] Проблема с установкой Skype 7.30.66.103</title>
      <link>https://denik.od.ua/skype-install-problems</link>
      <guid>https://denik.od.ua/skype-install-problems#When:12:35:00Z</guid>
      <description><![CDATA[<img alt="[Решено] Проблема с установкой Skype 7.30.66.103" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201611/thumbs/skype-install-error_thumb_tmpl_CC-y_crop_100x0.png" />]]>Описание проблемы.

Не удалось найти или загрузить Microsoft Installer.Пожалуйста, сделайте необходимые обновления и попробуйте запустить Skype еще раз.

Решение проблемы

Для решения проблемы, достаточно будет скачать офлайн исталлер Skype.
Кликнуть по установщику правой кнопкой мыши и выбрать Свойства.
В появившемся окне, в вкладке Совместимость, выбрать режим совместимости Windows XP (пакет обновления 3)
Применить или Ок</description>
      <dc:subject></dc:subject>
      <dc:date>2016-11-10T12:35:00+00:00</dc:date>
    </item><item>
      <title>Решение проблемы перезапуска Apache/httpd на CentOS 7</title>
      <link>https://denik.od.ua/apache-httpd-restart-problem-solution-centos7</link>
      <guid>https://denik.od.ua/apache-httpd-restart-problem-solution-centos7#When:20:33:52Z</guid>
      <description>На моем сервере вдруг возникла проблема, которой раньше не было.Веб&#45;сервер внезапно стал падать, как по расписанию...
Немного покопав, я выяснил, что сервер падал таки по расписанию, а именно &#45; в cron.dialy выполялись некоторые обновления настроек, после чего он должен был удачно перезагружаться...Как можно догадаться, никаких &quot;удачно&quot; не происходило.
Сервер вылетал с ошибкой:
HOST_NAME /var/log[0]# systemctl status httpd.service
● httpd.service &#45; The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop&#45;In: /etc/systemd/system/httpd.service.d
           └─nofile.conf
   Active: failed (Result: exit&#45;code) since Sat 2016&#45;11&#45;05 21:58:01 EET; 22s ago
  Process: 4419 ExecStop=/bin/kill &#45;WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 4417 ExecStart=/usr/sbin/httpd $OPTIONS &#45;DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 4417 (code=exited, status=1/FAILURE)

Nov 05 21:58:01 HOST_NAME systemd[1]: Starting The Apache HTTP Server...
Nov 05 21:58:01 HOST_NAME httpd[4417]: [Sat Nov 05 21:58:01.608778 2016] [alias:warn] [pid 4417] AH00671: The Alias directive in /etc/httpd/conf.d/autoindex.conf at line 21 will probably never match because it overlaps an earlier Alias.
Nov 05 21:58:01 HOST_NAME httpd[4417]: AH00558: httpd: Could not reliably determine the server&apos;s fully qualified domain name, using 12.34.56.78. Set the &apos;ServerName&apos; directive globally to suppress this message
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Nov 05 21:58:01 HOST_NAME kill[4419]: kill: cannot find process &quot;&quot;
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service: control process exited, code=exited status=1
Nov 05 21:58:01 HOST_NAME systemd[1]: Failed to start The Apache HTTP Server.
Nov 05 21:58:01 HOST_NAME systemd[1]: Unit httpd.service entered failed state.
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service failed.

Что ж, не буду лукавить, помог мне в очередной раз Гугл...)) оказалось что проблема скрылась в методах этих самых перезагрузок, а точнее, &#45; если apache установлен из репозиториев (yum..) то в файле /usr/lib/systemd/system/httpd.service, скорее записано следующее:
[Unit]
Description=The Apache HTTP Server
After=network.target remote&#45;fs.target nss&#45;lookup.target

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS &#45;DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS &#45;k graceful
ExecStop=/bin/kill &#45;WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi&#45;user.target
&amp;nbsp;
Как подсказало сообщество apachelounge.com, такая запись не корректна или &#45; это баг.
Следует в файл прописать следующее:
[Unit]
Description=The Apache HTTP Server
After=network.target remote&#45;fs.target nss&#45;lookup.target

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS &#45;k start
ExecReload=/usr/sbin/httpd $OPTIONS &#45;k graceful
ExecStop=/usr/sbin/httpd $OPTIONS &#45;k graceful&#45;stop
PrivateTmp=true# If you have 90 seconds reload problem &#45; uncomment several lines below (mixed &#45; worked for me)#LimitNOFILE=infinity#KillMode=mixed#KillMode=none#TimeoutStopSec=10

[Install]
WantedBy=multi&#45;user.target
Для перезагрузки модуля&amp;nbsp;systemctl введите комманду:
systemctl daemon&#45;reload
&amp;nbsp;
Источники

[SOLVED] Cannot start apache 2.4 on centos 7. Just timesout
Bug 907579 &#45; systemctl start httpd hangs with : systemd&#45;tty&#45;ask&#45;password&#45;agent</description>
      <dc:subject></dc:subject>
      <dc:date>2016-11-05T20:33:52+00:00</dc:date>
    </item><item>
      <title>Множественный UPDATE в MySQL</title>
      <link>https://denik.od.ua/mnozhestvennyj_update_v_mysql</link>
      <guid>https://denik.od.ua/mnozhestvennyj_update_v_mysql#When:12:12:00Z</guid>
      <description>Сразу предупреждаю, что эффективней использовать несколько &amp;laquo;классических&amp;raquo; запросов и, по возможности, транзакции (которые MyISAM не поддерживает). Так что&amp;hellip; для общего развития:
Способ №1
&amp;nbsp;
UPDATE tbl_country SET price = CASE
WHEN code = 1 THEN 123;
WHEN code = 2 THEN 456;
&amp;hellip;
END
WHERE code IN (1,2,&amp;hellip;)
&amp;nbsp;
Способ №2
&amp;nbsp;
INSERT INTO tbl_country
(code, price)
VALUES
(1, 123),
(2, 456),
&amp;hellip;
ON DUPLICATE KEY UPDATE tbl_country.price = VALUES(price);
&amp;nbsp;
Способ №3
Использование временных таблиц. Синтаксис не тестировался, но направление указано:
&amp;nbsp;
drop temorary table if exists tmp;
create temorary table tmp(i int primary key,n varchar(100),s varchar(100));
...
insert tmp (i,n,s) values(10,&apos;first_name&apos;, &apos;last_name&apos;),...; /* импорт из Excel */
...
update w set w.name=i.n, w.surname=i.s
  from worktable w
  join tmp t on t.i=w.uid;
drop temporary table tmp;

Источник 1
Источник 2</description>
      <dc:subject>MySQL</dc:subject>
      <dc:date>2016-03-17T12:12:00+00:00</dc:date>
    </item><item>
      <title>Как использовать команду grep в linux</title>
      <link>https://denik.od.ua/linux-grep</link>
      <guid>https://denik.od.ua/linux-grep#When:12:06:23Z</guid>
      <description><![CDATA[<img alt="Как использовать команду grep в linux" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201603/thumbs/grepicon_thumb_tmpl_CC-y_crop_100x0.jpg" />]]>grep это вполне возможно самая популярная из существующих команд в Unix/Linux. Многие бы с этим поспорили, но стоит начать использовать grep, эта команда будет присутствовать почти во всех ваших скриптах для консоли Linux. grep расшифровывается как &amp;lsquo;global regular expression printer&amp;lsquo;. Иными словами grep выдрезает нужные вам строки из текстовых файлов которые содержат указаный пользователем текст.
grep может быть использован двумя путями &amp;mdash; сам по себе или в комбинации с потоками.
Использование grep в чистом виде
$ grep &apos;12:00&apos; /home/david/backup/log.txt
Эта команда показывает как можно использовать grep для того чтобы получить строки из файла содержащие подстроку указаную в командной строке. Файл не обязательно должен оканчиваться на .txt. Показаная выше команда производит поиск подстроки 12.00 в файле /home/david/backup/log.txt и отображает все строки где эта подстрока встречается.
Эта комбинация может быть использована например для поиска бекапов которые происходили в 12:00.
$ grep &#45;v &apos;12.00&apos; /home/david/backup/log.txt
А вот эта команда (с использованием ключа &#45;v) наоборот покажет только те строки где подстрока &amp;rsquo;12:00&amp;prime; не встречается.
$ grep &#45;l &apos;delay&apos; /code/*.c
Эта команда будет искать все файлы оканчивающиеся на .c и текст в найденых файлах соответствующий подстроке &apos;delay&apos; и в конечном итоге выведет только имена файлов где эта подстрока встречается.
$ grep &#45;w &apos;\&amp;lt;bay&apos; * $ grep &#45;w &apos;watch\&amp;gt;&apos; *
Эта команда уже более сложная и состоит из комбинации двух команд grep. Первая ищет строки которые начинаются со слова &amp;lsquo;bay&amp;rsquo; а вторая строки которые заканчиваются на слово &amp;lsquo;watch&amp;rsquo;.
Использование grep вместе с потоками
$ ls &#45;l | grep rwxrwxrwx
Вы наверно уже знаете что команда ls &#45;l отображает подробный список файлов в директории. Часть grep rwxrwxrwx фильтрует результат полученый от ls &#45;l и выводит только те директории у которых установлены соответствующие права доступа. В данном случае это открытый доступ на чтение, запись и поиск для всех пользователей и групп. Так что вместо того чтобы увидеть полный список файлов вы увидите только те файлы у которых установлены нужные вам права доступа.
Вывод от команды grep может также быть направлен потоком в другую команду, например как в следующем примере:
$ du | grep &apos;mp3&apos; | more
Вы должны уже догадаться что делает указаная выше команда  Если не догадались то все просто &amp;mdash; она выводит постранично список mp3 файлов найденых в текущей директории. Все просто 
$ grep &apos;^#&apos; /home/david/script1 | more
Эта команда отобразит все строки в файле /home/david/script1 которые начинаются с символа &amp;lsquo;#&amp;rsquo;. Определение тип &amp;lsquo;^#&amp;rsquo; означает что символ &amp;lsquo;#&amp;rsquo; должен быть первым символом с троке.
$ grep &#45;v &apos;^[0&#45;9]&apos; /home/david/backup/log.txt | more
Эта команда ищет строки содержащие в первом символе цифры от 0 до 9 а потом выводит только те строки которые не попали в результаты поиска. Как вы видите &amp;mdash; был использован ключ &amp;lsquo;&#45;v&amp;rsquo; означающий реверсивный поиск.
Важно: Необходимо заключать искомые строки в одинарные кавычки как указано в двух предыдущих примерах для того чтобы интерпретатор командной строки мог воспринимать их корректно. Иначе интерпретатор может понять это как другую команду и результат выполнения будет непредсказуем.
Некоторые дополнительные ключи команды grep:

&#45;v : Выводи реверсивные результаты. Вместо того чтобы вывести строки где искомое было найдено &amp;mdash; выводи те строки где искомой подстроки нет.
&#45;c : Отключает стандартный способ вывода результата и вместо этого отображает только число обозначающее количество найденых строк.
&#45;i : Делает поиск регистронезависимым
&#45;w : Ведет поиск по цельным словам. Например при обычном поиске строки &amp;lsquo;wood&amp;rsquo; grep может найти слово &amp;lsquo;hollywood&amp;rsquo;. А если используется данный ключ то будут найдены только строки где есть слово &amp;lsquo;wood&amp;rsquo;.
&#45;l : Выводит только имена файлов где была найдена строка.
&#45;r : Производит поиск рекурсивно по всем поддиректориям.

Я надеюсь эта небольшая инструкция поможет вам разобраться с этой полезной командой.
Источник</description>
      <dc:subject>Linux</dc:subject>
      <dc:date>2016-03-17T12:06:23+00:00</dc:date>
    </item><item>
      <title>Удаление Received заголовков Zimbra/Postfix</title>
      <link>https://denik.od.ua/remove-received-header-zimbra-postfix</link>
      <guid>https://denik.od.ua/remove-received-header-zimbra-postfix#When:17:55:53Z</guid>
      <description>Многие почтовые серверы включают оригинальный IP адрес отправителя в заголовки письма. Это может быть не приемлемым, если пользователь хочет скрыть о себе сведения.
Это может выглядеть так:
Received: from localhost (something [1.1.1.1])
    by mail.domain.com (Postfix) with ESMTP id 25EDB8AA2F
    for &amp;lt;abc@gmail.com&amp;gt;; Sun, 14 Jun 2015 14:20:13 &#45;0400 (EDT)

Это руководство предназначено для серверов, использующих Postfix или Zimbra (Postfix).
Инструкции для Postfix
В этой инструкции предполагается, что конфигурация Postfix находится по адресу&amp;nbsp;/etc/postfix. Это путь по&#45;умолчанию для Debian и Ubuntu.
Шаг 1: Создайте файл проверки заголовков
Создайте файл&amp;nbsp;/etc/postfix/header_checks на вашем сервере. Если файл существует, добавьте строки ниже:
/^Received:.*with ESMTPSA/              IGNORE
/^X&#45;Originating&#45;IP:/    IGNORE
/^X&#45;Mailer:/            IGNORE
/^Mime&#45;Version:/        IGNORE

Надстройка &amp;ldquo;ESMTPSA&amp;rdquo; работает для случаев, когда вы отправляете почту через SSL. Если это не так, замените строку следующим выражением:
/^Received:/    IGNORE

Шаг 2: Редактирование main.cf
Теперь, измените значения следующих полей в файле&amp;nbsp;/etc/postfix/main.cf&amp;nbsp;(если они не существуют, создайте их):
mime_header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks
Шаг 3: Обновление Postfix Maps
Выполните:
postmap /etc/postfix/header_checks

Шаг 4: Перезагрузка конфигов Postfix
postfix reload

&amp;nbsp;
Инструкции для Zimbra
В этой инструкции предполагается, что конфигурация находится по адресу&amp;nbsp;/opt/Zimbra (по&#45;умолчанию). Эта инструкция в основном такая же как и для Postfix, за исключением места расположения файлов.
Шаг 1: Создайте файл проверки заголовков
Создайте файл&amp;nbsp;/opt/zimbra/postfix/conf/header_checks на вашем сервере.&amp;nbsp;Если файл существует, добавьте строки ниже:
/^Received:.*with ESMTPSA/              IGNORE
/^X&#45;Originating&#45;IP:/    IGNORE
/^X&#45;Mailer:/            IGNORE
/^Mime&#45;Version:/        IGNORE

Надстройка &amp;ldquo;ESMTPSA&amp;rdquo; работает для случаев, когда вы отправляете почту через SSL. Если это не так, замените строку следующим выражением:
/^Received:/    IGNORE

Шаг 2: Установка переменных
Измените настройки Zimbra следующим образом:
su &#45; zimbra
zmprov mcf zimbraSmtpSendAddOriginatingIP FALSE
zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE
zmprov mcf zimbraMtaHeaderChecks &quot;regexp:/opt/zimbra/postfix/conf/header_checks&quot;
zmmtactl restart
Шаг 3: Редактирование main.cf
Теперь, измените/проверьте значения следующих полей в файле&amp;nbsp;/opt/zimbra/postfix/conf/main.cf:
mime_header_checks = regexp:/opt/zimbra/postfix/conf/header_checks
header_checks = regexp:/opt/zimbra/postfix/conf/header_checks
Шаг 4: Обновление Postfix Maps
Выполните:
/opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/header_checks

Шаг 5: Перезагрузка
Для вступления изменений в силу немедленно, перезагрузка Postfix:
/opt/zimbra/postfix/sbin/postfix reload
Чуть дольше, но для большей достоверности, перезагрузка сервисов Zimbra:
/etc/init.d/zimbra restart
Ну или совсем наверняка &#45; весь сервер  :
reboot
&amp;nbsp;
Источник:&amp;nbsp;https://www.x4b.net/kb/MailServerClientProtection</description>
      <dc:subject>Linux, mail, Системное администрирование</dc:subject>
      <dc:date>2016-02-12T17:55:53+00:00</dc:date>
    </item><item>
      <title>Скачиваем музыку с Яндекс.Музыка (Yandex music downloader)</title>
      <link>https://denik.od.ua/yandex-music-downloader</link>
      <guid>https://denik.od.ua/yandex-music-downloader#When:18:37:35Z</guid>
      <description><![CDATA[<img alt="Скачиваем музыку с Яндекс.Музыка (Yandex music downloader)" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201601/thumbs/loader_thumb_tmpl_CC-y_crop_100x0.png" />]]>Требование
Необходим браузер на движке Chromium: Chrome (рекомендуется, меньше всего проблем), Яндекс.Браузер, Opera или подобный.
Лучше всегда обновлять браузер до последней версии, поскольку в новой версии могут быть устранены неполадки, присущие старым версиям.
Установка
Chrome, Яндекс.Браузер:&amp;nbsp;Интернет&#45;магазин Chrome
Opera:&amp;nbsp;Дополнения к Opera
Установка в ручную:&amp;nbsp;Скачайте архив по этой ссылке, извлеките в текущую папку, откройте страницу расширений в браузере и перенесите туда мышкой извлечённую папку yandex&#45;music&#45;fisher, после чего в браузере появится новое расширение:Обновляется расширение аналогичным способом. Когда выйдет новая версия, расширение оповестит вас.
Условия использования сервиса Яндекс.Музыка
Используя расширение Yandex Music Fisher (далее &#45; Расширение), вы считаетесь принявшим условиями использования сервиса Яндекс.Музыка (далее &amp;ndash; Условия). В случае несогласия с какими&#45;либо из положений указанных в Условиях, вы не вправе использовать сервис Яндекс.Музыка. Разработчики Расширения не несут ответственность за нарушения Условий, поэтому используйте Расширение на свой страх и риск.
Как пользоваться
Откройте страницу на Яндекс.Музыка с нужным  треком,  альбомом или  плейлистом &#45; иконка изменит цвет в зависимости от открытой страницы. Нажав на неё откроется всплывающее окно с информацией о загрузке и кнопкой для начала скачивания.
После нажатия на кнопку скачивания, загрузка появится на вкладке &quot;Загрузки&quot;:
Далее пойдёт автоматический процесс скачивания. Можно покинуть сайт Яндекс Музыки. Кроме того, со страницы исполнителя можно скачать дискографию:
Пути сохранения

Все загрузки сохраняются в папку, которая указана в настройке браузера &quot;Расположение загружаемых файлов&quot;.
Для дискографии создаётся отдельная папка с именем исполнителя, в которую сохраняются альбомы.
Для альбома / плейлиста создаётся отдельная папка с именем исполнителя и названием альбома / плейлиста.
Если альбом состоит из нескольких дисков, то создаются соответствующие папки.

Ограничения
Поскольку сервис Яндекс.Музыка позволяет слушать музыку только пользователям из России, Украины, Беларуси и Казахстана, то и скачивать музыку с помощью этого расширения возможно только из этих стран.
С недавних пор сервис Яндекс.Музыка начал выводить капчу и таким способом противодействовать скачиванию треков. При этом расширение покажет ошибку, а для дальнейшего скачивания нужно перейти на любую страницу Яндекс.Музыки и ввести капчу. После чего можно возобновить скачивание через расширение.
Зеркала
При блокировке одного из репозиториев другие продолжат работать. Сейчас доступны:

GitHub
Bitbucket

Источник (мега&#45;спасибо egoroof&apos;у)

Yandex Music Fisher</description>
      <dc:subject>Расширение</dc:subject>
      <dc:date>2016-01-19T18:37:35+00:00</dc:date>
    </item><item>
      <title>MySQL — удалить дубликаты строк</title>
      <link>https://denik.od.ua/mysql-remove-duplicates</link>
      <guid>https://denik.od.ua/mysql-remove-duplicates#When:18:28:00Z</guid>
      <description><![CDATA[<img alt="MySQL — удалить дубликаты строк" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201512/thumbs/mysql_duplicate_thumb_tmpl_CC-y_crop_100x0.png" />]]>Для того чтобы можно было удалить дубликаты записей в таблице, воспользуемся однострочным SQL&#45;запросом:
ALTER IGNORE TABLE `table` ADD UNIQUE INDEX(email);
где: `table` &amp;mdash; имя таблицы, email &amp;mdash; имя столбца в котором ищем дубликаты!
&amp;nbsp;
2й вариант
В случае, если необходимо производить поиск дубликатов по 2&#45;м столбцам.
ALTER IGNORE TABLE table1 ADD UNIQUE KEY(Name2, Name3);
3й вариант
Когда сложная ситуация, без создания копий таблиц, наверно не обойтись.
CREATE TEMPORARY TABLE tmp_tab AS SELECT DISTINCT * FROM your_table;

DELETE FROM your_table;

INSERT INTO your_table SELECT * FROM tmp_tab;

DROP TABLE tmp_tab; 
&amp;nbsp;</description>
      <dc:subject>MySQL, PHPMyAdmin, БД, Оптимизация, Системное администрирование</dc:subject>
      <dc:date>2015-12-09T18:28:00+00:00</dc:date>
    </item><item>
      <title>10 вещей, которым можно научиться за 10 минут, чтобы жить лучше</title>
      <link>https://denik.od.ua/10minutes10things</link>
      <guid>https://denik.od.ua/10minutes10things#When:19:42:26Z</guid>
      <description><![CDATA[<img alt="10 вещей, которым можно научиться за 10 минут, чтобы жить лучше" style="float:left;margin:5px 5px 5px 0;" src="/images/uploads/201509/thumbs/10minutes10things_thumb_tmpl_CC-y_crop_100x0.jpg" />]]>В середине июля немецкая исследовательская компания GFK провела опрос среди жителей 22 государств на тему работы и отдыха. Оказалось, что люди, которым больше всего не хватает времени ни на отдых, ни на продуктивный труд, живут в России. Если верить результатам опроса, наши соотечественники чаще остальных жалуются на дефицит времени. Похожая ситуация сложилась также в Японии и Бразилии.
Одной из причин недовольства эксперты называют неумение планировать отдых и рабочее время. Сложно поверить, но исправить ситуацию можно с помощью нескольких простых приемов, изучение которых не займет много времени.
Метод помидора
Эта техника управления своим временем была изобретена в конце 1980&#45;х итальянским студентом Франческо Чирилло. В один прекрасный момент молодой человек осознал, что у него не хватает времени ни на работу, ни на отдых. Тогда парень решил поэкспериментировать и стал расписывать свой день поминутно, вернее, разбивая его на 25&#45;минутные отрезки. Для контроля студент использовал кухонный таймер, стилизованный под помидор. Примерно такой.

На выполнение каждой задачи, связанной с учебой или работой, Франческо отводил себе один &amp;laquo;помидор&amp;raquo; или 25 минут. Если требовалось больше времени, количество &amp;laquo;помидоров&amp;raquo; увеличивалось до двух или трех. После каждых 25 минут молодой человек делал 5&#45;минутные перерывы. Разработанная студентом техника быстро получила популярность в Италии, а впоследствии и в других странах.
Главные принципы метода &amp;laquo;помидора&amp;raquo;:
&#45; Определить задачу;
&#45; Поставить таймер (или будильник, который сработает через 25 минут);
&#45; Приступить к выполнению и ни на что не отвлекаться;
&#45; После того, как сработает таймер, сделать короткий перерыв.&amp;nbsp;
Разбивать время на блоки
Если рабочий день будет разбит на временные блоки (важное, среднее и второстепенное) производительность может значительно увеличиться. Расположив задачи по степени значимости по разным ячейкам &amp;ndash; утро, день и вечер &amp;ndash; появится возможность сократить трату времени на выбор и определение следующего дела.&amp;nbsp;

&amp;laquo;Я всегда выделяю время на рутинные дела &amp;ndash; например, на проверку электронной почты и написание ответных писем, чтобы впоследствии это не отвлекало меня от более важных задач. Расквитавшись с этими делами, я перехожу к следующему запланированному блоку&amp;raquo;, &#45; говорит бизнесмен Джейна Кук, основатель event&#45;агентства EVENTup.
Ориентироваться на процесс
Занимаясь любым делом, мы, прежде всего, ориентируемся на результат. А вот доктор философии и психолог Стен Бичем советует думать о процессе и концентрироваться именно на нем. По мнению специалиста, постоянно сосредотачиваясь на итоговом результате и думая о нем, человек отдаляется от того, что происходит &amp;laquo;здесь и сейчас&amp;raquo;.

Планировать на неделю вперед
Чтобы избавиться от всех ненужных и побочных задач, которые могут отвлекать внимание, стоит составлять подробный план на работу или учебу в начале каждой недели и стараться его придерживаться. Это позволит более рационально тратить время: как на дела, так и на отдых.&amp;nbsp;

Расставлять приоритеты
Складировать все задачи в один котел и пытаться сварить из этого кашу &amp;ndash; не самая хорошая идея. Определившись с планами на неделю вперед, важно не пропустить и еще один шаг: разбить задачи на две категории: первостепенные и те, которые можно отложить напоследок. Этот ход позволит расставить приоритеты, сосредоточится на главном и не упустить самого важного.&amp;nbsp;

Медитировать или просто расслабляться
Полчаса в день обязательно следует подарить беспробудному безделью, выгнав из своей головы все мысли, заботы и переживания. Это позволит разгрузить мозг, что благотворно скажется на дальнейшей его активности.&amp;nbsp;Если же кратковременный отдых или медитацию в течение рабочего дня взять за правило, можно значительно увеличить производительность, приучить мозг к разгрузкам, что в дальнейшем положительно скажется на его активности.&amp;nbsp;

Тренировать память
Наш мозг &amp;ndash; это не компьютер, в котором можно все разложить по папкам и в нужный момент за считанные секунды найти нужный файл.&amp;nbsp;
&amp;laquo;Тренируйте память любыми способами, в том числе и с помощью различных техник запоминания&amp;raquo;, &#45; советует основатель компании поддержки малого бизнеса NINJA Support Коди Маклейн.&amp;nbsp;

По его мнению, только каждодневная тренировка памяти позволит&amp;nbsp; держать мозг в тонусе и избегать чрезмерного напряжения при работе с большими объемами информации.
Читать альтернативными способами
Сегодня далеко не каждый может позволить себе усесться в мягком кресле с любимой книгой и погрузиться в чтение на пару часов.&amp;nbsp; Нехватка времени вынуждает многих отказываться от чтения книг вовсе. Для решения этой проблемы одни бросаются изучать разнообразные техники скорочтения, а некоторые обращаются к простому и, пожалуй, самому действенному способу &amp;ndash; аудиокнигам.

Чтобы привыкнуть к прослушиванию текста, нужно около 10 минут (при первом опыте). При этом скорость &amp;laquo;поглощения&amp;raquo; книги в аудиоварианте может оказаться выше по сравнению с обычным чтением с листа &amp;ndash; ведь аудиокниги можно слушать, например, в машине по дороге на работу.
Брать на себя ответственность&amp;nbsp;
&amp;laquo;Очень часть люди отказываются от массы интересных задач просто из&#45;за неуверенности в положительном результате и из&#45;за нежелания за что&#45;то отвечать впоследствии&amp;raquo;, &#45; говорит бизнесмен Дейв Негот, специализирующийся на сфере тайм&#45;менеджмента.

Существует несколько простых приемов, позволяющих побороть страх перед взваливанием на свои плечи ответственности:
&#45; Ставить перед собой сложные задачи, которые вызывают опасения и заставляют беспокоиться о возможном провале;
&#45; Стараться как можно реже (только при крайней необходимости) обращаться за советом к коллегам или начальству;
&#45;&amp;nbsp; Чаще проявлять инициативу;
&#45; Перестать жаловаться по любому поводу.&amp;nbsp;
10 минут рабочей гимнастики
Плотный рабочий график может стать причиной множества проблем со здоровьем: от остеохондроза до мигреней. Снизить риск возникновения неприятных последствий чрезмерно усердного труда поможет каждодневная 10&#45;минутная зарядка прямо на рабочем месте.</description>
      <dc:subject>Разное</dc:subject>
      <dc:date>2015-09-08T19:42:26+00:00</dc:date>
    </item>
    
    </channel>
</rss>