Моя записная книжка. Комментарии отключены из-за спама. Для вопросов используйте эту страничку

Позднее Ctrl + ↑

МТО-1000АМ

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

Ослабить зажатие первого мениска до легкого прижатия пальцем кольца крепления

Снимаете стопора крепления кольца для зажатия первой линзы. Иногда они не отдаются и поэтому их придется высверлить сверлом 2мм. Налить немного спирта в прорезь кольца крепления первой линзы и легко постучать по объективу в районе этого кольца. Затем вставить приспособление для откручивания кольца и открутить его. Несколько раз провернуть в оправе и закрутить кольцо уже не обжимая ничем только ногтем пальца. С первой линзой закончили.

Проверить и закрепить главное зеркало оно ослабляется со временем

Крепление зеркала. Откручиваете сбоку стопора на задней крышке объектива и откручиваете крышку . Для этого объектив зажимают в токарном станке и откручивают с помощью кожанного ремня. Крышку надо предварительно обстучать текстолитовым молотком. Открутив крышку получите доступ с четырем креплениям зеркала. Их надо плотно обжать как правило они ослаблены , обжимать надо равномерно крест накрест . Крышку плотно закрутить на место предварительно смазав резьбу литолом или солидолом. При зажатии ориентироваться по следам от стопоров. Или перед разборкой сделать маленькие метки так проще. Конструкции объективов разных моделей объектива разные. На некоторых моделях надо снимать задний байонет на М42 он может держать крышку. Обязательно поставить стопора на место.

 132   2020   фото

Ликбез: менеджер проектов vs менеджер продуктов

​Люди из непродуктовых компаний часто спрашивают, чем отличаются менеджер проектов (Project Manager) и менеджер продуктов (Product Manager). 

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

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

Разница между менеджером продукта и менеджером проекта примерно такая же, как между понятиями «сделать правильный продукт» и «сделать продукт правильно». 

Когда создается что-то новое — компьютерная игра, гоночный автомобиль, онлайн-сервис выдачи кредитов, смартфон, — то открывается проект. Собирается проектная команда и назначается менеджер проекта. Он будет отвечать за то, что в результате проекта получится продукт с согласованными заранее свойствами.  
Машина сможет разгоняться до 1500 км/ч, смартфон будет со встроенным счетчиком Гейгера, а для получения кредита не понадобится никаких документов вообще. Менеджер проекта будет отвечать за то, что этот продукт появится на рынке 1 января 2030 года, а перерасход бюджета не будет значительным. ) 

Менеджер проекта отвечает за то, что продукт будет создан правильно.

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

Зато есть претензии к тому, кто отвечал за востребованность продукта рынком — менеджеру продукта. Именно он должен управлять свойствами продукта, чтобы продукт был успешен, а пользователи довольны.

Менеджер продукта отвечает за то, что будет создан правильный продукт.

Но менеджер продукта не отвечает за то, что продукт сделан правильно. Если вдруг у машины на презентации арабскому шейху (кто такую еще купит-то?) отвалится бампер, то все претензии к менеджеру проекта. Если к смартфону вместо счетчика Гейгера прикрутили фен, то вопросы к менеджеру проекта. 

Еще раз: менеджер проекта делает продукт правильно, а менеджер продукта делает правильный продукт.

Важно: менеджер проекта и менеджер продукта — это роли. Часто их совмещает один человек. Это разумно для больших продуктов, которые делает несколько продуктовых команд, как в Авито. Или для маленьких продуктов с одной командой — как в стартапах, для экономии.

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

Кто из них круче? Менеджер продукта много знает про юнит-экономику, метрики, умеет принимать сложные решения на основе данных и тюнинговать продукт, получая выдающиеся коммерческие результаты.)
Менеджер проекта умеет работать с людьми, ставить цели и достигать их в заданные сроки и бюджет, с нужным качеством.
Оба круты.

(c) Сергей Колганов aka http://t.me/psilonsk

 102   2020   проектирование

Отгадыватель кроссвордов

#!/usr/bin/env python3

import sys
from itertools import permutations
import re
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import os.path

if len(sys.argv) < 4:
  print("Usage: \nwords.py yandex|google|filename|none алфавит маска\n")
  sys.exit()

search  = sys.argv[1]
alphabet = sys.argv[2]
pattern = sys.argv[3]

yandex = 'https://yandex.ru/search/?noreask=1&text='
google = 'https://www.google.ru/search?ie=UTF-8&hl=ru&spell=0&nfpr=1&q='

ua = UserAgent()
myheaders = {'User-Agent': str(ua.random), 'referer': 'https://www.google.ru'}

# все варианты перестановок
allwords = permutations(alphabet, len(pattern))

# выкидываем дубликаты
words = list(set(allwords))

# склеиваем 2-мерный список в одномерный
words2 = []
for word in words:
  str = ''.join(word)
  words2.append(str)

# проходим регекспом
obj = re.compile(pattern)
words = list(filter(lambda str: obj.search(str), words2))

print('Всего вариантов %d' % len(words))

output = []
wordlist = []

if os.path.exists(search):
  f = open(search, 'r', encoding = 'utf-8')
  wordlist = [line.strip() for line in f]
  f.close()
  print('Размер словаря %d' % len(wordlist))

for word in words:
  if search == 'google':
    r = requests.get(google + word, headers=myheaders)
    r.encoding = 'utf-8'
    soup = BeautifulSoup(r.text, 'html5lib')
    stat = soup.find('div', id='resultStats')
    if stat is not None:
      qty = re.search('Результатов:\sпримерно\s(.*)\s\(\d+,\d+\sсек.\)', stat.text)
      x = qty.group(1)
      x = x.split()
      x = ''.join(x)
      output.append([word, int(x)])
      print("%s - %s" % (word, x))
    else:
      output.append([word, 0])

  elif search == 'yandex':
    r = requests.get(yandex + word, headers=myheaders)
    r.encoding = 'utf-8'
    soup = BeautifulSoup(r.text, 'html5lib')
    stat = soup.find('div', {'class': 'serp-adv__found'})
    if stat is not None:
      qty = re.search('Нашлось\s(.*)\sрезультатов', stat.text)
      x = qty.group(1)
      output.append([word, x])
      print("%s - %s" % (word, x))
    else:
      output.append([word, 0])
      
  elif os.path.exists(search):
    if word in wordlist:
      output.append([word, 0])
    
  else:
    output.append([word, 0])

print('Отфильтрованно с помощью %s' % search)

output.sort(key=lambda x: x[1], reverse=True)

for str in output:
  print(str[0])

Как ставить задачи правильно

Хотите, чтобы что-то было сделано, — ставьте задачу. Если исполнитель вашу задачу не делает, то либо он негодяй, либо у вас нет полномочий ставить задачу этому человеку, либо вы ставите ее неправильно.

  1. Первое правило хорошо поставленной задачи — начните ее с глагола, а не с существительного.
    Плохо (отглагольное существительное):
    Тестирование модуля Х.
    Разработка функции Y.
    Хорошо (глагол):
    Протестировать модуль Х.
    Разработать функцию Y.
  1. Больше конкретики — конкретную задачу легче делать и проще контролировать. Задача создается, чтобы ответить на вопрос «что сделать?», а не «что делать?».
    Плохо (неконкретно):
    Обдумать риски в проекте А.
    Наметить дальнейшие шаги в проекте В.
    Хорошо (конкретно):
    Составить реестр рисков в проекте А.
    Создать план проекта В.
  1. Каждой задаче нужен срок исполнения. Нет дедлайна — нет стимула делать. Дедлайны дисциплинируют и помогают планировать.
    Плохо (нет срока):
    Создать документ D.
    Хорошо (есть срок):
    Создать документ D к 31.12.2020.
  1. Должны быть требования к результату. Нужно описать, что именно должно получиться, и что вообще считается выполненной задачей. Критерии выполнения — это важно.
  1. Описание должно включать все нужные для работы материалы. Исполнитель не должен бегать по разным источникам, по крупицам собирая информацию о задаче. Все, что ему нужно для выполнения, должно быть описано и приложено к задаче. То же касается любых ресурсов, которые нужны для выполнения задачи. Хочешь хорошего результата — создай человеку условия для работы.

Алфавит

A — Alfa
B — Bravo
C — Charlie
D — Delta
E — Echo
F — Foxtrot
G — Golf
H — Hotel
I — India
J — Juliett
K — Kilo
L — Lima
M — Mike​
​N — November
O — Oscar
P — Papa
Q — Quebec
R — Romeo
S — Sierra
T — Tango
U — Uniform
V — Victor
W — Whiskey
X — X-ray
Y — Yankee
Z — Zulu

 106   2020   abc   english   spelling

Подключаем Dadget CO2 к серваку

  1. Сначала сделаем чтобы любой пользователь мог обращаться к устройству
    создаем /etc/udev/rules.d/10-co2mon.rules
    с содержимым
ACTION=="add|change", SUBSYSTEMS=="usb", ATTRS{idVendor}=="04d9", ATTRS{idProduct}=="a052", MODE:="0666"

щелкаем

udevadm control --reload
udevadm trigger

проверяем что /dev/usb/hiddev0 теперь crw-rw-rw-

  1. Подключаем библиотечку PyUSB hid. PyUSB глючное говно вызывающее странные эффекты, например пропадение устройства hiddev0.
    pip3 install hid (или hidapi уже не помню, это гуглится)
  1. Читаем (алгоритм расшифровки передрал с сишного проекта co2mod)
#!/usr/bin/env python3

import hid
import time

def decode_co(data):
    # кручу-верчу
    data[0], data[2] = data[2], data[0]
    data[1], data[4] = data[4], data[1]
    data[3], data[7] = data[7], data[3]
    data[5], data[6] = data[6], data[5]
    
    result = bytearray(8)

    # всех обмануть хочу
    result[7] = ((data[6] << 5) & 0xFF) | ((data[7] >> 3) & 0xFF)
    result[6] = ((data[5] << 5) & 0xFF) | ((data[6] >> 3) & 0xFF)
    result[5] = ((data[4] << 5) & 0xFF) | ((data[5] >> 3) & 0xFF)
    result[4] = ((data[3] << 5) & 0xFF) | ((data[4] >> 3) & 0xFF)
    result[3] = ((data[2] << 5) & 0xFF) | ((data[3] >> 3) & 0xFF)
    result[2] = ((data[1] << 5) & 0xFF) | ((data[2] >> 3) & 0xFF)
    result[1] = ((data[0] << 5) & 0xFF) | ((data[1] >> 3) & 0xFF)
    result[0] = ((data[7] << 5) & 0xFF) | ((data[0] >> 3) & 0xFF)
    
    magic_word = b'Htemp99e'
    for i in range(8):
        r = ((magic_word[i] << 4) & 0xFF) | ((magic_word[i] >> 4) & 0xFF)
        if result[i] < r:
            result[i] = 0xFF - r + result[i]
        else:
            result[i] = result[i] - r

    # не знаю почему, но у меня проверка чек-суммы никогда не сходилась    
    #if result[0]+result[1]+result[2] != result[3]:
    #    return 0

    res = (result[1] << 8) + result[2]

    if result[0] == 0x42:
        print("T={0}".format(res * 0.0625 - 273.15))
        return 1
    elif result[0] == 0x50:
        print("CO={0}".format(res))
        return 2
    return 0
    
try:
    h = hid.device()
    h.open(0x04d9, 0xa052)

    # хз, не вникал
    h.set_nonblocking(1)

    # по идее это отправка некой magic_table которой шифруется ответ, но и без любой из этих строк работает
    #h.write(b'8\x00\x00\x00\x00\x00\x00\x00\x00')
    h.send_feature_report([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00])
    time.sleep(0.05)

    co = 1
    t = 1
    while co | t:
        d = h.read(8)
        if d:
            n = decode_co(d)
            if n == 1:
                t = 0
            elif n == 2:
                co = 0

    h.close()

except IOError as ex:
    print(ex)
 198   2020   co2   dadget   driver   linux   python   программирование
 63   2020   Узлы

ATLANT (Атлант) 45У102

SKF 6204ZZ, SKF 6205ZZ. Сальники — 30x52x8,5/10,5.
Для подшипников 6205 и 6206 сальник идет — 35x62x8/10,5

 133   2020   ремонт
Ранее Ctrl + ↓