Blog

  • Тем, кто с нового года решил бороться за режим дня

    2024-02-10 10:20:37

    Тем, кто с нового года решил бороться за режим дня.

    Если хочется ложиться спать в 22:00:

    1. Перестаем есть и пить к 19:00 (коньяк не в счет)
    2. Ставим будильник на 20:30 и на 21:00, за эти пол часа доделываем все что собирались, с тем чтобы в 21:00 закрыть лаптоп и заняться вечерним туалетом. За следующий час добираемся до кровати.
    3. Ставим будильник на 7:45 и 8:15 за эти пол-часа вылезаем из под одеяла.
    4. Переживаем неделю вечерней бессонницы и утреннего мутноглазия.
    #blog


  • Электрички на дорогах, или немного про современное автомобилестроение

    2024-01-02 14:23:14.788622

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

    Откуда взялось такое разнообразие?

    Современный автомобиль — это архитектура, набор требований, система верификации, система контроля качества и так далее (см APQP, ISO 26262, ISO 21434 и т.п.). Кто там делает конкретную батарейку или коробку передач - дело десятое. Из-за того, что автопром жестко регулируется и кроме решения чисто инженерных задач, конструкторам нужно удовлетворять требованиям безопасности и экологии, многие, даже очень маститые производители (OEM), предпочитают заказывать ключевые агрегаты у партнеров, а не делать их самим.

    Одна и та же машина может быть сделана с совершенно разным инженерным дизайном. Например, модная фишка "при включении поворотников показываем на инструментальном кластере картинку с камеры в зеркале" можно реализовать как "подключаем весь инструментальный кластер по ethernet", а можно как "делаем два экрана - один подключен по CAN и умеет становиться прозрачным, другой подключен по ethernet и показывает камеру". Первое решение не проходит по безопасности, второе сильно дороже.

    Инженерная команда OEM постоянно ищет баланс между стоимостью, функционалом и безопасностью.

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

    Именно поэтому Китай, который может себе позволить выгнать на полигон 300 автомобилей и потом, по результатам тестирования переделать до 30%, взорвался новогодней ёлкой различных брендов. Но тем не менее осознание необходимости правильных процессов приходит и к китайцам, поэтому качество китайских решений увеличивается год от году.

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

    Изначально Тесла (VW group, MB) и китайские машины были устроены совершенно по-разному. Если очень и очень грубо, Тесла начиналась как уменьшенная электричка (asynchronous induction motor) китайские же автомобили — это выросшие мопеды (synchronous permanent magnet motor). С совершенно разными требованиями к охлаждению и всему остальному. Но сейчас технологии активно перемешиваются и дополняют друг друга – например, Тесла использует SPMM на задней оси. Что ведет к дальнейшему удешевлению электромобилей.

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

    У сегодняшнего, батарейного, решения есть множество проблем – от затрат на переработку отработанных батарей, до необходимости находить мощности и место под зарядные посты в городах. Решения у этих проблем нет, поэтому если не изобретут какие-либо радикально новые батареи, то будущее останется за водородными топливными элементами или чем-то подобным.

    Также пока сомнительны перспективы автопилотов. Несмотря на то, что помощник водителя (ADAS), который позволяет убрать с руля руки (L2) или даже отвлечься на кофе и бутерброды (L3) уже реальность и обязательный атрибут автомобилей ближайшего будущего, основанный на ИИ автопилот пока остается в стадии дорогих экспериментов. Производители не могут доказать, что автопилот никого не убьёт если датчики забьются грязью, или, что хаккеры не смогут взломать автопилот и направит автомобиль в толпу прохожих. На мой взгляд, появление полноценного автопилота – вопрос не близкий и во многом зависящий от поддержки автопилота инфраструктурой (умные светофоры, отбойники на остановках и т.п), которая позволит повысить надежность и предсказуемость автоматических автомобилей.

     


  • Если вам дорого ваше здоровье запомните несколько простых правил

    2023-12-30 20:15:26

    Если вам дорого ваше здоровье запомните несколько простых правил:

    1. Не слушайте ничьих советов, особенно соседок, продавцов в аптеках и терапевтов с 50-летнем стажем. Если вы спрашиваете что-то на спец форуме, дождитесь, когда вам ответит врач, а не такие же больные.

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

    3. Не бойтесь спросить если вам что-то не понятно. Т. е. если вы не понимаете зачем вам назначили тот или иной препарат, попросите обосновать назначение.

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


  • Три правила приличного стиха

    2023-12-30 20:11:23

    Три правила приличного стиха

    1. Размер должен быть жестко выдержан. Вам же не приходит в голову нарисовать на портрете ухо вдвое больше, чем все остальное? Так и со стихом - в нем может не быть рифмы, но размер должен быть. Размер может быть простым или сложным, но он должен быть одинаковым во всех частях стиха без пропусков и искажений (я не говорю сейчас о лимериках, сонетах и т. п.)

    * * *
    Посуда. В квартире. Опять не мыта
    Отравлена этим душа
    Год. Второй. Неудачных попыток
    И я убегаю спеша.

    * * *
    Я видел море
    Море злилось
    Над головой сгущались тучи
    И мне хотелось плакать горько.

    2. К стиху применимы все те же правила стилистики что и к прозе. Вы же не рисуете статую свободы на картине про лес и медведей? Должны быть выдержаны времена. Например, если написать выше "сгустились" то последняя строчка должна быть "мне захотелось". Не должно быть явных сюжетных ляпов.


    * * *
    Я видел море
    Море злилось
    Над головой сгущались тучи
    Но мячик я пинал ботинком

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

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

    PS: Примеры мои, не из Горького ;)
    #blog


  • How to reset cisco device

    2023-12-28 15:48:51.545349

     

    Method one
    • en
    • write erase
    • reload
    Method two
    • Detach all cables
    • Hold power or mode button until a light start flashing
    • Release the button
    Method three
    • Attach console
    • Power on device
    • Wait for hash marks (#)
    • Press ESC  
    • flash_init
    • <wait for boot to finish>
    • rename flash:config.txt flash:config.old
    • reset
    • <wait for boot to finish>
    • del flash.config.old


  • openssl tips

    2023-12-28 15:48:39.835202

     

    Use openssl to encrypt/decrypt file


    openssl aes-256-cbc -salt -in secrets.txt -out secrets.txt.enc
    openssl aes-256-cbc -d -in secrets.txt.enc -out secrets.txt.new
    

    * You will be prompted for a password.

    Use openssl to generate self-signed cert 

    openssl req -x509 -newkey rsa:1024 -keyout file.pem -out file.crt -days 9999 -nodes

    or advanced method

    openssl genrsa -out server.key 1024
    openssl req -new -key server.key -out server.csr \
           -subj '/C=RU/ST=St.Petersburg/L=St.Petersburg/CN=www.4foo.net'
     
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    

    make sure you enter right value to CN field

    to display cert details

    openssl x509 -in cert.pem -noout -text


  • jar like container in python

    2023-12-28 15:48:26.268246

    One of common question of python programming is how to do jar equivalent - i.e. run something like python myapp.zip . Below I describe a method producing a close result (hey python team - good place to enhance): unfortunately couple of bugs in python zip handling (e.g. python can't import module from zipfile with comments) make this task a little bit tricky.

    1. Make sure you app is ready to work with zip bundle i.e. file is replaced to ZipFile when necessary.
    1. Prepare the entry point:
      main.py
      def __main__():
           ....
      
    1. create a bundle
      zip -r test.zip *.py *.pyc
      
    1. create a launcher either shell or pure python one and place it somewhere.
    #!/bin/sh
    mod="$1"
    shift
    python -c "import sys; sys.path.insert(0,'${mod}'); import main;main.__main__()" $*
    
    import sys
    sys.path.insert(0,sys.argv[1])
    import main
    main.__main__()

    enjoy

     


  • How to open java coredump in gdb

    2023-12-28 15:47:57.094437

    After dozen of experiments I finally come to next action sequence with gdb as the most universal/reliable one.

    Good case we have access to client libraries

    1. Check gdb version. it should be 6.x the later the better.
    2. Create directory D inside you working one
    3. Create D/gdbrc file with *full* path to your directory
      set solib-absolute-prefix /home/dms/Sept12/12_09_2008_20_00_node4/D 
      

      Notice: set substitute-path doesn't work because gdb apply it to source files only

    4. symlink apropriate D/java
    5. run
         gdb -x D/gdbrc D/java core
      
    6. type
          info shared
      

    You will see something like:

    (gdb) info shared
    From        To          Syms Read   Shared Object Library
                            No          /lib/tls/libpthread.so.0
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    0x00a05bb0  0x00a068c4  Yes /home/dms/Sept12/D/lib/libdl.so.2
    ...
    0x008c9c00  0x009b9800  Yes /home/dms/Sept12/D/lib/tls/libc.so.6
                            No          /lib/libnsl.so.1
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    1. leave gdb and copy or link missed library under D.

    In my case:

    D/lib/tls/lib/tls/libpthread.so.0
    D/lib/libnsl.so.1
    
    

    To gather all libraries necessary to open a coredump on other machine run:

     gdb -batch --eval "info shared"  D/java core 2> /dev/null |\
     sed -n -e 's/^.*Yes[^\/]*\//\//p' -e 's/^.*No[^\/]*\//\//p'  > filelist
    

    on your own machine and than:

     cat filelist | zip zipme.zip -@
    

    on client one

    Bad case - we don't have access to original libraries. We still can restore JVM part of stack trace manually.

    To do it:

    1. Run some java app (e.g. Java2Demo.jar) with exactly the same version of jdk and JVM part of command line.
    2. Kill it by kill -BUS to get a core.
    3. Open core with gdb and check whether upper part of stack trace match customer's one -
    #0  0xffffe424 in __kernel_vsyscall ()
    #1  0xb76f96e0 in raise () from /lib/libc.so.6
    #2  0xb76faf15 in abort () from /lib/libc.so.6
    #3  0xb70abbaf in os::abort(bool)
    #4  0xb71de555 in VMError::report_and_die()
    #5  0xb70b257c in JVM_handle_linux_signal ()
    #6  0xb70ae7a4 in signalHandler(int, siginfo*, void*) ()
    #7  <signal handler called>
    

    Ever without symbols - you should have exactly 6 entries before <> and os::abort is right the next after libc abort.

    • Type info shared and get addresses where jvm is loaded:
      0xb6bf2bd0  0xb71fe250  Yes (*)  /opt/jdk1.6.0_18/jre/lib/i386/server/libjvm.so
      
    • Calculate offset of os:abort : 0xb70abbaf - 0xb6bf2bd0 = 0x4b8fdf
    • Calculate jvm size: 0xb71fe250 - 0xb6bf2bd0 = 0x60b680
    • Go to cu core and calculate jvm start and end addresses
      <os::abort> - 0x4b8fdf = N, N + 0x60b680
      

    *Calculate offset between your JVM and cu JVM

      <os::abort> - 0xb70abbaf (os:abort from my core, or compare two JVM starts)
    
    • Get stacktrace offset, check whether it within range. apply difference
    • Go to your coredump and type
    info address <recalcualted_address>
    


  • Thinkpad 420 WiFi and Bluetooth issue

    2023-12-28 15:44:32.134245

    If you installed windows 10 on old Thinkpad T420 and you realize that neither bluetooth nor wifi are working properly (windows reports that it is turned off and can't turn it on) >do following:

    • 1. Make sure that small switch located on the right side of laptop right after the CD bay is turned on (green is shown, knob is under computer icon)
    • 2. Make sure that wifi and bluetooth access is enabled in the BIOS, check Security::I/O Ports section.
    • 3. Make sure that Fn and CRL buttons is not swapped in BISO, check Config::Keyboard section
    • 4. Go to the Device Manager and check that Intel Centrino adapter is present, update it's driver  - let autoupdate find appropriate one
    • 5. Install  Thinkpad Hotkey Features Integration software from http://support.lenovo.com including all aditional utilities, like on-screen menu
    • 6. Reboot you PC
    • 7. Press Fn + F5 and enable Bluetooth and WiFi

    You should be able to use WiFi/Bluetooth now.


  • Some thoughts about WFH

    2023-12-28 15:44:20.823026

    1. WFH involves a slightly different relationship with working time - a working day has no beginning and no end, but load is distributed across more freely. That is, if the vast majority of people in the office work from 10 to 19, then on WFH we often can see something like: "I work from 11 to 15 while my wife looks over the child and then from 20 to 24 while the child sleeps". Such distribution of time might be mandatory, especially in the current situation of forced WFH.
     
    2. WFH, especially in combination with quarantine measures such as the closure of fitness, very quickly lead to the lack of communication and feeling of loneliness. In many cases, an employee compensates for this with increased activity in personal chats/groups and increased time spent reading these chats. Moreover, a typical office pattern: "raise the head; make sure that a colleague is on his desk; ask a question; get an answer" is replaced by "writing in a chat; waiting for an answer".
     
    3. WFH leads to fast growing distance from the team. As kitchen communication, joint lunch, etc. are lost, the employee quickly loses the sense of team and project, despite the daily scrum and other ceremonies. The pattern like "pick up the task from the air" or "help a stuck teammate in between of own tasks" is lost.
     
    4. WFH job mainly attract people of a certain nature, often with some hard life circumstances, or contribute to the development of specific character traits, so you have to be very careful getting into the personal space of such people (happy birthday, pulling out on the team events and so on).
     
    A few tips to deal with problems mentioned above:
     
    1. Decrease the number of communication channels for developers. In some cases it is better to kill all chats altogether and move all communication to email.
     
    2. Set some rather narrow intervals within a working day for chatting. At this time and only at this time, you can ask a question and expect an immediate answer. At any other time, the developer should not rush to answer immediately, but wait for a natural pause in the work. This agreement should be explained loudly to all team members, managers and developers.
     
    3. Keep sending across the project digest (once or twice a week - depends on the intensity of the project), with the main non-technical events in the project and high-level plans for the next interval.
     
    4. Ask developers to update their tasks daily and to put the task to correct status as soon as possible. In addition, more efforts should be made to develop DOD and to make tasks more atomic and clear. Checklists are useful here.