Три дэ печать руками.
Осторожно!!! Моргание!!! Вспышки света!!!!
Но он ходил без каски - прошу обратить внимание на последствия
Осторожно!!! Моргание!!! Вспышки света!!!!
А на джазовый концерт :) В том числе и вот за этим:
Где ещё можно так нахально сесть и рисовать незнакомых людей?
Джаз в Саратове реже чем дождь в пустыне, но эти ребята молодцы, причём играют наряду с джазовыми стандартами своё тоже
В общем мы ушли довольные :)
Пост не рекомендуется для лиц с тонкой душевной организацией и для тех, кто совершенен в своем деле...
.
.
...и вообще не читайте его.
Тут глупости, написанные таким же глупым человеком. Поэтому считайте, что пост написал умственно отсталый инвалид, который заслуживает снисхождения.
Каждый, думающий, что он умеет в программирование, должен нацарапать калькулятор и безумно гордиться своей поделкой(С) выпячив грудь, ибо его шэдэвор неповторим, уникален (нет) и вапще я у мамы самый красивый.
Но думать что ты Гуру кодинга вовосе необязательно, достаточно верить в себя и быть настолько смелым, чтобы показать свои высеры публике, подставив панамку.
Ну и главное не забывать делать вид, что ты во всём этом разбираешься, и сделать содержимое ниже - это как два пальца об асфальт, оставив за кадром сопли, слёзы и прочие выделения человеческого организма.
Ну штош, пришло время приступить и надеяться на то, что всё было предусмотрено, любая ситуация была смоделирована, тесты прошли успешно и, казалось бы, можно уже начать заниматься математикой.
Самое главное при создании какой-либо программулины - это диалог с тем, кто пользуется вашими поделками.
Но, как вы понимаете, это вовсе не обязательно, поэтому в первой версии вычислительного скрипта поздороваемся сдержанно и без всяких там панибратств.
Поприветствуем юзверя)))
# Ты запустил эту хуйню. Теперь обратного пути нет.
print("Простой калькулятор. Введи q, чтобы выйти.") # Тебе дан шанс пойти по своим делам или воспользоваться каклькуляторов в тефоне
# ---------------- Погнали в бесконечный цикл!!! Или тебе надо два плют два сложить?? ----------------
while True: # Игра началась. Хули смотришь? Действуй.Про вайл тру - после кода ниж)))
# Пытаемся вытянуть из пользователя первое число. Стрип на случай, если он долбоёб и понаставил пробелов.
first = input("Первое число (или q для выхода): ").strip()
if first.lower() == "q": # Умный выбор. Всё бросить и уйти. Завидую.
print("Пока!") # Прощай, свободный человек!
break # Вырываемся из ада бесконечного цикла. УРА!
# ---------------- ловим чуш на вводе ----------------
try:
a = float(first) # Попытка превратить введённый бред в число. Молимся.
except ValueError: # А вот и нет, тут не число! Типуля за капмуктером опять что-то наклацал.
print("Это не число. Попробуй ещё раз.") # Терпеливо объясняем очевидное. Опять.А можно было бы и матом
continue # Отматываем плёнку и заставляем его страдать с начала.
# ---------------- че делаем-то? ----------------
op = input("Операция (+ - * /): ").strip() # Выбор, от которого зависит всё.
# Проверяем, не долбоёб ли пользователь, который ввёл знак из другого математиичкского мирв.
if op != "+" and op != "-" and op != "*" and op != "/":
print("Нужна одна из операций: + - * /") # Говорим по-русски, что мы тут умеем.
continue # Назад, в начало, учить матешу!
# ---------------- а теперь фторой кондедат ----------------
second = input("Второе число: ").strip() # Снова пытаемся добыть цифру из дикого зверя по имени Пользователь.
try:
b = float(second) # Вторая попытка. Пальцы скрещены.
except ValueError: # Блядь! Опять провал. Он неисправим.
print("Это не число. Попробуй ещё раз.") #вздох Повторяем мантру.
continue
# ----------------смотрим че получилось ----------------
if op == "+": # Если выбрал плюс — всё просто, как два пальца обоссать
result = a + b # Складываем. Надеемся, числа не слишком большие.
elif op == "-": # Вычитание. Уносим готовенькое.
result = a - b
elif op == "*": # Умножение. Всё растёт, как на дрожжах.
result = a * b
else: # А вот и деление... Наше всё, источник вечных ошибок.
if b == 0: # ОПАСНОСТЬ! Пользователь пытается разделить на ноль и схлопнуть вселенную кхуям
print("Ошибка: деление на ноль") # Срочно останавливаем это безумие.
continue # И отправляем его в начало без результата. Пусть думает над своим преступлением.
result = a / b # Если ноля нет — делим спокойно. Фух.
# ---------------- ФИНАЛ. ПОКАЗЫВАЕМ, НА ЧТО СПОСОБНА ЭТА ХУЙНЯ ----------------
print("Результат:", result) # Выводим то, ради чего всё это начиналось. Наслаждайся, мамкин математик.
Как видите это вообще такое простое скучное и беспонтовое решение, и на первый взгляд самодостаточное.
Первое число (или q для выхода): 12
Операция (+ - * /): +
Второе число: 85
Результат: 97.0
Первое число (или q для выхода): 23
Операция (+ - * /): *
Второе число: 45879
Результат: 1055217.0
Первое число (или q для выхода):
После ввода каждого числа нада жмать Интер, а это тупо, садомазохично и не юзерфрендли. Юзер не секретарша на клавиатуре. Он царь и бог, который хочет ввести 5 + 3 и сразу, блять, получить ответ, а не участвовать в этом концерте одинокого пианиста для трёх рук - число-энтер-оператор-энтер-число-энтер.
Логичным будет задать вопрос: "асхуяле?" Потому что консольный ввод (input()) в питоне это тупой, линейный идиот. Он читает строку только до переноса строки. Он не умеет в реальном времени, как человек в калькуляторе. Он слепой старик, который просит тебя говорить по одному слову и стучать палкой по голове после каждого.
Можно отказаться от input() и читать всё одной строкой, как нормальные люди. Потом самому разбирать, где числа, где операторы.
Это круто, мощно, молодёжно, но это уже не 10 строк кода, а отдельная ёбля.
# Примерно так выглядит вход в лигу крутых типочков
expression = input("Введи весь пример (например, 5+3): ").replace(" ", "")
# А дальше надо эту строку распетушить на числа и знаки внимания
# проверить, что там нет букв, обработать приоритеты (приоритеты - это
# што вычисляется вначаеле - сложение или умножение, в скопках или за ними
# думаю со школы помните)
# Короче, адский труд для ТСа. Но зато одной строкой!
Есть два стула
Есть несколько путей:
Ну или воспользоваться тем, который есть в вашей, простигосподи, винде - но тогда и пост нахуй не нужен.
Путь воена, Света:
Итак, блять, путь воина. Это не для слабаков. Это когда ты говоришь стандартному input(): иди нахуй со своим энтером и начинаешь парсить (левои или правой - не важно) всё сам, разрывая строку голыми зубами.
Зырим
Отказываемся от пошагового опроса. Берем всё выражение одной строкой: "5 + 3 * 2". А потом начинается адский труд (для ТС конечно же, ибо тру программистам - это как в носе ковырять): надо превратить эту строку в числа и операторы, понять приоритет, посчитать. Это как узнать рецепт кокаколы с помощью масспектрометра и наколотить такую же с газиками. Ну почти.
Первым делом надо выкинуть из строки пробелы, чтобы они не мешались. Пользователь мог написать и 5+3, и 5 + 3, и 5 + 3 - а нам похуй.
expression = input("Введи выражение, герой (типа 5+3 или 2*4): ").replace(" ", "")
# теперь тут голая строка без пробелов "5+3*2"
Теперь разбираем на хапчасти эту строку (числа и операторы), это самый ебучий момент. Надо пройтись по строке символ за символом и понять, где кончается одно число и начинается оператор. Число может быть 5, а может быть -12.5. Оператор, если что это +, -, *, /. Может быть даже ** для степени.
Делается это обычно через конченный автомат (state machine). Грубо говоря идём по строке и включив размышлительниншну бурчим себе под нос:
Сейчас я читаю цифру - это часть числа. Встретил точку - это тоже часть числа (дробная). Встретил плюс/минус/умножить/поделить - всё, число закончилось. Запоминаем число, запоминаем оператор, начинаем собирать новое число.
вот простой пример:
primer = [] # Сюда будем складывать то, шо нашли
current_number = '' # Здесь накапливаем цифры текущего числа
for char in expression:
if char.isdigit() or char == '.': # Если это цифра или точка то это часть числа
current_number += char
else: # Если это не цифра (значит, имератор)
if current_number: # Если до этого собирали число
primer.append(float(current_number)) # записать число
current_number = '' # обнулить сборшык
primer.append(char) # записать сам оператор
# не забыть про последнее число в строке
if current_number:
primer.append(float(current_number))
# Теперь вся хуйня для "5+3*2" будет выглядеть так: [5.0, '+', 3.0, '*', 2.0]
Помните про уроки матепатики и приоритеты считания?
Вот тут пиздец. Есть список, который primer - это [5.0, '+', 3.0, '*', 2.0]. Если выполнять слева направо, получится (5+3)*2 = 16. Но математика говорит, что умножение приоритетнее!!!!111 Должно быть 5 + (3*2) = 11.
Значит, нужно пройти по списку несколько раз. Сначала найти все умножения и деления (*, /), выполнить их, и заменить в списке тройку элементов (число, оператор, число) на одно число (результат). Потом повторить для сложения и вычитания (+, -).
Это можно делать на месте, изменяя список primer, пока в нём не останется одно число которое итоговый результат.
например
i = 0
while i < len(primer):
if primer[i] == '*':
# умножение детектед. ьерём предыдущее и следующее числа
result = primer[i-1] * primer[i+1]
# меняем тройку элементов на результат: [..., a, '*', b, ...] -> [..., result, ...]
primer[i-1:i+2] = [result] # заменить нада
i -= 1 # откатитть индекс, потому что список стал короче
i += 1
# и анал огично для '/', затем для '+', '-'
Обрабатываем нештатное ситуфциё - без этого никуда. Юзер непредсказуем! А что, если он ввёл 5++3 или 12.*7 или просто "у меня большой хуй"? Парсер должен не сломаться, а красиво послать нахуй. Нужны проверки на каждом шагу, например в строке только разрешённые символы (цифры, точка, операторы), число точек в числе не больше одной, после оператора идёт число (а не другой оператор), деления на ноль нет, список primer в итоге имеет правильную структуру - чередование число-оператор-число или 2 + хуй?
в итоге получается полный (нет) контроль. Можно добавить скобки (), унарные минусы -5, степени **, функции sin(). Но цена этого огромная, ебучая работа, тонны кода для разбора и валидации, и постоянные баги на ёбнутых случаях вроде -.5 + .3).
Это путь для тех, кому надо понять, как всё устроено изнутри, или для тех, кому нужна кастомная, очень специфичная штука некакувсех. Для обычного калькулятора это избыточное оверкилл-масло, высеченное из гранита ногтяме Кукухи.
Но, резюмируя, это не для пользы, а это про силу воли, упрямство и желание сделать всё своими руками, даже если для этого придётся изобрести свою велик срулём. Удачи че, воен. Ты её, блять, заслужил.
Собствено вот, зырьте какая большая ебала получается:
# арём главной функцией, дескать она тут правит бал!!!111
def calculate_warrior_style():
"""
Калькулятор ниибического вида.
Принимает примерчики типа "5+3*2" и считает с учётом приоритета вычислкний.
Поддерживает скобки, минусы и степень (**).
"""
# вводим в курс дела, юзер должен понять, куда он попал.
print("=== КАЛЬКУЛЯТОР ===")
print("пеши выражение одной строкой. Поддерживаются + - * / **, скобки и числа с точкой.")
print("Пример: 5+3*2 или 10.5 / 2 - 1 или -(2+3)**2") #юзер всё равно чтото сломает....
print("Введи 'q' для выхода. Удачи, ёпта.\n")
# Бесконечный цикл. Выход только через break или смерть.
while True:
# спрашиваем "че надо?".
raw_input = input("Твоё выражение (или q): ").strip() # strip() отрезает пробелы по краям, на случай если он долбоёб.
if raw_input.lower() == 'q': # Если ввёл q (даже заглавную) это капитуляция.
print("пока, слабак") # Прощаемся с честью.
break # Ломаем цикл. Свобода. теперь питание компьютера можно отключить
# наведем порядок, уберем хлам
expression = raw_input.replace(" ", "") # выкуриваем ВСЕ пробелы из середины. Они нам не нужны.
if not expression: # Если после чистки осталась пустота...
print("Ты ввёл пустоту. Великий воин молчит.") # ...сообщаем о творческом кризисе.
continue # Отматываем цикл назад, пусть вводит заново, ёбаный хуй
# превращаем строку в запчасти).
try:
primer = primerize(expression) # Вызываем функцию-ошибалку. Она может выплюнуть ошибку.
except ValueError as exc: # Если мясорубка сломалась и выплюнула ValueError...
print(f"Ошибка: {exc}") # ...показываем пользователю, в чём он мудак.
continue # И заставляем его страдать с начала.
# гля прикол - делаем из (5+3) в обратную польскую запись (5 3 +). Так легче считать.лол
try:
rpn = to_rpn(primer) # косплей сортировочной станции. Мозголомно, но работает.
except ValueError as exc: # Если алгоритм нашел кривые скобки...
print(f"Ошибка: {exc}") # ...тыкаем пользователя в его же косяк.
continue # Нахуй иди исправляй.
# смотрим что наваяла обратная польская запись.
try:
result = eval_rpn(rpn) # Берём и начинаем жать.
except ValueError as exc: # Если не хватило чисел или деление на ноль...
print(f"Ошибка: {exc}") # ...объясняем, что он натворил.
continue # И отправляем в начало.
# неужели написал правильно??? ахуеть - выдаем результат.
print(f"Результат твоего высера: {result}") # Пользователь доволен. Мы измотаны.
print("-" * 40) # Рисуем разделитель. Эстетика, блять.
# ========== функция primerize о которой была речь выше) ==========
# Берёт строку и с остервенением кромсает её на числа, операторы и скобки.
def primerize(expression):
primer = [] # Сюда будем складывать добычу: числа и операторы.
i = 0 # Указатель. Бежит по строке, как алкаш по бутылкам.
prev_type = None # Следим, что было прошлым: число('num'), оператор('op'), скобка. Чтобы отличить унарный минус.
# Главный цикл чтения строки. Пока не кончится.
while i < len(expression):
char = expression[i] # Берём текущий символ.
# Если пробел то игнорируем, их уже вырезали, но на всякий.
if char.isspace():
i += 1
continue
# Если символ цифра или точка, значит, это начало чилса
if char.isdigit() or char == ".":
start = i # Запоминаем, где число началось.
dots = 0 # Щёчик точек в числе (больше одной это ошибка).
digits = 0 # Счётчик цифр (ноль цифр это тоже ошибка).
# Пока не кончилась строка и идут цифры/точки, собираем число.
while i < len(expression) and (expression[i].isdigit() or expression[i] == "."):
if expression[i] == ".":
dots += 1 # Нашли точку и запомнели
else:
digits += 1 # Нашли цифру. Тоже запоминаем.
i += 1 # Переходим к следующему символу.
# Вырезаем кусок строки от start до i это наше число в виде строки.
number_str = expression[start:i]
# Проверяем фсю хуйню: если точек >1 или цифр нет, то это не число.
if dots > 1 or digits == 0:
raise ValueError(f"это не число блять!!!! '{number_str}'") # Выбрасываем ошибку наверх.
primer.append(float(number_str)) # Превращаем строку в float и кладём в список.
prev_type = "num" # Запоминаем, что последним было число.
continue # Переходим к следующему символу.
# Если символ звёздочка и следующая за ней тоже звёздочка, это оператор степени '**'.
if char == "*" and i + 1 < len(expression) and expression[i + 1] == "*":
op = "**" # Это оператор.
i += 2 # Перепрыгиваем сразу два символа.
# Иначе, если символ,то один из разрешённых операторов или скобок...
elif char in "+-*/()":
op = char # Это наш оператор или скобка.
i += 1 # Переходим к следующему символу.
else:
# Если символ не опознан это пиздец. Выбрасываем ошибку.
raise ValueError(f"че за хуйня? '{char}'")
# ----- Обработка ЛЕВОЙ скобки ( -----
if op == "(":
# в нашем случае цобка не может идти после числа или другой правой скобки без оператора. Пример: 5( или )(.
if prev_type in ("num", ")"):
raise ValueError("пропущен оператор перед '('")
primer.append(op) # Кладём скобку в список.
prev_type = "(" # Запоминаем, что была скобка.
continue # Едем дальше.
# ----- Обработка ПРАВОЙ скобки ')' -----
if op == ")":
# Скобка не может идти после оператора или другой левой скобки. Пример: +) или ().
if prev_type in (None, "op", "("):
raise ValueError("лишняя ')' или пустые скобки, повнимательнее там")
primer.append(op) # Кладём скобку в список.
prev_type = ")" # Запоминаем.
continue # Едем дальше.
# ----- Обработка УНАРНОГО МИНУСА (например, -5 или -(2+3)) -----
# Если текущий оператор '-' и перед ним ничего не было (начало строки) или был оператор/левая скобка...
if op == "-" and (prev_type is None or prev_type in ("op", "(")):
primer.append("u-") # Кладём специальный "унарный минус".
prev_type = "op" # Запоминаем, что был оператор.
continue # Едем дальше.
# ----- Обработка ОБЫЧНЫХ БИНАРНЫХ ОПЕРАТОРОВ (+, -, *, /, **) -----
# Оператор не может быть в начале или после другого оператора/левой скобки. Пример: +5 или (*.
if prev_type in (None, "op", "("):
raise ValueError(f"оператор '{op}' стоит не на месте")
primer.append(op) # Всё зоебок, кладём оператор в список.
prev_type = "op" # Запоминаем.
# Проверка после разбора всей строки. Выражение не может кончиться оператором или открытой скобкой.
if prev_type in (None, "op", "("):
raise ValueError("так примеры не пишут! выражение не может заканчиваться оператором или '('")
return primer # Возвращаем гордый список токенов.
# ========== ФУНКЦИЯ-ПЕРЕВОДЧИК (to_rpn) ==========
# Превращает обычную запись в обратную польскую с помощью сортировочной станции.
def to_rpn(primer):
output = [] # Сюда пойдёт итоговая RPN-последовательность.
stack = [] # Временный стек для операторов и скобок.
# Словарь приоритетов: чем больше цифра, тем круче оператор.
precedence = {"u-": 3, "**": 4, "*": 2, "/": 2, "+": 1, "-": 1}
right_assoc = {"u-", "**"} # Множество право-ассоциативных операторов (для степени и унарного минуса).
# Идём по каждому primer на входе.
for token in primer:
# Если оно число, сразу отправляем его на выход.
if isinstance(token, float):
output.append(token)
continue
# Если оно левая скобка, пихаем её в стек.
if token == "(":
stack.append(token)
continue
# Если правая скобка, выталкиваем из стека ВСЁ до левой скобки в output.
if token == ")":
while stack and stack[-1] != "(": # Пока стек не пуст и наверху не '('...
output.append(stack.pop()) # ...выталкиваем операторы в output.
if not stack: # Если стек опустел, а '(' так и не нашли...
raise ValueError("скобки не совпадают") # ...скобки кривые.
stack.pop() # Выкидываем саму '(' из стека.
continue
# Если это оператор (унарный или бинарный)...
if token in precedence:
# Пока в стеке есть операторы с БОЛЬШИМ ИЛИ РАВНЫМ (для лево-ассоциативных) приоритетом...
while stack and stack[-1] in precedence:
top = stack[-1] # Смотрим на верхний оператор в стеке.
# Сравниваем приоритеты с учётом ассоциативности.
if (token not in right_assoc and precedence[token] <= precedence[top]) or (
token in right_assoc and precedence[token] < precedence[top]
):
output.append(stack.pop()) # Выталкиваем старый оператор в output.
else:
break # Иначе останавливаемся.
stack.append(token) # Кладём текущий оператор в стек.
continue
# Сюда попасть не должны. На всякий — ошибка.
raise ValueError(f"непонятно че вапще'{token}'")
# Когда все эти штуки обработаны, выталкиваем оставшиеся в стеке операторы в output.
while stack:
top = stack.pop() # Берём верхний элемент.
if top in ("(", ")"): # Если это скобка значит, они не совпали.
raise ValueError("скобки не совпадают")
output.append(top) # Иначе отправляем в output.
return output # Возвращаем чистую, прекрасную рпн.
# ========== ФУНКЦИЯ-ВЫЧИСЛИТЕЛЬ (eval_rpn) ==========
# Считает результат по обратной польской записи.
def eval_rpn(primer):
stack = [] # Рабочий стек для чисел.
# Идём по каждому токену в RPN-последовательности.
for token in primer:
# Если токен число, просто пихаем его в стек.
if isinstance(token, float):
stack.append(token)
continue
# Если токен унарный минус, берём одно число из стека, меняем знак и кладём обратно.
if token == "u-":
if len(stack) < 1: # Проверяем, что в стеке есть хотя бы одно число.
raise ValueError("унарный минус без числа")
stack.append(-stack.pop()) # Берём число, меняем знак, кладём обратно.
continue
# Для бинарных операторов нужно ДВА числа из стека.
if len(stack) < 2:
raise ValueError("недостаточно чисел для операции")
b = stack.pop() # Второй аргумент (справа).
a = stack.pop() # Первый аргумент (слева).
# Смотрим, какой оператор, и делаем соответствующую хуйню.
if token == "+":
stack.append(a + b)
elif token == "-":
stack.append(a - b)
elif token == "*":
stack.append(a * b)
elif token == "/":
if b == 0: # Проверяем святое деление на ноль.
raise ValueError("еблан - деление на ноль")
stack.append(a / b)
elif token == "**":
stack.append(a ** b)
else:
raise ValueError(f"че надо-то? '{token}'")
# В конце в стеке должно остаться РОВНО ОДНО число результат.
if len(stack) != 1:
raise ValueError("ошибка вычисления")
return stack[0] # Возвращаем это число плод наших трудов.
# ========== ТОЧКА ВХОДА ==========
if __name__ == "__main__":
calculate_warrior_style() # ...запуск шайтан машыны
Оно трудное, большое и никому нахуй неужное, но существует))) и с дружелюбным "интерфейсом"
=== КАЛЬКУЛЯТОР ===
пеши выражение одной строкой. Поддерживаются + - * / **, скобки и числа с точкой.
Пример: 5+3*2 или 10.5 / 2 - 1 или -(2+3)**2
Введи 'q' для выхода. Удачи, ёпта.
Твоё выражение (или q): (2+9*458)-148*789/36987
Результат твоего высера: 4120.842890745397
----------------------------------------
ну и на больших степенях не охуевайте - эта хуёва туча, умноженная сама на себя 4545 рази в результате это число с десятками тысяч цифр. Вот нахуя оно вам? Оно настолько огромное, что стандартный тип float (число с плавающей запятой) в питоне просто не может его в себя вместить. У float есть максимальный предел, после которого он говорит "Идите нахуй Извини, ботан, я сдаюсь, это бесконечность и мы такого еще не проходили"
Твоё выражение (или q): 5 + 7 + (4895875/785545+987565 )**789 + 78798**4545
Traceback (most recent call last):
File "/calc.py", line 248, in <module>
calculate_warrior_style() # ...запуск шайтан машыны
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/calc.py", line 44, in calculate_warrior_style
result = eval_rpn(rpn) # Берём и начинаем жать.
^^^^^^^^^^^^^
File "/calc.py", line 235, in eval_rpn
stack.append(a ** b)
~~^^~~
OverflowError: (34, 'Numerical result out of range')
Так что вот вам ещё доза ненужной информации на сегодня, ну для разнообразия, думаю, пойдёт. Ах да, и наверняка в комментарии придут специалисты в данной области которые скажут что в ТС мудак - собственно ради этого всё и писалось 🥹
Порхай как пчела.
Всем привет, дорогие друзья!
Cегодня я с новой поделкой... Где-то год тому назад, может чуть больше, общались мы с @Henry_Aester на тему гугл доков, и Генри озвучила опасения, что скоро они могут схлопнуться и нужна альтернатива. Я тогда выяснил, что, оказывается, существуют яндекс доки, так что без инструмента не останемся в случае чего, но мысль в голове засела и свербела там потихоньку. А потом появилась срочная внезапная необходимость писать лиспублику и как-то все проекты в долгий ящик уехали (ФоксФрейм, если что, как идея зародился тогда же, всё времени не хватало его добить). А так как я по натуре своей люблю проектировать, я, конечно же, в башке своей продолжал проектировать, ну и, у меня вырвалось...
В общем я написал свой редактор для написания книг. Это достаточно простой текстовый редактор с минимальным форматированием, версионированием, выгрузкой книг в основные форматы и возможностью коллективной работы над документом (правда пока не в онлайне, а по очереди). Ну и комментирование на случай приглашения бетаридеров. Думаю, за ссылку меня не покарают, это ж не реклама. Я со всего этого ничего не имею.
Не претендую на замену всем привычных гуглдоков, но на случай чего для себя инструмент сделал. Да и чего греха таить, новую книгу я планирую писать в нём (на скрине не настоящий текст, это рыба ☺️).
В общем, пробуйте, буду рад обратной связи! Там, скорее всего, даже какая-нибудь базовая фигня отвалится при небольшом нажиме, но локально я шатал последние пару дней, вроде держалось.
Всем хороших книг!
UDP Забыл написать, вёрстку под мобильные устройства я не оптимизировал, так как писать книги с телефона мне лично прям очень неудобно, я особенно и не старался в ту сторону думать. Возможно, доработаю по необходимости.
Всем привет!
Сегодня я хочу начать с истории. Своей истории.
До тринадцати лет я слушал всё подряд, что играло, то и слушал. Но в тринадцать лет всё изменилось: на магнитокассете, купленной двоюродным братом, я услышал группу КИНО. Это было громом посреди ясного неба, и, как это обычно с громом бывает, он принёс озарение: какой же кал я слушал раньше. Не судите строго, тринадцать лет, юношеский максимализм, пубертат и прочие радости взросления, что взять с подростка. Однако на пару ближайших лет я стал киноманом. Для меня не было других групп, и все песни написанные не Цоем, казались лишними в этом мироздании. Потом, конечно попустило, и теперь я слушаю монгольскую народную музыку, но что было, то было.
Слушал песни я очень вдумчиво, искал смыслы и собирал по крупицам информацию. Меня интересовало всё: почему "горе ты моё от ума", кто такой Гарин, и при чём тут гиперболоиды и, разумеется, на чём играл Рави Шанкар (кстати, кто это?). Это были конец девяностых — начало нулевых. Интернета тогда не было, если не во всей России, то точно в нашей деревне, где стационарных телефонов то на всю деревню было ровно три штуки. Поэтому основным источником информации для меня было полное собрание Большой Советской Энциклопедии. Именно из неё я узнал, что ситар — это индийский народный струнный инструмент, и увидел, как он выглядит. Послушать его, возможности, конечно, не было, но я был уверен, что уж если сам Джордж Харрисон от него заторчал, то это что-то невероятно крутое!
Шли годы, я узнал про Наше Радио и стал его постоянным слушателем. Не знаю, как сейчас, а раньше на нём было множество годных передач про музыкантов, истории песен и групп, и всё в таком духе. И в одной передаче я услышал, что Чиграков Сергей для записи песни Стиллайф брал ситар у (вроде бы) БГ.
Так как к тому времени я был хорошо знаком с творчеством Чижа, песню эту я, разумеется, знал и неожиданно для себя понял, что вот эта вот странно настроенная гитара, струны которой дребезжат об лады как у меня, когда я только учился зажимать свои первые аккорды — это и есть ситар(?) Вот это новость!
Итак, о чём это я? Ах, да, ситар!
Индийский народный струнный инструмент. Родня уровня "седьмая вода на киселе" всем известной гитаре (это не помешает нам станцевать танец в честь воссоединения родни). Но, если гитара при всей своей замечательности и универсальности всё-таки инструмент простой, то ситар — это тот самый Сингам из того самого фильма.
Сколько струн у гитары? Шесть? Семь? Да что вы говорите: восемь бывает?
ДВАДЦАТЬ! Двадцать струн — это нормально, если речь идёт о ситаре. Пять мелодических, две бурдонных и от девяти до тринадцати "оркестровых". Именно "оркестровые" струны, звуча в унисон, придают тот самый характерный «дребезжащий» призвук ситару.
Говорите, у гитары резонатор? Пфффф! У ситара их ДВА: один примерно там же, где у гитары, а второй у головки грифа. Гриф, кстати, тоже полый и вполне сойдёт за третий. Оба резонатора делаются из тыквы, но тыква — это не по пацански брахмански, поэтому ситар украшают палисандром и слоновой костью.
Что? На гитаре играют медиатором? Ха! "Подержите моё пиво" — говорит мизра́б, сиреч, специальный "коготь для игры на ситаре.
По предположениям учёных в Индию ситар попал примерно в тринадцатом столетии вероятно из Персии, где обретался прародитель многих родственных ситару инструментов — сетар. "Се" в персидском языке означает цифру "три", поэтому предполагается, что изначально струн было три. Однако, попав в Индию, ситар быстро оброс слоновой костью, дополнительными струнами, а так же понтами, и стал таким, каким его знают любители индийской народной музыки и Джорджа Харрисона.
Слушаем.
Дисклемер: возможно вы это уже читали, так как
это перенос старого поста и баян бабаян, но уж если спать, так с
королевой, если переезжать, так со своими постами.
Много пишут о том как давали в долг и потом теряли друзей, ну а я пожалуй расскажу как в долг брал я. Скажу сразу, что отдавать вовремя получалось не всегда, так как в молодости парнем я был отчаянным слегка ебанутым, за новые проекты в своей жизни брался стремительно и не всегда обдуманно. Поэтому кривая моего жизненного успеха выглядела не как график линейной функции, постепенно стремящейся вверх, а как кардиограмма гипертоника после свидания с Бахусом, со стремительными взлётами и не менее стремительными падениями. Крупные суммы у родственников я брал дважды.
В первый раз я взял деньги, когда нужно было
гасить долг по кредиту на авто (ну а хуле, 21 год, больше ж не было на что кредит взять), что бы продать авто и решить некоторые проблемы (был у меня магазинчик небольшой и возникли там проблемы). Взял у дяди, он терпеливо ждал полгода, потому как несмотря на сравнительно низкую цену, это кредитное ведро ни в какую не хотело продаваться.
Во второй раз мне срочно понадобилась лицензия под тендер (магазин к тому времени был благополучно закрыт и сферу деятельности я сменил), а как назло контора погрязла в дебиторке. Платить никто из клиентов упорно не хотел, а на горизонте маячил спасительный контракт. Решено было попросить у Андрея, мужа маминой сестры. Звоню ему, говорю:
- Андрей, одолжи денег.
- А сколько надо?
- десятка (10 000$).
- десять не могу, есть шесть.
- ну хотя бы шесть, очень выручишь.
И выручил.Недостающую сумму наскрёб там-сям, контракт заключил, выполнил, деньги вернул. Но примечательно тут вот что: Когдая приехал отдавать долг, я немного прифигел. Оказывается, Андрей одолжил мне денег, несмотря на то, что своих проблем у него было выше крыши, а именно: за полгода до этого он одолжил 15 000$ другому нашему родственнику на квартиру, обвалился рубль и эту сумму Андрею отдавали по 3 копейки, на его предприятии прошла какая то проверка и его директор оказался под следствием, моя дебиторка была просто смешной, по сравнению с тем, сколько были должны ему.
Когда я к нему приехал, привёз в благодарность банку красной икры. Андрей в ответ вручил мне огромный кругляк сыра. К слову, этими кругляками у него был завален весь холодильник. На мой удивлённый взгляд Андрей улыбнулся и ответил:
- у молочного завода нет денег рассчитаться за работы, вот и отдают молочкой.
Вот так, человек не смотря на то что своих проблем по горло, помогал другим.
З.Ы.: в долг давно не брал, нет нужды и надеюсь не будет. Сам, когда просят, даю, не смотря на то что возвращают не всегда или ,бывает, долго. Жена из-за этого зудит порой... Ну и похуй, такая вот теперь игра в "заплати другому" :)
В парке Ривьера каких только животных нет. Про Попугариум я уже писала. Ещё есть пингвинятник, контактный зоопарк, где честно говоря ничего интересного кроме вот этой прелести, небольшой океанариум, дельфинарий, где есть белые киты и морской лев, но шоу не такое интересное, как в Сочи-Парке. Это из того, где мы были. А ещё есть Альпака-парк, но туда мы не пошли.
Зато в Доме капибар побывали два раза. До этого я уже успела потискать настоящих капибарочек в Москве, и зная какие они клёвые, очень хотела попасть к капам в Сочи.
В Сочи всё устроено немного по-другому. У них, как и в МСК, четыре капибары, и сеанс на полчаса. Но к каждой порции гостей они выпускают двух, а две другие в это время отдыхают. Вполне разумно, хотя в Москве, где к тебе выбегала вся толпа, не было ощущения, что капам это в тягость, и тут собственно не было. Но если владельцы хотят, чтобы капы отдыхали, мы не против, пусть отдыхают. Мы просто сходили два раза, каждый раз к разным, и в итоге познакомились со всеми четырьмя :)
Когда к ним заходишь, видишь как в дальнем зале чилибонят отдыхающие капы
А гостям сначала проводят инструктаж и показывают зверей помельче: карликовых африканских ёжиков
и вот этих сладких прелестей, капибаркиных родственников
морских хрюшечек! ну какой же розовый нос для поцелуев )
А потом наконец всех ведут к капам
Чья такая сладкая длинная мордень )
Дают кормить их капусткой, за которую капы идут к тебе на ручки. И поливают слюнками ) у них всегда текут слюни, когда они жуют сочный корм
Фартук, который выдают при входе, не помогает )
Но разве это не ерунда? На Сочинском солнышке штаны потом высыхают мгновенно. А общение с капибарками бесценно :)
Всем, кто досмотрел и дочитал - спасибо за внимание!
Не так давно, почитывая всякие интересности, узнал про такую страшную болезнь, как номофобия. Чуть-чуть почитав и немножко разобравшись, выяснилось, что это не прям так уж болезнь, чтобы прям с кашлем, с температурой, сыпью и зудом в ачьчке. Это тот диагноз, который мы сами себе поставили, вернее даже сами себе его заработали когда сотый раз потянулись к куску стекла и пластика в кармане, то время, пока писяли или какали. Жопой.
Давайте, возгласы "я не такой, это все неправда, это не про меня!!!1111".
Да, конечно, это все не про вас.
Вот смотрите, у нас есть наш любимый замечательный сайт. Место, где мы выливаем всю ежедневную мелкую бытовую хуйню наружу - что съели, на кого наорали, какой мудак пернул в маршрутке, или подрезал на дороге, или вот смотрите, я создал сообщество имени себя, или не себя, или сообщество для всякой срани.
И мы так рады этому. А делаем мы это для того, чтобы почувствовать связь, услышать в ответ «Да, братан, я тоже, прикинь, гыыыы». Получить свою порцию дешевых, но так нужных плюсиков. И в этом весь пиздец. На этом пиздец заканчивается.
И номофобия начинается не тогда, когда мы боимся остаться без своего любимого девайса в виде современного смартфона. Она начинается тогда, когда телефон становится единственным выходом в мир принятия. Где не надо выходить из дома, где весь мир помещается у тебя на ладони, у нас на ладони. Мы выходим из дома, и у нас первая мысль – а хватит ли зарядки до вечера? А не забыл ли я этот сраный телефон? И эти мысли вовсе не потому, что мы можем заблудиться в чужом городе, в котором живем всю жизнь, а потому что мы можем выпасть из потока, из этого общего непрерывного ебучего пиздежа, где мы частица, которая должна быть на связи, где новый пост может набрать плюсики, а в ответы уже пришло что-то важное. Хуй там, что-то важное никогда не приходит. Нихуя никогда ничего не приходит важного. Один флуд сплошной, блядь.
Особо внимательные могут поймать себя на том, что рефлекторно обновляем ленту сайта, где бы мы ни находились. В лифте, на лестнице, в гробу, под землей. И не потому, что там что-то новое, а потому, что тишина и пустота в голове стали страшней, чем вид очередного мема или спора двух давно знакомых уже нам людей с другим долбоебом в комментариях и прочей срач экзенциальной дыры.
Без него мы можем остаться наедине с собой, а это, сука, страшно, блядь. Пиздец как. Потому что я сам по себе, скажу за себя, не самый приятный собеседник, не самый интересный, от которого не спрячешься где-нибудь в бане или под одеялом, или в сугробе, которых сейчас по всей нашей необъятной родине намело кучу.
А наш любимый сайт это лекарство. Мы приходим сюда за подтверждением того, что мы не одни в этой ебаной реальности. Что чем чаще мы это делаем, тем сильнее привязываем свою потребность в связи, в одобрении. В простом ау, хуйло, ты там живой? И вот уже не получается толком заснуть, не пролистав ленту. Нельзя никак выпить кофе, не сфоткав его. Нельзя пережить одиночество в толпе без наушников в ушах и экрана перед ебалом. Можно, конечно, когда глаза сами по себе закрываются. Но это такая привычка. Привычка. Может быть даже где-то пагубная
Так что, номофобия - это скорее не боязнь остаться без связи. Это, наверное, боязнь остаться без какого-то источника смысла, каким бы дешевым он ни был. Без этого быстрого, легкого и доступного дофамина, который поставляет нам наш общий сайт, тяжеловато приходится.
Но, как мы знаем из рекламы начала нулевых, что профилактика лучше, чем лечение. Верно? И она проста и сложна как хуй. Всего лишь научиться скучать. Просто посидеть, повтыкая в стену пять минут, не вынимая телефон. Перетерпеть этот зуд в очке. Понять, что нихуя страшного не случится, если, блядь, не увидишь свой, блядь, входящий, блядь, какой-то там оповещатор, что ценность не в количестве уведомлений. Ну вообще, кто, блядь, на это способен в мире, где каждая секунда простоя должна быть заполнена скроллингом? Не знаю.
А выход, наверное, один. Иногда осознанно класть эту пластиково-стеклянную хуйню в другую комнату. Выходить на улицу, трогать траву, смотреть по сторонам, орать на бабок-проституток, которые сидят, блядь, на лавочке суки днями. Но не в экран. Читать книгу из бумаги, которая не пиликает, и просто помнить, что мы это не аватарки на сайте. Мы это кусок мяса с мозгом, который может тупить в потолок и быть при этом абсолютно счастливым. А телефон и наш сайт это всего лишь инструменты, как молоток. И да, иногда этим молотком можно забить гвоздь, а иногда дать себе по яйцам. Можно, конечно же, ежедневно выбрать, а что же нам сегодня по душе?
Но это всё не про нас, мы не болеем...
Это третья и заключительная часть разбора судебной системы России. Предыдущие части, как и другие аналогичные статьи, можно найти в моей подборке правового ликбеза.
Помните, в прошлый раз я сказал, что с арбитражем все несколько проще? Если ЭТО просто, то теперь представьте насколько ещё более путанными являются суды общей юрисдикции. Это, как ни сложно догадаться, обобщённое название для всех судов, связанных с участием граждан. По своей сути это некая условная категория для самых разных категорий дел, в которую входят ещё две формальные ветки: гражданские и военные суды. Гражданские суды, да не смутит вас название, рассматривают практически все категории дел, касающиеся населения - уголовные, административные, гражданские. В известной поговорке “Украл, выпил, в тюрьму” пропущен этап суда за кражу и проводиться он будет как раз к общей юрисдикции. Спор с соседкой сверху относительно затопления квартиры - туда же. Оспаривание штрафа за неоплаченную парковку... ну вы поняли. Однако, понятное дело, смешивать всё в одну кучу нельзя, поэтому даже в судах первой инстанции есть как минимум соответствующие категориям дел отделы обеспечения судопроизводства, а порой и отдельные судьи, специализирующиеся по конкретно этим делам. В областных судах дела и вовсе распределяют по так называемым коллегиям, каждая из которых занимается рассмотрением соответствующих категорий дел. Также они, само собой, разграничиваются всё той же территориальной подсудностью.
В основе этой ветви лежат так называемые мировые судьи - простые работяги из мира судов, относимые по сути судам на уровне органов местного самоуправления. И у них достаточно ограниченная подсудность, например, уголовные дела они рассматривают только если максимальное наказание за инкриминируемое деяние не превышает трех лет лишения свободы, а в рамках гражданского это как правило небольшие иски - не более 50 тысяч рублей (или ста, если речь идёт о защите прав потребителей). Если дело не подсудно мировому судье, оно отправляется сразу в районный суд и рассматривается именно там по правилам первой инстанции. Если же дело было рассмотрено мировым судом, то в этом случае районный будет апелляционной или кассационной инстанцией. Над ними в свою очередь стоят областные (окружные) суды, которые также рассматривают дела в силу своей подсудности в зависимости от того, с какого “заведения” началось дело и какие этапы оно прошло.
При этом названия вышеуказанных судов достаточно условное и зависит от величины субъекта. В Москве районные суды прямо соответствуют районам и округам, в то время как, например, в республике Башкортостан статус районного имеют Уфимский районный суд и Стерлитамакский городской суд, а областным является Верховный суд Республики Башкортостан. И тут вы, наверняка, спросите: хорошо, допустим дело попало сразу на рассмотрение в Уфимский районный суд, затем прошло апелляцию в ВСРБ, а где тогда кассацию рассматривать? Хороший на самом деле вопрос, я даже скажу больше: в определённых случаях рассмотрение дела может стартовать сразу с областного суда. Для таких случаев существуют специальные “межрайонные” суды - пять апелляционных, девять кассационных (с циферными наименованиями), а также по одному апелляционному и кассационному военному суду. В случае если вышестоящих судов не хватает, все непоместившиеся инстанции рассматривается в соответствующем межрайонном суде. Независимо от цепочки рассмотрений в итоге последней инстанцией всегда будет Верховный суд.
Кстати да, о военных судах. Военным судам подсудны достаточно специфические категории дел, относимые, как не сложно догадаться, к военнослужащим - в рамках совершённых ими преступлений или правонарушений, либо по гражданским искам воинских частей и искам к воинским частям и должностных лицам. Без территориальной привязки их система следующая: Гарнизонный военный суд (аналог районного), затем Окружной или флотский военные суды (всего их 9 штук, перемешанных между армией и флотом), вышеназванные отдельные апелляционные и кассационные военные суды и, наконец, Военная коллегия Верховного суда. Их разбор - тема отдельного поста, причём явно не от меня.
Отдельно от всей структуры стоят третейские суды, которые вообще ближе к арбитражным. Они тоже являются частью судебной экосистемы, но находятся вне рамок федерального аппарата и регулируемые со стороны государства лишь куцым законом “Об арбитраже (третейском разбирательстве)”. Это целиком и полностью частные суды и их подсудность определяется строго заключенным договором и только если указанное условие не ставится под сомнение одной из стороной. Будучи сугубо коммерческой структурой, да ещё и довольно часто создаваемой крупными корпорациями как карманный суд, рассчитывать на её абсолютную беспристрастность не стоит, да и квалификация таких судей, скажем так, может сильно отличаться от общепринятых стандартов. По сути, судьей в третейском суде может стать любой человек, так как критерии отбора определяются самой организацией. К счастью, такие суды занимаются лишь заранее оговоренными гражданскими спорами, где участниками преимущественно являются юридические лица.
Кстати говоря, есть такая интересная деталь в рамках локализации названий российской судебной системы. В Соединённом королевстве есть такая организация - Лондонский международный арбитражный суд, он же London Court of International Arbitration, а в США в свою очередь есть Американская арбитражная ассоциация. Суть в том, по своей сути эти структуры ближе именно к третейским судам, так как под арбитражем как в Британии, так и в США понимаются именно дела, подсудность которых выбрана сторонами альтернативно. Однако, и российская арбитражная система взялась не с пустого места: она основывается на Европейской конвенции о внешнеторговом арбитраже, благодаря которой она всё ещё остаётся практически независимой от остальной судебной системы страны, а стороны всё ещё могут самостоятельно выбрать территорию разрешения спора, к примеру, даже если обе стороны не находятся в столице, они могут договорится о том, что все разногласия будут переносить в Арбитражный суд города Москвы.
У меня была одна кошка, которая выбрала меня, Сосисочка, её уже три года с нами нет. А остальные кошки всегда были мужа, они его выбрали )
Ляхи xD
Но только муку! Иначе книга станет запрещенной