К основному контенту

Как сделать свой блокчейн. Часть 1 — Создание, Хранение, Синхронизация, Отображение, Майнинг и Доказательная работа



Доброго всем! Мы тут потихоньку начали исследовать новое совсем для нас направление для обучения — блокчейны и нашли то, что оказалось интересным в рамках нашего курса по Python, в том числе. Чем, собственно, и хотим поделиться с вами.


Я могу узнать, когда у меня появился первый Bitcoin, из истории кошелька в моем аккаунте на Coinbase — входящая транзакция в 2012 году в подарок за регистрацию. Bitcoin в то время стоил около 6.50$. Если бы я сохранил те 0.1 BTC, на момент написания статьи это бы уже стоило более 500$. Если кому-то интересно, я продал их, когда Bitcoin стоил 2000$. Так что я получил только 200$ вместо ныне возможных 550$. Не стоило торопиться.
(*Примечание : ссылка для регистрации
на Coinbase)

О существовании Bitcoin я знал, но особо не интересовался. Я видел взлеты и падения курса $/BTC. Я видел, как люди говорят, что за ним будущее, а видел статьи о его полной бессмысленности. Но личного мнения у меня не было — просто наблюдал со стороны.
Точно так же я почти не следил за блокчейнами. Но в последнее время мой отец несколько раз упоминал, что на CNBC и Bloomberg, которые он смотрит по утрам, часто рассказывают о блокчейнах, и он понятия не имеет, что это.

И тогда я внезапно понял, что нужно чуть глубже разобраться в этой теме. И начал с “исследования” — прочитал огромное количество статей в интернете, объясняющую их суть. Некоторые были хорошие, некоторые плохие, некоторые глубокие, а некоторые очень поверхностные.

Чтения оказалось недостаточно, а если существует одна вещь, которую я знаю наверняка, так это то, что чтение не объяснит и сотой доли того, что объяснит программирование. И так я понял, что стоит написать свой собственный локальный блокчейн.

Нужно учитывать, что есть большая разница между базовым блокчейном, который я описываю и “профессиональным” блокчейном. Эта цепь не создаст криптовалюту. Блокчейны не требуют производства монет, которые можно продавать и менять на физические деньги.
Блокчейны используются для хранения и подтверждения информации. Монеты побуждают узлы участвовать в валидации, но их наличие не обязательно.

Я пишу пост по нескольким причинам: 1) Чтобы люди, прочитавшие его, смогли узнать больше о блокчейнах; 2) Чтобы я смог понять больше, объяснив код, а не просто написав его.
В этом посте я покажу способ хранения данных блокчейна и генерации начального блока, синхронизацию узла с локальными данными блокчейна, отображение блокчейна (что впоследствии будет использоваться для синхронизации с другими узлами), а затем, майнинг и создание валидных новых блоков. В первом посте не будет никаких других узлов. Никаких кошельков, пиров, важных данных. О них поговорим позднее.

В двух словах

Если вы не хотите углубляться в детали и читать код, или если вы наткнулись на этот пост, рассчитывая на статью, которая бы понятным языком объясняла блокчейны, я постараюсь кратко резюмировать, как они работают.

На самом высоком уровне, блокчейн — база данных, где каждый, участвующий в блокчейне, может хранить, просматривать, подтверждать и никогда не удалять данные.

На более низком уровне, данные в этих блоках могут быть чем угодно, пока это позволяет конкретный блокчейн. Например, данные в Bitcoin блокчейне — исключительно транзакции Bitcoin между аккаунтами. Ethereum блокчейн позволяет как аналогичные транзакции Ether, так и транзакции, использующиеся для запуска кода.

Прежде чем блок будет создан и объединен в блокчейн, он подтверждается большинством людей, работающих над блокчейном — их называют узлами. Настоящий блокчейн — цепь, состоящая из огромного множества блоков, подтвержденных большинством узлов. Таким образом, если узел попытается изменить данные предыдущего блока, новые блоки не будут валидны, и узлы не будут доверять данным из некорректного блока.

Не волнуйтесь, если это сбивает с толку. Мне понадобилось время, чтобы самому вникнуть в это, и еще больше времени на написание такого поста, чтобы даже моя сестра (которая ничего не знает о блокчейнах) смогла понять.

Если хотите изучить код, посмотрите ветку part 1 на Github. Смело присылайте мне любые вопросы, комментарии, правки и похвалы (если вы в настроении сделать что-то особо хорошее), или просто пишите в твиттер.

Шаг 1 — Классы и Файлы

Первый шаг — написание класса, обрабатывающего блоки при запуске узлов. Я назову этот класс Block. Честно говоря, много делать не придется. В функции __init__ мы будем верить, что вся необходимая информация уже представлена в словаре. Для производственного блокчейна — это не самое мудрое решение, но подходит в качестве примера, потому что код пишу только я. Также я напишу метод, запаковывающий важную информацию блока в словарь, а после заведу более удобный способ для отображения информации блока при его печати в терминал.


class Block(object):
  def __init__(self, dictionary):
  '''
    We're looking for index, timestamp, data, prev_hash, nonce
  '''
  for k, v in dictionary.items():
    setattr(self, k, v)
  if not hasattr(self, 'hash'): #in creating the first block, needs to be removed in future
    self.hash = self.create_self_hash()

  def __dict__(self):
    info = {}
    info['index'] = str(self.index)
    info['timestamp'] = str(self.timestamp)
    info['prev_hash'] = str(self.prev_hash)
    info['hash'] = str(self.hash)
    info['data'] = str(self.data)
    return info

  def __str__(self):
    return "Block<prev_hash: %s,hash: %s>" % (self.prev_hash, self.hash)

Чтобы создать первый блок, запустим этот простой код:


def create_first_block():
  # index zero and arbitrary previous hash
  block_data = {}
  block_data['index'] = 0
  block_data['timestamp'] = date.datetime.now()
  block_data['data'] = 'First block data'
  block_data['prev_hash'] = None
  block = Block(block_data)
  return block

Отлично. Последний вопрос в этой части — где хранить данные в файловой системе. Это необходимо, если мы не хотим потерять локальные данные блока при отключении узла.
Я назову папку с данными ‘chaindata’, в какой-то степени подражая схеме папок Etherium Mist. Каждому блоку теперь присвоен отдельный файл, названный по его индексу. Нужно убедиться, что имена файлов содержат в начале достаточное количество нулей, чтобы блоки перечислялись по порядку.

С учетом кода выше, нужно написать следующее для создание первого блока:


#check if chaindata folder exists.
chaindata_dir = 'chaindata'
if not os.path.exists(chaindata_dir):
  #make chaindata dir
  os.mkdir(chaindata_dir)
  #check if dir is empty from just creation, or empty before
if os.listdir(chaindata_dir) == []:
  #create first block
  first_block = create_first_block()
  first_block.self_save()

Шаг 2 — Синхронизация блокчейна, локально

Прежде чем начать майнинг, интерпретацию данных или отправку/создание новых данных для цепи, необходимо синхронизировать узел. В нашем случае других узлов нет, поэтому я говорю только о чтении блоков из локальных файлов. В будущем частью синхронизации будет не только чтение из файлов, но и коммуникация с пирами для сбора блоков, которые были сгенерированы, пока ваш узел не был запущен.


def sync():
  node_blocks = []
  #We're assuming that the folder and at least initial block exists
  chaindata_dir = 'chaindata'
  if os.path.exists(chaindata_dir):
    for filename in os.listdir(chaindata_dir):
      if filename.endswith('.json'): #.DS_Store sometimes screws things up
        filepath = '%s/%s' % (chaindata_dir, filename)
        with open(filepath, 'r') as block_file:
          block_info = json.load(block_file)
          block_object = Block(block_info) #since we can init a Block object with just a dict
          node_blocks.append(block_object)
return node_blocks

Пока просто и красиво. Чтение строк из файлов их загрузка в структуры данных не требуют чрезмерно сложного кода. Пока это работает. Но в будущих постах, где я буду писать о возможностях коммуникации разных узлов, эта функция sync станет значительно сложнее.

Шаг 3 — Отображение блокчейна

Теперь наш блокчейн находится в памяти, и поэтому я хочу отобразить цепь в браузере. Для того, чтобы сделать это прямо сейчас, есть две причины. Во-первых, необходимо подтвердить в браузере, что изменения произошли. Во-вторых, я буду использовать браузер в будущем для просмотра и совершения каких-либо операций, связанных с блокчейном. Например, отправка транзакций или управление кошельком.

Для этого я использую Flask — у него низкий порог вхождения, и я решил, что он подходит для наших целей.

Ниже представлен код для отображения json блокчейна. Я проигнорирую импорты для экономии места.


node = Flask(__name__)

node_blocks = sync.sync() #inital blocks that are synced

@node.route('/blockchain.json', methods=['GET'])
def blockchain():
  '''
  Shoots back the blockchain, which in our case, is a json list of hashes
  with the block information which is:
  index
  timestamp
  data
  hash
  prev_hash
  '''
  node_blocks = sync.sync() #regrab the nodes if they've changed
  # Convert our blocks into dictionaries
  # so we can send them as json objects later
  python_blocks = []
  for block in node_blocks:
    python_blocks.append(block.__dict__())
  json_blocks = json.dumps(python_blocks)
  return json_blocks

if __name__ == '__main__':
  node.run()

Запустите этот код, зайдите на localhost:3000/blockchain.json и увидите текущий блок.

Шаг 4 — “Майнинг”, также известный как создание блока

Сейчас есть только генезис блок, но если у нас появится больше данных, которые необходимо хранить и распределять, нужен способ включить это в новый блок. Вопрос — как создать новый блок и соединить его с предыдущим.

Сатоши описывает это следующим образом в Bitcoin whitepaper. Учтите, что “timestamp сервер” назван “узлом”.

“Начнем описание нашего решения с timestamp сервера. Его работа заключается в хэшировании блока данных, на который нужно поставить timestamp, и открытой публикации этого хэша… Timestamp показывает, что в данный момент конкретные данные существовали и потому попали в хэш блока. Каждый хэш включает в себя предыдущий timestamp: так выстраивается цепь, где очередное звено укрепляет все предыдущие.”

Скриншот изображения, прикрепленного под описанием:



Основная идея раздела — при необходимости соединить блоки, мы создаем хэш информации о новом блоке, включая время создания блока, хэш предыдущего блока и информацию в самом блоке. Я буду называть всю эту информацию “хедером” блока. Таким образом, мы можем проверить корректность блока, посчитав все хэши перед ним, подтвердив последовательность.

В данном случае хедер, который я создаю, объединяет значения строки в одну огромную строку. Я включил следующие данные:


  1. Индекс, показывающий каким по счету является блок;
  2. Хэш предыдущего блока;
  3. Данные — просто случайные строки. Для bitcoin они называются Merkle root и содержат информацию о транзакциях;
  4. Timestamp майнинга этого блока.


def generate_header(index, prev_hash, data, timestamp):
  return str(index) + prev_hash + data + str(timestamp)

Поясню один момент — объединение строк информации не является обязательным для создания хедера. Требование состоит в том, чтобы каждый знал, как генерировать хедер блока и хэш предыдущего блока внутри него. Делается это для того, чтобы каждый мог убедиться в корректности хэша в новом блоке и подтвердить связь между двумя блоками.

Хедер Bitcoin значительно сложнее объединения строк. Он использует хэши данных и времени и завязан на то, как данные расположены в памяти. Но в нашем случае объединения строк достаточно.

Теперь у нас есть хедер и можно вычислить валидность хэша. Я буду использовать метод, отличающийся от метода Bitcoin, но все равно запущу хедер блока через функцию sha256.


def calculate_hash(index, prev_hash, data, timestamp, nonce):
  header_string = generate_header(index, prev_hash, data, timestamp, nonce)
  sha = hashlib.sha256()
  sha.update(header_string)
  return sha.hexdigest()

Для майнинга блока мы используем функцию выше, чтобы получить хэш, положить его в новый блок и сохранить этот блок в директории chaindata.


node_blocks = sync.sync()

def mine(last_block):
  index = int(last_block.index) + 1
  timestamp = date.datetime.now()
  data = "I block #%s" % (int(last_block.index) + 1) #random string for now, not transactions
  prev_hash = last_block.hash
  block_hash = calculate_hash(index, prev_hash, data, timestamp)

  block_data = {}
  block_data['index'] = int(last_block.index) + 1
  block_data['timestamp'] = date.datetime.now()
  block_data['data'] = "I block #%s" % last_block.index
  block_data['prev_hash'] = last_block.hash
  block_data['hash'] = block_hash
  return Block(block_data)

def save_block(block):
  chaindata_dir = 'chaindata'
  filename = '%s/%s.json' % (chaindata_dir, block.index)
  with open(filename, 'w') as block_file:
    print new_block.__dict__()
    json.dump(block.__dict__(), block_file)

if __name__ == '__main__':
  last_block = node_blocks[-1]
  new_block = mine(last_block)
  save_block(new_block)

Готово! Но при таком типе создания блока кто угодно с самым быстрым CPU сможет создавать самые длинные цепи, которые другие узлы посчитают корректными. Нужен способ снизить скорость создания блока и подтверждение до перехода к следующему блоку.

Шаг 5 — Доказательство выполнения работы

Для снижения скорость я использую Доказательство выполнения работы, как и Bitcoin. Доказательство доли владения — другой способ, используемый в блокчейнах для достижения консенсуса, но в этом случае я воспользуюсь работой.

Способ сделать это — установить требования к структуре хэша блока. Как и в случае с bitcoin, необходимо убедиться, что хэш начинается с определенного количества нулей, перед тем, как перейти к следующему. А для этого нужно добавить в хедер дополнительную информацию — случайно перебираемое число (nonce).


def generate_header(index, prev_hash, data, timestamp, nonce):
  return str(index) + prev_hash + data + str(timestamp) + str(nonce)

Теперь функция майнинга настроена для создания хэша, но если хэш блока не содержит достаточного количества нулей, мы увеличиваем значение nonce, создаем новый хедер, вычисляем новый хэш и проверяем хватает ли нулей.


NUM_ZEROS = 4

def mine(last_block):
  index = int(last_block.index) + 1
  timestamp = date.datetime.now()
  data = "I block #%s" % (int(last_block.index) + 1) #random string for now, not transactions
  prev_hash = last_block.hash
  nonce = 0

  block_hash = calculate_hash(index, prev_hash, data, timestamp, nonce)
  while str(block_hash[0:NUM_ZEROS]) != '0' * NUM_ZEROS:
    nonce += 1
    block_hash = calculate_hash(index, prev_hash, data, timestamp, nonce)
  block_data = {}
  block_data['index'] = int(last_block.index) + 1
  block_data['timestamp'] = date.datetime.now()
  block_data['data'] = "I block #%s" % last_block.index
  block_data['prev_hash'] = last_block.hash
  block_data['hash'] = block_hash
  block_data['nonce'] = nonce
  return Block(block_data)

Отлично. Новый блок содержит валидное значение nonce, поэтому другие узлы могут подтвердить хэш. Мы можем сгенерировать, сохранить и распределить новый блок остальным.

Заключение

На этом все! Пока что. Осталось еще много вопросов и фичей в блокчейнах, которые я не объяснил.

Например, как задействовать другие узлы? Как узлы передают данные, когда включаются в блок? Существуют ли иные способы хранения данных кроме огромных строк данных?
Ответы на эти вопросы можно будет найти в следующих частях этой серии постов, как только я сам найду на них ответы. Пожелания по содержанию можно писать мне в твиттер, в комментарии к посту или через форму обратной связи!

Спасибо моей сестре Саре за уточняющие вопросы о блокчейнах и помощь в редактировании поста!

THE END


Источник:  https://habrahabr.ru/company/otus/blog/342974/

Комментарии

в прошлом году

Анекдоты про министров

– В новолуние нужно монетку показать Луне и сказать: «Месяц-дружочек, дай денег полный кошелечек – Министр финансов, вы закончили доклад? — у кошечки боли, у собачки боли, у Вовочки не боли. -министр здравоохранения, вы закончили доклад? -Скоро все грохнется к чертовой матери, не успеете опомниться! -Спасибо за доклад, министр экономики. — ***, денег вообще нет. Че делать? Все бабки просрали. — Спасибо за доклад, министр финансов. — Не жили богато, нечего и начинать. — Извините, а вы точно министр экономического развития? — Быстро поднятое, упавшим не считается. — К курсу рубля это не относится, министр финансов. — Бог дал, Бог взял. — Спасибо. Мы выслушали министра здравоохранения об освоении бюджета на внедрение новых технологий в медицине. — А я вчера дома заначку нашел! — Министр финансов, у вас есть ещё предложения по оздоровлению экономики? — Шеф, усё пропало! — Министр финансов, у вас есть что ещё сказать? — Светка! Я тебя вижу, а ты меня нет! Я — Ди...

Путинская мафия. Дворец Васильева в Вырице, ПНТ

«Путинская Россия это экстремальная версия «капитализма для своих», на самом деле — клептократия, где приближенные к власти получают право воровать огромные суммы на личные нужды» (Пол Кругман, Нобелевский лауреат по экономике, из статьи в «Нью-Йорк Таймс» 18.12.2014 г.).   1.Из жизни Коза-Ностры (вместо предисловия). Джон Готти , легендарный босс мафии в Америке, рулил семьей Гамбино с 1986 по 1992 г. По разным оценкам доходы его ОПГ в то время составляли от 250 до 500 млн. долл. в год. Рэкет, наркотики, аферы с налогами на бензин, всё по полной программе. Семья Гамбино была крупнейшей в США, однако официально дон Готти был… менеджером по продаже сантехники и одежды в двух небольших фирмах. Работая на двух работах, Готти зарабатывал в среднем 50 тыс. долл. в год. А все миллионы шли на подставных лиц. Как и принято в мафии. Скромный дом дона Готти в нью-йоркском районе Квинс, квартал Ховард-Бич. Вокруг — ровно такие же дома для с...

Илья Гращенков (Москва): В смене Старовойта ставка сделана на молодость и инновации

  Давыдов.Индекс Политическая жизнь Экономика Природа Образование Спорт Культура Lifestyle Мурзилка 7 июля 2025, 10:12   Политическая жизнь Илья Гращенков (Москва): В смене Старовойта ставка сделана на молодость и инновации Илья Гращенков Политолог, директор Центра Развития Региональной Политики (ЦРРП). Москва Эксперт Илья Гращенков рассуждает о том, что  Путин уволил Старовойта с поста главы Минтранса: Я уже говорил о том, что Андрей Никитин входит в топ ожидаемых преемников, потому что он был неожиданно снят с Новгородской области и передвинут в Минтранс, хотя ранее, в общем-то, к этой отрасли отношения не имел. То есть понятно, что это новая кандидатура от президента, которая, с одной стороны, вызовет омоложение в отрасли, с другой стороны, она далека от финансово-промышленных групп, которые до этого занимались транспортно-дорожным хозяйством и транспортной отраслью. Мы видим, что сейчас ключевыми темами являются беспилотники, искусственный интеллект, новые технологии....

Фото сделано во Франции 1980г. 140 собак, усыпленных в СПА (общество защиты животных), были выложены на трассе Маньи-Кур

Фото сделано во Франции 1980г. 140 собак, усыпленных в СПА (общество защиты животных), были выложены на трассе Маньи-Кур. Для хозяев их отпуск оказался важнее, чем лохматые друзья. Снимок стал символом дороги к морю через предательство и подлость. Хозяева просто усыпили своих собак, так как не нашли на кого их оставить во время отпуска - все приюты и передержки были переполнены, и «добрые» представители общества защиты животных предложили их усыпить, «чтоб не мучились» Посмотреть эту публикацию в Instagram Фото сделано во Франции 1980г. 140 собак, усыпленных в СПА (общество защиты животных), были выложены на трассе Маньи-Кур. Для хозяев их отпуск оказался важнее, чем лохматые друзья. Снимок стал символом дороги к морю через предательство и подлость. Хозяева просто усыпили своих собак, так как не нашли на кого их оставить во время отпуска - все приюты и передержки были переполнены, и «добрые» представители общества защиты жив...

Начало карьеры в роли самозванца Ильи Муромца

Начало карьеры в роли самозванца Зиму того же 1605 года Илейко провёл на Тереке вместе с казачьим войском. С наступлением весны, когда выданные деньги окончательно иссякли, встал вопрос о пропитании. Казаки, сойдясь на круг, приняли решение идти походом на Каспийское море ...чтоб итти на Курь реку, на море, громить турских людей на судех; а будет, де, и там добычи не будет, и им, де, было казаком к кизылбашскому Шах-Аббасу служить. В дальнейшем предполагалось либо вернуться с добычей на Терек, либо окончательно остаться в Персии . Впрочем, казачий атаман Фёдор Бодырин собрал собственный круг в 300 человек и предложил иной план — идти на Волгу, грабя на своем пути торговые суда, а чтобы разбойничьему походу придать видимость законности, решено было выдвинуть из своей среды самозванца, объявив его племянником Лжедмитрия, спешащим на выручку «дяди» в Москву. Из двух претендентов — сына астраханского стрельца Митьки и Илейки Коровина, которые оба ...

Генерал-майор Олег Митяев, командир 150-й мотострелковой дивизии. Погиб

Я полагаю, что этого человека просто запытали в плену. У него шапка на глаза надвинута как у всех военнопленных, которым глаза заматывают скотчем поверх шапок. Зачем он туда пошел? Человек в возрасте, видно даже по фигуре, что здоровье так себе. 😰 Я просто в шоке. На дворе 21 век, у нас компьютеры, электроника, мобильные телефоны и вместо того, чтобы все это изучать и развивать, люди просто тупо убивают друг друга. Гибнут самые лучшие и светлые. Как страшно быть военным в этой стране где в любой момент тебя могут бросить под пули под всеобщее молчание. Генерал-майор Олег Митяев, командир 150-й мотострелковой дивизии. Погиб https://t.me/rf200_now/1070?single  

Накануне в Ставрополе был найден мертвым замглавы краевого фСБ по экономическим вопросам Сергей Бондаренко.

Накануне «Интерфакс» сообщил, что в Ставрополе был найден мертвым в своей квартире замглавы краевого УФСБ, отвечавший за экономические вопросы. « Тело найдено в его квартире, сегодня. Ведется осмотр. На его теле, в районе живота несколько ножевых ранений. К сожалению, они оказались смертельными для потерпевшего », – приводило агентство комментарии региональных правоохранителей. Источники агентства заявили: « Скорее всего, это было убийство, но следствие не отсекает и других версий ». « Блокнот Ставрополь » сообщает, что перед смертью Бондаренко позвонил в Москву сыну Кириллу. Сотрудник ФСБ попросил сына вызвать медиков. Тот вызвал «скорую помощь» и перезвонил отцу сообщить о том, что врачи скоро приедут. Трубку уже никто не брал. Медики перезвонили сыну офицера, сообщив, что дверь не открывают. Бондаренко-младший вызвал МЧС. Спасатели выбили дверь и нашли в квартире труп с проникающими ранениями. Также, по предварительным данным медиков и спасателей, на теле и в ква...

Fiat Ducato Грузопассажирский фургон с возможностью трансформации в спальное место

  Fiat Ducato Грузопассажирский фургон с возможностью трансформации в спальное место Fiat Ducato Грузопассажирский фургон с возможностью трансформации в спальное место Грузопассажирский фургон с возможностью трансформации из посадочного места в спальное —  отличный вариант для бригад, перемещающихся на дальние расстояния. Впереди сложенное сидение легко трансформируется в спальное место; спинка дивана, после поднятия вверх трансформируется в полку, также пригодную для сна. Количество посадочных мест – 6. Оборудован глухой стационарной перегородкой. Пассажирский отсек может быть дополнен различным оборудованием: кондиционером, отопителем,  дополнительными верхними полками и т.д. Отделка грузового отсека также может быть представлена в различных  вариациях : пластик и дерево.

Проращивание перловки

Перловка очень дешевая. 1 кг перловки в Украине стоит 3-5 грн. Прорастает она очень быстро. Сначала промываем несколько раз зерна перловки водой, потом наливаем воды в 2 раза больше чем зерен и оставляем замоченной на 6-12 часов. После того как у зернышек проклюнутся росточки, ее уже можно употреблять. Мой любимый рецепт приготовления пророщенной перловки Нарезаем зелень (лучше всего подходит укроп) и надавливаем на нее ножом чтобы пошел сок. Натираем на терке 2-3 зубчика  чеснока. Все это смешиваем с перловкой. Добавляем щепотку морской соли и перчим по вкусу. Добавляем столовую ложку льняного или кунжутного масла холодного отжима. При приготовлении, запах чеснока и свежего укропа обязательно вызовут аппетит. Слюнки так и ...

Боковой карман с отрезным бочком: технология обработки

Здравствуйте! Сегодня мы рассмотрим технологию обработки бокового кармана с отрезным бочком. Боковой карман с отрезным бочком является внутренним карманом, который располагается в боковом шве чаще всего в поясных изделиях. Отрезная часть детали полочки является подзором кармана, а линия среза — линией входа в карман. Подзор — это видимая внутренняя часть кармана, изготавливаемая из основной ткани, которая скрывает мешковину кармана с лицевой стороны изделия. Боковой карман с отрезным бочком состоит из двух или трех деталей, в зависимости от вида ткани. Если при пошиве изделия используются тонкие ткани, то мешковины кармана, как правило, выкраивают из основной ткани, и в этом случае карман состоит из двух деталей. Если же ткань достаточно толстая, то мешковины кроят из подкладки, а видимую часть — деталь подзора — из основной ткани, и поэтому карман состоит из трех деталей. Выкройка Построить лекало бокового кармана можно прямо на бумажной выкройке полочки издел...

Постоянные читатели

Популярные сообщения из этого блога

Анекдоты про министров

– В новолуние нужно монетку показать Луне и сказать: «Месяц-дружочек, дай денег полный кошелечек – Министр финансов, вы закончили доклад? — у кошечки боли, у собачки боли, у Вовочки не боли. -министр здравоохранения, вы закончили доклад? -Скоро все грохнется к чертовой матери, не успеете опомниться! -Спасибо за доклад, министр экономики. — ***, денег вообще нет. Че делать? Все бабки просрали. — Спасибо за доклад, министр финансов. — Не жили богато, нечего и начинать. — Извините, а вы точно министр экономического развития? — Быстро поднятое, упавшим не считается. — К курсу рубля это не относится, министр финансов. — Бог дал, Бог взял. — Спасибо. Мы выслушали министра здравоохранения об освоении бюджета на внедрение новых технологий в медицине. — А я вчера дома заначку нашел! — Министр финансов, у вас есть ещё предложения по оздоровлению экономики? — Шеф, усё пропало! — Министр финансов, у вас есть что ещё сказать? — Светка! Я тебя вижу, а ты меня нет! Я — Ди...

Подаю в суд на пенсионный фонд РФ

Сегодня ходила за справкой в пенсионный фонд. Смогу бесплатно перемещаться по всей России на электричках. В рамках нынешних бешеных цен опция неплохая и вполне пригодится. Даже сейчас, когда в пенсионном фонде стоит автоматизированная сеть, сотрудники пенсионного фонда не могут без собственных инноваций. - Зачем эти справки? Какой бумагооборот. Можно ведь просто по звонку справки выдавать - задушевно сообщила мне сотрудница пенсионного фонда. - Нет, вы знаете, по звонку никак не получится потому что нужна именно эта ваша справка. Ведь в других регионах без нее билет не продадут, а я люблю ездить в Тарусу или в Сочи. - Ой, Таруса, оживилась сотрудница пенсионного фонда. Да, я там была. Там очень красиво, а в Сочи вам по этой справке продадут бесплатный билет на электричку. - Вот именно - говорю я тетеньке. Та в ответ насупилась и недовольно кинула справку. Такое впечатление, что для того чтобы визит в пенсионный фонд прошел более менее гладко их нужно просто заговар...

Илья Гращенков (Москва): В смене Старовойта ставка сделана на молодость и инновации

  Давыдов.Индекс Политическая жизнь Экономика Природа Образование Спорт Культура Lifestyle Мурзилка 7 июля 2025, 10:12   Политическая жизнь Илья Гращенков (Москва): В смене Старовойта ставка сделана на молодость и инновации Илья Гращенков Политолог, директор Центра Развития Региональной Политики (ЦРРП). Москва Эксперт Илья Гращенков рассуждает о том, что  Путин уволил Старовойта с поста главы Минтранса: Я уже говорил о том, что Андрей Никитин входит в топ ожидаемых преемников, потому что он был неожиданно снят с Новгородской области и передвинут в Минтранс, хотя ранее, в общем-то, к этой отрасли отношения не имел. То есть понятно, что это новая кандидатура от президента, которая, с одной стороны, вызовет омоложение в отрасли, с другой стороны, она далека от финансово-промышленных групп, которые до этого занимались транспортно-дорожным хозяйством и транспортной отраслью. Мы видим, что сейчас ключевыми темами являются беспилотники, искусственный интеллект, новые технологии....

Каких выдающихся провокаторов ты знаешь?

Вязанные куколки от Бет(США)

Вязанные куколки от Бет(США) Вязанные куколки от Бет(США) В Индиане, США, живет замечательная женщина - Бет, вяжет чудесных куколок и не только вяжет, а еще текстильных красоток делает вышивая им глазки и цветы на туловище. По образованию она инженер-механник и проработала много лет в промышленности, а сейсам она на пенсии и занимается куклами и другими вязанными вещами. Вязать ее научила бабушка, и в своем блоге она делится со всеми секретами своего мастерства ( http://byhookbyhand.blogspot.com ), там столько кукол............... https://www.liveinternet.ru/users/4185652/post289785553/

Блокчейн в базе 1С

Шаг 1. Создадим документ Блокчейн Цепочку блоков надо где-то хранить. Для простоты я выбрал объект метаданных “Документ”. Вобще говоря, хранить цепочку можно и вне базы, хоть в текстовом файле. Также можно использовать справочник или регистр сведений. Я выбрал документ отчасти произвольно, отчасти потому, что в нем есть дата, а она может в дальнейшем пригодиться. Что бы это ни было, нам нужны четыре (всего лишь, впрочем, можно и три) реквизита. КонтролируемыйДокумент, как можно догадаться – ссылка на документ любого вида. КлючНачальный, ХешДокумента и КлючКонечный – строки неограниченной длины (можно задать длину 64). Шаг 2. Сделаем обработку генерации цепочки блоков. Найдем последний элемент цепочки. Я сделал это так: Функция ПолучитьПоследнийБлок() запрос=новый запрос; запрос.Текст= "ВЫБРАТЬ ПЕРВЫЕ 1 | Блокчейн.Ссылка КАК Ссылка |ИЗ | Документ.Блокчейн КАК Блокчейн | |УПОРЯДОЧИТЬ ПО | Блокчейн.Номер УБЫВ"; выб=запрос.Выполнить().Выбрать(); если ...

Как стать фрилансером и начать работать удаленно

Подборка лучших сайтов для фриланса от digitalbroccoli 02/03/2018 2 комментария к записи Подборка лучших сайтов для фриланса Фриланс Удаленная работа и фриланс пока не очень популярны в рунете, отсюда и множество бирж, которые существуют пару месяцев, от силы год, а потом закрываются. В этой статье собраны те биржи, на которых реально можно заработать и которые функционируют уже давно и успешно. Регистрируйтесь, оставляйте заявки, и работа не заставит себя ждать. Кстати, если вы уже фрилансите, но сидите без заказов, обязательно пройдитесь по новым, еще не опробованным биржам: возможно, именно там размещают проекты вашей мечты. Общие биржи фриланса — подойдут для любых специализаций fl.ru freelance.ru weblancer youdo freelancehunt kwork kadrof Англоязычные: upwork freelancer fiverr guru peopleperhour Проекты для иллюстраторов и дизайнеров behance 99designs illustrators godesigner designcrowd Фотостоки для...

Путинская мафия. Дворец Васильева в Вырице, ПНТ

«Путинская Россия это экстремальная версия «капитализма для своих», на самом деле — клептократия, где приближенные к власти получают право воровать огромные суммы на личные нужды» (Пол Кругман, Нобелевский лауреат по экономике, из статьи в «Нью-Йорк Таймс» 18.12.2014 г.).   1.Из жизни Коза-Ностры (вместо предисловия). Джон Готти , легендарный босс мафии в Америке, рулил семьей Гамбино с 1986 по 1992 г. По разным оценкам доходы его ОПГ в то время составляли от 250 до 500 млн. долл. в год. Рэкет, наркотики, аферы с налогами на бензин, всё по полной программе. Семья Гамбино была крупнейшей в США, однако официально дон Готти был… менеджером по продаже сантехники и одежды в двух небольших фирмах. Работая на двух работах, Готти зарабатывал в среднем 50 тыс. долл. в год. А все миллионы шли на подставных лиц. Как и принято в мафии. Скромный дом дона Готти в нью-йоркском районе Квинс, квартал Ховард-Бич. Вокруг — ровно такие же дома для с...

Ходящие во тьме: экстрасенс опасен в любом случае, жулик он или колдун

Если больной или попавший в беду человек за помощью устремляется к экстрасенсам и колдунам, первое, что должен сделать близкий – предложить ему оценить риски Из диалога: — Как защититься от колдунов? — Молиться Киприану и Иустине. Подобный разговор приходилось слышать не раз. Кто сам от чего пострадал, тот знает, как помочь попавшему в ту же беду. И оба этих святых хорошо об этом знали. Колдун, сумевший отказаться от ворожбы и ставший священником, а потом мучеником за Христа; и мужественная христианка, силой своей веры, чистотой жизни разрушившая колдовские чары — к кому, как не к ним прибегнуть за молитвенной помощью, чтобы защититься от колдовства и бесовских козней? Киприан и Иустина Свв. Киприан и Иустина. Фрагмент иконы. Изображение с сайта shpargalkablog.ru Они жили в III веке в Антиохии. Киприан был могущественным колдуном, отдавшим, как сказано в житии, «во власть дьяволу всего себя». Однажды он по просьбе юноши, влюбившегося в христианскую ...