<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Johan Van</title><generator>teletype.in</generator><description><![CDATA[Johan Van]]></description><image><url>https://teletype.in/files/11/63/1163f113-b4c9-4fff-a4a2-d933f1a7d57a.jpeg</url><title>Johan Van</title><link>https://teletype.in/@johanv</link></image><link>https://teletype.in/@johanv?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/johanv?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/johanv?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 17 May 2026 00:10:41 GMT</pubDate><lastBuildDate>Sun, 17 May 2026 00:10:41 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@johanv/st5hyyLj5Wa</guid><link>https://teletype.in/@johanv/st5hyyLj5Wa?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/st5hyyLj5Wa?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Инструмент для определения технологий на сайтах: Python-Wappalyzer</title><pubDate>Mon, 13 Mar 2023 09:56:28 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/9f/b19fc710-02f3-4288-b279-047d1b0f8e85.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/1c/bb/1cbbbaaa-6217-46c5-8c09-842bc7dc3361.jpeg"></img>Библиотека Python-Wappalyzer - это инструмент для определения технологий, используемых на веб-сайтах. Она использует базу данных Wappalyzer для анализа HTML-кода и других атрибутов веб-страниц для идентификации технологий, используемых на сайте.]]></description><content:encoded><![CDATA[
  <p id="gKjJ">Библиотека Python-Wappalyzer - это инструмент для определения технологий, используемых на веб-сайтах. Она использует базу данных Wappalyzer для анализа HTML-кода и других атрибутов веб-страниц для идентификации технологий, используемых на сайте.</p>
  <figure id="9JBh" class="m_column">
    <img src="https://img2.teletype.in/files/1c/bb/1cbbbaaa-6217-46c5-8c09-842bc7dc3361.jpeg" width="850" />
  </figure>
  <p id="6HBJ">Для установки библиотеки можно использовать pip. Например, <code>pip install python-Wappalyzer</code>.</p>
  <p id="Iohs">Пример использования библиотеки:</p>
  <pre id="GpuV" data-lang="python">from Wappalyzer import Wappalyzer, WebPage

w = Wappalyzer.latest()
page = WebPage.new_from_url(&#x27;https://www.example.com&#x27;)
technologies = w.analyze(page)
for t in technologies:
    print(t.name, t.version)</pre>
  <p id="5xdk">В этом примере мы создаем экземпляр класса Wappalyzer, загружаем последнюю версию базы данных технологий и анализируем страницу example.com для определения технологий, используемых на сайте. Результаты анализа будут выводиться на экран, показывая название и версию технологий.</p>
  <p id="gMJs">Важно отметить, что библиотека Python-Wappalyzer может не всегда работать корректно из-за изменений в HTML-коде или других атрибутах веб-страниц. Также, база данных технологий не всегда может быть актуальной.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/3q9mjSfeHT7</guid><link>https://teletype.in/@johanv/3q9mjSfeHT7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/3q9mjSfeHT7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Горячие клавиши PyCharm</title><pubDate>Sat, 11 Feb 2023 22:27:04 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e2/0e/e20ef171-bde5-470e-85ad-f04ebae2c7dd.png"></media:content><description><![CDATA[<img src="https://sun9-28.userapi.com/impg/yA1fBVeNde8XO4W6wcXIRRSAxDMrS4Bby1gDtg/0N0HUrAfEI0.jpg?size=1080x1080&amp;quality=95&amp;sign=8bcb0af68f2c2b474d85cb594292739c&amp;type=album"></img>]]></description><content:encoded><![CDATA[
  <figure id="AsPx" class="m_column">
    <img src="https://sun9-28.userapi.com/impg/yA1fBVeNde8XO4W6wcXIRRSAxDMrS4Bby1gDtg/0N0HUrAfEI0.jpg?size=1080x1080&quality=95&sign=8bcb0af68f2c2b474d85cb594292739c&type=album" width="1080" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/vo8XDgnBeW9</guid><link>https://teletype.in/@johanv/vo8XDgnBeW9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/vo8XDgnBeW9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>gif файл с прыгающим шариком</title><pubDate>Sat, 11 Feb 2023 22:23:35 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/c4/44/c444a258-a76f-43d5-bde2-6f4558fc4cc7.png"></media:content><description><![CDATA[<img src="https://sun9-17.userapi.com/impg/CGcxIVfO-S4fZQardteZMcb01aC7qbioiWE5aQ/wZVCrgz4vBk.jpg?size=1280x888&amp;quality=95&amp;sign=bb8275ec36c12cd914923bef92128a9c&amp;type=album"></img>Незнаем как вы, а нам захотелось немного магии к новому году.]]></description><content:encoded><![CDATA[
  <p id="XjAj">Незнаем как вы, а нам захотелось немного магии к новому году.</p>
  <p id="jygj">Вот маленький кусочек кода, который делает gif файл с прыгающим шариком, идею мы дали а дальше все на вашу фантазию)</p>
  <p id="4zpF">Скидывайте свои доработки в коменты, оценим)</p>
  <figure id="DPU8" class="m_column">
    <img src="https://sun9-17.userapi.com/impg/CGcxIVfO-S4fZQardteZMcb01aC7qbioiWE5aQ/wZVCrgz4vBk.jpg?size=1280x888&quality=95&sign=bb8275ec36c12cd914923bef92128a9c&type=album" width="1280" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/YVOf3R2ML1Q</guid><link>https://teletype.in/@johanv/YVOf3R2ML1Q?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/YVOf3R2ML1Q?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Отправка строки через сокет (python)</title><pubDate>Tue, 31 Jan 2023 16:11:58 GMT</pubDate><description><![CDATA[Это очень ОЧЕНЬ простая конструкция для того, как вы могли бы решить эту проблему. Прежде всего, вам нужно либо принять клиента (на стороне сервера) перед тем, как перейти в цикл while 1, потому что в каждом цикле вы принимаете нового клиента, либо вы делаете так, как я описал, вы перебрасываете клиента в отдельный поток, который вы обрабатываете самостоятельно с этого момента.]]></description><content:encoded><![CDATA[
  <hr />
  <pre id="ZNQ8" data-lang="python">import socket
from threading import *

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = &quot;192.168.1.3&quot;
port = 8000
print (host)
print (port)
serversocket.bind((host, port))

class client(Thread):
    def __init__(self, socket, address):
        Thread.__init__(self)
        self.sock = socket
        self.addr = address
        self.start()

    def run(self):
        while 1:
            print(&#x27;Client sent:&#x27;, self.sock.recv(1024).decode())
            self.sock.send(b&#x27;Oi you sent something to me&#x27;)

serversocket.listen(5)
print (&#x27;server started and listening&#x27;)
while 1:
    clientsocket, address = serversocket.accept()
    client(clientsocket, address)</pre>
  <p id="1m6Z">Это очень ОЧЕНЬ простая конструкция для того, как вы могли бы решить эту проблему. Прежде всего, вам нужно либо принять клиента (на стороне сервера) перед тем, как перейти в цикл while 1, потому что в каждом цикле вы принимаете нового клиента, либо вы делаете так, как я описал, вы перебрасываете клиента в отдельный поток, который вы обрабатываете самостоятельно с этого момента.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/IR8tz6xo7nq</guid><link>https://teletype.in/@johanv/IR8tz6xo7nq?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/IR8tz6xo7nq?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Как проверить url в Python? (искажен или нет)</title><pubDate>Tue, 31 Jan 2023 16:09:36 GMT</pubDate><description><![CDATA[Используйте пакет validators:]]></description><content:encoded><![CDATA[
  <hr />
  <p id="XTFp">Используйте пакет validators:</p>
  <pre id="EviL" data-lang="python">&gt;&gt;&gt; import validators
&gt;&gt;&gt; validators.url(&quot;http://google.com&quot;)
True
&gt;&gt;&gt; validators.url(&quot;http://google&quot;)
ValidationFailure(func=url, args={&#x27;value&#x27;: &#x27;http://google&#x27;, &#x27;require_tld&#x27;: True})
&gt;&gt;&gt; if not validators.url(&quot;http://google&quot;):
...     print &quot;not valid&quot;
... 
not valid
&gt;&gt;&gt;</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/jApap6VtF7W</guid><link>https://teletype.in/@johanv/jApap6VtF7W?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/jApap6VtF7W?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 74 supplied</title><pubDate>Tue, 31 Jan 2023 16:07:49 GMT</pubDate><description><![CDATA[Вам нужно передать последовательность, но вы забыли запятую, чтобы ваши параметры были кортежем:]]></description><content:encoded><![CDATA[
  <hr />
  <p id="65y6">Вам нужно передать последовательность, но вы забыли запятую, чтобы ваши параметры были кортежем:</p>
  <pre id="qJTm" data-lang="python">cursor.execute(&#x27;INSERT INTO images VALUES(?)&#x27;, (img,))</pre>
  <p id="56xJ">Без запятой (img) - это просто сгруппированное выражение, а не кортеж, и поэтому строка img рассматривается как входная последовательность. Если длина этой строки составляет 74 символа, то Python воспринимает ее как 74 отдельных значения привязки, каждое длиной в один символ.</p>
  <pre id="Uxi9" data-lang="python">&gt;&gt;&gt; len(img)
74
&gt;&gt;&gt; len((img,))
1</pre>
  <p id="4T4w">Если вам легче читать, вы также можете использовать литерал списка:</p>
  <pre id="ffaf" data-lang="python">cursor.execute(&#x27;INSERT INTO images VALUES(?)&#x27;, [img])</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/TxUKjJCcE7K</guid><link>https://teletype.in/@johanv/TxUKjJCcE7K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/TxUKjJCcE7K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Как обнаружить двойной щелчок в QTableView</title><pubDate>Tue, 31 Jan 2023 16:04:33 GMT</pubDate><description><![CDATA[Больше нет необходимости использовать СИГНАЛЫ:]]></description><content:encoded><![CDATA[
  <hr />
  <p id="lqsm">Больше нет необходимости использовать СИГНАЛЫ:</p>
  <pre id="3pkL" data-lang="python">self.your_table.doubleClicked.connect(your_function)</pre>
  <p id="Zjtt">&quot;doubleClicked&quot; наследуется от QAbstractItemView.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/7F9pRR48gTY</guid><link>https://teletype.in/@johanv/7F9pRR48gTY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/7F9pRR48gTY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Как сделать ячейку в QTableWidget только для чтения?</title><pubDate>Tue, 31 Jan 2023 16:01:40 GMT</pubDate><description><![CDATA[Для PyQt6 это то же самое, что и у @ozcanyarimdunya, но с перечислением EditTrigger:]]></description><content:encoded><![CDATA[
  <hr />
  <p id="cu0E">Для PyQt6 это то же самое, что и у @ozcanyarimdunya, но с перечислением EditTrigger:</p>
  <pre id="9tTY" data-lang="python">self.tableWidget.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/h_Ot82Gks3-</guid><link>https://teletype.in/@johanv/h_Ot82Gks3-?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/h_Ot82Gks3-?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Запуск HTML-кода в браузере (который генерируется BeautifulSoup) прямо из Python</title><pubDate>Tue, 31 Jan 2023 15:58:31 GMT</pubDate><description><![CDATA[Альтернатива с использованием NamedTemporaryFile (чтобы файл в конечном итоге был удален ОС):]]></description><content:encoded><![CDATA[
  <hr />
  <p id="TRXT">Альтернатива с использованием NamedTemporaryFile (чтобы файл в конечном итоге был удален ОС):</p>
  <pre id="1djW" data-lang="python">import tempfile
import webbrowser

html = &#x27;&lt;html&gt; ...  generated html string ...&lt;/html&gt;&#x27;

with tempfile.NamedTemporaryFile(&#x27;w&#x27;, delete=False, suffix=&#x27;.html&#x27;) as f:
    url = &#x27;file://&#x27; + f.name
    f.write(html)
webbrowser.open(url)</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@johanv/SO855bSsdrS</guid><link>https://teletype.in/@johanv/SO855bSsdrS?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv</link><comments>https://teletype.in/@johanv/SO855bSsdrS?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=johanv#comments</comments><dc:creator>johanv</dc:creator><title>Как уменьшить базу данных sqlite?</title><pubDate>Tue, 31 Jan 2023 15:54:08 GMT</pubDate><description><![CDATA[Команда VACUUM перестраивает всю базу данных. Есть несколько причин, по которым приложение может это сделать:]]></description><content:encoded><![CDATA[
  <hr />
  <p id="POAe">Команда VACUUM перестраивает всю базу данных. Есть несколько причин, по которым приложение может это сделать:</p>
  <p id="GYBR">- Если только SQLite не работает в режиме &quot;auto_vacuum=FULL&quot;, при удалении большого количества данных из файла базы данных остается пустое пространство, или &quot;свободные&quot; страницы базы данных. Это означает, что файл базы данных может быть больше, чем это необходимо. Выполнение VACUUM для восстановления базы данных позволяет вернуть это пространство и уменьшить размер файла базы данных.<br />- Частые вставки, обновления и удаления могут привести к фрагментации файла базы данных, когда данные для одной таблицы или индекса разбросаны по всему файлу базы данных. Выполнение VACUUM гарантирует, что каждая таблица и индекс хранятся в файле базы данных в основном смежно. В некоторых случаях VACUUM может также уменьшить количество частично заполненных страниц в базе данных, что еще больше уменьшает размер файла базы данных...</p>
  <p id="fbvS">Команда VACUUM работает путем копирования содержимого базы данных во временный файл базы данных, а затем перезаписывает оригинал содержимым временного файла. При перезаписи оригинала используется журнал отката или WAL-файл журнала записи вперед, как и при любой другой транзакции базы данных. Это означает, что при VACUUMing базы данных требуется вдвое больше свободного места на диске, чем размер исходного файла базы данных...</p>
  <hr />
  <p id="t2at">Just open a connection and execute the VACUUM command;</p>
  <pre id="FGZQ" data-lang="python">conn = sqlite3.connect(SQLITE_FILE)
conn.execute(&quot;VACUUM&quot;)
conn.close()</pre>
  <pre id="zAMt" data-lang="python">import sqlite3
conn = sqlite3.connect(&quot;database.db&quot;,isolation_level=None)
conn.execute(&quot;VACUUM&quot;)
conn.close()</pre>

]]></content:encoded></item></channel></rss>