parsed_data = json.loads(json_data)
ip_address = parsed_data["data"]["ipAddress"]
ip_address = parsed_data.get("data", {}).get("ipAddress", "N/A")
import json
json_data = '''
{
"data": {
"ipAddress": "192.168.1.1",
"abuseConfidenceScore": 85
}
}
'''
parsed_data = json.loads(json_data)
try:
ip_address = parsed_data.get("data", {}).get("ipAddress", "N/A")
score = parsed_data.get("data", {}).get("abuseConfidenceScore", 0)
print(f"IP: {ip_address}, Score: {score}")
except Exception as e:
print(f"Ошибка: {e}")
import requests
token = '...'
headers = {
"Authorization": f"Bearer {token}",
'Content-Type': 'application/x-www-form-urlencoded'
}
# Обязательные параметры (заполните своими значениями):
name = "lol" # Обязательное поле
platform = "windows" # Обязательное поле (например: "windows", "mac", "linux")
browser_type = "anty" # Обязательное поле (например: "chrome", "firefox", "anty")
proxy_type = "http"
proxy_host = "None" # Тут тоже что-то своё надо, видимо, вставлять.
useragent_mode = "manual"
useragent_value = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
# Остальные параметры (можно оставить пустыми или заполнить по необходимости):
tags = []
tabs = ""
main_website = ""
webrtc_mode = ""
webrtc_ip_address = ""
canvas_mode = ""
webgl_mode = ""
webgl_info_mode = ""
webgl_info_vendor = ""
webgl_info_renderer = ""
# Заменить webgl2Maximum на ваше. Это всего лишь пример:
webgl_info_webgl2_maximum = r'{\"MAX_SAMPLES\": 8, \"MAX_DRAW_BUFFERS\": 8, \"MAX_TEXTURE_SIZE\": 16384, \"MAX_ELEMENT_INDEX\": 4294967294, \"MAX_VIEWPORT_DIMS\": [16384, 16384], \"MAX_VERTEX_ATTRIBS\": 16, \"MAX_3D_TEXTURE_SIZE\": 2048, \"MAX_VARYING_VECTORS\": 30, \"MAX_ELEMENTS_INDICES\": 2147483647, \"MAX_TEXTURE_LOD_BIAS\": 15, \"MAX_COLOR_ATTACHMENTS\": 8, \"MAX_ELEMENTS_VERTICES\": 2147483647, \"MAX_RENDERBUFFER_SIZE\": 16384, \"MAX_UNIFORM_BLOCK_SIZE\": 65536, \"MAX_VARYING_COMPONENTS\": 120, \"MAX_TEXTURE_IMAGE_UNITS\": 32, \"MAX_ARRAY_TEXTURE_LAYERS\": 2048, \"MAX_PROGRAM_TEXEL_OFFSET\": 7, \"MIN_PROGRAM_TEXEL_OFFSET\": -8, \"MAX_CUBE_MAP_TEXTURE_SIZE\": 16384, \"MAX_VERTEX_UNIFORM_BLOCKS\": 13, \"MAX_VERTEX_UNIFORM_VECTORS\": 4096, \"MAX_COMBINED_UNIFORM_BLOCKS\": 60, \"MAX_FRAGMENT_UNIFORM_BLOCKS\": 13, \"MAX_UNIFORM_BUFFER_BINDINGS\": 72, \"MAX_FRAGMENT_UNIFORM_VECTORS\": 4096, \"MAX_VERTEX_OUTPUT_COMPONENTS\": 124, \"MAX_FRAGMENT_INPUT_COMPONENTS\": 124, \"MAX_VERTEX_UNIFORM_COMPONENTS\": 16384, \"MAX_VERTEX_TEXTURE_IMAGE_UNITS\": 32, \"MAX_FRAGMENT_UNIFORM_COMPONENTS\": 16384, \"UNIFORM_BUFFER_OFFSET_ALIGNMENT\": 256, \"MAX_COMBINED_TEXTURE_IMAGE_UNITS\": 64, \"MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS\": 229376, \"MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS\": 4, \"MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS\": 229376, \"MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS\": 4, \"MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS\": 128}'
notes_icon = ""
notes_color = ""
notes_style = ""
notes_content = ""
timezone_mode = ""
timezone_value = ""
locale_mode = ""
locale_value = ""
status_id = ""
geolocation_mode = ""
geolocation_latitude = ""
geolocation_longitude = ""
cpu_mode = ""
cpu_value = ""
memory_mode = ""
memory_value = ""
do_not_track = ""
proxy_id = ""
proxy_port = ""
proxy_login = ""
proxy_password = ""
proxy_name = ""
proxy_change_ip_url = ""
# F-строка
payload = f'name={name}&tags%5B%5D={tags}&tabs={tabs}&platform={platform}&mainWebsite={main_website}&useragent%5Bmode%5D={useragent_mode}&useragent%5Bvalue%5D={useragent_value}&webrtc%5Bmode%5D={webrtc_mode}&webrtc%5BipAddress%5D={webrtc_ip_address}&canvas%5Bmode%5D={canvas_mode}&webgl%5Bmode%5D={webgl_mode}&webglInfo%5Bmode%5D={webgl_info_mode}&webglInfo%5Bvendor%5D={webgl_info_vendor}&webglInfo%5Brenderer%5D={webgl_info_renderer}&webglInfo%5Bwebgl2Maximum%5D={webgl_info_webgl2_maximum}&webrtc%3A%20%7Bmode%3A%20%22altered%22%2C%20ipAddress%3A%20null%7D¬es%5Bicon%5D={notes_icon}¬es%5Bcolor%5D={notes_color}¬es%5Bstyle%5D={notes_style}¬es%5Bcontent%5D={notes_content}&timezone%5Bmode%5D={timezone_mode}&timezone%5Bvalue%5D={timezone_value}&locale%5Bmode%5D={locale_mode}&locale%5Bvalue%5D={locale_value}&statusId={status_id}&geolocation%5Bmode%5D={geolocation_mode}&geolocation%5Blatitude%5D={geolocation_latitude}&geolocation%5Blongitude%5D={geolocation_longitude}&cpu%5Bmode%5D={cpu_mode}&cpu%5Bvalue%5D={cpu_value}&memory%5Bmode%5D={memory_mode}&memory%5Bvalue%5D={memory_value}&doNotTrack={do_not_track}&browserType={browser_type}&proxy%5Bid%5D={proxy_id}&proxy%5Btype%5D={proxy_type}&proxy%5Bhost%5D={proxy_host}&proxy%5Bport%5D={proxy_port}&proxy%5Blogin%5D={proxy_login}&proxy%5Bpassword%5D={proxy_password}&proxy%5Bname%5D={proxy_name}&proxy%5BchangeIpUrl%5D={proxy_change_ip_url}'
url = "https://dolphin-anty-api.com/browser_profiles"
response = requests.request("POST", url, headers=headers, data=payload)
print(response.json())
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
// Проверяем, что изменение произошло в ячейке A1 нужного листа.
if (range.getA1Notation() === "A1"&& sheet.getName() === "Лист1") {
const newValue = range.getValue();
const b1Cell = sheet.getRange("B1");
const currentSum = b1Cell.getValue() || 0;
if (!isNaN(newValue)) {
b1Cell.setValue(currentSum + newValue);
}
}
}
зачем нужно прописывать мосты
В некоторых странах доступ к сети Tor может быть заблокирован. Мосты, не являющиеся частью публичного списка узлов, позволяют обойти эти блокировки, так как их сложнее обнаружить и заблокировать.
#Requires AutoHotkey v2.0
SendMode "Input"
SetWorkingDir A_ScriptDir
; Проверяем, передан ли URL
if !A_Args.Length {
MsgBox "Ошибка: Не указан URL. Используйте: `n`nOpenInFirefox.ahk `"https://example.com`""
ExitApp 1
}
URL := A_Args[1]
; Проверяем, запущен ли Firefox
if ProcessExist("firefox.exe") {
try {
; Активируем окно Firefox и вставляем URL в текущую вкладку
WinActivate "ahk_exe firefox.exe"
Sleep 200
Send "^l" ; Ctrl+L (фокус на адресную строку)
Sleep 100
SendInput URL "{Enter}"
} catch as e {
; Если не удалось активировать окно, открываем URL в новом окне
Run 'firefox.exe "' URL '"'
}
} else {
; Если Firefox не запущен, открываем URL в новом окне
Run 'firefox.exe "' URL '"'
}
"C:\path\to\AutoHotkeyUX.exe" "C:\path\to\open_in_firefox.ahk" "https:\\habr.com"
@echo off
"C:\path\to\AutoHotkeyUX.exe" "C:\path\to\open_in_firefox.ahk" %1
C:\path\to\start_in_firefox.bat "https://ya.ru"
Если же сложность не O(1), то почему? Ведь перемещать ничего не надо.Удаление среза реализовано как проход по удаляемым элементам с вызовом Py_DECREF на каждый.
import time
import matplotlib.pyplot as plt
def test_del_slice_complexity():
sizes = [10 ** 3, 10 ** 4, 10 ** 5, 10 ** 6]
times = []
for n in sizes:
# Создаем список
my_list = [1] * n
# Замеряем время удаления
start_time = time.perf_counter()
del my_list[n // 2:] # Удаляем 50% элементов
end_time = time.perf_counter()
elapsed = end_time - start_time
times.append(elapsed)
print(f"n = {n:>7}: {elapsed:.6f} сек")
# Визуализация результатов
plt.figure(figsize=(10, 5))
plt.plot(sizes, times, 'o-', label='Измеренное время')
plt.plot(sizes, [times[0] * n / sizes[0] for n in sizes], '--', label='Ожидаемое линейное время')
plt.xscale('log')
plt.yscale('log')
plt.xlabel('Размер списка (n)')
plt.ylabel('Время выполнения (сек)')
plt.title('Сложность операции del my_list[n//2:]')
plt.legend()
plt.grid(True)
plt.show()
if __name__ == "__main__":
test_del_slice_complexity()
logging
с ограничением размера лога параметром maxBytes
, чтобы не изобретать велосипед. я включаю символ "\n" в функции get_nmea_datetime
data=''
и оно может не обнуляться.with
, добавьте логирование и обработку исключений (для себя прежде всего), аннотации и комментарии к коду (для других), тем более, если он будет опубликован. import discord
from discord.ext import commands
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix="!", intents=intents)
async def load_extensions():
await bot.load_extension("ticket") # Загружаем Cog без .py
@bot.event
async def on_ready():
print(f"Бот {bot.user} готов!")
await load_extensions()
bot.run("***")
from discord.ext import commands
class TicketsCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.command(name="systicket")
async def systicket(self, ctx):
"""Обработка команды !systicket"""
# логика команды
await ctx.send("Система тикетов работает!") # Пример ответа
async def setup(bot):
await bot.add_cog(TicketsCog(bot)) # Важно: await и новое API discord.py 2.0+
from googleapiclient.discovery import build
from google.oauth2 import service_account
# Укажите путь к скачанному JSON-файлу сервисного аккаунта
SERVICE_ACCOUNT_FILE = 'ваш_сервис_аккаунт_файл.json'
# Настройка доступа
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=['https://www.googleapis.com/auth/spreadsheets'])
service = build('sheets', 'v4', credentials=credentials)
def update_note(spreadsheet_id, sheet_name, cell, note_text):
# Конвертация имени ячейки в индексы:
col = ord(cell[0].upper()) - ord('A')
row = int(cell[1:]) - 1
# Получаем ИД листа:
spreadsheet = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
fields="sheets(properties(sheetId,title))"
).execute()
sheetId = [sheet['properties']['sheetId'] for sheet in spreadsheet['sheets'] if
sheet['properties']['title'] == sheet_name][0]
print(sheetId)
service.spreadsheets().batchUpdate(
spreadsheetId=spreadsheet_id,
body={
"requests": [{
"updateCells": {
"range": {
"sheetId": sheetId,
"startRowIndex": row,
#"endRowIndex": row + 1,
"startColumnIndex": col,
#"endColumnIndex": col + 1
},
"rows": [{"values": [{"note": note_text}]}],
"fields": "note"
}
}]
}
).execute()
# Использование:
spreadsheetId = 'ваш ид таблицы'
update_note(spreadsheetId, "Лист3", "B3", "Тестовое примечание.")
def read_note(spreadsheet_id, sheet_name, cell) -> str or None:
response = service.spreadsheets().get(
spreadsheetId=spreadsheet_id,
ranges=[f"{sheet_name}!{cell}"],
fields='sheets(data.rowData.values.note)'
).execute()
note = (response
.get('sheets', [{}])[0]
.get('data', [{}])[0]
.get('rowData', [{}])[0]
.get('values', [{}])[0]
.get('note'))
return note
# Использование:
spreadsheetId = 'ваш ид таблицы'
read_note(spreadsheetId, 'Лист3', 'B3')
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpWord\PhpWord;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
// 1. Сначала добавляем изображение как фон (первый слой)
$section->addImage(
__DIR__ . '/img/test.png',
[
'width' => 100, // Ширина изображения
'height' => 100, // Высота изображения
'wrappingStyle' => 'behind', // Ключевой параметр: изображение становится фоном
'positioning' => 'relative', // Относительное позиционирование
'posHorizontal' => \PhpOffice\PhpWord\Style\Image::POSITION_HORIZONTAL_CENTER,
'posVertical' => \PhpOffice\PhpWord\Style\Image::POSITION_VERTICAL_TOP,
]
);
// 2. Затем добавляем текст (второй слой)
$section->addText(
'Lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam error doloribus doloremque voluptate natus, numquam laudantium ducimus cupiditate, cumque nulla fugit consectetur ipsam nobis illum enim. Rerum, nulla. Laborum, tempora?',
[
'name' => 'Arial',
],
[
//'alignment' => 'center', // Выравнивание текста по центру
'spaceAfter' => 0,
]
);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$objWriter->save('layered.docx');
echo "Текст наложен на изображение.";
def get_db_path():
if getattr(sys, 'frozen', False):
# Если запущен из .exe, использовать путь рядом с исполняемым файлом
return os.path.join(os.path.dirname(sys.executable), 'database.db')
else:
# При обычном запуске — рядом с .py файлом
return os.path.join(os.path.dirname(__file__), 'database.db')
pyinstaller --onefile --windowed app.py
pyinstaller --onefile --add-data "database.db;." --windowed app.py
// Остановка моторов при запуске
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
analogWrite(ENA, 0);
analogWrite(ENB, 0);
void loop() {
if (radio.available()) {
int joystickData[2] = {0};
radio.read(&joystickData, sizeof(joystickData));
controlMotors(joystickData[0], joystickData[1]);
} else {
controlMotors(512, 512); // Нейтральное положение джойстика
}
}
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 2025-05-24
// @description try to take over the world!
// @author You
// @match https://store.steampowered.com/news/app/550
// @icon https://www.google.com/s2/favicons?sz=64&domain=steampowered.com
// @grant none
// ==/UserScript==
(function() {
'use strict';
function redOctober() {
var textElements1 = document.querySelectorAll("#responsive_page_template_content > div.page_content_ctn > div > div > div > div > div > div > div > div > div > span");
textElements1.forEach(function(element) {
element.style.color = 'red';
});
}
const observer = new MutationObserver(redOctober);
observer.observe(document.body, {
childList: true,
subtree: true
});
})();