<?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-7575977724059961153</id><updated>2026-10-29T19:41:07.548+05:00</updated><category term="django"/><category term="python"/><category term="ubuntu"/><category term="adsense"/><category term="google"/><category term="linux"/><category term="sympy"/><category term="платежная система"/><category term="eclipse"/><category term="matrix"/><category term="матрица"/><category term="excel"/><category term="jquery"/><category term="nginx"/><category term="ssh"/><category term="tinymce"/><category term="yandex"/><category term="filebrowser"/><category term="graph"/><category term="math"/><category term="model"/><category term="numpy"/><category term="php"/><category term="rapida"/><category term="ssl"/><category term="svn"/><category term="tornado"/><category term="webex"/><category term="таблица"/><category term="1025"/><category term="admin"/><category term="adwords"/><category term="analytics"/><category term="apache"/><category term="blog"/><category term="color picker"/><category term="complex"/><category term="cpulimit"/><category term="css"/><category term="db"/><category term="debian"/><category term="domen"/><category term="dump"/><category term="encode"/><category term="entries"/><category term="fastcgi"/><category term="filezilla"/><category term="ftp"/><category term="genum"/><category term="git"/><category term="https"/><category term="i18n"/><category term="icq"/><category term="import"/><category term="info-torg.ru"/><category term="integral"/><category term="javascript"/><category term="js"/><category term="json"/><category term="limit"/><category term="list"/><category term="log"/><category term="login"/><category term="mail"/><category term="matplotlib"/><category term="mechanize"/><category term="menu"/><category term="movie"/><category term="music"/><category term="mysql"/><category term="name"/><category term="parse"/><category term="pep8"/><category term="photo"/><category term="pidgin"/><category term="pil"/><category term="postgres"/><category term="prefork"/><category term="pydev"/><category term="pytils"/><category term="qiwi"/><category term="rank"/><category term="rapid"/><category term="rapidaonline"/><category term="replace"/><category term="rss"/><category term="scrapy"/><category term="script"/><category term="series"/><category term="server"/><category term="sitemap"/><category term="slug"/><category term="smtp"/><category term="sudo"/><category term="table"/><category term="taylor"/><category term="tempaltetags"/><category term="threaded"/><category term="transposition"/><category term="tree"/><category term="ugetext"/><category term="url"/><category term="video"/><category term="vnc"/><category term="webmoney"/><category term="widget"/><category term="zpayment"/><category term="zsh"/><category term="Рапида"/><category term="база"/><category term="бесплатно"/><category term="вакансии"/><category term="графы"/><category term="группа"/><category term="домен"/><category term="имя"/><category term="калькулятор"/><category term="книги"/><category term="коллективные покупки"/><category term="локализация"/><category term="навигация"/><category term="очистка"/><category term="перемножение"/><category term="перец"/><category term="пользователь"/><category term="работа"/><category term="рабство"/><category term="ранг"/><category term="реклама"/><category term="решение контрольных работ"/><category term="решение уравнений"/><category term="ролики"/><category term="сайт"/><category term="скачать"/><category term="список"/><category term="транспонированная"/><category term="упячка"/><category term="хостинг"/><category term="чувак"/><title type='text'>Опыт работы с Python</title><subtitle type='html'>О python и django на ubuntu.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://satels.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>130</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-1007085625460692673</id><published>2018-08-30T16:55:00.002+05:00</published><updated>2018-08-30T16:55:28.238+05:00</updated><title type='text'>bash retry cmd func</title><content type='html'>&lt;b&gt;retry.sh:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;&lt;br /&gt;function retry()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local n=0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local try=$1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local cmd=&quot;${@: 2}&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; local exit_code=0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [[ $# -le 1 ]] &amp;amp;&amp;amp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Usage $0 &lt;retry_number&gt; &lt;command&gt;&lt;/command&gt;&quot;; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; until [[ $n -ge $try ]]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $cmd &amp;amp;&amp;amp; exit_code=$? &amp;amp;&amp;amp; break || {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;Command Fail..&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((n++))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo &quot;retry $n ::&quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sleep 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; done&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $exit_code&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;retry $*&lt;/retry_number&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;nbsp;Usage:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;./scripts/retry.sh 2 pytest&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/1007085625460692673/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2018/08/bash-retry-cmd-func.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1007085625460692673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1007085625460692673'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2018/08/bash-retry-cmd-func.html' title='bash retry cmd func'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-4953465504735576218</id><published>2017-07-09T01:08:00.001+05:00</published><updated>2017-07-09T01:08:21.955+05:00</updated><title type='text'>Linode change Outgoing and Incoming traffic to Priv Out and Priv In traffic</title><content type='html'>&lt;img alt=&quot;&quot; src=&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0UAAAGGCAIAAAA7Br3RAAAAAXNSR0IArs4c6QAAAdVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj4xPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjl0tmoAAEAASURBVHgB7H0JmBXF1fbcubOzDsMusoooO6K4JMqiMUZQY9ziZ1wTozGYSNTEGOMejYlG45ZoxCVGkz+oX0TxcwfRCKggqwjCsAzMwuz73P1/e2qm6NtVXbfuzGHoudZ9eC7Vp069fert03dOn1raF4vF0szHMGAYMAwYBgwDhgHDgGGg2zKQ3m0tN4YbBgwDhgHDgGHAMGAYMAxYDJh4zviBYcAwYBgwDBgGDAOGge7NgInnuvf1M9YbBgwDhgHDgGHAMGAYyHBQsHbtWofEHBoGDAOGAcOAYcAwYBgwDHiNgZqamlmzZjGrTH7Oa1fH2GMYMAwYBgwDhgHDgGEgAQMI5nbs2MGVnPk5VnHYYYdxDVMwDBgGDAOGAcOAYcAwYBjwFAOLFi2y22Pyc3Y2TNkwYBgwDBgGDAOGAcNA92PAxHPd75oZiw0DhgHDgGHAMGAYMAzYGTDxnJ0NUzYMGAYMA4YBw4BhwDDQ/RiQz5/rfv0wFhsGDAOGAcOAYcAwYBhILQbefPNNR4dOO+00h4QdmvyclJaDL+zV/pGagkqpvMNCcsAOW6LZsGsMPnBncUN2kzNa1LWa1HVM7f777z/33HN5W1jCPlxiL6DKftj5Mjlg503qMAJofOCBBzrcvCsbvvvuu6NHjxbJd5OLml1p7YE4V4d75LhfkrWtw+dN9kT6+t3Ib/U71S00Eb3hM3v2bFiLgsJmE88pyDmYVfWtHzcLUOlWZeSEDHiN54NlT1NT06OPPnrvvfdyblvd09UJD5ad3DwvF0DjI488Akq9bCSz7e6773766afFq+kmFzW938cDYaF4vxyIs3QxZjfy2y5mpgtO19zcvGHDBr/fjw1KMjJch1VNPNcF18KcwjBwYBk40E/zr7766tFHHz127NgD241OoC9duvT8888fNmzYoEGDYOrvf/97FjCBGcfn0EMPZefBvk1XXXXVuHHj+vXrd8wxx7z++uuQV1RU/OxnPzviiCP69++Pb5QhgXzFihVXXHHFyJEjgQ9lju8md8MBFGiEhYsXL2ZmHIhvdJkEdsuWLSeccIII5SYXNbuXhIo38X5x889uxE8X+G03YqMrTcUv1ccff9yzZ89p06Z99tlnI0aMcDu7iefcmDFyw4BhoI2B//u//zv77LO9TMfvfve7M888E9HVnj17Xnnlld27d1922WUwmOUR+fcpp5xy8803Q15YWPjtb3/78MMPx9yUkpKSZ5555u9//zvkl19+eVZWFsYTi4uL8Y0yJJDfdttt0MevKvBffvnlffv2XXrppQq5Gw6a4AMyQSkre/m7oaEBDIgWuslFza+nRLxf3Pyze/HTXfy2e7Ga0Nqqqqrjjz+ePWTiF0zxXG3iuYRkekuBJxscZkGOh0LE7wMGDDjppJPWr1/PFJCl+PnPf45JMPhcd911fJSnpaXlhhtugBApB4z+cLRIJPLHP/5x4sSJSHUge9HY2Mir3Ar484b3jQwZMmTChAnPP/+8+rywE38IkSO555578OuAsyxcuNANWUf+xRdfnHzyydu2bePKOMWf//znI488EqkUe9f+/e9/T506FXmXuXPn4u8904cyRhJBAqi48cYbA4EAl6MKHw6bsABl/fMCDTEEzjtq1Kjrr78el4PjS+WttkjsYXK0dSjgUMozv+4472OPPQY1fl5FYc2aNfhBUSjw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&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/4953465504735576218/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2017/07/linode-change-outgoing-and-incoming.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/4953465504735576218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/4953465504735576218'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2017/07/linode-change-outgoing-and-incoming.html' title='Linode change Outgoing and Incoming traffic to Priv Out and Priv In traffic'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-6186232648090854479</id><published>2017-01-19T20:12:00.000+05:00</published><updated>2017-03-25T19:45:03.705+05:00</updated><title type='text'>payments.google.com/merchant and paid date</title><content type='html'>In merchant system </content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/6186232648090854479/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2017/01/paymentsgooglecommerchant-and-paid-date.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6186232648090854479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6186232648090854479'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2017/01/paymentsgooglecommerchant-and-paid-date.html' title='payments.google.com/merchant and paid date'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7675454719756109373</id><published>2016-12-06T18:27:00.002+05:00</published><updated>2016-12-06T18:28:05.731+05:00</updated><title type='text'>Распознавание кириллической яндекс капчи с вероятностью &gt; 60%</title><content type='html'></content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7675454719756109373/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2016/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7675454719756109373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7675454719756109373'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2016/12/blog-post.html' title='Распознавание кириллической яндекс капчи с вероятностью &gt; 60%'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-5878890787372117629</id><published>2016-11-21T22:16:00.002+05:00</published><updated>2016-11-21T22:16:20.834+05:00</updated><title type='text'>latex math to png</title><content type='html'>&lt;pre&gt;
import getopt
import os
import subprocess
import sys
import tempfile


def __build_preamble():
    preamble = &#39;\documentclass[a4paper, 12pt]{article}\n&#39;
    preamble += \
&quot;&quot;&quot;
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\\vskip 0.5 cm
\pagestyle{empty}
&quot;&quot;&quot;
    preamble += &quot;\\begin{document}\n&quot;
    return preamble

def math2png(eqs, outdir, prefix = &#39;&#39;, size = 1):
    # Set the working directory
    workdir = tempfile.gettempdir()
    # Get a temporary file
    fd, texfile = tempfile.mkstemp(&#39;.tex&#39;, &#39;eq&#39;, workdir, True)
    # Create the TeX document
    with os.fdopen(fd, &#39;w+&#39;) as f:
        f.write(__build_preamble())
        for eq in eqs:
            f.write(&quot;$%s$\n&quot; % eq.strip())
        f.write(&#39;\end{document}&#39;)

    f.close()

    # Generate the DVI file
    latexcmd = &#39;latex -halt-on-error -output-directory %s %s&#39; % (workdir, texfile)
    _run(latexcmd.split())
    # Convert the DVI file to PNG&#39;s
    dvifile = texfile.replace(&#39;.tex&#39;, &#39;.dvi&#39;)
    outprefix = os.path.join(outdir, prefix)
    dvicmd = &quot;dvipng -T tight -x %i -z 9 -bg Transparent &quot;\
            &quot;-o %s%%d.png %s&quot; % (size * 1000, outprefix, dvifile)
    _run(dvicmd.split())

def _run(cmd):
    env = os.environ.copy()
    env.update(dict(
        LANG=&#39;ru_RU.UTF-8&#39;,
        LC_CTYPE=&#39;ru_RU.UTF-8&#39;,
        HOME=&#39;/root&#39;,
    ))
    subprocess.Popen(
        cmd,
        env=env,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
    ).communicate()

&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/5878890787372117629/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2016/11/latex-math-to-png.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5878890787372117629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5878890787372117629'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2016/11/latex-math-to-png.html' title='latex math to png'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-1632250947545087958</id><published>2016-11-21T22:07:00.003+05:00</published><updated>2016-11-21T22:07:49.695+05:00</updated><title type='text'>hideme proxy python</title><content type='html'>&lt;pre&gt;
#encoding:utf-8
import httplib
import mechanize
import random
import time
import urllib
import urllib2


def initial_hideme():
    url = &#39;http://hideme.ru/login&#39;
    params = urllib.urlencode({&#39;c&#39;: &#39;193477955&#39;})
    urllib.urlopen(url, params)

class IpProxyDNotExist(Exception):

    pass


def get_good_proxy():

    goods = []

    test_url = &#39;http://example.com&#39;
    count = 4

    def check(ip):
        br = mechanize.Browser()
        br.set_proxies({&#39;http&#39;: ip})
        br.set_handle_robots(False)
        try:
            br.open(test_url, timeout=2)
        except (urllib2.URLError, httplib.BadStatusLine):
            pass
        else:
            goods.append(ip)

    proxy_list = get_proxy_list()
    random.shuffle(proxy_list)
    proxy_list = proxy_list[:count]
    for num, ip in enumerate(proxy_list):
        if goods:
            continue
        check(ip)

    try:
        ret = goods[0]
    except IndexError:
        raise IpProxyDNotExist

    return ret


def get_proxy_list():
    response = urllib2.urlopen(&#39;http://hideme.ru/api/proxylist.php?anon=4&amp;out=plain&#39;)
    response_text = response.read().strip()
    ret = response_text.split()
    return ret

&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/1632250947545087958/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2016/11/hideme-proxy-python.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1632250947545087958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1632250947545087958'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2016/11/hideme-proxy-python.html' title='hideme proxy python'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-8229475223071544621</id><published>2016-11-21T19:36:00.001+05:00</published><updated>2016-11-21T19:36:28.808+05:00</updated><title type='text'>Код сайта kontrolnaya-rabota.ru</title><content type='html'>


equations/detailed.py:

&lt;pre&gt;
# -*- coding:  utf-8 -*-
from hideme_proxy import get_good_proxy
from mechanize._response import response_seek_wrapper
from wolfram.utils import get_appid, get_user_agent
import mechanize
import time
import urllib
import random
import re
import xml.etree.ElementTree as ET


def get_inequal_detailed(list_data):
    expressions = []
    for data in list_data:
        solve1 = data[&#39;solve1&#39;]
        solve2 = data[&#39;solve2&#39;]
        oper = data[&#39;oper&#39;]
        expression = &#39;%s%s%s&#39; % (solve1, oper, solve2)
        expressions.append(expression)
    text = &#39; and &#39;.join(expressions)
    expression_quote = urllib.quote(text)
    appid = get_appid()
    url_pattern = &#39;http://api.wolframalpha.com/v2/query?input=Solve+{0}&amp;appid={1}&amp;format=plaintext&#39;
    url = url_pattern.format(expression_quote, appid)
    br = mechanize.Browser()
    br.set_handle_robots(False)
    br.set_handle_equiv(False)
    ip = get_good_proxy()
    br.set_proxies({&#39;http&#39;: ip})
    ua = get_user_agent()
    br.addheaders = [(&#39;User-agent&#39;, ua)]
    br.open(url)
    response = br.response()
    response_text = response.read()
    root = ET.fromstring(response_text)
    if root.get(&#39;success&#39;) == &#39;true&#39;:
        elems = root.findall(&quot;./pod[@id=&#39;Result&#39;]/subpod/plaintext&quot;)
        ret = [el.text for el in elems]
        return ret
    raise NotImplementedError(response_text)


def get_equal_detailed(data):
    solve1 = data[&#39;solve1&#39;]
    solve2 = data[&#39;solve2&#39;]
    expression = &#39;%s=%s&#39; % (solve1, solve2)
    expression_quote = urllib.quote(expression)
    appid = get_appid()
    url_pattern = &#39;http://api.wolframalpha.com/v2/query?input=Solve+{0}&amp;appid={1}&amp;format=plaintext&amp;podstate=Result__Step-by-step+solution&#39;
    url = url_pattern.format(expression_quote, appid)
    ip = get_good_proxy()
    br = mechanize.Browser()
    br.set_proxies({&#39;http&#39;: ip})
    ua = get_user_agent()
    br.addheaders = [(&#39;User-agent&#39;, ua)]
    br.set_handle_robots(False)
    br.set_handle_equiv(False)
    br.open(url)
    response = br.response()
    response_text = response.read()
    root = ET.fromstring(response_text)
    if root.get(&#39;success&#39;) == &#39;true&#39;:
        text = root.find(&quot;./pod//subpod[@title=&#39;Possible intermediate steps&#39;]/plaintext&quot;).text
        return text
    raise NotImplementedError(response_text)


def test_appid(appid):
    url = &#39;http://api.wolframalpha.com/v2/query?input=Solve+x^2-1&amp;appid={0}&amp;format=plaintext&amp;podstate=Result__Step-by-step+solution&#39;.format(appid)
    ip = get_good_proxy()
    br = mechanize.Browser()
    br.set_proxies({&#39;http&#39;: ip})
    ua = get_user_agent()
    br.addheaders = [(&#39;User-agent&#39;, ua)]
    br.set_handle_robots(False)
    br.set_handle_equiv(False)
    br.open(url)
    response = br.response()
    response_text = response.read()
    root = ET.fromstring(response_text)
    if root.get(&#39;success&#39;) == &#39;true&#39;:
        return &#39;OK&#39;
    return response_text
&lt;/pre&gt;

buy/views.py:
&lt;pre&gt;
# encoding:utf-8
from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
from django.shortcuts import redirect, render
from django.utils.translation import ugettext as _
from django.views.decorators.cache import cache_page
from latexmath2png import math2png
from s.buy.forms import FreeForm, FreeFormWithoutCaptha
from s.equal_one.detailed import get_equal_detailed
from settings import at_project_root
from wolfram.base import get_solution_class
import datetime
import hashlib
import re
import time


def free_old(request):
    return redirect(&#39;/s/&#39;, permanent=True)


def free(request):
    form = FreeForm(request.POST or None)
    redirect_to = None
    if form.is_valid():
        cleaned_data = form.cleaned_data
        key = generate_key()
        base_url = reverse(&#39;buy-complete&#39;, kwargs={&#39;key&#39;: key})
        query_string = form.get_request_string(cleaned_data)
        redirect_to = &#39;%s?%s&#39; % (base_url, query_string)
    context = {&#39;free_form&#39;: form, &#39;redirect_to&#39;: redirect_to}
    template_name = &#39;s/buy/free.html&#39;
    return render(request, template_name, context)


@cache_page(60 * 60)
def buy_complete(request, key):

    user_agent = request.META.get(&#39;HTTP_USER_AGENT&#39;)

    if &#39;Mediapartners-Google&#39; in user_agent or \
        &#39;YandexDirect&#39; in user_agent:
        return free(request)

    if key != generate_key():
        return redirect(&#39;/s/&#39;)
    form = FreeFormWithoutCaptha(request.GET or None)
    if not form.is_valid():
        return redirect(reverse(&#39;s-main&#39;))
    module = form.cleaned_data[&#39;module&#39;]
    data = form.cleaned_data[&#39;data&#39;]
    if module in [&#39;diff&#39;, &#39;limit&#39;]:
        SolutionClass = get_solution_class(module)
        text = SolutionClass(data, with_proxy=False).get_text()
    elif module in (&#39;indefinite&#39;, &#39;definite&#39;):
        SolutionClass = get_solution_class(&#39;indefinite&#39;)
        text = SolutionClass(data).get_text()
    elif module == &#39;equal&#39;:
        text = get_equal_detailed(data)
    for trans in BLOCK_I18N:
        text = text.replace(trans, _(trans))
    text = text.replace(&#39;\\n&#39;, &#39;\n&#39;)
    text = text.replace(&#39;\\/&#39;, &#39;/&#39;)
    if &#39;wolfram&#39; in text.lower():
        raise ValidationError(u&#39;wolfram text on solution&#39;)
    tex_body = text_to_tex(text)
    prefix = hashlib.md5(tex_body.encode(&#39;utf-8&#39;)).hexdigest()
    try:
        math2png(
            [tex_body.encode(&#39;utf-8&#39;)],
            &#39;media/buy&#39;,
            prefix=prefix,
        )
    except:
        with_simple_text = True
    else:
        with_simple_text = False

    time.sleep(3)
    template_name = &#39;s/buy/complete.html&#39;
    context = {
        &#39;tex_body&#39;: tex_body,
        &#39;prefix&#39;: prefix,
        &#39;with_simple_text&#39;: with_simple_text,
        &#39;text&#39;: text,
    }
    return render(request, template_name, context)


def i18n_blocks():
    fn = at_project_root(&#39;kr/wolfram.trans&#39;)
    ret = open(fn).read().strip().decode(&#39;utf-8&#39;).split(&#39;\n&#39;)
    ret = sorted(ret, key=lambda s: len(s), reverse=True)
    return ret

BLOCK_I18N = i18n_blocks()


def generate_key():
    today_text = datetime.date.today().strftime(&#39;%F&#39;)
    open_key = &#39;%s-%s&#39; % (settings.SECRET_KEY, today_text)
    key = hashlib.md5(open_key).hexdigest()
    return key


def text_to_tex(text):
    fp = &#39;(?:cos|sin|tan|atan|csc|cot|sec|log|ln|sqrt|sinh|cosh|arccos|arcsin|arccosh|arcsinh|arctg|arcctg|atan)&#39;

    ac = &#39;[_a-zA-Z@^\d.]&#39;

    ac_p = &#39;[_a-zA-Z@^{}\d.]&#39;

    text = text.replace(&#39;d/dx&#39;, &#39;@@@&#39;)
    text = text.replace(&#39;tan^(-1)&#39;, &#39;arctg&#39;)
    text = text.replace(&#39;cos^(-1)&#39;, &#39;arccos&#39;)
    text = text.replace(&#39;sin^(-1)&#39;, &#39;arcsin&#39;)
    text = text.replace(&#39;cot^(-1)&#39;, &#39;arcctg&#39;)
    text = re.sub(r&#39;\b(sec)\b&#39;, &#39;1/sin&#39;, text)
    text = re.sub(r&#39;d(sec)\b&#39;, &#39;d 1/sin&#39;, text)
    text = re.sub(r&#39;\b(csc)\b&#39;, &#39;1/cos&#39;, text)
    text = re.sub(r&#39;d(csc)\b&#39;, &#39;d 1/cos&#39;, text)
    text = re.sub(r&#39;\b(log)\b&#39;, &#39;ln&#39;, text)
    text = re.sub(r&#39;d(log)\b&#39;, &#39;d log&#39;, text)
    text = re.sub(r&#39;\b(cot)\b&#39;, &#39;ctg&#39;, text)
    text = re.sub(r&#39;d(cot)\b&#39;, &#39;d ctg&#39;, text)
    text = re.sub(r&#39;\b(tan)\b&#39;, &#39;tg&#39;, text)
    text = re.sub(r&#39;d(tan)\b&#39;, &#39;d tg&#39;, text)

    text = re.sub(r&#39;lim_\(([^\)]+)\)&#39;, r&#39;lim_{\1}&#39;, text)

    text = re.sub(r&#39;(%(fp)s)\^%(b)s\(&#39; % {
        &#39;fp&#39;: fp, &#39;b&#39;: get_bucket_pattern_by_level(4)[2:-2]
    }, r&#39;\1^{\2}(&#39;, text)

    A = []
    j = 0
    for i in range(5):
        list_expr = set(re.findall(r&#39;(%(fp)s*\([^\(\)]+\))&#39; % {&#39;fp&#39;: fp}, text))
        list_expr = sorted(list_expr, key=lambda expr: len(expr))
        list_expr.reverse()
        for bracket in list_expr:
            text = text.replace(bracket, &#39;__III%s__&#39; % j)
            A.append(bracket)
            j += 1

    for j, bucket in enumerate(A):
        in_bucket = bucket
        if bucket.startswith(&#39;(&#39;):
            in_bucket = in_bucket[1:-1]
        in_bucket = re.sub(r&#39;(%(fp)s*%(ac_p)s+)/(%(fp)s*%(ac_p)s+)&#39; % {
            &#39;fp&#39;: fp, &#39;ac_p&#39;: ac_p
        }, r&#39;\\frac{\1}{\2}&#39;, in_bucket)

        in_bucket = re.sub(r&#39;(%(ac)s+)\^(%(ac)s+)&#39; % {
            &#39;ac&#39;: ac
        }, r&#39;\1^{\2}&#39;, in_bucket)
        if bucket.startswith(&#39;(&#39;):
            A[j] = &#39;(%s)&#39; % in_bucket
        else:
            A[j] = in_bucket

    text = re.sub(r&#39;(%(fp)s*%(ac_p)s+)/(%(fp)s*%(ac_p)s+)&#39; % {
        &#39;fp&#39;: fp, &#39;ac_p&#39;: ac_p
    }, r&#39;\\frac{\1}{\2}&#39;, text)
    text = re.sub(r&#39;(%(ac)s+)\^(%(ac)s+)&#39; % {&#39;ac&#39;: ac}, r&#39;\1^{\2}&#39;, text)

    for i in range(5):
        for j, backet in enumerate(A):
            text = text.replace(&#39;__III%s__&#39; % j, backet)

    text = text.replace(&#39;= | &#39;, &#39;\\\\\\\\ = &#39;).replace(&#39; | &#39;, &#39;\\\\\\\\&#39;).replace(&#39; &#39;, &#39;\;&#39;).replace(&#39;\n&#39;, &#39;\\\\\\\\&#39;)
    text = text.replace(&quot;\\&#39;&quot;, &quot;&#39;&quot;)

    text = re.sub(r&#39;{\(([^{}]+)\)}&#39;, r&#39;{\1}&#39;, text)

    text = text.replace(&#39;@@@&#39;, &#39;\\frac{d}{dx}&#39;)
    text = text.replace(&#39;integral&#39;, &#39;\\int&#39;)
    text = text.replace(&#39;&amp;middot;&#39;, u&#39;*&#39;)
    text = text.replace(&#39;&gt;infinity&#39;, u&#39;&gt;oo&#39;)
    text = text.replace(&#39;&gt;-infinity&#39;, u&#39;&gt;-oo&#39;)
    return text


def get_bucket_pattern_by_level(level):
    list_res = []
    b0 = &#39;[^\(\)]&#39;
    c = &#39;%s+&#39; % b0
    list_res.append(c)
    for i in range(level):
        b = &#39;\((%s)\)&#39; % &#39;|&#39;.join(list_res)
        c = &#39;(?:(?:\((?:%s)\))|%s)+&#39; % (b[3:-3], b0)
        list_res.append(c)
    return b
&lt;/pre&gt;

buy/urls.py:

&lt;pre&gt;
from django.conf.urls.defaults import patterns, url

urlpatterns = patterns(&#39;s.buy.views&#39;,
    url(r&#39;^free/$&#39;,  &#39;free_old&#39; , name=&#39;free-old&#39;),
    url(r&#39;^besplatno/$&#39;,  &#39;free&#39; , name=&#39;free&#39;),
    url(r&#39;^complete/(?P&lt;key&gt;[0-9a-f]+)/$&#39;,  &#39;buy_complete&#39;, name=&#39;buy-complete&#39;),
)
&lt;/pre&gt;

buy/forms.py
&lt;pre&gt;
# -*- coding: utf8 -*-
from s.models import Ads, ExcludeUrl
from captcha.fields import CaptchaField, CaptchaTextInput
from django import forms
import json
import urllib


BUY_VERSION = 2


class FreeFormWithoutCaptha(forms.Form):

    data = forms.CharField(widget=forms.HiddenInput)
    module = forms.CharField(widget=forms.HiddenInput)

    def clean_data(self):
        data = self.cleaned_data[&#39;data&#39;]
        try:
            data = json.loads(data)
        except:
            raise forms.ValidationError(&#39;No load json&#39;)
        return data

    def get_request_string(self, cleaned_data):
        data = cleaned_data[&#39;data&#39;]
        data = json.dumps(data)
        data = urllib.quote(data)
        module = cleaned_data[&#39;module&#39;]
        req_string = &#39;module=%(module)s&amp;data=%(data)s&#39; % {
            &#39;module&#39;: module, &#39;data&#39;: data,
        }
        return req_string


if BUY_VERSION == 1:


    class FreeForm(FreeFormWithoutCaptha):

        url = forms.URLField(
            help_text=(
                u&#39;URL страницы, где содержится активная ссылка на мой сайт&#39;
            ), label=u&#39;Url страницы&#39;,
        )
        captcha = CaptchaField()

        def __init__(self, *args, **kwargs):
            super(FreeForm, self).__init__(*args, **kwargs)
            self.fields[&#39;captcha&#39;].widget.attrs = {&#39;autocomplete&#39;: &quot;off&quot;}

        def clean_url(self):
            url = self.cleaned_data[&#39;url&#39;].lower()
            exclude_urls = ExcludeUrl.objects.all().values_list(&#39;url&#39;, flat=True)
            for exclude_url in exclude_urls:
                if url.startswith(&#39;http://&#39; + exclude_url) or \
                    url.startswith(&#39;http://www.&#39; + exclude_url):
                    raise forms.ValidationError(
                        (u&#39;Котэ следит за тобой. Пожалуйста, добавьте ссылку себе на &#39;
                         u&#39;сайт, форум или блог!&#39;)
                    )
            return url

        def get_ads(self):
            ads = Ads.objects.random()
            return ads

elif BUY_VERSION == 2:

    class FreeForm(FreeFormWithoutCaptha):

        captcha = CaptchaField()

        def __init__(self, *args, **kwargs):
            super(FreeForm, self).__init__(*args, **kwargs)
            self.fields[&#39;captcha&#39;].widget.attrs = {&#39;autocomplete&#39;: &quot;off&quot;}

        def get_ads(self):
            ads = Ads.objects.random()
            return ads
&lt;/pre&gt;


wolfram/utils.py
&lt;pre&gt;
# coding:utf-8
from settings import at_project_root
import random


def get_appid():
    filename = at_project_root(&#39;kr/wolfram.keys&#39;)
    appid_list = open(filename).read().strip().split()
    random.shuffle(appid_list)
    appid = appid_list[0]
    return appid


def get_user_agent():
    filename = at_project_root(&#39;kr/wolfram.ua&#39;)
    ua_list = open(filename).read().strip().split(&#39;\n&#39;)
    assert len(ua_list) &gt; 1
    random.shuffle(ua_list)
    ua = ua_list[0]
    return ua
&lt;/pre&gt;


wolfram/base.py
&lt;pre&gt;
#encoding:utf-8
from hideme_proxy import get_good_proxy, IpProxyDNotExist
from wolfram.utils import get_user_agent, get_appid
import httplib
import mechanize
import urllib
import urllib2
import xml.etree.ElementTree as ET
import zlib


_open_url_error_classes = (
    urllib2.HTTPError,
    urllib2.URLError,
    IOError,
    httplib.BadStatusLine,
    httplib.IncompleteRead,
    zlib.error,  # for gzip compressed responses
    IpProxyDNotExist,
)


class InternetError(Exception):

    pass


def get_solution_class(class_name):
    return SOLUTION_CLASSES[class_name]


SOLUTION_CLASSES = {}
def register_solution_class(class_name):
    def wrapper(cls):
        SOLUTION_CLASSES[class_name] = cls
        return cls
    return wrapper


class _InternetObject(object):

    def _initial_browser(self):
        br = mechanize.Browser()
        ua = get_user_agent()
        br.addheaders = [(&#39;User-agent&#39;, ua)]
        br.set_handle_robots(False)
        br.set_handle_equiv(False)
        return br

    def _get_rawurlencode(self, params):
        items = []
        for key, val in params.items():
            new_val = urllib.quote(val)
            item = &#39;{0}={1}&#39;.format(key, new_val)
            items.append(item)
        ret = &#39;&amp;&#39;.join(items)
        return ret

    def get_params(self):
        raise NotImplementedError


class DetailedSolution(_InternetObject):

    base_url = &#39;http://api.wolframalpha.com/v2/query&#39;

    def __init__(self, data, with_proxy=True):
        self.data = data
        self.with_proxy = with_proxy
        self.br = self._initial_browser()
        self.appid = get_appid()

    def __str__(self):
        super_str = super(DetailedSolution, self).__str__()
        ret = &#39;{0} with appid={1}&#39;.format(super_str, self.appid)
        return ret

    def get_text(self):
        response_text = self.get_response_text()
        root = ET.fromstring(response_text)
        if root.get(&#39;success&#39;) == &#39;true&#39;:
            xpath = &quot;./pod//subpod[@title=&#39;Possible intermediate steps&#39;]/plaintext&quot;
            text = root.find(xpath).text
            return text
        raise NotImplementedError(response_text)

    def get_response_text(self):
        if self.with_proxy:
            try:
                ip = get_good_proxy()
            except _open_url_error_classes, exc:
                raise InternetError(exc)
            self.br.set_proxies({&#39;http&#39;: ip})
        params = self.get_params()
        params.update({
            &#39;format&#39;: &#39;plaintext&#39;,
            &#39;appid&#39;: self.appid,
        })
        url = self.base_url + &#39;?&#39; + \
            self._get_rawurlencode(params)
        try:
            self.br.open(url)
            response = self.br.response()
            response_text = response.read()
        except _open_url_error_classes, exc:
            raise InternetError(exc)
        return response_text


@register_solution_class(&#39;limit&#39;)
class LimitSolution(DetailedSolution):

    def get_params(self):
        data = self.data
        x0 = data[&#39;x0&#39;]
        function = data[&#39;function&#39;]
        expression = &#39;lim %s x-&gt;%s&#39; % (function, x0)
        ret = {
            &#39;input&#39;: expression,
            &#39;podstate&#39;: &#39;Limit__Step-by-step solution&#39;,
        }
        return ret


@register_solution_class(&#39;indefinite&#39;)
class IndefiniteSolution(DetailedSolution):

    def get_params(self):
        data = self.data
        function = data[&#39;function&#39;]
        expression = &#39;integrate %s&#39; % function
        ret = {
            &#39;input&#39;: expression,
            &#39;podstate&#39;: &#39;IndefiniteIntegral__Step-by-step solution&#39;,
        }
        return ret


@register_solution_class(&#39;diff&#39;)
class DiffSolution(DetailedSolution):

    def get_params(self):
        data = self.data
        function = data[&#39;function&#39;]
        expression = &#39;derivative of %s&#39; % function
        ret = {
            &#39;input&#39;: expression,
            &#39;podstate&#39;: &#39;Input__Step-by-step solution&#39;,
        }
        return ret


@register_solution_class(&#39;series-number&#39;)
class SeriesNumberSolution(DetailedSolution):

    def get_result(self):
        ret = {}
        response_text = self.get_response_text()
        root = ET.fromstring(response_text)
        if root.get(&#39;success&#39;) == &#39;true&#39;:
            nods = root.findall(&#39;./pod[@id=&quot;ConvergenceTests&quot;]/subpod/plaintext&#39;)
            tests = map(lambda n: n.text, nods)
            ret[&#39;tests&#39;] = tests
            return ret
        raise NotImplementedError(response_text)

    def get_params(self):
        data = self.data
        function = data[&#39;function&#39;]
        n = data[&#39;n&#39;]
        n0 = data[&#39;n0&#39;]
        nm = data[&#39;nm&#39;]
        infinity = data[&#39;infinity&#39;]
        if infinity:
            nm = &#39;oo&#39;
        expression = &#39;Sum[{0}, {1}, {2}, {3}]&#39;.format(function, n, n0, nm)
        ret = {
            &#39;input&#39;: expression,
        }
        return ret


@register_solution_class(&#39;power-series&#39;)
class PowerSeriesSolution(DetailedSolution):

    def get_result(self):
        ret = {}
        response_text = self.get_response_text()
        root = ET.fromstring(response_text)
        if root.get(&#39;success&#39;) == &#39;true&#39;:
            nods = root.findall(&#39;./pod[@id=&quot;ConvergenceTests&quot;]/subpod/plaintext&#39;)
            tests = map(lambda n: n.text, nods)
            ret[&#39;tests&#39;] = tests
            return ret
        raise NotImplementedError(response_text)

    def get_params(self):
        expression = &#39;Sum of {function}&#39;.format(**self.data)
        ret = {
            &#39;input&#39;: expression,
        }
        return ret


@register_solution_class(&#39;system-diff&#39;)
class SystemDiffSolution(DetailedSolution):

    def get_result(self):
        ret = {}
        response_text = self.get_response_text()
        root = ET.fromstring(response_text)
        if root.get(&#39;success&#39;) == &#39;true&#39;:
            nods = root.findall(&#39;./pod[@id=&quot;DifferentialEquationSolution&quot;]/subpod/plaintext&#39;)
            solves = map(lambda n: n.text, nods)
            solves = map(lambda s: s.replace(&#39;_&#39;, &#39;&#39;), solves)
            ret[&#39;solves&#39;] = solves
            return ret
        raise NotImplementedError(response_text)

    def get_params(self):
        expression = &#39; and &#39;.join(&#39;=&#39;.join(i) for i in self.data[&#39;equations&#39;])
        ret = {
            &#39;input&#39;: expression,
        }
        return ret
&lt;/pre&gt;

widgetes/jscalendar.py
&lt;pre&gt;
from django import forms
from django.template.loader import render_to_string

class JSCalendarWidget(forms.DateTimeInput):
    class Media:
        css = {
            &#39;all&#39;: (&#39;javascript/jscalendar-1.0/calendar-system.css&#39;,)
        }
        js = (&#39;javascript/jscalendar-1.0/calendar.js&#39;,
              &#39;javascript/jscalendar-1.0/calendar-setup.js&#39;,
              &#39;javascript/jscalendar-1.0/lang/calendar-ru-UTF.js&#39;,)

    def render(self, name, value, lang=&#39;ru&#39;, attrs=None):
        value = value or &#39;&#39;
        return render_to_string(&quot;widgets/jscalendar.html&quot;, locals())
&lt;/pre&gt;


buy/complete.html
&lt;pre&gt;
{% extends &quot;s/sbase.html&quot; %}
{% block title %}Подробное решение бесплатно!{% endblock %}
{% block head %}
    &lt;META NAME=&quot;ROBOTS&quot; CONTENT=&quot;NOINDEX NOFOLLOW&quot; /&gt;
{% endblock %}
{% block crumbs %}&lt;a href=&quot;/s/&quot;&gt;Больше решений!&lt;/a&gt;{% endblock %}
{% block base_table %}
    &lt;div class=&quot;main&quot; style=&quot;width:856px; margin-top:-26px;&quot;&gt;
        &lt;h1&gt;Подробное решение: ответ&lt;/h1&gt;
        {% include &quot;partner_block.html&quot; %}
        {% if with_simple_text %}
            &lt;pre&gt;{{ text }}&lt;/pre&gt;
        {% else %}
          &lt;a href=&quot;/media/buy/{{ prefix }}1.png&quot; target=&quot;_blank&quot;&gt;
              &lt;img src=&quot;/media/buy/{{ prefix }}1.png&quot; alt=&quot;{{ text }}&quot;&gt;
          &lt;/a&gt;
        {% endif %}
        {% include &quot;other-social.html&quot; %}
        {% include &quot;partner_block.html&quot; %}
    &lt;/div&gt;
{% endblock %}
&lt;/pre&gt;

buy/definite.tex
&lt;pre&gt;
\documentclass[a4paper, 12pt]{article}
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\vskip 0.5 cm

\begin{document}

${{ tex_body }}$

\end{document}
&lt;/pre&gt;

buy/diff.tex
&lt;pre&gt;
\documentclass[a4paper, 12pt]{article}
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\vskip 0.5 cm

\begin{document}

${{ tex_body }}$

\end{document}
&lt;/pre&gt;

buy/free_form.html
&lt;pre&gt;

Для того, чтобы получить подробное решение бесплатно, пожалуйста, проделайте следующие действия:
&lt;style type=&quot;text/css&quot;&gt;
  .buy_instruction li input {
    width: 300px;
  }
&lt;/style&gt;
&lt;ol class=&quot;buy_instruction&quot;&gt;
  {% if not request.COOKIES.ilikeit %}
  &lt;li&gt;
      &lt;b&gt;Скопируйте ссылку&lt;/b&gt; и &lt;br&gt;
      &lt;b&gt;разместите вконтакте или др. сайте&lt;/b&gt;:
      &lt;input id=&quot;ilikeit&quot; type=&quot;text&quot; onclick=&quot;javascript:this.select()&quot; value=&quot;http://{{ request.get_host }}{{ request.path_info }}&quot;/&gt;
      &lt;script&gt;
          $(function () {
              $(&#39;#ilikeit&#39;).click(function () {
                  this.select();
                  $.cookie(&#39;ilikeit&#39;, true);
              });
          });
      &lt;/script&gt;
      &lt;br&gt;
  &lt;/li&gt;
  {% endif %}
  &lt;li&gt;Введите цифры на рисунке&lt;/li&gt;
&lt;/ol&gt;
&lt;form action=&quot;{% url free %}&quot; method=&quot;POST&quot;&gt;{% csrf_token %}
  &lt;table&gt;
    {{ free_form }}
    &lt;tr&gt;
      &lt;td colspan=&quot;2&quot;&gt;
        &lt;input type=&quot;submit&quot; value=&quot;Получить подробное решение&quot; /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/table&gt;
&lt;/form&gt;
&lt;/pre&gt;

buy/free.html
&lt;pre&gt;
{% extends &quot;s/sbase.html&quot; %}
{% load i18n %}
{% block head %}
 {% if redirect_to %}
 &lt;meta http-equiv=&quot;REFRESH&quot; content=&quot;40;url={{ redirect_to }}&quot;&gt;
 &lt;style type=&quot;text/css&quot;&gt;
 body {cursor: wait;}
 &lt;/style&gt;
 {% endif %}
{% endblock %}
{% block title %}Подробное решение бесплатно!{% endblock %}

{% block content %}
  &lt;h1&gt;Подробное решение&lt;/h1&gt;
  {% include &quot;partner_block.html&quot; %}
  {% if redirect_to %}
   &lt;h3&gt;Производится проверка размещения ссылки, пожалуйста подождите чуть больше 1 мин...&lt;/h3&gt;
   Если ссылка на наш сайт будет найдена, то Вам будет предложено решение.&lt;br/&gt;
   &lt;b&gt;Если программа не найдет ссылку&lt;/b&gt; вида http://kontrolnaya-rabota.ru, то &lt;b&gt;Вы не получите файла&lt;/b&gt;, но можно попробовать разместить ссылку на сайт http://kontrolnaya-rabota.ru/s/ снова. &lt;br/&gt;
   &lt;a href=&quot;javascript:history.back(1);&quot;&gt;Назад&lt;/a&gt;.&lt;br/&gt;
  {% else %}
   &lt;h2&gt;Хотите получить подробное решение с описанием действий?&lt;/h2&gt;
   {% include &quot;s/buy/free_form.html&quot; %}
  {% endif %}
  {% include &quot;partner_block.html&quot; %}
{% endblock %}

&lt;/pre&gt;

buy/indefinite.tex
&lt;pre&gt;
\documentclass[a4paper, 12pt]{article}
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\vskip 0.5 cm

\begin{document}

${{ tex_body }}$

\end{document}
&lt;/pre&gt;

buy/limit.html
&lt;pre&gt;
\documentclass[a4paper, 12pt]{article}
\usepackage[unicode]{hyperref}
\usepackage{mathtext}
\usepackage[T1, T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\vskip 0.5 cm

\begin{document}

${{ tex_body|safe }}$

\end{document}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/8229475223071544621/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2016/11/kontrolnaya-rabotaru.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8229475223071544621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8229475223071544621'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2016/11/kontrolnaya-rabotaru.html' title='Код сайта kontrolnaya-rabota.ru'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-6442539522576905096</id><published>2016-11-09T15:43:00.005+05:00</published><updated>2017-01-19T20:12:29.538+05:00</updated><title type='text'>python regex lazy re.compile</title><content type='html'>&lt;pre&gt;
import re


class _Lazy(object):

    __slots__ = [&#39;pattern&#39;, &#39;kwargs&#39;, &#39;compiled&#39;]

    def __init__(self, pattern, **kwargs):
        self.pattern = pattern
        self.kwargs = kwargs
        self.compiled = None

    def __getattr__(self, name):
        if self.compiled is None:
            self.compiled = re.compile(self.pattern, **self.kwargs)
        return self.compiled.__getattribute__(name)


def lazy_compile(pattern, **kwargs):
    return _Lazy(pattern, **kwargs)
&lt;/pre&gt;

Use:
&lt;pre&gt;
In [2]:

In [2]: lazy_compile(r&#39;[a-z]&#39;)
Out[2]: &lt;__main__._Lazy at 0x11095c088&gt;

In [3]: c = lazy_compile(r&#39;[a-z]&#39;)

In [4]: c.findall(&#39;sdsd sdsds aq, $A fddf&#39;)
Out[4]: [&#39;s&#39;, &#39;d&#39;, &#39;s&#39;, &#39;d&#39;, &#39;s&#39;, &#39;d&#39;, &#39;s&#39;, &#39;d&#39;, &#39;s&#39;, &#39;a&#39;, &#39;q&#39;, &#39;f&#39;, &#39;d&#39;, &#39;d&#39;, &#39;f&#39;]
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/6442539522576905096/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2016/11/python-regex-lazy-recompile.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6442539522576905096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6442539522576905096'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2016/11/python-regex-lazy-recompile.html' title='python regex lazy re.compile'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-2182156924702162300</id><published>2015-11-23T11:28:00.000+05:00</published><updated>2015-11-23T11:28:16.515+05:00</updated><title type='text'>Upload a folder to s3</title><content type='html'>from boto3.session import Session&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;session = Session(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; aws_access_key_id=&#39;xxx&#39;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; aws_secret_access_key=&#39;yyy&#39;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; region_name=&#39;eu-central-1&#39;,&amp;nbsp; # Put your region name&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;resource = session.resource(&#39;s3&#39;)&lt;br /&gt;&lt;br /&gt;bucket = resource.Bucket(&#39;your_bucket_name&#39;)&lt;br /&gt;&lt;br /&gt;from_dir = &#39;your_folder_name&#39;&lt;br /&gt;&lt;br /&gt;for fn in os.listdir(from_dir):&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; file_obj = open(os.path.join(from_dir, fn), &#39;rb&#39;)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; to_folder = &#39;&#39;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bucket.put_object(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Key=os.path.join(to_folder, os.path.basename(file_obj.name)),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Body=file_obj.read(),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &#39;%s loaded&#39; % fn</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/2182156924702162300/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2015/11/upload-folder-to-s3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/2182156924702162300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/2182156924702162300'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2015/11/upload-folder-to-s3.html' title='Upload a folder to s3'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7842795588841714221</id><published>2014-01-19T02:45:00.002+06:00</published><updated>2014-01-19T02:45:56.936+06:00</updated><title type='text'>Integral Step-by-Step Calculator on Android!</title><content type='html'>I write my first android application.&lt;br /&gt;
&lt;br /&gt;
I used.. python!&lt;br /&gt;
&lt;br /&gt;
You can write android application on python - use python framework &lt;a href=&quot;http://kivy.org/&quot;&gt;kivy&lt;/a&gt;&lt;br /&gt;
(write a application supported on many operation systems: mac, windows, linux, android, ios, and sony play station and other)&lt;br /&gt;
&lt;br /&gt;
So, my first android application - &lt;a href=&quot;https://play.google.com/store/apps/details?id=org.krapp.integral&quot;&gt;Integral Step-by-Step Calculator&lt;/a&gt; (link to google play)&lt;br /&gt;
&lt;br /&gt;
This app calculate a integrals:&lt;br /&gt;
&lt;br /&gt;
Offline Integral Step-By-Step Calculator (without online and internet):&lt;br /&gt;    * A indefinite integral&lt;br /&gt;    * A definite integral&lt;br /&gt;    * A improper integral</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7842795588841714221/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2014/01/integral-step-by-step-calculator-on.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7842795588841714221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7842795588841714221'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2014/01/integral-step-by-step-calculator-on.html' title='Integral Step-by-Step Calculator on Android!'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7861109754946692466</id><published>2014-01-06T06:12:00.001+06:00</published><updated>2014-01-06T06:12:35.154+06:00</updated><title type='text'>Large Scale Machine Learning and Other Animals: Installing BLAS/Lapack/ITPP on Amazon EC2/Ubuntu L...</title><content type='html'>&amp;nbsp;Installing BLAS/Lapack/ITPP on Amazon EC2/Ubuntu Linux&lt;br /&gt;
BLAS/Lapack are efficient matrix math libraries. The following instructions explains how to install them for Amazon EC2 (Ubuntu maverick version, and Amazon Linux). It++ (itpp) is a popular c++ wrapper for blas/lapack.&lt;br /&gt;
&lt;br /&gt;
DISLAIMER: The below instructions are for 64 bit machines. For 32 bit machines follow other instructions: http://bickson.blogspot.com/2011/06/graphlab-pmf-on-32-bit-linux.html&lt;br /&gt;
&lt;br /&gt;
FOR LAZY READERS:&lt;br /&gt;
Just use Amazon EC2 public image ami-c21eedab (Ubuntu)&lt;br /&gt;
&lt;br /&gt;
INSTALLATION VIA YUM/APT-GET&lt;br /&gt;
Try to install itpp using the following command:&lt;br /&gt;
&lt;br /&gt;
sudo yum install libitpp-dev&lt;br /&gt;
&lt;br /&gt;
Or&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libitpp-dev&lt;br /&gt;
&lt;br /&gt;
TIP: You may also want to install libitpp7-dbg using the yum/apt-get command.&lt;br /&gt;
It is not mandatory, but it helps debugging when you link against libitpp_debug.so&lt;br /&gt;
(instead of libitpp.so).&lt;br /&gt;
&lt;br /&gt;
If the above worked then we are done. If not, you will need to follow&lt;br /&gt;
instructions below. Thanks to Udi Weinsberg for this tip.&lt;br /&gt;
&lt;br /&gt;
FOR ADVANCED USERS:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0) Start with an Ubuntu image like ami-641eed0d, or an Amazon AMI image like:&lt;br /&gt;
&lt;br /&gt;
1) Install required packages. For Ubuntu:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install --yes --force-yes automake autoconf libtool* gfortran&lt;br /&gt;
&lt;br /&gt;
For Amazon Linux:&lt;br /&gt;
&lt;br /&gt;
sudo yum install -y automake autoconf libtool* gcc-gfortran&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Install lapack.&lt;br /&gt;
Here again their are two options:&lt;br /&gt;
&lt;br /&gt;
The easy way is to simply (On Ububtu)&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install --yes --force-yes liblapack-dev&lt;br /&gt;
&lt;br /&gt;
On Amazon Linux:&lt;br /&gt;
&lt;br /&gt;
sudo yum install -y lapack-devel blas-devel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks Akshay Bhat from Cornell for this tip!&lt;br /&gt;
If the liblapack setup was successful, go to step 3.&lt;br /&gt;
&lt;br /&gt;
If the above command DOES NOT work for you (depends on your OS and setup) you will need to install lapack manually. The procedure is explained in steps a-c below.&lt;br /&gt;
&lt;br /&gt;
a) Download and prepare the code&lt;br /&gt;
&lt;br /&gt;
wget http://www.netlib.org/lapack/lapack.tgz&lt;br /&gt;
tar xvzf lapack.tgz&lt;br /&gt;
cd lapack-3.3.0&amp;nbsp; //if version number changes, change here to the right directory&lt;br /&gt;
mv make.inc.example make.inc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) edit make.inc and add -m64 -fPIC flag to fortran compiler options:&lt;br /&gt;
# FORTRAN, OPTS, NOOPT, LOADER&lt;br /&gt;
&lt;br /&gt;
c) compile&lt;br /&gt;
&lt;br /&gt;
make blaslib&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
If everthing went OK, test will be run for a couple of minutes&lt;br /&gt;
and the files blas_LINUX.a and lapack_LINUX.a will be created at the main directory&lt;br /&gt;
&lt;br /&gt;
3) setup LDFLAGS&lt;br /&gt;
&lt;br /&gt;
export LDFLAGS=&quot;-L/usr/lib -lgfortran&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Download and install itpp from&lt;br /&gt;
&lt;br /&gt;
wget http://sourceforge.net/projects/itpp/files/itpp/4.2.0/itpp-4.2.tar.gz&lt;br /&gt;
tar xvzf itpp-4.2.tar.gz&lt;br /&gt;
cd itpp-4.2&lt;br /&gt;
./autogen.sh &lt;br /&gt;
&lt;br /&gt;
If you installed Lapack from yum/apt-get, you should use the following command:&lt;br /&gt;
&lt;br /&gt;
./configure --without-fft --with-blas=/usr/lib64/libblas.so --with-lapack=/usr/lib64/liblapack.so --enable-debug CFLAGS=-fPIC CXXFLAGS=-fPIC CPPFLAGS=-fPIC&lt;br /&gt;
&lt;br /&gt;
Where /usr/lib64/ is the place where lapack was installed.&lt;br /&gt;
&lt;br /&gt;
If you installed lapack from source, use the following command&lt;br /&gt;
&lt;br /&gt;
./configure --without-fft --with-blas=/home/ubuntu/lapack-3.3.0/blas_LINUX.a --with-lapack=/home/ubuntu/lapack-3.3.0/lapack_LINUX.a CFLAGS=-fPIC CXXFLAGS=-fPIC CPPFLAGS=-fPIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
&lt;br /&gt;
Note: If you installed lapack from yum/apt-get, don&#39;t forget to add the -lblas -llapack linker flag when you compile against lapack/blas.&lt;br /&gt;
&lt;br /&gt;
Verifying installation&lt;br /&gt;
To verify that installation went Ok, run the following commands:&lt;br /&gt;
&lt;br /&gt;
itpp-config --cflags&lt;br /&gt;
itpp-config --libs&lt;br /&gt;
&lt;br /&gt;
1) The command itpp-config should be available from shell.&lt;br /&gt;
2) The right installation path should appear as output.&lt;br /&gt;
&lt;br /&gt;
Known issues you may encounter:&lt;br /&gt;
Problem:&lt;br /&gt;
&lt;br /&gt;
*** Warning: Linking the shared library libitpp.la against the^M&lt;br /&gt;
*** static library /usr/lib64/libblas.a is not portable!^M&lt;br /&gt;
libtool: link: g++ -shared -nostdlib /usr/lib/gcc/x86_64-amazon-linux/4.4.4/../../../../lib64/crti.o /usr/lib/gcc/x86_64-amazon-linux/4.4.4/crtbeginS.o&amp;nbsp; -Wl,--whole-archive ../itpp/base/.libs/libbase.a ../itpp/stat/.libs/libstat.a ../itpp/comm/.libs/libcomm.a ../itpp/fixed/.libs/libfixed.a ../itpp/optim/.libs/liboptim.a ../itpp/protocol/.libs/libprotocol.a ../itpp/signal/.libs/libsignal.a ../itpp/srccode/.libs/libsrccode.a -Wl,--no-whole-archive&amp;nbsp; -L/usr/lib64/ /usr/lib64/liblapack.a /usr/lib64/libblas.a -lgfortranbegin -lgfortran -L/usr/lib/gcc/x86_64-amazon-linux/4.4.4 -L/usr/lib/gcc/x86_64-amazon-linux/4.4.4/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-amazon-linux/4.4.4/../../.. -lstdc++ -lm -lc -lgcc_s /usr/lib/gcc/x86_64-amazon-linux/4.4.4/crtendS.o /usr/lib/gcc/x86_64-amazon-linux/4.4.4/../../../../lib64/crtn.o&amp;nbsp;&amp;nbsp;&amp;nbsp; -Wl,-soname -Wl,libitpp.so.7 -o .libs/libitpp.so.7.0.0^M&lt;br /&gt;
/usr/bin/ld: /usr/lib64/liblapack.a(dgees.o): relocation R_X86_64_32 against `.rodata&#39; can not be used when making a shared object; recompile with -fPIC^M&lt;br /&gt;
/usr/lib64/liblapack.a: could not read symbols: Bad value^M&lt;br /&gt;
collect2: ld returned 1 exit status^M&lt;br /&gt;
make[2]: *** [libitpp.la] Error 1^M&lt;br /&gt;
&lt;br /&gt;
Solution: it seems that lapack was statically compiled without the -fPIC option and thus itpp refuses to link against it. Follow step 2a to install lapack manaually with the -fPIC option.&lt;br /&gt;
&lt;br /&gt;
Problem:&lt;br /&gt;
&lt;br /&gt;
make[1]: *** Waiting for unfinished jobs....&lt;br /&gt;
[ 83%] Building CXX object src/graphlab/CMakeFiles/&lt;br /&gt;
graphlab_pic.dir/distributed2/distributed_scheduler_list.o /usr/local/lib/libitpp.so: undefined reference to `zgesv_&#39; /usr/local/lib/libitpp.so: undefined reference to `dorgqr_&#39; /usr/local/lib/libitpp.so: undefined reference to `dswap_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgeqp3_&#39; /usr/local/lib/libitpp.so: undefined reference to `dpotrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgemm_&#39; /usr/local/lib/libitpp.so: undefined reference to `zungqr_&#39; /usr/local/lib/libitpp.so: undefined reference to `zscal_&#39; /usr/local/lib/libitpp.so: undefined reference to `dscal_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgesv_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgetri_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgemm_&#39; /usr/local/lib/libitpp.so: undefined reference to `zposv_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgetri_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgeev_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgemv_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgeqrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgerc_&#39; /usr/local/lib/libitpp.so: undefined reference to `zswap_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgeev_&#39; /usr/local/lib/libitpp.so: undefined reference to `daxpy_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgetrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgels_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgetrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgees_&#39; /usr/local/lib/libitpp.so: undefined reference to `dcopy_&#39; /usr/local/lib/libitpp.so: undefined reference to `dger_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgels_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgeqrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `zpotrf_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgees_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgesvd_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgeru_&#39; /usr/local/lib/libitpp.so: undefined reference to `dsyev_&#39; /usr/local/lib/libitpp.so: undefined reference to `zaxpy_&#39; /usr/local/lib/libitpp.so: undefined reference to `ddot_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgesvd_&#39; /usr/local/lib/libitpp.so: undefined reference to `zgeqp3_&#39; /usr/local/lib/libitpp.so: undefined reference to `zcopy_&#39; /usr/local/lib/libitpp.so: undefined reference to `dgemv_&#39; /usr/local/lib/libitpp.so: undefined reference to `dposv_&#39; /usr/local/lib/libitpp.so: undefined reference to `zheev_&#39; collect2: ld returned 1 exit status make[2]: *** [tests/anytests] Error 1 make[1]: *** [tests/CMakeFiles/anytests.dir/all] Error 2&lt;br /&gt;
&lt;br /&gt;
Solution: itpp was compiled using dynamic libraries, but your application did not include the -lblas and -llapack link flags.&lt;br /&gt;
&lt;br /&gt;
Problem:&lt;br /&gt;
&lt;br /&gt;
*** Error: You must have &quot;autoconf&quot; installed to compile IT++ SVN sources&lt;br /&gt;
*** Error: You must have &quot;automake&quot; installed to compile IT++ SVN sources&lt;br /&gt;
*** Error: You must have &quot;libtoolize&quot; installed to compile IT++ SVN sources&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
Need to install the packages autoconf, automake and libtoolize. See yum/apt-get documentation.&lt;br /&gt;
&lt;br /&gt;
Problem:&lt;br /&gt;
&lt;br /&gt;
/usr/bin/ld: /home/bickson/lapack-3.3.1/lapack_LINUX.a(dgees.o): relocation R_X86_64_32 against `.rodata&#39; can not be used when making a shared object; recompile with -fPIC&lt;br /&gt;
/home/bickson/lapack-3.3.1/lapack_LINUX.a: could not read symbols: Bad value&lt;br /&gt;
collect2: ld returned 1 exit status&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
It seem you forgot to follow section 2b.&lt;br /&gt;
&lt;br /&gt;
TIP: It is useful to enable also itpp_debug library which is very useful when debugging your code. This is done by adding the flag --enable-debug to the configure script.&lt;br /&gt;
&lt;br /&gt;
Problem:&lt;br /&gt;
&lt;br /&gt;
*** Error in ../../../itpp/base/algebra/ls_solve.cpp on line 271:&lt;br /&gt;
LAPACK library is needed to use ls_solve() function&lt;br /&gt;
&lt;br /&gt;
Solution:&lt;br /&gt;
It seems that itpp is not installed properly -it did not link to lapack. </content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7861109754946692466/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2014/01/large-scale-machine-learning-and-other.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7861109754946692466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7861109754946692466'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2014/01/large-scale-machine-learning-and-other.html' title='Large Scale Machine Learning and Other Animals: Installing BLAS/Lapack/ITPP on Amazon EC2/Ubuntu L...'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7849004211799132584</id><published>2013-12-15T22:01:00.004+06:00</published><updated>2013-12-15T22:23:18.251+06:00</updated><title type='text'>Worked solution for Kivy + Admob on android</title><content type='html'>This solution: with the few steps:&lt;br /&gt;
&lt;br /&gt;
1. Edit src/org/renpy/android/PythonActivity.java (Paste your ad_unit_id and TEST_DEVICE_ID)&lt;br /&gt;
2. Edit AndroidManifest.xml (your comment manifest autogenerator on build.py)&lt;br /&gt;
3. Edit YourApp on main.py&lt;br /&gt;
4. Start for generate your app. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.&lt;b&gt; Edit source file&lt;/b&gt; on python-for-android/dist/defaults (git version of is ca369d774e276fe2e9444c6021ec2559d0527c1d):&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;src/org/renpy/android/PythonActivity.java&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Replace with:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;package org.renpy.android;

import android.R;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Environment;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import android.util.Log;
import android.content.pm.PackageManager;
import android.content.pm.ApplicationInfo;

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;

// Billing
import org.renpy.android.Configuration;
import org.renpy.android.billing.BillingService.RequestPurchase;
import org.renpy.android.billing.BillingService.RestoreTransactions;
import org.renpy.android.billing.Consts.PurchaseState;
import org.renpy.android.billing.Consts.ResponseCode;
import org.renpy.android.billing.PurchaseObserver;
import org.renpy.android.billing.BillingService;
import org.renpy.android.billing.PurchaseDatabase;
import org.renpy.android.billing.Consts;
import org.renpy.android.billing.ResponseHandler;
import org.renpy.android.billing.Security;
import android.os.Handler;
import android.database.Cursor;
import java.util.List;
import java.util.ArrayList;
import android.content.SharedPreferences;
import android.content.Context;

&lt;span style=&quot;color: #e06666;&quot;&gt;import com.google.ads.AdView;
import com.google.ads.AdSize;
import com.google.ads.AdRequest;
import android.widget.RelativeLayout;&lt;/span&gt;

public class PythonActivity extends Activity implements Runnable {
    private static String TAG = &quot;Python&quot;;

    &lt;span style=&quot;color: #e06666;&quot;&gt;private AdView adView;&lt;/span&gt;

    // The audio thread for streaming audio...
    private static AudioThread mAudioThread = null;

    // The SDLSurfaceView we contain.
    public static SDLSurfaceView mView = null;
    public static PythonActivity mActivity = null;
    public static ApplicationInfo mInfo = null;

    // Did we launch our thread?
    private boolean mLaunchedThread = false;

    private ResourceManager resourceManager;

    // The path to the directory contaning our external storage.
    private File externalStorage;

    // The path to the directory containing the game.
    private File mPath = null;

    boolean _isPaused = false;

    private static final String DB_INITIALIZED = &quot;db_initialized&quot;;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Hardware.context = this;
        Action.context = this;
        this.mActivity = this;

        getWindowManager().getDefaultDisplay().getMetrics(Hardware.metrics);

        resourceManager = new ResourceManager(this);
        externalStorage = new File(Environment.getExternalStorageDirectory(), getPackageName());

        // Figure out the directory where the game is. If the game was
        // given to us via an intent, then we use the scheme-specific
        // part of that intent to determine the file to launch. We
        // also use the android.txt file to determine the orientation.
        //
        // Otherwise, we use the public data, if we have it, or the
        // private data if we do not.
        if (getIntent() != null &amp;amp;&amp;amp; getIntent().getAction() != null &amp;amp;&amp;amp;
                getIntent().getAction().equals(&quot;org.renpy.LAUNCH&quot;)) {
            mPath = new File(getIntent().getData().getSchemeSpecificPart());

            Project p = Project.scanDirectory(mPath);

            if (p != null) {
                if (p.landscape) {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
            }

            // Let old apps know they started.
            try {
                FileWriter f = new FileWriter(new File(mPath, &quot;.launch&quot;));
                f.write(&quot;started&quot;);
                f.close();
            } catch (IOException e) {
                // pass
            }



        } else if (resourceManager.getString(&quot;public_version&quot;) != null) {
            mPath = externalStorage;
        } else {
            mPath = getFilesDir();
        }

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // go to fullscreen mode if requested
        try {
            this.mInfo = this.getPackageManager().getApplicationInfo(
                    this.getPackageName(), PackageManager.GET_META_DATA);
            Log.v(&quot;python&quot;, &quot;metadata fullscreen is&quot; + this.mInfo.metaData.get(&quot;fullscreen&quot;));
            if ( (Integer)this.mInfo.metaData.get(&quot;fullscreen&quot;) == 1 ) {
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
            }
        } catch (PackageManager.NameNotFoundException e) {
        }

        if ( Configuration.use_billing ) {
            mBillingHandler = new Handler();
        }

        // Start showing an SDLSurfaceView.
        mView = new SDLSurfaceView(
                this,
                mPath.getAbsolutePath());

        Hardware.view = mView;

        &lt;span style=&quot;color: #e06666;&quot;&gt;RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        lp.addRule(RelativeLayout.CENTER_IN_PARENT);

        adView = new AdView(this, AdSize.BANNER, &quot;YOU_AD_UNIT_ID&quot;);

        adView.setLayoutParams(lp);

        RelativeLayout layout = new RelativeLayout(this);

        layout.addView(mView);
        layout.addView(adView);

        AdRequest adRequest = new AdRequest();

        adRequest.addTestDevice(&quot;TEST_DEVICE_ID&quot;); // Replace with your test device id

        adView.loadAd(adRequest);

        setContentView(layout);&lt;/span&gt;

        // Force the background window color if asked
        if ( this.mInfo.metaData.containsKey(&quot;android.background_color&quot;) ) {
            getWindow().getDecorView().setBackgroundColor(
                this.mInfo.metaData.getInt(&quot;android.background_color&quot;));
        }
    }

    /**
     * Show an error using a toast. (Only makes sense from non-UI
     * threads.)
     */
    public void toastError(final String msg) {

        final Activity thisActivity = this;

        runOnUiThread(new Runnable () {
            public void run() {
                Toast.makeText(thisActivity, msg, Toast.LENGTH_LONG).show();
            }
        });

        // Wait to show the error.
        synchronized (this) {
            try {
                this.wait(1000);
            } catch (InterruptedException e) {
            }
        }
    }

    public void recursiveDelete(File f) {
        if (f.isDirectory()) {
            for (File r : f.listFiles()) {
                recursiveDelete(r);
            }
        }
        f.delete();
    }


    /**
     * This determines if unpacking one the zip files included in
     * the .apk is necessary. If it is, the zip file is unpacked.
     */
    public void unpackData(final String resource, File target) {

        // The version of data in memory and on disk.
        String data_version = resourceManager.getString(resource + &quot;_version&quot;);
        String disk_version = null;

        // If no version, no unpacking is necessary.
        if (data_version == null) {
            return;
        }

        // Check the current disk version, if any.
        String filesDir = target.getAbsolutePath();
        String disk_version_fn = filesDir + &quot;/&quot; + resource + &quot;.version&quot;;

        try {
            byte buf[] = new byte[64];
            InputStream is = new FileInputStream(disk_version_fn);
            int len = is.read(buf);
            disk_version = new String(buf, 0, len);
            is.close();
        } catch (Exception e) {
            disk_version = &quot;&quot;;
        }

        // If the disk data is out of date, extract it and write the
        // version file.
        if (! data_version.equals(disk_version)) {
            Log.v(TAG, &quot;Extracting &quot; + resource + &quot; assets.&quot;);

            recursiveDelete(target);
            target.mkdirs();

            AssetExtract ae = new AssetExtract(this);
            if (!ae.extractTar(resource + &quot;.mp3&quot;, target.getAbsolutePath())) {
                toastError(&quot;Could not extract &quot; + resource + &quot; data.&quot;);
            }

            try {
                // Write .nomedia.
                new File(target, &quot;.nomedia&quot;).createNewFile();

                // Write version file.
                FileOutputStream os = new FileOutputStream(disk_version_fn);
                os.write(data_version.getBytes());
                os.close();
            } catch (Exception e) {
                Log.w(&quot;python&quot;, e);
            }
        }

    }

    public void run() {

        unpackData(&quot;private&quot;, getFilesDir());
        unpackData(&quot;public&quot;, externalStorage);

        System.loadLibrary(&quot;sdl&quot;);
        System.loadLibrary(&quot;sdl_image&quot;);
        System.loadLibrary(&quot;sdl_ttf&quot;);
        System.loadLibrary(&quot;sdl_mixer&quot;);
        System.loadLibrary(&quot;python2.7&quot;);
        System.loadLibrary(&quot;application&quot;);
        System.loadLibrary(&quot;sdl_main&quot;);

        System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/_io.so&quot;);
        System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/unicodedata.so&quot;);

        try {
            System.loadLibrary(&quot;sqlite3&quot;);
            System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/_sqlite3.so&quot;);
        } catch(UnsatisfiedLinkError e) {
        }

        try {
            System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/_imaging.so&quot;);
            System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/_imagingft.so&quot;);
            System.load(getFilesDir() + &quot;/lib/python2.7/lib-dynload/_imagingmath.so&quot;);
        } catch(UnsatisfiedLinkError e) {
        }

        if ( mAudioThread == null ) {
            Log.i(&quot;python&quot;, &quot;Starting audio thread&quot;);
            mAudioThread = new AudioThread(this);
        }

        runOnUiThread(new Runnable () {
            public void run() {
                mView.start();
            }
        });
    }

    @Override
    protected void onPause() {
        _isPaused = true;
        super.onPause();

        if (mView != null) {
            mView.onPause();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        _isPaused = false;

        if (!mLaunchedThread) {
            mLaunchedThread = true;
            new Thread(this).start();
        }

        if (mView != null) {
            mView.onResume();
        }
    }

    public boolean isPaused() {
        return _isPaused;
    }

    @Override
    public boolean onKeyDown(int keyCode, final KeyEvent event) {
        //Log.i(&quot;python&quot;, &quot;key2 &quot; + mView + &quot; &quot; + mView.mStarted);
        if (mView != null &amp;amp;&amp;amp; mView.mStarted &amp;amp;&amp;amp; SDLSurfaceView.nativeKey(keyCode, 1, event.getUnicodeChar())) {
            return true;
        } else {
            return super.onKeyDown(keyCode, event);
        }
    }

    @Override
    public boolean onKeyUp(int keyCode, final KeyEvent event) {
        //Log.i(&quot;python&quot;, &quot;key up &quot; + mView + &quot; &quot; + mView.mStarted);
        if (mView != null &amp;amp;&amp;amp; mView.mStarted &amp;amp;&amp;amp; SDLSurfaceView.nativeKey(keyCode, 0, event.getUnicodeChar())) {
            return true;
        } else {
            return super.onKeyUp(keyCode, event);
        }
    }

    protected void onDestroy() {
        mPurchaseDatabase.close();
        mBillingService.unbind();

        &lt;span style=&quot;color: #e06666;&quot;&gt;if (adView != null) {
            adView.destroy();
        }&lt;/span&gt;

        if (mView != null) {
            mView.onDestroy();
        }
        //Log.i(TAG, &quot;on destroy (exit1)&quot;);
        System.exit(0);
    }

    public static void start_service(String serviceTitle, String serviceDescription,
            String pythonServiceArgument) {
        Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class);
        String argument = PythonActivity.mActivity.getFilesDir().getAbsolutePath();
        String filesDirectory = PythonActivity.mActivity.mPath.getAbsolutePath();
        serviceIntent.putExtra(&quot;androidPrivate&quot;, argument);
        serviceIntent.putExtra(&quot;androidArgument&quot;, filesDirectory);
        serviceIntent.putExtra(&quot;pythonHome&quot;, argument);
        serviceIntent.putExtra(&quot;pythonPath&quot;, argument + &quot;:&quot; + filesDirectory + &quot;/lib&quot;);
        serviceIntent.putExtra(&quot;serviceTitle&quot;, serviceTitle);
        serviceIntent.putExtra(&quot;serviceDescription&quot;, serviceDescription);
        serviceIntent.putExtra(&quot;pythonServiceArgument&quot;, pythonServiceArgument);
        PythonActivity.mActivity.startService(serviceIntent);
    }

    public static void stop_service() {
        Intent serviceIntent = new Intent(PythonActivity.mActivity, PythonService.class);
        PythonActivity.mActivity.stopService(serviceIntent);
    }

    //----------------------------------------------------------------------------
    // Listener interface for onNewIntent
    //

    public interface NewIntentListener {
        void onNewIntent(Intent intent);
    }

    private List&lt;newintentlistener&gt; newIntentListeners = null;

    public void registerNewIntentListener(NewIntentListener listener) {
        if ( this.newIntentListeners == null )
            this.newIntentListeners = Collections.synchronizedList(new ArrayList&lt;newintentlistener&gt;());
        this.newIntentListeners.add(listener);
    }

    public void unregisterNewIntentListener(NewIntentListener listener) {
        if ( this.newIntentListeners == null )
            return;
        this.newIntentListeners.remove(listener);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        if ( this.newIntentListeners == null )
            return;
        if ( this.mView != null )
            this.mView.onResume();
        synchronized ( this.newIntentListeners ) {
            Iterator&lt;newintentlistener&gt; iterator = this.newIntentListeners.iterator();
            while ( iterator.hasNext() ) {
                (iterator.next()).onNewIntent(intent);
            }
        }
    }

    //----------------------------------------------------------------------------
    // Listener interface for onActivityResult
    //

    public interface ActivityResultListener {
        void onActivityResult(int requestCode, int resultCode, Intent data);
    }

    private List&lt;activityresultlistener&gt; activityResultListeners = null;

    public void registerActivityResultListener(ActivityResultListener listener) {
        if ( this.activityResultListeners == null )
            this.activityResultListeners = Collections.synchronizedList(new ArrayList&lt;activityresultlistener&gt;());
        this.activityResultListeners.add(listener);
    }

    public void unregisterActivityResultListener(ActivityResultListener listener) {
        if ( this.activityResultListeners == null )
            return;
        this.activityResultListeners.remove(listener);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if ( this.activityResultListeners == null )
            return;
        if ( this.mView != null )
            this.mView.onResume();
        synchronized ( this.activityResultListeners ) {
            Iterator&lt;activityresultlistener&gt; iterator = this.activityResultListeners.iterator();
            while ( iterator.hasNext() )
                (iterator.next()).onActivityResult(requestCode, resultCode, intent);
        }
    }

    //----------------------------------------------------------------------------
    // Billing
    //
    class PythonPurchaseObserver extends PurchaseObserver {
        public PythonPurchaseObserver(Handler handler) {
            super(PythonActivity.this, handler);
        }

        @Override
        public void onBillingSupported(boolean supported, String type) {
            if (Consts.DEBUG) {
                Log.i(TAG, &quot;supported: &quot; + supported);
            }

            String sup = &quot;1&quot;;
            if ( !supported )
                sup = &quot;0&quot;;
            if (type == null)
                type = Consts.ITEM_TYPE_INAPP;

            // add notification for python message queue
            mActivity.mBillingQueue.add(&quot;billingSupported|&quot; + type + &quot;|&quot; + sup);

            // for managed items, restore the database
            if ( type == Consts.ITEM_TYPE_INAPP &amp;amp;&amp;amp; supported ) {
                restoreDatabase();
            }
        }

        @Override
        public void onPurchaseStateChange(PurchaseState purchaseState, String itemId,
                int quantity, long purchaseTime, String developerPayload) {
            mActivity.mBillingQueue.add(
                &quot;purchaseStateChange|&quot; + itemId + &quot;|&quot; + purchaseState.toString());
        }

        @Override
        public void onRequestPurchaseResponse(RequestPurchase request,
                ResponseCode responseCode) {
            mActivity.mBillingQueue.add(
                &quot;requestPurchaseResponse|&quot; + request.mProductId + &quot;|&quot; + responseCode.toString());
        }

        @Override
        public void onRestoreTransactionsResponse(RestoreTransactions request,
                ResponseCode responseCode) {
            if (responseCode == ResponseCode.RESULT_OK) {
                mActivity.mBillingQueue.add(&quot;restoreTransaction|ok&quot;);
                if (Consts.DEBUG) {
                    Log.d(TAG, &quot;completed RestoreTransactions request&quot;);
                }
                // Update the shared preferences so that we don&#39;t perform
                // a RestoreTransactions again.
                SharedPreferences prefs = getPreferences(Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = prefs.edit();
                edit.putBoolean(DB_INITIALIZED, true);
                edit.commit();
            } else {
                if (Consts.DEBUG) {
                    Log.d(TAG, &quot;RestoreTransactions error: &quot; + responseCode);
                }

                mActivity.mBillingQueue.add(
                    &quot;restoreTransaction|error|&quot; + responseCode.toString());
            }
        }
    }

    /**
     * If the database has not been initialized, we send a
     * RESTORE_TRANSACTIONS request to Android Market to get the list of purchased items
     * for this user. This happens if the application has just been installed
     * or the user wiped data. We do not want to do this on every startup, rather, we want to do
     * only when the database needs to be initialized.
     */
    private void restoreDatabase() {
        SharedPreferences prefs = getPreferences(MODE_PRIVATE);
        boolean initialized = prefs.getBoolean(DB_INITIALIZED, false);
        if (!initialized) {
            mBillingService.restoreTransactions();
        }
    }

    /** An array of product list entries for the products that can be purchased. */

    private enum Managed { MANAGED, UNMANAGED, SUBSCRIPTION }


    private PythonPurchaseObserver mPythonPurchaseObserver;
    private Handler mBillingHandler;
    private BillingService mBillingService;
    private PurchaseDatabase mPurchaseDatabase;
    private String mPayloadContents;
    public List&lt;string&gt; mBillingQueue;

    public void billingServiceStart_() {
        mBillingQueue = new ArrayList&lt;string&gt;();

        // Start the billing part
        mPythonPurchaseObserver = new PythonPurchaseObserver(mBillingHandler);
        mBillingService = new BillingService();
        mBillingService.setContext(this);
        mPurchaseDatabase = new PurchaseDatabase(this);

        ResponseHandler.register(mPythonPurchaseObserver);
        if (!mBillingService.checkBillingSupported()) {
            //showDialog(DIALOG_CANNOT_CONNECT_ID);
            Log.w(TAG, &quot;NO BILLING SUPPORTED&quot;);
        }
        if (!mBillingService.checkBillingSupported(Consts.ITEM_TYPE_SUBSCRIPTION)) {
            //showDialog(DIALOG_SUBSCRIPTIONS_NOT_SUPPORTED_ID);
            Log.w(TAG, &quot;NO SUBSCRIPTION SUPPORTED&quot;);
        }
    }

    public void billingServiceStop_() {
    }

    public void billingBuy_(String mSku) {
        Managed mManagedType = Managed.MANAGED;
        if (Consts.DEBUG) {
            Log.d(TAG, &quot;buying sku: &quot; + mSku);
        }

        if (mManagedType == Managed.MANAGED) {
            if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                Log.w(TAG, &quot;ERROR IN BILLING REQUEST PURCHASE&quot;);
            }
        } else if (mManagedType == Managed.SUBSCRIPTION) {
            if (!mBillingService.requestPurchase(mSku, Consts.ITEM_TYPE_INAPP, mPayloadContents)) {
                Log.w(TAG, &quot;ERROR IN BILLING REQUEST PURCHASE&quot;);
            }
        }
    }

    public String billingGetPurchasedItems_() {
        String ownedItems = &quot;&quot;;
        Cursor cursor = mPurchaseDatabase.queryAllPurchasedItems();
        if (cursor == null)
            return &quot;&quot;;

        try {
            int productIdCol = cursor.getColumnIndexOrThrow(
                    PurchaseDatabase.PURCHASED_PRODUCT_ID_COL);
            int qtCol = cursor.getColumnIndexOrThrow(
                    PurchaseDatabase.PURCHASED_QUANTITY_COL);
            while (cursor.moveToNext()) {
                String productId = cursor.getString(productIdCol);
                String qt = cursor.getString(qtCol);

                productId = Security.unobfuscate(this, Configuration.billing_salt, productId);
                if ( productId == null )
                    continue;

                if ( ownedItems != &quot;&quot; )
                    ownedItems += &quot;\n&quot;;
                ownedItems += productId + &quot;,&quot; + qt;
            }
        } finally {
            cursor.close();
        }

        return ownedItems;
    }


    static void billingServiceStart() {
        mActivity.billingServiceStart_();
    }

    static void billingServiceStop() {
        mActivity.billingServiceStop_();
    }

    static void billingBuy(String sku) {
        mActivity.billingBuy_(sku);
    }

    static String billingGetPurchasedItems() {
        return mActivity.billingGetPurchasedItems_();
    }

    static String billingGetPendingMessage() {
        if (mActivity.mBillingQueue.isEmpty())
            return null;
        return mActivity.mBillingQueue.remove(0);
    }

}&lt;/string&gt;&lt;/string&gt;&lt;/activityresultlistener&gt;&lt;/activityresultlistener&gt;&lt;/activityresultlistener&gt;&lt;/newintentlistener&gt;&lt;/newintentlistener&gt;&lt;/newintentlistener&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &lt;b&gt;Your AndroidManifest.xml: (on AdActivity add android:process=&quot;:python&quot;)&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://docs.google.com/document/d/1Cr7ixoGoIxa5RDBllDotZcwzlGiH7ko5c8IahJdoL_A/edit?usp=sharing&quot;&gt;https://docs.google.com/document/d/1Cr7ixoGoIxa5RDBllDotZcwzlGiH7ko5c8IahJdoL_A/edit?usp=sharing&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
3. class YourApp(App):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def on_pause(self):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return True&lt;br /&gt;
&lt;br /&gt;
4. Generate your app for android&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It bad solution, but is work.Any ideas?</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7849004211799132584/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2013/12/work-solution-for-kivy-admob-on-android.html#comment-form' title='Комментарии: 9'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7849004211799132584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7849004211799132584'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2013/12/work-solution-for-kivy-admob-on-android.html' title='Worked solution for Kivy + Admob on android'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-1936297459287468266</id><published>2013-12-05T01:26:00.001+06:00</published><updated>2013-12-05T01:48:20.375+06:00</updated><title type='text'>kivy: How to i get google admob android source code?</title><content type='html'>&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td class=&quot;votecell&quot;&gt;&lt;div class=&quot;vote&quot;&gt;
&lt;span class=&quot;vote-count-post &quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
            
&lt;td class=&quot;postcell&quot;&gt;&lt;div&gt;
&lt;div class=&quot;post-text&quot; itemprop=&quot;description&quot;&gt;
I want to create (or migrate) google admob for android to kivy project,&lt;br /&gt;
Please, leave url to source code of admob or admob source code file here.&lt;br /&gt;
It need, because i not understand mechanizm of admob for android (admob url api)&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
Admob is not open-source, so I don&#39;t think you will be able to get this source code. &lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/1936297459287468266/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2013/12/how-to-i-get-google-admob-android.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1936297459287468266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1936297459287468266'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2013/12/how-to-i-get-google-admob-android.html' title='kivy: How to i get google admob android source code?'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-3398268263310755379</id><published>2013-05-02T03:05:00.000+06:00</published><updated>2013-05-02T03:05:28.363+06:00</updated><title type='text'>Про то, как прикрутить купленный ssl</title><content type='html'>Расскажу, как прикрутить ssl + nginx + django с примерами.&lt;br /&gt;
&lt;br /&gt;
Поэтапно - самого начала.&lt;br /&gt;
&lt;br /&gt;
Покупаем дешёвый (просто для безопасности сайта - можно купить за 600 руб )&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://visagency.ru/&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;96&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_5GBXlkYAGb-5mSAMMtqHFZPqSaDPk9MTVNMmNP5IFSbRWybWeLqSr4CIMJQSYcyHpELK8Ap3JodBIW1EKoqQHdsLeAq4rWEZgdNBq67C24NSqTGFzEDYrO-usEM3KRs0RP44xNvO8U70/s320/visa-agentstvo-ssl-simple.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
или подороже - для организации (тогда появится зелёненькая штука)&lt;br /&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/AVvXsEjrdyNiH-F7L4SgXRQqRM0Xw_Eroe5673wTlgp7RfmVjxSRCT4QQcZsH10RFzO5Z0G_wITfnzpew2DDqJ-LzpFIFe-qB6JLgOZPfSOQ0i9tmxVS_ND26yrVOBtIPPhSdexv2eCgo0E7uANv/s1600/ssl-advenced.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;26&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrdyNiH-F7L4SgXRQqRM0Xw_Eroe5673wTlgp7RfmVjxSRCT4QQcZsH10RFzO5Z0G_wITfnzpew2DDqJ-LzpFIFe-qB6JLgOZPfSOQ0i9tmxVS_ND26yrVOBtIPPhSdexv2eCgo0E7uANv/s320/ssl-advenced.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После покупки вам сразу в интерфейсе хостинга выдают private key &lt;br /&gt;
&lt;br /&gt;
После небольшого ожидания - вам вышлют public ключ на почту.&lt;br /&gt;
&lt;br /&gt;
Далее, настройки на сервере nginx&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; listen 443;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssl on;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssl_certificate /etc/ssl/SSL.crt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssl_certificate_key /etc/ssl/visa.key;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_name visagency.ru;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; location / {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uwsgi_pass 127.0.0.1:49001;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; charset&amp;nbsp; utf8;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; access_log /var/log/nginx/visa.log;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
где  /etc/ssl/SSL.crt - public key - собранный из двух сертификатов (почитайте на сайте поддержки сертификатов),&lt;br /&gt;
/etc/ssl/visa.conf - private key&lt;br /&gt;
&lt;br /&gt;
релоадим nginx - должно работать норм.&lt;br /&gt;
&lt;br /&gt;
sudo service nginx reload&lt;br /&gt;
&lt;br /&gt;
Вот ещё конфиг на redirect на https:&lt;br /&gt;
&lt;br /&gt;
server {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; listen 80;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; server_name visagency.ru;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; location / {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rewrite ^ https://visagency.ru$request_uri? permanent;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
} &lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/3398268263310755379/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2013/05/ssl.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/3398268263310755379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/3398268263310755379'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2013/05/ssl.html' title='Про то, как прикрутить купленный ssl'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_5GBXlkYAGb-5mSAMMtqHFZPqSaDPk9MTVNMmNP5IFSbRWybWeLqSr4CIMJQSYcyHpELK8Ap3JodBIW1EKoqQHdsLeAq4rWEZgdNBq67C24NSqTGFzEDYrO-usEM3KRs0RP44xNvO8U70/s72-c/visa-agentstvo-ssl-simple.png" height="72" width="72"/><thr:total>1</thr:total><georss:featurename>Россия</georss:featurename><georss:point>61.52401 105.31875600000001</georss:point><georss:box>-4.6225164999999961 -59.915618999999992 90 -89.446868999999992</georss:box></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-70938603387131310</id><published>2012-12-11T18:45:00.002+06:00</published><updated>2012-12-11T18:45:10.121+06:00</updated><title type='text'>django request meta HTTP_COOKIE get expires - get max_age</title><content type='html'>Оказывается из браузера нельзя на сервере достать expires и max_age у cookie,&lt;br /&gt;
&lt;br /&gt;
поэтому &lt;b&gt;нельзя&lt;/b&gt; сказать в django так&lt;br /&gt;
&lt;br /&gt;
import Cookie&lt;br /&gt;&lt;br /&gt;cookie = Cookie.SimpleCookie(request.META[&#39;HTTP_COOKIE&#39;]);&lt;br /&gt;
&lt;br /&gt;
cobj = cookie[&#39;some_cookie_name&#39;][&#39;expires&#39;] # Empty &quot;&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
и получить значение&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Прийдется самостоятельно кастомизировать время сервера в другую куку.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Например, так:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;cookie[&#39;set_cookie_time&#39;] = datetime.date.today().strftime(&#39;%F&#39;)</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/70938603387131310/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/12/django-request-meta-httpcookie-get.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/70938603387131310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/70938603387131310'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/12/django-request-meta-httpcookie-get.html' title='django request meta HTTP_COOKIE get expires - get max_age'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7911038098773183225</id><published>2012-10-10T04:41:00.002+06:00</published><updated>2012-10-10T04:41:51.618+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="math"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Применение классов при получении подробного решения онлайн</title><content type='html'>Задался Я целью сделать симплекс метод онлайн с подробным бесплатным решением.&lt;br /&gt;
&lt;br /&gt;
Как известно, обычно, подробное решение должно быть разбито на шаги, чтобы стало ясно.&lt;br /&gt;
&lt;br /&gt;
Чтобы было ясно и у меня в коде и чтобы не запутаться при написании такой сложной программы я ввел класс. Входящими параметрами в этот класс стали:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;функция, для которой необходимо найти экстремум&lt;/li&gt;
&lt;li&gt;этот экстремум является максимумом или минимумом&lt;/li&gt;
&lt;li&gt;и система условий в симплекс-задаче в ввиде списка данных (python-словарей)&lt;/li&gt;
&lt;/ul&gt;
В __init__ (в конструкторе) инитятся какие-то глобальные вещи, например, свободные члены, искусственные переменные, преобразуются данные к удобным.&lt;br /&gt;
&lt;br /&gt;
Далее, для каждого шага проверяется: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;нужно ли выполнять соотв. шаг (в отдельном методе объекта данного класса).&lt;/li&gt;
&lt;li&gt;В другом методе для данного шага выполняется преобразование входящих данных&lt;/li&gt;
&lt;li&gt;записывается состояние (слепок) данных на каком-то шаге в свойство объекта класса. (Например, запоминаются данные после приведения системы условий к каноническому виду, как требует симплекс-метод)&lt;/li&gt;
&lt;li&gt;Также в каком-то из методов для данного шага (на проверке или же преобразовании данных) - заполняются глобальные вещи, например, свободные переменные &lt;/li&gt;
&lt;/ul&gt;
&amp;nbsp;У нас всегда есть проходящие данные через все методы и куча слепков этих данных.&lt;br /&gt;
&lt;br /&gt;
Далее полученный объект данного класса пихается в django-шаблон, где происходит вывод решения задачи симплекс методом простыми манипуляциями if и for.&lt;br /&gt;
&lt;br /&gt;
Пример того, что получилось вы можете посмотреть по ссылке &lt;a href=&quot;http://www.kontrolnaya-rabota.ru/s/equal-many/simplex-method/&quot;&gt;симлекс метод онлайн&lt;/a&gt;&lt;br /&gt;
(там есть текстовый пример, чтобы не скучали и &lt;b&gt;видео пример&lt;/b&gt;)</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7911038098773183225/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/10/blog-post_3324.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7911038098773183225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7911038098773183225'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/10/blog-post_3324.html' title='Применение классов при получении подробного решения онлайн'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-5068245400169528113</id><published>2012-06-28T19:00:00.000+06:00</published><updated>2012-06-28T19:00:45.799+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="sudo"/><category scheme="http://www.blogger.com/atom/ns#" term="группа"/><category scheme="http://www.blogger.com/atom/ns#" term="пользователь"/><title type='text'>sudo usermod -G sudo -a USERNAME</title><content type='html'>sudo usermod -G sudo -a USERNAME</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/5068245400169528113/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/06/sudo-usermod-g-sudo-username.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5068245400169528113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5068245400169528113'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/06/sudo-usermod-g-sudo-username.html' title='sudo usermod -G sudo -a USERNAME'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-7039302260536815995</id><published>2012-06-26T00:37:00.000+06:00</published><updated>2012-06-26T00:37:08.760+06:00</updated><title type='text'>yota@telerossa.ru</title><content type='html'>Это мошенники. Просят выслать паспортные данные. Не высылайте!&lt;br /&gt;
&lt;br /&gt;
Я позвонил в yota - сказали, что - да, действительно мошенники.</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/7039302260536815995/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/06/yotatelerossaru.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7039302260536815995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/7039302260536815995'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/06/yotatelerossaru.html' title='yota@telerossa.ru'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-8566370226620924184</id><published>2012-05-13T05:14:00.000+06:00</published><updated>2012-05-13T05:14:49.538+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Определение направление радиус-вектора от одной точки к другой точки</title><content type='html'>Допустим, у нас есть две точки, например, центр города и отель.&lt;br /&gt;
&lt;br /&gt;
Нам нужно определить, в каком направлении нужно двигаться, чтобы при движении из центра города попасть в отель. Координаты центра города и отеля нам известны.&lt;br /&gt;
Для решения задачи:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Ставим точку центра города на бумажке.&lt;/li&gt;
&lt;li&gt;Строим через эту точку вертикальную и горизонтальную линии (оси x и y координат)&lt;/li&gt;
&lt;li&gt;Строим конечную точку (отель)&lt;/li&gt;
&lt;li&gt;Определяем в какой зоне координат находится конечная точка (в --, ++, -+, +-)&lt;/li&gt;
&lt;li&gt;Далее определяем угол между осью x и y&lt;/li&gt;
&lt;li&gt;Смотрим чему равен угол, &amp;lt; 45 - 45/2, &amp;gt; 45 + 45/2 или находится между&lt;/li&gt;
&lt;/ol&gt;
Тем самым мы поймем в какой зоне находится наша точка - по северному, западному, южному, восточному направлению или северно-западному, северо-восточному, юго-западному, юго-восточному ли находится отель.&lt;br /&gt;
&lt;br /&gt;
Код на языке python:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;import math


def get_direction_name((lng_city, lat_city), (lng_hotel, lat_hotel)):
    direction = get_direction((lng_city, lat_city), (lng_hotel, lat_hotel))
    name = dict(DIRECTIONS)[direction]
    return name


def get_direction((lng_city, lat_city), (lng_hotel, lat_hotel)):

    diff_lat = lat_hotel - lat_city
    diff_lng = lng_hotel - lng_city

    if math.fabs(diff_lng) &amp;gt; 180:
        diff_lng -= 360*diff_lng/math.fabs(diff_lng)


    is_mm = (diff_lat &amp;lt; 0) and (diff_lng &amp;lt; 0) and 1 or 0
    is_pp = (diff_lat &amp;gt; 0) and (diff_lng &amp;gt; 0) and 1 or 0
    is_mp = (diff_lat &amp;gt; 0) and (diff_lng &amp;lt; 0) and 1 or 0
    is_pm = (diff_lat &amp;lt; 0) and (diff_lng &amp;gt; 0) and 1 or 0

    if diff_lng:
        arg = math.fabs(diff_lat/diff_lng)
        degree = math.atan(arg)*180/math.pi
    else:
        degree = 90

    on_diagonal = 45 - 45.0/2 &amp;lt; degree &amp;lt; 45 + 45.0/2 and 1 or 0
    below_diagonal = degree &amp;lt; 45 - 45.0/2 and 1 or 0
    above_diagonal = degree &amp;gt; 45 + 45.0/2 and 1 or 0

    print is_pp, is_mm, is_pm, is_mp, on_diagonal, below_diagonal, above_diagonal

    direction_key = &#39;{0}-{1}-{2}-{3}-{4}-{5}-{6}&#39;.format(
        is_pp, is_mm, is_pm, is_mp, on_diagonal, below_diagonal, above_diagonal,
    )
    direction = _direction_map[direction_key]
    return direction

NORTH_EAST = &#39;north-east&#39;
NORTH_WEST = &#39;north-west&#39;
SOUTH_EAST = &#39;south-east&#39;
SOUTH_WEST = &#39;south-west&#39;
NORTH = &#39;north&#39;
SOUTH = &#39;south&#39;
EAST = &#39;east&#39;
WEST = &#39;west&#39;

DIRECTIONS = [
   (NORTH_EAST, _(u&#39;северо-восток&#39;)),
   (NORTH_WEST, _(u&#39;северо-запад&#39;)),
   (SOUTH_EAST, _(u&#39;юго-восток&#39;)),
   (SOUTH_WEST, _(u&#39;юго-запад&#39;)),
   (NORTH, _(u&#39;север&#39;)),
   (SOUTH, _(u&#39;юг&#39;)),
   (EAST, _(u&#39;восток&#39;)),
   (WEST, _(u&#39;запад&#39;)),
]

# Key: is_pp-is_mm-is_pm-is_mp-on_diagonal-below_diagonal-above_diagonal
_direction_map = {
    &#39;1-0-0-0-1-0-0&#39;: NORTH_EAST,
    &#39;1-0-0-0-0-1-0&#39;: EAST,
    &#39;1-0-0-0-0-0-1&#39;: NORTH,
    &#39;0-1-0-0-1-0-0&#39;: SOUTH_WEST,
    &#39;0-1-0-0-0-1-0&#39;: WEST,
    &#39;0-1-0-0-0-0-1&#39;: SOUTH,
    &#39;0-0-1-0-1-0-0&#39;: SOUTH_EAST,
    &#39;0-0-1-0-0-1-0&#39;: EAST,
    &#39;0-0-1-0-0-0-1&#39;: SOUTH,
    &#39;0-0-0-1-1-0-0&#39;: NORTH_WEST,
    &#39;0-0-0-1-0-1-0&#39;: WEST,
    &#39;0-0-0-1-0-0-1&#39;: NORTH,
}

&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/8566370226620924184/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8566370226620924184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8566370226620924184'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/05/blog-post.html' title='Определение направление радиус-вектора от одной точки к другой точки'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-4446224918833161619</id><published>2012-02-18T16:46:00.000+06:00</published><updated>2012-02-18T16:46:01.809+06:00</updated><title type='text'>get search bot in django</title><content type='html'>See this python code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;def _is_searchbot(request):
    user_agent = request.META.get(&#39;HTTP_USER_AGENT&#39;, None)
    if not user_agent:
        return False
    parts = re.findall(r&#39;([\w\-\s\.]*(yandex|google)[\w\-\s\.]*)&#39;, user_agent)
    if not parts:
        return False
    part = parts[0]
    if part not in _SEARCH_BOTS:
        return False
    return True

_SEARCH_BOTS = [
    (&#39;yandex.com&#39;, &#39;yandex&#39;),
    (&#39;www.yandex.com&#39;, &#39;yandex&#39;),
    (&#39;yandex.ru&#39;, &#39;yandex&#39;),
    (&#39;www.yandex.ru&#39;, &#39;yandex&#39;),
    (&#39;www.google.com&#39;, &#39;google&#39;),
    (&#39;google.com&#39;, &#39;google&#39;),
    (&#39;www.google.ru&#39;, &#39;google&#39;),
    (&#39;google.ru&#39;, &#39;google&#39;),
]
&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/4446224918833161619/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2012/02/get-search-bot-in-django.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/4446224918833161619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/4446224918833161619'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2012/02/get-search-bot-in-django.html' title='get search bot in django'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-6247213908015520402</id><published>2011-12-30T04:42:00.002+06:00</published><updated>2011-12-30T04:42:37.178+06:00</updated><title type='text'>Два способа формирования контекста для subprocessing.Pool.map</title><content type='html'>&lt;span id=&quot;internal-source-marker_0.6841482131143238&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;1. С использованием инициализатора и глобального окружения&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;from multiprocessing import Pool&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;def init_context(context):&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;globals().update(context)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;def f(x):&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;return x*multiplier&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;if __name__ == &#39;__main__&#39;:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pool = Pool(4, init_context, [{&#39;multiplier&#39;: 2},])&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;data = xrange(10)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;print pool.map(f, data)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;2. С использованием callable классов&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;from multiprocessing import Pool&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;class f(object):&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;def __init__(self, multiplier):&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.multiplier = multiplier&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;def __call__(self, x):&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return x*self.multiplier&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;if __name__ == &#39;__main__&#39;:&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;pool = Pool(4)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;data = xrange(10) &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Courier New; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;print pool.map(f(3), data)&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/6247213908015520402/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2011/12/subprocessingpoolmap.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6247213908015520402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/6247213908015520402'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2011/12/subprocessingpoolmap.html' title='Два способа формирования контекста для subprocessing.Pool.map'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-5707144993400018763</id><published>2011-12-25T05:16:00.002+06:00</published><updated>2011-12-25T05:16:05.256+06:00</updated><title type='text'>Легкий для использования объектно-ориентированный  thread pool framework</title><content type='html'>&lt;span style=&quot;background-color: white; color: black; display: inline ! important; float: none; font-family: Times; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt;&amp;nbsp;&lt;/span&gt;thread pool framework: под названием: &lt;/span&gt;&lt;br /&gt;
&lt;h1 class=&quot;epydoc&quot; style=&quot;-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; color: black; font-family: Times; font-size: 22px; font-style: italic; font-variant: normal; font-weight: bold; letter-spacing: normal; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;&quot;&gt;
threadpool&lt;/h1&gt;</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/5707144993400018763/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2011/12/thread-pool-framework.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5707144993400018763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/5707144993400018763'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2011/12/thread-pool-framework.html' title='Легкий для использования объектно-ориентированный  thread pool framework'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-2843643823016748303</id><published>2011-12-10T04:44:00.001+06:00</published><updated>2013-01-06T00:55:14.070+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="excel"/><category scheme="http://www.blogger.com/atom/ns#" term="import"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>django import excel</title><content type='html'>This publication is present of django system for import data from excel:&lt;br /&gt;
&lt;br /&gt;
Use this step by step for rapid start use wih django application:&lt;br /&gt;
&lt;br /&gt;
1. Follow to page https://github.com/satels/&lt;b&gt;django-import-excel&lt;/b&gt; and push the button &lt;b&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;Watch&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
2.Download this project https://github.com/satels/django-import-excel/zipball/master&lt;br /&gt;
3. Unpack, following to the folder and run &lt;i&gt;pip install -e&lt;/i&gt; . or &lt;i&gt;python setup.py install&lt;/i&gt;&lt;br /&gt;
4. In settings.py:&lt;br /&gt;
&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;import_excel&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
5. So, for example, you need&amp;nbsp; import the data from excel for model&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Book(models.Model):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; name = models.CharField(max_length=255)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; author = models.CharField(max_length=255)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The excel file contains the data&lt;br /&gt;
&lt;br /&gt;
name | author&lt;br /&gt;
&lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;Tom&lt;/span&gt; &lt;span class=&quot;hps&quot;&gt;Sawyer&lt;/span&gt;&lt;/span&gt; | &lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;Mark Twain&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;The Sands of&lt;/span&gt; &lt;span class=&quot;hps&quot;&gt;Mars&lt;/span&gt;&lt;/span&gt; | &lt;span class=&quot;short_text&quot; id=&quot;result_box&quot; lang=&quot;en&quot;&gt;&lt;span class=&quot;hps&quot;&gt;Arthur C. Clarke&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
To do is, create this form:&lt;br /&gt;
&lt;br /&gt;
from django.db import transaction&lt;br /&gt;
from import_excel.forms import ImportExcelForm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class BookImportForm(ImportExcelForm):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @transaction.autocommit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def update_callback(self, request, converted_items):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for book_item in converted_items[:1]:&lt;br /&gt;
&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; name = book_item[0]&lt;br /&gt;
&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; author = book_item[1]&lt;br /&gt;
&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; Book.objects.create(name=name, author=author)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее, в urls.py:&lt;br /&gt;
&lt;br /&gt;
urlpatterns = patterns(&#39;&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url(r&#39;^/books/import-from-excel/$&#39;, permission_required(&#39;books.add_book&#39;)(import_excel), {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
 &#39;FormClass&#39;: BookImportForm, &#39;next_url&#39;: &#39;/books/&#39;, &#39;with_good&#39;: True, 
&#39;template_name&#39;: &#39;import_excel/import_excel.html&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, name=&#39;book-import-excel&#39;),&lt;br /&gt;
),&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We see this in import book form , next_url - the url of page for redirect after succefull import request, with_good - it means, what must pre moderate data from excel file, also you must set template_name, if you have custom template (copy file from import_excel/templates/import_excel/import_excel.html)&lt;br /&gt;
&lt;br /&gt;
P.S. permission_required for django admin zone</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/2843643823016748303/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2011/12/django-import-excel.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/2843643823016748303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/2843643823016748303'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2011/12/django-import-excel.html' title='django import excel'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-8022833657609454778</id><published>2011-12-10T02:45:00.001+06:00</published><updated>2013-01-06T00:54:07.400+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="excel"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>django импорт excel</title><content type='html'>Появилась очень удобная система для импорта данных из excel в django:&lt;br /&gt;
&lt;br /&gt;
Чтобы начать использовать это приложение django в своем проекте:&lt;br /&gt;
&lt;br /&gt;
1. Переходим на страницу https://github.com/satels/&lt;b&gt;django-import-excel&lt;/b&gt; и нажимаем кнопку Watch&lt;br /&gt;
2.Скачиваем проект себе https://github.com/satels/django-import-excel/zipball/master&lt;br /&gt;
3. Распаковываем, переходим в папку и запускаем pip install -e . или же python setup.py install&lt;br /&gt;
4. В settings.py:&lt;br /&gt;
&lt;br /&gt;
INSTALLED_APPS = [&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;import_excel&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
5. Итак, например, нам надо импортировать данные из excel для модели&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Book(models.Model):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; name = models.CharField(max_length=255)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; author = models.CharField(max_length=255)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файл excel же содержит данные&lt;br /&gt;
&lt;br /&gt;
name | author&lt;br /&gt;
Мастер и Маргарита | Михаил Булгаков&lt;br /&gt;
И дольше века длится день | Чингиз Айтматов&lt;br /&gt;
&lt;br /&gt;
Для этого создаем форму&lt;br /&gt;
&lt;br /&gt;
from django.db import transaction&lt;br /&gt;
from import_excel.forms import ImportExcelForm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class BookImportForm(ImportExcelForm):&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; @transaction.autocommit&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; def update_callback(self, request, converted_data):&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for book_item in converted_data[1:]:&lt;br /&gt;
&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; name = book_item[0]&lt;br /&gt;
&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; author = book_item[1]&lt;br /&gt;
&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; Book.objects.create(name=name, author=author)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее, в urls.py:&lt;br /&gt;
&lt;br /&gt;
urlpatterns = patterns(&#39;&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; url(r&#39;^/books/import-from-excel/$&#39;, permission_required(&#39;books.add_book&#39;)(import_excel), {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &#39;FormClass&#39;: BookImportForm, &#39;next_url&#39;: &#39;/books/&#39;, &#39;with_good&#39;: True, &#39;template_name&#39;: &#39;import_excel/import_excel.html&#39;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, name=&#39;book-import-excel&#39;),&lt;br /&gt;
),&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Видим здесь мы указываем форму для загрузки книг, next_url - страницу для перехода после успешной загрузки, with_good - это значит, что надо подтвердить загружаемые данные с предварительным просмотром, также вы можете указывать template_name, если захотите задать свой (скопируйте файл из import_excel/templates/import_excel/import_excel.html)</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/8022833657609454778/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2011/12/django-excel.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8022833657609454778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/8022833657609454778'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2011/12/django-excel.html' title='django импорт excel'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7575977724059961153.post-1790267036503677784</id><published>2011-10-25T02:50:00.002+06:00</published><updated>2011-10-25T02:50:27.907+06:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="yandex"/><title type='text'>Склонятор имен на django</title><content type='html'>Склонятор имен на django можно найти по ссылке https://github.com/gugu/django-declension. Использует api яндекс склонятора http://nano.yandex.ru/project/inflect/

Кэширует результат в таблицу базы данных, имеется templatetag.</content><link rel='replies' type='application/atom+xml' href='http://satels.blogspot.com/feeds/1790267036503677784/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://satels.blogspot.com/2011/10/django.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1790267036503677784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7575977724059961153/posts/default/1790267036503677784'/><link rel='alternate' type='text/html' href='http://satels.blogspot.com/2011/10/django.html' title='Склонятор имен на django'/><author><name>Иван</name><uri>http://www.blogger.com/profile/13069909338656328369</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf5Q1Jv2yauTR_Veb_ofadiuvdEnyZlcErBKOjY3wISD1DNO5Q3eMMcJB85k1wUNp871BdQ7DPQCeKubwouRJ1Ph_XTAD5XPI1HLqisxoew0VcWixgCQRxdoKUH0GllbU/s150/IMG_0041.JPG'/></author><thr:total>0</thr:total></entry></feed>