<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6984463375335471525</id><updated>2024-10-07T09:38:30.569+03:00</updated><category term="CPP"/><category term="Data Base"/><category term="Python"/><category term="Scripts"/><category term="Ubuntu"/><category term="cURL"/><category term="фото"/><title type='text'>Случайные записки АЙтишника</title><subtitle type='html'>bLog ITMen.a </subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-5674949012810851825</id><published>2017-11-24T23:01:00.001+03:00</published><updated>2017-11-24T23:01:31.082+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'></title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: center;&quot;&gt;
Парсинг PDF файлов на python&lt;/h2&gt;
&lt;h3 style=&quot;text-align: center;&quot;&gt;
Список популярных пакетов для работы с PDF документами из Python&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://github.com/euske/pdfminer&quot; target=&quot;_blank&quot;&gt;pdfminer&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;- Отличная библиотека для работы с pdf.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Для работы с python 3.x лучше использовать форки:&amp;nbsp;&lt;a href=&quot;https://github.com/jaepil/pdfminer3k&quot; target=&quot;_blank&quot;&gt;pdfminer3k&lt;/a&gt;&amp;nbsp;и&amp;nbsp;&lt;a href=&quot;https://github.com/pdfminer/pdfminer.six&quot; target=&quot;_blank&quot;&gt;pdfminer.six&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;(В последнем, есть&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;, Arial, Helvetica, sans-serif;&quot;&gt;также&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;, Arial, Helvetica, sans-serif;&quot;&gt;консольная утилита для работы с форматом pdf)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность: &amp;nbsp;&lt;span style=&quot;color: #274e13;&quot;&gt;&lt;b&gt;2479 звезд, 738 форков на GitHub&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/mstamy2/PyPDF2&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;PyPDF2&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/b&gt;- Популярный форк старой библиотеки pyPDF.&amp;nbsp;&lt;span style=&quot;background-color: white; font-size: 14px; letter-spacing: -0.14px; text-align: left;&quot;&gt;Умеет разделять pdf по отдельным документам, объединять документы в один, получать текст и мета информацию.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Совместим с Python&amp;nbsp;&lt;span style=&quot;background-color: white; font-size: 14px; letter-spacing: -0.14px; text-align: left;&quot;&gt;2.6, 2.7, и 3.2 - 3.5.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность:&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #7f6000;&quot;&gt;1612 звезд, 444 форка на GitHub&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://github.com/jcushman/pdfquery&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;pdfquery&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- Обертка вокруг библиотеки&amp;nbsp;&lt;a href=&quot;https://github.com/euske/pdfminer&quot; target=&quot;_blank&quot;&gt;pdfminer&lt;/a&gt;, используя &amp;nbsp;язык запросов JQuery и XPath позволяет быстро получить информацию из PDF документа.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Последнее обновление библиотеки 16 июля 2017. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Совместима с Python 3.x.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность: &lt;b&gt;300 звезд, 38 форков на GitHub&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://github.com/pmaupin/pdfrw&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;pdfrw&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- Простая библиотека для python, может читать и записывать pdf файл, работать с мета-информацией, объединять документы, переворачивать, и т.д.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Последнее обновление библиотеки 17 сентября 2017.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Поддерживаются версии&amp;nbsp;&lt;span style=&quot;background-color: white; color: #24292e; font-size: 16px; text-align: left;&quot;&gt;Python 2.6, 2.7, 3.3, 3.4, 3.5, and 3.6&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность: &lt;b&gt;440 звезд, 105 форков на GitHub&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://github.com/timClicks/slate&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;slate&lt;/b&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;- Этот пакет позволяет легко получить текст из pdf документа.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Последнее обновление пакета: 26 марта 2017 года.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;С работой на python 3.x имеются проблемы.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность: &lt;b&gt;231 звезды, 92 форкa на GitHub&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.reportlab.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;reportlab&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- Мощная библиотека для создания pdf документов (текст и графика).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Кроме &lt;a href=&quot;https://bitbucket.org/rptlab/reportlab&quot; target=&quot;_blank&quot;&gt;open-source&lt;/a&gt; пакета имеется и коммерческая версия ReportLab Plus.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Совместима с python 2.7 или 3.3 и выше&lt;span style=&quot;color: #172b4d;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 14px; letter-spacing: -0.07px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Популярность: &amp;nbsp;&lt;b&gt;84 форка на&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;b&gt;bitbucket&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://github.com/ccnmtl/fdfgen&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;fdfgen&lt;/b&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;- Библиотека для Python, портированная с php&lt;a href=&quot;http://www.pdfhacks.com/forge_fdf/&quot; target=&quot;_blank&quot;&gt;&amp;nbsp;(forge_fdf&lt;/a&gt;).&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Возможности: с&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;оздание документов, объединение.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Совместима с python 3.x&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Популярность: &amp;nbsp;&lt;b&gt;113 звезд, 25 форков на GitHub&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Вспомогательные утилиты&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;a href=&quot;https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/&quot; target=&quot;_blank&quot;&gt;Pdftk&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;- Консольная утилита &amp;nbsp;и GUI приложение для работы с pdf.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;Возможности: объединение, разделение документов, извлечение текста.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://github.com/qpdf/qpdf&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;qpdf&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- Консольная утилита написанная на С++ для работы с &amp;nbsp;pdf быстро.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;Основные возможности: создание,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: justify;&quot;&gt;объединение, разделение, шифрование, получение мета информации.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.ghostscript.com/&quot; target=&quot;_blank&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;ghostscript&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&amp;nbsp;- Конвертер файлов в PostScript формате в графические файлы или PDF.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/5674949012810851825/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2017/11/pdf-python-pdf-python-pdfminer-pdf.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/5674949012810851825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/5674949012810851825'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2017/11/pdf-python-pdf-python-pdfminer-pdf.html' title=''/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-2380862434102804713</id><published>2017-11-22T20:49:00.001+03:00</published><updated>2017-11-22T20:59:25.212+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="фото"/><title type='text'></title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;Как просто и быстро разложить фотографии по папкам&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Часто после отпуска возникает ситуация когда большое количество фотографий необходимо разложить по папкам. Для этих целей можно использовать отличную программу для работы с мета информацией (EXIF, IPTC, XMP, GPS)&amp;nbsp;&lt;a href=&quot;https://www.sno.phy.queensu.ca/~phil/exiftool/&quot; target=&quot;_blank&quot;&gt;ExifTool&lt;/a&gt;. Эта утилита, которую можно запустить из командной строки или из bat файла.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для работы копируем утилиту exiftool в директорию с фотографиями,&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
далее нажимаем кнопку Start и в строке поиска пишем cmd и нажимаем enter.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Откроется окно терминала. Переходим к нашей директории с фотографиями (команда: cd путь до папки). И пишем такую команду&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}&quot; -d %%Y_%%m_%%d *.jpg&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В итоге в этой папке будут созданы подпаки вида:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF5hkgDZEuICEKWd3AVNv3qOrE50sOHqW4lZE_9T0PA2I5ZyAYvXFl6C8vhYNVbw8qUFU-x11eK0Y_tmcDQGXBlIEuHcRTv1jzRk5WmdcfliqzMr6UcU2SxVKbCfktE4frzKTGLyu4NR4/s1600/dir_tree.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;429&quot; data-original-width=&quot;324&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF5hkgDZEuICEKWd3AVNv3qOrE50sOHqW4lZE_9T0PA2I5ZyAYvXFl6C8vhYNVbw8qUFU-x11eK0Y_tmcDQGXBlIEuHcRTv1jzRk5WmdcfliqzMr6UcU2SxVKbCfktE4frzKTGLyu4NR4/s320/dir_tree.png&quot; width=&quot;241&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В каждой подпапке с датой будет создана папка с названием модели фотоаппарата.&lt;br /&gt;
Это удобно, если в отпуске снимали на несколько камер, например: на зеркалку, мыльницу и телефон.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;За пару минут можно отсортировать огромный архив фотографий по папкам!&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Эту команду можно оформить в bat файл и вызывать, когда необходимо.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
А еще лучше добавить в .bat файл сразу несколько команд, для разных типов фалов:&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}&quot; -d %%Y_%%m_%%d *.JPG&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}&quot; -d %%Y_%%m_%%d *.jpg&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}&quot; -d %%Y_%%m_%%d *.jpeg&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}/RAW&quot; -d %%Y_%%m_%%d *.CR2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}&quot; -d %%Y_%%m_%%d *.tif&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Дополнительно:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
Для сортировки RAW (Canon) файлов можно воспользоваться этой командой.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool -v &quot;-Directory&amp;lt;${DateTimeOriginal}/${model;}/RAW&quot; -d %%Y_%%m_%%d *.CR2&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
В подпапке с названием модели появится директория RAW.&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b&gt;Небольшая ремарка:&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
На официальном сайте&amp;nbsp;&lt;a href=&quot;https://www.sno.phy.queensu.ca/~phil/exiftool/&quot; target=&quot;_blank&quot;&gt;ExifTool&lt;/a&gt;&amp;nbsp;утилита называется&amp;nbsp;&lt;span style=&quot;background-color: white; color: #880000; font-family: &amp;quot;monaco&amp;quot; , monospace; font-size: 14.4px; text-align: left; white-space: nowrap;&quot;&gt;exiftool(-k).exe&amp;nbsp;&lt;/span&gt;для удобства использования советую переименовать в&amp;nbsp;&lt;span style=&quot;color: #274e13;&quot;&gt;exiftool.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/2380862434102804713/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2017/11/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2380862434102804713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2380862434102804713'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2017/11/blog-post.html' title=''/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF5hkgDZEuICEKWd3AVNv3qOrE50sOHqW4lZE_9T0PA2I5ZyAYvXFl6C8vhYNVbw8qUFU-x11eK0Y_tmcDQGXBlIEuHcRTv1jzRk5WmdcfliqzMr6UcU2SxVKbCfktE4frzKTGLyu4NR4/s72-c/dir_tree.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-8527945621177039412</id><published>2015-08-17T20:34:00.002+03:00</published><updated>2015-08-17T20:34:51.631+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Python"/><title type='text'>“Сборка” Python скрипта в один exe файл</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Все мы знаем, что пайтон интерпретируемый язык и получить настоящий скомпилированный exe файл - нет возможности. Однако, есть такие проекты как: &lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;&lt;b&gt;py2exe&lt;/b&gt; или &lt;b&gt;cx_freeze&lt;/b&gt;, которые, анализируя код приложения, собирают все зависимые библиотеки и сам интерпретатор в отдельной папке, и создают запускающий exe файл. Этот exe файл при запуске подготовит окружение для нашего приложения, запустит интерпретатор python и уже в нем - наше приложение. После работ утилит py2exe или cx_freeze у нас всегда появляются куча dll и др. файлов. &lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;color: #990000; font-family: Arial; font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #990000; font-family: Arial; font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #990000; font-family: Arial; font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;Так что же сделать для получения одного exe файла, вместо кучи файлов?&lt;/span&gt;&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Будем считать, что у нас уже есть папка (dist) с зависимыми файлами, после прогона &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;py2exe&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; или &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;cx_freeze&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Первым делом, чистим за утилитами &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;py2exe&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; или &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;cx_freeze&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; библиотеки и файлы, которые гарантированно не будут использоваться. (например: w9xpopen.exe).&lt;/span&gt;&lt;span style=&quot;font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;Таким образом, уменьшаем размер нашего будущего exe файла и скорость его загрузки.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Далее, упаковываем архиватором &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;7zip&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; (если у Вас его нет, то скорее качаем с официального сайта: &lt;/span&gt;&lt;a href=&quot;http://www.7-zip.org/&quot; style=&quot;font-weight: 400; text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;www.&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;7-zip&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;.org&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;) папку (dist) со всеми файлами.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;Все параметры упаковки лучше запомнить, так как далее они понадобятся.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;Я упаковку делаю из командной строки поэтому и запомнить просто :)&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; font-weight: 400; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;u&gt;Например:&lt;/u&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;C:\7-Zip\7z.exe a -r -t7z -m1=LZMA dist.7z dist\*.* &lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: transparent; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;color: #990000;&quot;&gt;Далее начинается темная магия, которой порой, пользуются всякие недалекие вирусописатели.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Идем на сайт &lt;/span&gt;&lt;a href=&quot;http://7zsfx.info/ru/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://7zsfx.info/ru/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; и скачиваем специальный модифицированный модуль (например: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;7zsd.sfx&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;) для распаковки нашего приложения “по тихому” и запуску одного из файлов внутри архива. Модуль должен быть с поддержкой именно того сжатия, которое применяем, в моем случае это LZMA, &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;a есть еще лучше - LZMA2&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Далее готовим файл настройки для модуля &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;7zsd.sfx&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 20.2399997711182px;&quot;&gt;(&lt;i&gt;config.txt&lt;/i&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 20.2399997711182px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;﻿;!@Install@!UTF-8!&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;RunProgram&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;=&quot;наш_запускатор.exe &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;/s&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;GUIMode=&quot;2&quot;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;;!@InstallEnd@!&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Главная строчка здесь это: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;RunProgram&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; с ключем &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: italic; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;/s&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: italic; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; - говорит, что после распаковки запустить “по тихому” (/s) файл из архива.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Следующим шагом идем в командную строку &lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;и делаем следующие:&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-style: normal; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;b&gt;copy /b 7zsd.sfx + config.txt + dist.7z alone.exe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Итогом получаем один exe (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;alone.exe&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;) файл, который на самом деле является файлом  состоящем из трех частей. Распаковщика (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;7zsd.sfx&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;), конфига к нему (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;config.txt&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;) и нашего дистрибутива (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;dist.7z&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;).&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;После запуска, произойдет следующее: во временной директории (TEMP) будет развернут наш дистрибутив и автоматом запустится файл из него (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.6666666666667px; font-variant: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;i&gt;alone.exe&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;). Распакованные файлы останутся лежать в &amp;nbsp;(TEMP), если оно нам не надо, то в конфигурационном файле надо добавить ключик delete=директория. &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;А вообще рекомендую посмотреть справку по модулю 7zsfx на официальном сайте:&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://7zsfx.info/ru/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://7zsfx.info/ru/&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Как поменять иконку приложения и описание программы?&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Для этого воспользуемся программой Resource Hacker &lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;(&lt;/span&gt;&lt;a href=&quot;https://ru.wikipedia.org/wiki/Resource_Hacker&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;https://ru.wikipedia.org/wiki/Resource_Hacker&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Процесс простой, описывать думаю нет смысла.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Что дальше?&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Все использованные программы могут работать из командной строки и легко принимают разные параметры. Поэтому можно легко сделать bat файл со всем этим процессом (компилятор_всея_пайтон.bat) &amp;nbsp;и запускать по мере необходимости.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Оптимизация: скорость, размер, можно попробовать воспользоваться UPX&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://upx.sourceforge.net/ для сжатия. Может оно что-то и даст.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Приятные бонусы.&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: #990000; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Бесплатным бонусом идет возможность шифрования кода нашего приложения &amp;nbsp;и установка пароля на запуск приложения. Но… Ниже о безопасности кода.&lt;/span&gt;&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Не могу промолчать про минусы.&lt;/span&gt;&lt;/div&gt;
&lt;ol style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Возможно, некоторые антивирусы будут ругаться.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Исходный код можно все равно перехватить, например, подсмотрев его во время распаковки архива во временную директорию.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; list-style-type: decimal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Медленный запуск приложения. (Можно победить подбором параметров сжатия и удалением мусорных файлов из дистрибутива) (А на SSD, так вообще не заметно:) ) &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Второй пункт можно чуть улучшить, если использовать распаковку на виртуальный диск в памяти, который предварительно надо создать. Это даст еще 2 очка к безопасности кода. :) Но защита все равно очень слабенькая…&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/8527945621177039412/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2015/08/python-exe.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8527945621177039412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8527945621177039412'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2015/08/python-exe.html' title='“Сборка” Python скрипта в один exe файл'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-8137614237043388926</id><published>2010-10-15T11:04:00.000+04:00</published><updated>2010-10-15T11:06:28.945+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Создание сервера закачек на базе торрент-клиента Deluge в Ubuntu</title><content type='html'>&amp;nbsp;&amp;nbsp; Пару месяцев назад, я решил сделать сервер закачек на основе Deluge, которым можно было бы управлять удаленно. &lt;i&gt;(с любого компьютера локальной сети или даже из инета)&lt;/i&gt;. В процессе &#39;гугления&#39; нашел в инете много материалов по настройке, однако, не все оказались одинаково полезны. Некоторые рецепты работают только в старых версиях ubuntu, другие предлагают написать мегаскрипты, часть описывают только запуск и настройку deluge. В итоге, набрав разных полезных и не очень материалов написал себе иснтрукцию по установке. Может кому еще пригодится...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Заходим в терминал.&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы каждый раз не набирать sudo (получим временно права рута) пишем:&lt;br /&gt;
&lt;b&gt;sudo -s наш_администратор&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Устанавливаем deluge и веб морду командой:&lt;br /&gt;
&lt;b&gt;apt-get install deluge deluge-webui&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Добавляем нового пользователя:&lt;br /&gt;
&lt;b&gt;adduser torrent&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Запускаем:&lt;br /&gt;
&lt;b&gt;visudo&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
добавлем в конец файла правило:&lt;br /&gt;
&lt;b&gt;torrent ALL = NOPASSWD: /usr/bin/deluged&lt;/b&gt;&lt;br /&gt;
Сохраняем файл.&lt;br /&gt;
&lt;br /&gt;
Переключаемся на пользователя torrent командой:&lt;br /&gt;
&lt;b&gt;su torrent&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Создаем директорию:&lt;br /&gt;
&lt;b&gt;mkdir /home/torrent/scripts&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Пишем небольшой скрипт в любом редакторе (vi, nano, gedit, medit...):&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash

sudo deluged
deluge -u web
&lt;/pre&gt;&lt;br /&gt;
Сохраняем его в директорию:&lt;br /&gt;
&lt;b&gt;/home/torrent/scripts/deluge_auto.sh&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Делаем файл исполняемым:&lt;br /&gt;
&lt;b&gt;chmod a+x /home/torrent/scripts/deluge_auto.sh&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;(Этот скрипт будет запускать демона и deluged и &#39;веб-морду &#39;.)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Далее настраиваем автоматический вход пользователя torrent в систему.&lt;br /&gt;
Идем в оболочке GNOME:&lt;br /&gt;
Система &amp;gt; Администрирование &amp;gt; Окно входа в систему &amp;gt; Безопасность&lt;br /&gt;
Ставим галочку в правильном месте и указываем пользователя torrent в нужном поле&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWmhEMuDvPdYkLXHg_y0_bBoven64jOl2Y05owvq0ppknJLnio1T9alSYvECU2JjC4fggtwZxIiSG78VQAp8LbU9aJ3vVUoJkDJtCmUFc083TLehvEY8rcxkBtAectLG1O42iJmBgR8w/s1600/automatic_login_1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;306&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWmhEMuDvPdYkLXHg_y0_bBoven64jOl2Y05owvq0ppknJLnio1T9alSYvECU2JjC4fggtwZxIiSG78VQAp8LbU9aJ3vVUoJkDJtCmUFc083TLehvEY8rcxkBtAectLG1O42iJmBgR8w/s320/automatic_login_1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Теперь добавим наш скрипт в автозапуск GNOME. Идем в Система-&amp;gt;Параметры-&amp;gt;Запускаемые приложения. Нажимаем кнопку добавить и заполняем формочку, в команде пишем путь до нашего скрипта:&lt;br /&gt;
&lt;b&gt;/home/torrent/scripts/deluge_auto.sh&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
Имя ставим, например,&lt;br /&gt;
&lt;b&gt;AutoRun Deluge&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Вообщем все. Теперь можно перезагрузится, и зайти на этот комп по сети через браузер написав:&lt;br /&gt;
&lt;b&gt;http://ххх.ххх.ххх.ххх:8112&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;(где ххх.ххх.ххх.ххх ip адрес нашего сервера, а 8112 номер порта)&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Если все хорошо, то появится форма с запросом пароля.&lt;br /&gt;
Вводим пароль: &lt;b&gt;deluge&lt;/b&gt;&lt;br /&gt;
И попадаем в интерфейс Deluge. Далее идем config-&amp;gt;password и меняем пароль доступа к Deluge. На этом установка и первоначальная настройка закончена!&lt;br /&gt;
&lt;br /&gt;
Примечание:&lt;br /&gt;
&lt;i&gt;Настройки Deluge также находятся ~/.config/deluge&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/8137614237043388926/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/deluge-ubuntu.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8137614237043388926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8137614237043388926'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/deluge-ubuntu.html' title='Создание сервера закачек на базе торрент-клиента Deluge в Ubuntu'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWWmhEMuDvPdYkLXHg_y0_bBoven64jOl2Y05owvq0ppknJLnio1T9alSYvECU2JjC4fggtwZxIiSG78VQAp8LbU9aJ3vVUoJkDJtCmUFc083TLehvEY8rcxkBtAectLG1O42iJmBgR8w/s72-c/automatic_login_1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-6392724678611669550</id><published>2010-10-14T16:05:00.000+04:00</published><updated>2010-10-14T22:30:08.485+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Ubuntu:Как разрешить пользователю выполнять некоторые административные &#39;функции&#39;/скрипты/программы.</title><content type='html'>&amp;nbsp;&amp;nbsp; &amp;nbsp; Часто возникает вопрос, как пользователю дать возможность выполнять некоторые административные ф-ии, которые изначально доступны только из под рута с применением команды &lt;b&gt;sudo&lt;/b&gt; в Ubuntu. Например :&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;монтирование разделов/дисков&lt;/li&gt;
&lt;li&gt;выключение/перезагрузка&lt;/li&gt;
&lt;li&gt;запуск демонов (к примеру демона торрент сервиса - deluged)&lt;/li&gt;
&lt;li&gt;запуск сервера apache без запроса пароля&lt;/li&gt;
&lt;li&gt;запуск каких-то скриптов&lt;/li&gt;
&lt;li&gt;и т.п.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;И так, для примера дадим права на выключение/перезагрузку и монтирование/размонтирование пользователю &lt;u&gt;Vasya&lt;/u&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;открываем терминал&lt;/li&gt;
&lt;li&gt;набираем &lt;b&gt;sudo -s ваш_аккаунт_администратора&lt;/b&gt; &lt;i&gt;(sudo -s временно нам даcт права рута)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;далее набираем &lt;b&gt;visudo&lt;/b&gt; &lt;i&gt;(откроется файл для редактирования&amp;nbsp;&lt;/i&gt;&lt;b&gt;&lt;i&gt;sudoers&lt;/i&gt;&lt;/b&gt;&lt;i&gt;)&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Далее, добавляем в файл следующее:&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;vasya&amp;nbsp;localhost = NOPASSWD: /usr/sbin/shutdown,/usr/sbin/reboot,/usr/bin/mount,/usr/bin/umount&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;сохраняем файл &lt;i&gt;(если все хорошо с &amp;nbsp;синтаксисом, то файл благополучно сохраниться)&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;Почему надо использовать visudo, а не просто редактировать файл sudoers? В первую очередь в целях безопасности т.к.&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;visudo&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;не сохранит изменения, если имеется синтаксическая ошибка. А изменения в этом файле являются критичными для работы пользователей и системы... &lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;visudo также гарантирует правку файла &#39;&lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;sudoers&#39;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;только в одной сессии.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px;&quot;&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;Вот и всё. Аналогичным образом можно разрешить исполнение каких либо других скриптов или программ без запроса пароля. Только не забываем о безопасности, т.к. отключив запрос пароля для некоторых программ мы можем создать потенциальную дырку &amp;nbsp;в безопасности нашей системы из вне...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/6392724678611669550/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ubuntu.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/6392724678611669550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/6392724678611669550'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ubuntu.html' title='Ubuntu:Как разрешить пользователю выполнять некоторые административные &#39;функции&#39;/скрипты/программы.'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-3148981729300150541</id><published>2010-10-13T16:07:00.000+04:00</published><updated>2010-10-14T15:05:06.666+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Base"/><title type='text'>SQL Query: Получение &quot;уникальных&quot; данных из БД</title><content type='html'>&quot;Уникальных&quot; это конечно сильно сказано... Дальше, я думаю, будет ясно о чем это я...&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Дано:&lt;/b&gt;&lt;/u&gt;&lt;br /&gt;
Столбец &#39;emitent&#39; таблицы &#39;deal&#39; такого вида:&lt;br /&gt;
GAZP&lt;br /&gt;
ROSN&lt;br /&gt;
ROSN&lt;br /&gt;
VTB&lt;br /&gt;
ROSN&lt;br /&gt;
GMKN&lt;br /&gt;
GAZP&lt;br /&gt;
GMKN&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Задача:&lt;/b&gt;&lt;/u&gt; Как получить только уникальные названия. Например:&lt;br /&gt;
&lt;br /&gt;
GAZP&lt;br /&gt;
ROSN&lt;br /&gt;
VTB&lt;br /&gt;
GMKN&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;Решение:&lt;/b&gt;&lt;/u&gt; А вот как:&lt;br /&gt;
&lt;s&gt;SELECT emitent FROM deal GROUP BY emitent HAVING count(*)!=0&lt;/s&gt;&lt;br /&gt;
Оказалось можно сделать проще: (спасибо, mvtm):&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: &#39;trebuchet ms&#39;, verdana, arial, sans-serif; font-size: 15px; line-height: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; color: #333333; font-family: &#39;trebuchet ms&#39;, verdana, arial, sans-serif; font-size: 15px; line-height: 18px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: &#39;Times New Roman&#39;; font-size: medium; line-height: normal;&quot;&gt;SELECT DISTINCT emitent FROM deal&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
или&lt;br /&gt;
SELECT emitent FROM deal GROUP BY emitent</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/3148981729300150541/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/sql-query.html#comment-form' title='Комментарии: 5'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/3148981729300150541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/3148981729300150541'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/sql-query.html' title='SQL Query: Получение &quot;уникальных&quot; данных из БД'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-2410334353096494707</id><published>2010-10-12T10:32:00.000+04:00</published><updated>2010-10-12T10:32:25.405+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Scripts"/><title type='text'>Простейшей cvs (с помощью архиватора и bat скрипта)</title><content type='html'>&lt;b&gt;Предыстория:&lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Начал писать я одну прогу, каждый день, заводя новый каталог для новой версии программы. Через несколько дней я понял, что каждый раз настраивать файлы и IDE под новый каталог, как то не спортивно... Решил, что было бы хорошо создавать архив каталога (где ведется разработка) и хранить его где-нибудь в другой папке.&amp;nbsp; При таком варианте я всегда смогу откатиться до предыдущей версии,&amp;nbsp; и&amp;nbsp; создавать архив в любое время ... Вообщем, реализация простейшей cvs....&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ну а дальше - понесЛось...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;О скрипте: &lt;/b&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; В скрипте я использую архиватор 7zip (&lt;a href=&quot;http://www.7-zip.org/&quot;&gt;http://www.7-zip.org/&lt;/a&gt;), т.к. он OpenSource и его родной формат 7z&amp;nbsp; гораздо эффективнее чем rar или zip. &lt;i&gt;(Вообще не понимаю того кто еще устанавливает rar и главное зачем?)&lt;/i&gt; &lt;br /&gt;
Скрипт легко настроить под свою задачу, просто редактируем параметры, исходя из комментса...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@echo off
rem **************************************************
rem Эта строка вносит изменения в регистр.
rem Задает правильный формат времени, теперь если часы,
rem минуты или секунды будут представлены одной
rem цифрой, то автоматом добавится ноль в начале.
rem Раскомментировать если что...
rem **************************************************
rem C:\Windows\System32\REG ADD &quot;HKCU\Control Panel\International&quot; /v sTimeFormat /t REG_SZ /d &quot;HH:mm:ss&quot; /f 

rem **************************************************
rem Здесь форматируется дата и время
rem Этот кусок лучше не править...
rem **************************************************
set mydate=%date%
set mydate2=%mydate:~6,4%.%mydate:~3,2%.%mydate:~0,2%
set mytime=%time%
set mytime2=%mytime:~0,2%-%mytime:~3,2%

rem **************************************************
rem путь где лежит архиватор 7zip
rem если в пути присутствуют пробелы, необходимо брать 
rem такой кусок в кавычки
rem **************************************************
set PathTo7ZipProgram=C:\&quot;Program Files&quot;\7-Zip\7z.exe

rem **************************************************
rem Параметры архивироания
rem -a - Создаем архив, 
rem -r обход всех подкаталогов
rem -t7z тип архива, можно написть -tzip
rem -y на все вопросы отвечать yes
rem **************************************************
set Param=a -t7z -r -y

rem **************************************************
rem Папка откуда архивируем
rem **************************************************
set sourcePath=&quot;D:\C++ Progs\Market&quot;

rem **************************************************
rem Папка куда архивируем
rem **************************************************
set distPath=&quot;D:\C++ Progs\Market\Arhive\&quot;

rem **************************************************
rem Здесь формируем название нашего архива 
rem Например:2010.09.10_11-15_example.7z
rem **************************************************
set arhiveFileName=%mydate2%_%mytime2%_example.7z

rem **************************************************
rem в принципе можно еще пароль ставить автоматом...
rem см. справку по 7zip
rem **************************************************

echo ************************************************
echo *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Create and Save Arhive&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; *
echo *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *
echo *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pingi-Pingi production&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;nbsp; *
echo *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; http://pingi-pingi.blogspot.com&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; *
echo ************************************************
echo * source DIR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; :&amp;nbsp; %sourcePath%&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
echo * distanation DIR&amp;nbsp;&amp;nbsp; :&amp;nbsp; %distPath%
echo * arhive File Name&amp;nbsp; :&amp;nbsp; %arhiveFileName%
echo ****************** START ***********************

%PathTo7ZipProgram% %Param% %distPath%%arhiveFileName% %sourcePath%

echo ******************* END ************************
&lt;/pre&gt;&lt;br /&gt;
а если скрипт добавить в автозагрузку тогда еще полезнее будет ... &lt;i&gt;правда только на время разработки конкретной аппликации :)&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/2410334353096494707/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/cvs-bat.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2410334353096494707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2410334353096494707'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/cvs-bat.html' title='Простейшей cvs (с помощью архиватора и bat скрипта)'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-127785400075281006</id><published>2010-10-11T12:22:00.001+04:00</published><updated>2015-08-17T20:39:48.976+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPP"/><title type='text'>Простое ведение лога на С++</title><content type='html'>В процессе отладки или работы приложения часто необходимо вести лог или выдавать отладочную информацию на экран или в файл.&lt;br /&gt;
Можно, конечно, воспользоваться сторонними библиотеками или написать собственный класс для этого. Однако, чтобы некоторые отладочные сообщения или конструкции не попали в &quot;релизную&quot; версию придется их отделять конструкциями типа:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#ifdef DEBUG
//Вывод отладочного сообщения в файл или на экран
#endif
&lt;/pre&gt;&lt;br /&gt;
Что может сильно захламить код...&lt;br /&gt;
&lt;br /&gt;
Поэтому был написан следующий модуль лишенный таких недостатков:&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#ifndef CALOG_H
#define CALOG_H
/******************************************************************************
* Здесь написаны макросы для выдачи отладочных сообщений на экран или файл
*
* PRINT1 (a) - Выдает сообщение (a) на экран.
* PRINT2 (a,b) - Выдает два сообщения (a) (b) на экран.
* PRINT3 (a,b,c) - Выдает три сообщения (a) (b) (с) на экран
* Аналогично для TOLOG - только сообщения идут в файл.
* Файл задается константой logFile1
*
* Макросы будут работать если определен DEBUG
* Если нет, то нет....
*
*
* Данная реализация уверенно работает под gcc 4.4.0 и С++0x.
* Для работы с &quot;широкими&quot; символами std::ofstream заменить на std::wofstream
* 
*
* А также можно определить:
*#define TIMETOLOG - пишет в лог время
*#define LINETOLOG - пишет в лог имя файла и номер строки
*
* Pingi-Pingi production
******************************************************************************/

#ifdef DEBUG

#ifndef LOGFILE
#define LOGFILE &quot;Mylog.log&quot;
#endif

#include &amp;lt;fstream&amp;gt;
#include &amp;lt;iostream&amp;gt;

#ifdef TIMETOLOG
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;iomanip&amp;gt;
#endif

//Если выдаем имя файла и строку
#ifdef LINETOLOG
#define LINETO fwout &amp;lt;&amp;lt;&quot;File:&quot;&amp;lt;&amp;lt;__FILE__&amp;lt;&amp;lt;&quot; Line:&quot;&amp;lt;&amp;lt;__LINE__&amp;lt;&amp;lt;&quot; | &quot;;
#endif

//Если выдаем время
#ifdef TIMETOLOG
#define TIMETO \
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time_t rawtime;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct tm *timeinfo;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; time ( &amp;amp;rawtime );\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timeinfo = localtime ( &amp;amp;rawtime );\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt;std::setw(2) &amp;lt;&amp;lt; std::setfill (&#39;0&#39;)\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;timeinfo-&amp;gt;tm_hour&amp;lt;&amp;lt;&quot;:&quot;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;std::setw(2) &amp;lt;&amp;lt; std::setfill (&#39;0&#39;)\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;timeinfo-&amp;gt;tm_min&amp;lt;&amp;lt;&quot;:&quot;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;std::setw(2) &amp;lt;&amp;lt; std::setfill (&#39;0&#39;)\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&amp;lt;timeinfo-&amp;gt;tm_sec&amp;lt;&amp;lt;&quot; | &quot;;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };
#endif


#ifndef LINETO
&amp;nbsp;&amp;nbsp;&amp;nbsp; #define LINETO
#endif
#ifndef TIMETO
&amp;nbsp;&amp;nbsp;&amp;nbsp; #define TIMETO
#endif


#define&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT1(a) \
&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ostream &amp;amp;fwout=std::cout;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a) &amp;lt;&amp;lt; std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp; };

#define&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT2(a,b) \
&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ostream &amp;amp;fwout=std::cout;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a) &amp;lt;&amp;lt; (b) &amp;lt;&amp;lt; std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp; };

#define&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT3(a,b,c) \
&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ostream &amp;amp;fwout=std::cout;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a) &amp;lt;&amp;lt; (b) &amp;lt;&amp;lt; (c) &amp;lt;&amp;lt; std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp; };


#define&amp;nbsp;&amp;nbsp;&amp;nbsp; TOLOG1(a) \
&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ofstream fwout (LOGFILE,std::ios_base::out|std::ios_base::app);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fwout.is_open())\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a) &amp;lt;&amp;lt; std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout.close();\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }\
&amp;nbsp;&amp;nbsp; };

#define&amp;nbsp;&amp;nbsp;&amp;nbsp; TOLOG2(a,b) \
&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ofstream fwout (LOGFILE,std::ios_base::out|std::ios_base::app);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fwout.is_open())\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (b);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt;std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout.close();\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }\
&amp;nbsp;&amp;nbsp; };

#define&amp;nbsp;&amp;nbsp;&amp;nbsp; TOLOG3(a,b,c) \
&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ofstream fwout (LOGFILE,std::ios_base::out|std::ios_base::app);\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(fwout.is_open())\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIMETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LINETO\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout &amp;lt;&amp;lt; (a) &amp;lt;&amp;lt; (b) &amp;lt;&amp;lt; (c) &amp;lt;&amp;lt;std::endl;\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fwout.close();\
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }\
&amp;nbsp;&amp;nbsp; };

#else

#define PRINT1(a)
#define PRINT2(a,b)
#define PRINT3(a,b,c)
#define TOLOG1(a)
#define TOLOG2(a,b)
#define TOLOG3(a,b,c)

#endif

#endif 
&lt;/pre&gt;&lt;br /&gt;
Если мы в своей программе определяем #DEBUG, то у нас работают ф-ии PRINT и TOLOG если же #DEBUG не определен, то вместо них в код будут подставлены аналогичные ф-ии пустышки.&lt;br /&gt;
И все...&lt;br /&gt;
&lt;br /&gt;
Ниже пример использования данного модуля:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;//Пример использования CALog.hpp
//pingi-pingi production
//http://pingi-pingi.blogspot.com/

#include &amp;lt;stdlib.h&amp;gt;

//Важно!
//Определяем параметры до #include &quot;CALog.hpp&quot;
#define DEBUG
#define LOGFILE &quot;Mylog2.log&quot;
#define TIMETOLOG

#include &quot;CALog.hpp&quot;

int main(int argc, char *argv[])
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; //пишем в файл
&amp;nbsp;&amp;nbsp;&amp;nbsp; TOLOG1(&quot;Warrning...&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; TOLOG2(&quot;Parametr count = &quot;, 5666.3444);

&amp;nbsp;&amp;nbsp;&amp;nbsp; //выдаем на экран (stdout)
&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT2(&quot;Problem Here, Number is = &quot;,300);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT3(&quot;Problem Here:&quot;,&quot;Param = &quot;,0);

&amp;nbsp;&amp;nbsp;&amp;nbsp; system(&quot;PAUSE&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp; return EXIT_SUCCESS;
} 
&lt;/pre&gt;&lt;br /&gt;
Конечно такое решение не лишено проблем...&lt;br /&gt;
Например, хорошо бы сделать для этого модуля свое пространство имен. т.к. используемые в этом коде переменные&amp;nbsp; могут привести к конфликту с именованием переменных в основной программе. Однако оно работает и весьма успешно...</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/127785400075281006/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/127785400075281006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/127785400075281006'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/blog-post.html' title='Простое ведение лога на С++'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-8820552641099033552</id><published>2010-10-08T11:29:00.000+04:00</published><updated>2015-08-17T20:39:48.980+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPP"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Base"/><title type='text'>Использование базы данных на sqlite</title><content type='html'>Есть такой вариант облеченной базы mySQL.&lt;br /&gt;
&lt;br /&gt;
Главное отличие от MySQL в отсутствии сервера, т.е. базу можно создавать и использовать локально - на том компе, где установлена прога.&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Для создания БД можно использовать:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Командную строку (дополнительно качаем tools c сайта-проекта)&lt;/li&gt;
&lt;li&gt;GUI интерфейс, бесплатный sqlite browser берем отсюда: &lt;a href=&quot;http://sqlitebrowser.sourceforge.net/&quot;&gt;http://sqlitebrowser.sourceforge.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Программно, пользуясь API (качаем source code c сайта-проекта)&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Сайт проекта:&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.sqlite.org/&quot;&gt;http://www.sqlite.org&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;По русски, описание и пример:&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.codenet.ru/db/other/sqlite/&quot;&gt;http://www.codenet.ru/db/other/sqlite/&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.samag.ru/cgi-bin/go.pl?q=articles;n=02.2004;a=04&quot;&gt;http://www.samag.ru/cgi-bin/go.pl?q=articles;n=02.2004;a=04&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Установка:&lt;/b&gt;&lt;br /&gt;
Скачиваем исходники, и далее подключаем библиотеки sqlite3 к своему проекту.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Пример номер 1&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;- Создание/открытие БД&lt;br /&gt;
- Создание таблицы&lt;br /&gt;
- Завершение работы с БД&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#include &amp;lt;iostream&amp;gt; 
#include &quot;sqlite3.h&quot; 

using namespace std; 

int main(int argc, char **argv) 
{ 
&amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; &quot;Hello world SQLite!&quot; &amp;lt;&amp;lt; endl; 
&amp;nbsp; &amp;nbsp; char *db_name=&quot;test.sl3&quot;; 
&amp;nbsp; &amp;nbsp; sqlite3 *db; 
&amp;nbsp; &amp;nbsp; char *zErrMsg = 0; 
&amp;nbsp; &amp;nbsp; int error; 

&amp;nbsp; &amp;nbsp; //Создание или открытие БД 
&amp;nbsp; &amp;nbsp; error = sqlite3_open(db_name, &amp;amp;db); 
&amp;nbsp; &amp;nbsp; if ( error ) 
&amp;nbsp; &amp;nbsp; { 
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout&amp;lt;&amp;lt;&quot;Can&#39;t open database: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl; 
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sqlite3_close(db); 
&amp;nbsp; &amp;nbsp; } 

&amp;nbsp; &amp;nbsp; //Создание таблицы 
&amp;nbsp; &amp;nbsp; error = sqlite3_exec(db, &quot;CREATE TABLE table1 (id INTEGER PRIMARY KEY,field1 TEXT,field2 TEXT);&quot;, NULL, 0, &amp;amp;zErrMsg); 
&amp;nbsp; &amp;nbsp; if ( error ) 
&amp;nbsp; &amp;nbsp; { 
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cout&amp;lt;&amp;lt;&quot;Can&#39;t create tables: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl; 
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sqlite3_close(db); 
&amp;nbsp; &amp;nbsp; } 

&amp;nbsp; &amp;nbsp; sqlite3_close(db); 

&amp;nbsp; &amp;nbsp; return 0; 
}&amp;nbsp;&lt;/pre&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;
Пример номер 2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-style: italic;&quot;&gt;&lt;br /&gt;
- Создание/открытие БД&lt;br /&gt;
- Создание таблицы&lt;br /&gt;
- Вставка данных&lt;br /&gt;
- Выборка из БД и отображение на экране результата&lt;br /&gt;
- Завершение работы с БД&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;sqlite3.h&quot;

using namespace std;

int main(int argc, char **argv)
{
    cout &amp;lt;&amp;lt; &quot;Hello world SQLite!&quot; &amp;lt;&amp;lt;endl&amp;lt;&amp;lt;endl;
    char *db_name=&quot;test.sl3&quot;;
    sqlite3 *db;
    char *zErrMsg = 0;
    int error;

    //------------------------------
    //Создание или открытие БД
    //------------------------------
    error = sqlite3_open(db_name, &amp;amp;db);
    if ( error )
    {
        cout&amp;lt;&amp;lt;&quot;Can&#39;t open database: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl;
        sqlite3_close(db);
    }

    //------------------------------
    //Создание таблицы
    //------------------------------
    //Если таблица уже создана, то эта конструкция будет выдавать ошибку!
    error = sqlite3_exec(db, &quot;CREATE TABLE table1 (id INTEGER PRIMARY KEY,field1 TEXT,field2 TEXT);&quot;, NULL, 0, &amp;amp;zErrMsg);
    if ( error )
    {
        cout&amp;lt;&amp;lt;&quot;Can&#39;t create table: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl;
        sqlite3_close(db);
    }

    //------------------------------
    //Ввод данных в таблицу
    //------------------------------
    error = sqlite3_exec(db, &quot;INSERT INTO table1(field1, field2) VALUES (&#39;Super&#39;, &#39;SQL&#39;);&quot;, NULL, 0, &amp;amp;zErrMsg);
    if ( error )
    {
        cout&amp;lt;&amp;lt;&quot;Can&#39;t insert data to table: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl;
        sqlite3_close(db);
    }

    //------------------------------
    //Выборка данных из базы
    //------------------------------
    sqlite3_stmt    *res;
    const char      *tail;

    error = sqlite3_prepare_v2(db,&quot;SELECT field1, field2,id from table1 order by id&quot;, 1000, &amp;amp;res, &amp;amp;tail);
    if ( error )
    {
        cout&amp;lt;&amp;lt;&quot;Can&#39;t select data: &quot;&amp;lt;&amp;lt;sqlite3_errmsg(db)&amp;lt;&amp;lt;endl;
        sqlite3_close(db);
    }
    //Отображаем на экране
    cout &amp;lt;&amp;lt; &quot;Display result from table1&quot; &amp;lt;&amp;lt; endl;
    int     rec_count = 0;
    while (sqlite3_step(res) == SQLITE_ROW)
    {
        cout&amp;lt;&amp;lt;&quot;Row (&quot;&amp;lt;&amp;lt;rec_count&amp;lt;&amp;lt;&quot;):&quot;&amp;lt;&amp;lt;sqlite3_column_text(res, 0)&amp;lt;&amp;lt;&quot; &quot;;
        cout&amp;lt;&amp;lt;sqlite3_column_text(res, 1)&amp;lt;&amp;lt;&quot; &quot;;
        cout&amp;lt;&amp;lt;sqlite3_column_text(res, 2)&amp;lt;&amp;lt;endl;

        rec_count++;
    }

    //------------------------------
    //Корректное завершение работы с БД
    //------------------------------
    sqlite3_close(db);
    return 0;
} &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/8820552641099033552/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/sqlite.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8820552641099033552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/8820552641099033552'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/sqlite.html' title='Использование базы данных на sqlite'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-953121294945649370</id><published>2010-10-06T12:04:00.000+04:00</published><updated>2015-08-17T20:39:48.989+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPP"/><category scheme="http://www.blogger.com/atom/ns#" term="cURL"/><title type='text'>Прием почты с помощью сURL</title><content type='html'>В последней версии сURL появилась возможность работы с почтовыми протоколами POP3 и SMTP. Вот небольшой пример, как получить почту по протоколу POP3 с яндекса.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/***************************************************
Пример показывает как получить почту по протоколу&amp;nbsp; POP3
При запуске без параметров - выводит список номеров 
сообщений в почтовом ящике.
При передачи параметра (числа) в командной строке
программа - считает конкретное сообщение, за номером 
таким-то, из почтового ящика.

Автор: PINGI-PINGI
****************************************************/
#include &amp;lt;string&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;fstream&amp;gt;
#include &quot;curl/curl.h&quot;
using namespace std;

static char errorBuffer[CURL_ERROR_SIZE];
static string buffer;
// Call Back ф-ия. вызывается каждый раз при приеме данных
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int res = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (buffer != NULL)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer-&amp;gt;append(data, size * nmemb);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res = size * nmemb;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return res;
}

int main(int argc, char **argv)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; string filename = &quot;result.txt&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; string link;
&amp;nbsp;&amp;nbsp;&amp;nbsp; string number_of_mail;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; link = &quot;pop3://YouLogin:YouPassword@pop.yandex.ru&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (argc == 2)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; number_of_mail.assign (argv[1]);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; link += &quot;/&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; link += number_of_mail;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; CURL *curl;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CURLcode result;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; curl = curl_easy_init();&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (curl)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Задем опции
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_URL, link.c_str()); 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &amp;amp;buffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //Выполняем...
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = curl_easy_perform(curl);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (result == CURLE_OK)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; std::ofstream out_file (filename.c_str());
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (out_file.is_open())
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; &quot;Write Data to &quot;&amp;lt;&amp;lt; filename &amp;lt;&amp;lt; endl;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_file &amp;lt;&amp;lt; buffer;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_file.close ();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; &quot;Error! &quot; &amp;lt;&amp;lt; errorBuffer &amp;lt;&amp;lt; endl;

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_cleanup(curl);
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;
}
&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk4_FZoEMqdQ8RYXseqmgfX4t51ID3hCbzIXXzgCK-GfuS-ULVoMy0RuzZ12GamVxA_fS5YGD3hrkho8WNC8r7cT7gw-5UhZIuNpA6MI3UMnadpvGgFSZzAFsYcIBQ1MTNDKicwjDK-e0/s1600/code_block_curl_def_add_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt; &lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/953121294945649370/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/url.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/953121294945649370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/953121294945649370'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/url.html' title='Прием почты с помощью сURL'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-7734876447424908003</id><published>2010-10-05T14:38:00.001+04:00</published><updated>2010-10-07T15:56:01.055+04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Scripts"/><title type='text'>Скрипт проверки доступности хоста методом ping в Win и Linux</title><content type='html'>Бывают задачи для которых важно определить доступность сетевого ресурса:&lt;br /&gt;
&lt;br /&gt;
Например, если удаленный компьютер доступен, то подключить его сетевой диск.&lt;br /&gt;
Или например, при сбое в сети переключится на другого интернет провайдера и т.п.&lt;br /&gt;
&lt;br /&gt;
Для решения подобных задач я использую скрипт (основанный на команде ping), который умеет проверять доступность сетевого ресурса.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Для Windows:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;@echo off

ping -n 1 www.yandex.ru &amp;gt; %TEMP%\pinglog

find &quot;Unknown host&quot; &amp;lt; %TEMP%\pinglog &amp;gt; nul
if not errorlevel 1 echo Unknown host &amp;amp;&amp;amp; goto :eof

find &quot;Reply from&quot; &amp;lt; %TEMP%\pinglog &amp;gt; nul
if not errorlevel 1 echo Ok &amp;amp;&amp;amp; goto :eof

find &quot;Request timed out&quot; &amp;lt; %TEMP%\pinglog &amp;gt; nul
if not errorlevel 1 echo Time out &amp;amp;&amp;amp; goto :eof
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Для Linux:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;#!/bin/bash

ADDRESS=&quot;www.yandex.ru&quot;

if ping -c 1 -s 1 -W 1 $ADDRESS
then
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Connection Good &quot;
else
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Connection Lost &quot;
fi
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/7734876447424908003/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ping-win-linux.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/7734876447424908003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/7734876447424908003'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ping-win-linux.html' title='Скрипт проверки доступности хоста методом ping в Win и Linux'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-2832878321161777341</id><published>2010-10-05T13:11:00.000+04:00</published><updated>2015-08-17T20:39:30.462+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPP"/><category scheme="http://www.blogger.com/atom/ns#" term="cURL"/><title type='text'>Работа с протоколами FTP, HTTP, HTTPS, SCP, TELNET, SMTP, POP3  и т.п. - с помощью библиотеки cURL</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Бывает задача, что надо скачать &quot;что-то&quot; из сети программным способом,&amp;nbsp; по протоколу FTP или HTTP, или получить почту, или сделать &quot;что-то&quot; через telnet...&lt;br /&gt;
Можно конечно попытать &quot;счастья&quot; в программировании сокетов, однако это прямой путь к изобретению велосипеда. Если же еще и делать такую программу кроссплатформенной, то времени на разработку основной задачи может и не остаться...&lt;br /&gt;
&lt;br /&gt;
Чтобы не изобретать велосипедов, можно использовать библиотеку &lt;a href=&quot;http://curl.haxx.se/&quot;&gt;cURL&lt;/a&gt; . Эта библиотека умеет работать на платформах Win и Linux. Умеет работать с протоколами: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,   LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET и   TFTP. В последней версии (7.21.1) есть возможность работы с почтовыми протоколами SMTP и POP. Кроме того, умеет работать через прокси сервер.&lt;br /&gt;
&lt;br /&gt;
Далее я расскажу как установить эту библиотеку:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;В&amp;nbsp; Linux: &lt;/b&gt;&lt;br /&gt;
Качаем с официального сайта &lt;a href=&quot;http://curl.haxx.se/&quot;&gt;http://curl.haxx.se/&lt;/a&gt; необходимый архив с исходниками.&lt;br /&gt;
Распаковываем и далее, стандартыми командами, (&lt;span class=&quot;postbody&quot;&gt;./configure make install) устанавливаем.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;На этом установка завершена.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;Для&amp;nbsp; Win:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;Все просто, скачиваем &lt;/span&gt;libcurl, распаковываем в какую-нибудь директорию.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;У меня например все сторонние библиотеки располагаются в одной директории, вот так:&lt;/i&gt;&lt;br /&gt;
C:\C++ Libs\&lt;br /&gt;
&amp;nbsp; &amp;nbsp; \curl-7.21.1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; \zlib_1_2_5&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&lt;i&gt;Что считаю удобным т.к.все собрано в одном месте да и потом прописывать пути в разных прогах проще.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
После всех манипуляций запускаем IDE, я например использую CodeBlock, поэтому далее рассказываю на основе этой IDE.&lt;br /&gt;
Создаем проект. (например - консоле апликацию)&lt;br /&gt;
Далее, подключаем библиотеку cURL к нашему проекту.&lt;br /&gt;
Идем в Menu-&amp;gt;Project-Build Options и прописываем пути к библиотекам.&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;color: red;&quot;&gt;Очень Важно!&lt;/b&gt; &lt;b&gt;Соблюдаем именно такой порядок следования: &lt;/b&gt;&lt;br /&gt;
libcurl.a&lt;br /&gt;
libwsock32.a (из пакета minGW)&lt;br /&gt;
libwldap32.a (из пакета minGW)&lt;br /&gt;
&lt;br /&gt;
libz.a - библиотеку zlib я добавляю отдельно, хотя она есть и в варианте поставки curl. Можно использовать и так, и так.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Приведенный выше список библиотек является минимальным для работы cURL. &lt;br /&gt;
&lt;br /&gt;
В свой проект я добавил дополнительные библиотеки из поставки cURL:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje0jlVqshEXJNRPsmhE0pWoY2wtYpq0TNzTWzC95necEF8r682l1mnASAbPpN1XWrAmPclprBdZRkC4bgfUV2-ED9OqMYP8etL6tEQPxge88Lx9So_MBbF06YXb2kDyBvpJzkrbR3fpF0/s1600/code_block_curl_libs_add_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje0jlVqshEXJNRPsmhE0pWoY2wtYpq0TNzTWzC95necEF8r682l1mnASAbPpN1XWrAmPclprBdZRkC4bgfUV2-ED9OqMYP8etL6tEQPxge88Lx9So_MBbF06YXb2kDyBvpJzkrbR3fpF0/s1600/code_block_curl_libs_add_.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
В разделе &lt;span class=&quot;postbody&quot;&gt;#define  нужно задать: CURL_STATICLIB &lt;br /&gt;
Например так:&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk4_FZoEMqdQ8RYXseqmgfX4t51ID3hCbzIXXzgCK-GfuS-ULVoMy0RuzZ12GamVxA_fS5YGD3hrkho8WNC8r7cT7gw-5UhZIuNpA6MI3UMnadpvGgFSZzAFsYcIBQ1MTNDKicwjDK-e0/s1600/code_block_curl_def_add_.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk4_FZoEMqdQ8RYXseqmgfX4t51ID3hCbzIXXzgCK-GfuS-ULVoMy0RuzZ12GamVxA_fS5YGD3hrkho8WNC8r7cT7gw-5UhZIuNpA6MI3UMnadpvGgFSZzAFsYcIBQ1MTNDKicwjDK-e0/s1600/code_block_curl_def_add_.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;Небольшой пример скачивания веб страницы:&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;span class=&quot;postbody&quot;&gt;#include &amp;lt;string&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;curl/curl.h&quot;
using namespace std;

//буфер, для хранения&amp;nbsp; ошибки
static char errorBuffer[CURL_ERROR_SIZE]; 
//Скаченные данные
static string buffer; 

//Эта ф-ия вызывется при получении данных
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
&amp;nbsp; int res = 0;
&amp;nbsp; if (buffer != NULL)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; buffer-&amp;gt;append(data, size * nmemb);&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; res = size * nmemb;
&amp;nbsp; }&amp;nbsp; 
&amp;nbsp; return res;
}

int main(void)
{&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; CURL *curl;
&amp;nbsp;&amp;nbsp;&amp;nbsp; CURLcode result;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; curl = curl_easy_init();&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (curl)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; //Установка опций&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; curl_easy_setopt(curl, CURLOPT_URL, &quot;www.ya.ru&quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_HEADER, 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; curl_easy_setopt(curl, CURLOPT_WRITEDATA, &amp;amp;buffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; //Запуск на выполнение
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = curl_easy_perform(curl);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (result == CURLE_OK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; buffer &amp;lt;&amp;lt; &quot;\n&quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout &amp;lt;&amp;lt; &quot;Error :&quot; &amp;lt;&amp;lt; errorBuffer &amp;lt;&amp;lt; endl;
&amp;nbsp; }&amp;nbsp; 
&amp;nbsp; curl_easy_cleanup(curl);
&amp;nbsp; return 0;
}
&lt;/span&gt;&lt;/pre&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;На этом пока все, в следующей статье напишу как работать с почтой через cURL.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;Полезные ссылки:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;a href=&quot;http://ru.wikipedia.org/wiki/CURL&quot;&gt;http://ru.wikipedia.org/wiki/CURL&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;a href=&quot;http://www.xakep.ru/magazine/xa/121/092/1.asp&quot;&gt;http://www.xakep.ru/magazine/xa/121/092/1.asp&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;a href=&quot;http://pblog.ru/?p=607#more-607&quot;&gt;http://pblog.ru/?p=607#more-607&lt;/a&gt; &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://ru.wikipedia.org/wiki/FTP&quot; title=&quot;FTP&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/2832878321161777341/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ftp-http-https-scp-telnet-smtp-pop3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2832878321161777341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/2832878321161777341'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/ftp-http-https-scp-telnet-smtp-pop3.html' title='Работа с протоколами FTP, HTTP, HTTPS, SCP, TELNET, SMTP, POP3  и т.п. - с помощью библиотеки cURL'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje0jlVqshEXJNRPsmhE0pWoY2wtYpq0TNzTWzC95necEF8r682l1mnASAbPpN1XWrAmPclprBdZRkC4bgfUV2-ED9OqMYP8etL6tEQPxge88Lx9So_MBbF06YXb2kDyBvpJzkrbR3fpF0/s72-c/code_block_curl_libs_add_.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6984463375335471525.post-9146337739164696551</id><published>2010-10-04T17:56:00.000+04:00</published><updated>2015-08-17T20:39:48.985+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CPP"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Base"/><title type='text'>Установка и работа с MySQL на С++ (MVS,MinGV,Borland)</title><content type='html'>&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;Установка MySQL&lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Качаем последнию версию MySQL Communication Server с сайта: &lt;a href=&quot;http://www.mysql.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.mysql.com/&lt;/a&gt;&amp;nbsp; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Качаем MySQL GUI Tools Downloads для работы с БД через GUI. ( &lt;i&gt;При установке MySQL выбираем расширенную установку и ставим галочки в нужном месте, для включения include и lib. &lt;/i&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Ставим GUI Tools &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Проверяем что база работает, запустив GUI и сделав коннект к базе.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt;Проверяем что созданы директории include и lib в папке куда установлен MySQL &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Настройка Microsoft Visual Studio&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Необходимо прописать пути к директориям include и lib (Tools-&amp;gt;Options-&amp;gt;Projects and Solution-&amp;gt;VC++ Directories)&amp;nbsp; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; В опциях самого проекта-программы (Project-&amp;gt;$Name Property-&amp;gt;Configuration Properties-&amp;gt;Linker-&amp;gt;General) в поле Additional Library Directories прописываем путь к директории lib. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Почти там же (Project-&amp;gt;$Name Property-&amp;gt;Configuration Properties-&amp;gt;Linker-&amp;gt;Input) в поле Additional Dependencies пишем libmysql.lib&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class=&quot;postbody&quot;&gt; Все можно запускать пример.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Настройка minGW&amp;nbsp; Dev++&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Вообщем почти также прописываем пути к include и lib в оболочке Dev++ (Параметры компилятора-&amp;gt;Директории) &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; Прописывем библиотеку libmysql.lib в параметрах проекта в разделе параметры-&amp;gt;компоновщик. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt; И если происходит ошибка: &quot;SOCKET чего там не определен&quot;, то: Открываем mysql.h и ищем там строку #define my_socket SOCKET и правим так:&amp;nbsp; &lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;pre class=&quot;prettyprint&quot;&gt;#ifdef __WIN__&amp;nbsp;  
#include &amp;lt;windows.h&amp;gt;
#define my_socket UINT_PTR
//#define my_socket SOCKET 
#else&amp;nbsp;&lt;/pre&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;windows.h здесь добавился чтобы определился  UINT_PTR&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Для Borland (сам не устанавливал, однако, пришлось вникать теоретически)&lt;/span&gt; &lt;br /&gt;
Вообщем аналогичные действия, однако, добавлется еще один момент. &lt;br /&gt;
&lt;br /&gt;
Т.к. формат lib-ов в borland используется другой (а libmysql.lib сделан изначально под VC) &lt;br /&gt;
необходимо сделать libmysql.lib самомтоятельно, имея libmysql.dll и две утилиты из поставки борланда impdef.exe, implib.exe. &lt;br /&gt;
Технология должна быть примерно такой: &lt;/span&gt;&lt;span class=&quot;postbody&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt;С помощью impdef.exe вытаскиваем из dll - файл с описанием всех ф-ий, например &lt;b&gt;что-то.def.&lt;/b&gt; &lt;/span&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt;Возможно придется поэкперементировать с редактированием файла: &lt;b&gt;что-то.def&lt;/b&gt;&amp;nbsp; (&lt;/span&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;i&gt;например с добавлением к именам ф-ий &#39;_&#39; или написания строк типа _функция@4=функция, другие варианты написания этого файла есть в инэнте.&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;/span&gt;&lt;span class=&quot;postbody&quot;&gt;С помошью implib.exe и на основе &lt;b&gt;что-то.def&lt;/b&gt; генерируем libmysql.lib&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span class=&quot;postbody&quot;&gt;Вроде всё. Вероятно будет работать.   &lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-weight: bold;&quot;&gt;Теперь напишем пример на С++:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/* 
&amp;nbsp; Name:  
&amp;nbsp; Copyright:  
&amp;nbsp; Author:Pingi-Pingi  
&amp;nbsp; Date: 
&amp;nbsp; Description:  
&amp;nbsp; This Exemple show: connect, select data, and close&amp;nbsp; MySQL DataBase. 
&amp;nbsp; File mysql.h has been changed for normal compilation (Please see comments in  
&amp;nbsp; mySQL.h from Pingi-Pingi) 
*/ 


#include &amp;lt;cstdlib&amp;gt; 
#include &amp;lt;iostream&amp;gt; 

#include &quot;mysql.h&quot; 

//using namespace std; 
MYSQL mysql; 
MYSQL_ROW row; 
MYSQL_RES *res; 

int main(int argc, char *argv[]) 
{ 
&amp;nbsp; &amp;nbsp;  
&amp;nbsp; &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Start&quot;&amp;lt;&amp;lt;std::endl; 

&amp;nbsp; &amp;nbsp;MYSQL* mysql = mysql_init((MYSQL*) 0);  
&amp;nbsp; &amp;nbsp;mysql-&amp;gt;free_me = 1;  
&amp;nbsp; &amp;nbsp;mysql-&amp;gt;reconnect = 1;  
&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Connect...&quot;&amp;lt;&amp;lt;std::endl; 
&amp;nbsp; &amp;nbsp;if (!mysql_real_connect( mysql, &quot;localhost&quot;,&quot;login&quot;,&quot;password&quot;,NULL, 3306, NULL, 0 )) 
&amp;nbsp; &amp;nbsp;{ 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot; Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql); 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0; 
&amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Connected to Data Base!&quot;&amp;lt;&amp;lt;std::endl;  
&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;//Execute Query 
&amp;nbsp; &amp;nbsp;char *myqery=&quot;SELECT * FROM test.table&quot;; 
&amp;nbsp; &amp;nbsp;if (mysql_query(mysql, myqery))  
&amp;nbsp; &amp;nbsp;{ 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;myqery&amp;lt;&amp;lt;std::endl; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot; Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql) ; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0; 
&amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 


&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;MYSQL_RES* presults = mysql_store_result(mysql);&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if (presults) //???? ???? ?????? ? ??????? 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;{&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;MYSQL_ROW row; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while ((row=mysql_fetch_row(presults))) 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;{&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;row[0]&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;row[1]&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;row[2]&amp;lt;&amp;lt;std::endl;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;}  
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;} 

&amp;nbsp; &amp;nbsp; 
&amp;nbsp; &amp;nbsp;mysql_close(mysql) ; 
&amp;nbsp; &amp;nbsp;  
&amp;nbsp; &amp;nbsp; system(&quot;PAUSE&quot;); 
&amp;nbsp; &amp;nbsp; return EXIT_SUCCESS; 
}&amp;nbsp;&lt;/pre&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;postbody&quot;&gt;Этот код реализует простые операции с БД, такие как:&lt;/span&gt;&lt;br /&gt;
connect, select data, and close.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Ниже, несколько расширенный пример, который умеет:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class=&quot;postbody&quot;&gt;Открыть, Считать данные, Записать, Обновить, Закрыть&lt;/span&gt; БД&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;/*
&amp;nbsp; Name: 
&amp;nbsp; Copyright: 
&amp;nbsp; Author:Pingi-Pingi
&amp;nbsp; Date: 
&amp;nbsp; Description: 
&amp;nbsp; This Exemple show: connect, select data, and close&amp;nbsp; MySQL DataBase.
&amp;nbsp; File mysql.h has been changed for normal compilation (Please see&amp;nbsp; &amp;nbsp; &amp;nbsp; comments in&amp;nbsp; &amp;nbsp;mySQL.h)
*/

#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &quot;mysql.h&quot;
//using namespace std;

MYSQL mysql;
MYSQL_ROW row;
MYSQL_RES *res;

int main(int argc, char *argv[])
{
&amp;nbsp; &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Start&quot;&amp;lt;&amp;lt;std::endl;

&amp;nbsp; //Коннектимся к БД

&amp;nbsp; &amp;nbsp;MYSQL* mysql = mysql_init((MYSQL*) 0); 
&amp;nbsp; &amp;nbsp;mysql-&amp;gt;free_me = 1; 
&amp;nbsp; &amp;nbsp;mysql-&amp;gt;reconnect = 1; 
&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Connect...&quot;&amp;lt;&amp;lt;std::endl;

&amp;nbsp; &amp;nbsp;if (!mysql_real_connect( mysql, &quot;localhost&quot;,&quot;myName&quot;,&quot;myPass&quot;,NULL, 3306, NULL, 0 ))
&amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot; Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql);
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;
  &amp;nbsp;}&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Connected to Data Base!&quot;&amp;lt;&amp;lt;std::endl;&amp;nbsp;
&amp;nbsp; &amp;nbsp;//Чтение из БД

&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Read From DB...&quot;&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;//Read From BD

&amp;nbsp; &amp;nbsp;char *myqery=&quot;SELECT * FROM test.table&quot;;
&amp;nbsp; &amp;nbsp;if (mysql_query(mysql, myqery)) 
&amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;myqery&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot;Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql);
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;
&amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;

&amp;nbsp;  //Выдаем все что получили на экран
&amp;nbsp;&amp;nbsp; MYSQL_RES* presults = mysql_store_result(mysql);&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp; if (presults)&amp;nbsp;
&amp;nbsp;&amp;nbsp; {&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;MYSQL_ROW row;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while ((row=mysql_fetch_row(presults)))
 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
 &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;row[0]&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;row[1]&amp;lt;&amp;lt;&quot;,&quot;&amp;lt;&amp;lt;row[2]&amp;lt;&amp;lt;std::endl;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} 
&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
 &amp;nbsp; mysql_free_result(presults); /* освободили */&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Read From DB...Done&quot;&amp;lt;&amp;lt;std::endl;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Вставка в таблицу строки
 &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Insert to DB...&quot;&amp;lt;&amp;lt;std::endl;

&amp;nbsp; &amp;nbsp;char *myqery_insert=&quot;INSERT INTO test.table(code,description) VALUES (&#39;122345&#39;,&#39;This Description&#39;)&quot;;
&amp;nbsp; &amp;nbsp;if (mysql_query(mysql, myqery_insert)) 
&amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;myqery&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot;Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql);
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;
&amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;
 &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Insert to DB...Done&quot;&amp;lt;&amp;lt;std::endl;&amp;nbsp;&amp;nbsp; //Обновление полей
 &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Update DB...&quot;&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp;
&amp;nbsp; &amp;nbsp;char *myqery_update=&quot;UPDATE test.table SET code=&#39;5555&#39;, description=&#39;This Update Description&#39; where id=&#39;3&#39;&quot;;
&amp;nbsp; &amp;nbsp;if (mysql_query(mysql, myqery_update)) 
&amp;nbsp; &amp;nbsp;{
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;myqery&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;std::cout&amp;lt;&amp;lt;&quot;Error code:&quot;&amp;lt;&amp;lt;mysql_errno(mysql)&amp;lt;&amp;lt;&quot;Error:&quot;&amp;lt;&amp;lt;mysql_error(mysql)&amp;lt;&amp;lt;std::endl;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;mysql_close(mysql);
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;
&amp;nbsp; &amp;nbsp;}&amp;nbsp; &amp;nbsp;
 &amp;nbsp; std::cout&amp;lt;&amp;lt;&quot;Update DB...Done&quot;&amp;lt;&amp;lt;std::endl;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;

&amp;nbsp; &amp;nbsp;mysql_close(mysql);
 &amp;nbsp; system(&quot;PAUSE&quot;);
 &amp;nbsp; return EXIT_SUCCESS;
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://pingi-pingi.blogspot.com/feeds/9146337739164696551/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/mysql-mvsmingvborland.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/9146337739164696551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6984463375335471525/posts/default/9146337739164696551'/><link rel='alternate' type='text/html' href='http://pingi-pingi.blogspot.com/2010/10/mysql-mvsmingvborland.html' title='Установка и работа с MySQL на С++ (MVS,MinGV,Borland)'/><author><name>Pingi-Pingi</name><uri>http://www.blogger.com/profile/01664192633686529512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>