Запускаем android emulator на процессоре m1 от Apple

Собственно стал я на днях счастливым обладателем MacBook Air на новеньком процессоре M1 от всем известной фруктовой компании. Установил как обычно Android Studio и только было решил насладиться разработкой приложения во Flutter, как оказалось что эмулятор Андрюхин-то, не работает вовсе.

Решение оказалось крайне простым скачиваем отсюдава https://github.com/google/android-emulator-m1-preview
устанавливаем. При первом запуске макось ругнется: «Не гоже тебе, боярин, всяческое непотребство из неизвестных источников ставить!», заходим в настройки безопасности и жамкаем подтвердить вход и всё, вполне себе работоспособный эмулятор установлен в нашей чудо-пишущей машинке.

hackintosh ice lake i5-1035g1 EL[0] was invalidated

После установки хакинтоша на Lenovo v14-iil время от времени случалась паника ядра с такой ошибкой:

panic(cpu 0 caller 0xffffff7f8d5e4f42): "EL[0] was invalidated!!"@icl/sched5/IGHardwareCommandStreamer.cpp:64
Backtrace (CPU 0), Frame : Return Address
0xffffff81db0d5860 : 0xffffff800ab1a65d mach_kernel : _handle_debugger_trap + 0x49d
0xffffff81db0d58b0 : 0xffffff800ac54a75 mach_kernel : _kdp_i386_trap + 0x155
0xffffff81db0d58f0 : 0xffffff800ac465fe mach_kernel : _kernel_trap + 0x4ee
0xffffff81db0d5940 : 0xffffff7f8ea2d6f4 as.vit9696.VirtualSMC : __ZN18VirtualSMCProvider10kernelTrapI22x86_saved_state_1010_tEEvPT_Pm + 0x454
0xffffff81db0d59c0 : 0xffffff800aac0a40 mach_kernel : _return_from_trap + 0xe0
0xffffff81db0d59e0 : 0xffffff800ab19d27 mach_kernel : _DebuggerTrapWithState + 0x17
0xffffff81db0d5ae0 : 0xffffff800ab1a117 mach_kernel : _panic_trap_to_debugger + 0x227
0xffffff81db0d5b30 : 0xffffff800b2c1a6c mach_kernel : _panic + 0x54
0xffffff81db0d5ba0 : 0xffffff7f8d5e4f42 com.apple.driver.AppleIntelICLGraphics : __ZL27ContextStatusBufferValidateRK15IGHwCsExecList5PK28SGfxContextStatusBufferEntry.cold.2
0xffffff81db0d5bb0 : 0xffffff7f8d58fe7c com.apple.driver.AppleIntelICLGraphics : __ZL27ContextStatusBufferValidateRK15IGHwCsExecList5PK28SGfxContextStatusBufferEntry + 0x2a
0xffffff81db0d5bc0 : 0xffffff7f8d5902f1 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer522csbProcessActiveToIdleEPK28SGfxContextStatusBufferEntry + 0x25
0xffffff81db0d5c00 : 0xffffff7f8d58edbe com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer526processContextStatusBufferEj + 0x166
0xffffff81db0d5c50 : 0xffffff7f8d58eb94 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer513schedDispatchEj + 0x52
0xffffff81db0d5c70 : 0xffffff7f8d58d820 com.apple.driver.AppleIntelICLGraphics : __ZN26IGHardwareCommandStreamer536handleSoftwareContextSwitchInterruptEP22IOInterruptEventSourcei + 0xc8
0xffffff81db0d5cb0 : 0xffffff7f8d59f13e com.apple.driver.AppleIntelICLGraphics : __ZN17IGInterruptBridge17serviceInterruptsERK8IGBitSetILm41EE + 0x54
0xffffff81db0d5cf0 : 0xffffff7f8d59f1df com.apple.driver.AppleIntelICLGraphics : __ZN17IGInterruptBridge17processInterruptsEPy + 0x61
0xffffff81db0d5e10 : 0xffffff7f8d57dcfe com.apple.driver.AppleIntelICLGraphics : __ZN16IntelAccelerator36_ProcessNonDisplayInterruptsCallbackEP8OSObjectPy + 0x10
0xffffff81db0d5e20 : 0xffffff7f8ced8551 com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController36ProcessNonDisplayInterruptsCallbacksEv + 0x3b
0xffffff81db0d5e60 : 0xffffff7f8cef9ed2 com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController16ProcessInterruptEv + 0x12e
0xffffff81db0d5eb0 : 0xffffff7f8cefaf3d com.apple.driver.AppleIntelICLLPGraphicsFramebuffer : __ZN31AppleIntelFramebufferController18HWInterruptHandlerEP28IOFilterInterruptEventSource + 0x15
0xffffff81db0d5ed0 : 0xffffff800b230d36 mach_kernel : __ZN28IOFilterInterruptEventSource23normalInterruptOccurredEPvP9IOServicei + 0x76
0xffffff81db0d5f00 : 0xffffff7f8b8d407e com.apple.iokit.IOPCIFamily : __ZN32IOPCIMessagedInterruptController15handleInterruptEPvP9IOServicei + 0x126
0xffffff81db0d5f50 : 0xffffff7f8c57c88c com.apple.driver.AppleACPIPlatform : __ZN23AppleACPIPlatformExpert23dispatchGlobalInterruptEi + 0x2e
0xffffff81db0d5f60 : 0xffffff7f8c585547 com.apple.driver.AppleACPIPlatform : __ZN31AppleACPICPUInterruptController15handleInterruptEPvP9IOServicei + 0x6b
0xffffff81db0d5f80 : 0xffffff800ac45e4d mach_kernel : _interrupt + 0x17d
0xffffff81db0d5fd0 : 0xffffff800aac0bed mach_kernel : _hndl_allintrs + 0x11d
      Kernel Extensions in backtrace:
         com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000->0xffffff7f8b8ecfff
         com.apple.driver.AppleACPIPlatform(6.1)[0EF10B66-B44B-32BB-9CE3-5434F4D40FE1]@0xffffff7f8c575000->0xffffff7f8c60ffff
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.driver.AppleSMC(3.1.9)[D2F0B610-83F8-3B84-B0BD-D9D0CC95A697]@0xffffff7f8b8f3000
         as.vit9696.VirtualSMC(1.1.7)[82514289-1BE6-3D64-B088-1D4ADE840C66]@0xffffff7f8ea1d000->0xffffff7f8ea44fff
            dependency: as.vit9696.Lilu(1.4.6)[DF135818-86FD-3053-8FF2-974F99CCF2CD]@0xffffff7f8dabe000
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
         com.apple.driver.AppleIntelICLLPGraphicsFramebuffer(14.0.7)[CB4E7B11-AD8B-3D5A-A395-B1B20A7E5B4F]@0xffffff7f8ce82000->0xffffff7f8d120fff
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.iokit.IOACPIFamily(1.4)[2956198D-24F2-3790-A9B2-1EAB9434B906]@0xffffff7f8b8a2000
            dependency: com.apple.iokit.IOAcceleratorFamily2(438.7.3)[B263A05C-9992-3742-AD6C-295E68E22576]@0xffffff7f8cda9000
            dependency: com.apple.iokit.IOReportFamily(47)[72B53B80-5713-30C1-BAD8-9D55FD718DA2]@0xffffff7f8b49f000
            dependency: com.apple.AppleGraphicsDeviceControl(5.2.6)[E04CD680-EC03-39ED-99C6-902C8495543F]@0xffffff7f8beff000
            dependency: com.apple.iokit.IOGraphicsFamily(576.1)[1279CBF9-88F1-3EB4-9566-1085DBF6DF8B]@0xffffff7f8bbb7000
         com.apple.driver.AppleIntelICLGraphics(14.0.7)[EA758752-A14E-383E-8DF2-D0FA9C7BF06D]@0xffffff7f8d555000->0xffffff7f8d6d1fff
            dependency: com.apple.iokit.IOPCIFamily(2.9)[44472E6F-8DA0-3B46-ADEF-AFF76EC6C6DB]@0xffffff7f8b8b4000
            dependency: com.apple.iokit.IOSurface(269.11)[2A27F1EB-4418-37FF-82CC-9891C39C6943]@0xffffff7f8cc05000
            dependency: com.apple.iokit.IOGraphicsFamily(576.1)[1279CBF9-88F1-3EB4-9566-1085DBF6DF8B]@0xffffff7f8bbb7000
            dependency: com.apple.iokit.IOAcceleratorFamily2(438.7.3)[B263A05C-9992-3742-AD6C-295E68E22576]@0xffffff7f8cda9000

BSD process name corresponding to current thread: Google Chrome He
Boot args: -v -igfxcdc -igfxdvmt keepsyms=1 debug=0x100 darkwake=0 -noDC9 

Mac OS version:
19H2

Kernel version:
Darwin Kernel Version 19.6.0: Mon Aug 31 22:12:52 PDT 2020; root:xnu-6153.141.2~1/RELEASE_X86_64
Kernel UUID: 05D51A3D-3A87-3FF0-98C3-9CF3827A3EDD
Kernel slide:     0x000000000a800000
Kernel text base: 0xffffff800aa00000
__HIB  text base: 0xffffff800a900000
System model name: MacBookPro16,2 (Mac-5F9802EFE386AA28)
System shutdown begun: NO
Panic diags file available: YES (0x0)

System uptime in nanoseconds: 36038959442354

Решение оказалось крайне простым, нужно добавить в конфиг OpenCore вот такой bootarg igfxfw=2

Автодополнение в oh-my-zsh как в fish

Нравится мне значится оболочка zsh и как частный её случай выступает oh-my-zsh. Всё бы ничего, но угораздило меня как-то попробовать fish и я крайне полюбил как там реализованы автодополнения. Прогуглил и нашел как реализовать, пишу здесь это, как и всё прочее, себе на память.

  1. Если у васм ещё не установлен oh-my-zsh то устаналиваем командой:
sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
  1. После чего клонируем необходимые для fish подобного автокомплита плагины.
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git  ~/.oh-my-zsh/plugins/zsh-syntax-highlighting
  1. Прописываем плагины в конфиг ~/.zshrc :
plugins = ( [plugins...] zsh-autosuggestions history-substring-search zsh-syntax-highlighting)

Внимание: убедитесь, что zsh-syntax-highlighting записан последним в списке плагинов.

  1. Если отображется не ахти как, то попробуйте в конфиг вписать такое изменение стилей ~/.zshrc.
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=white'
  1. Скармливаем zsh исправленный конфиг:
source ~/.zshrc

MacOS Big Sur и sshfs

Ранее я уже писал небольшой пост о том как подключаться из MacOS через SSH к удаленной файловой системе используя SSHFS и OSXFUSE. Но вот в последней версии десктопной яблочной системы, почему то из Homebrew исчез пакет sshfs, сказать что для меня это стало трагедией это ни сказать ничего.

Безусловно, для копирования на удалённый сервер и из него файлов и каталогов, можно использовать обычный терминальный инструмент scp. Как то например:

scp -r /home/manjarqo/catalog root@212.212.213.213:/home/manjarqo/

Но я уже избалован GUI интерфейсами и мне крайне лениво каждый раз вводить этит замечательные комбинации команд.

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

MacOS и внешний монитор через HDMI или VGA на ноутбуке Lenovo v14 iil

Итак, как можно понять из заголовка топика есть у меня Lenovo v14-iil, на нём традиционно установлен MacOS Big Sur. Эта моя замена MacBook Pro не сильно уступающая по производительности, но крайне уступающая в цене, так мой экземпляр на процессоре i5 1035G1, с мной докинутой то 20 гигабайт оперативкой, докинутым SSD диском обошелся мне в 45к рублей. И как рабочая лошадка, на которой можно разрабатывать под яблочные девайсы, монтировать видео в файнал кате и просто радоваться привычным юзерфрендлиевым приложениям макоси, он меня устраивает чуть больше чем полностью.

До сего дня был на нём один недостаток который не позволял мне радоваться жизнью так как я мог бы. Этот недостаток в том, что процессор 10-го поколения Intel, счастливым обладателем коего я являюсь на настоящиках встречается только в комплекте с usb type С, но никак не с hdmi, посему яблочные драйверописцы предусмотрительно не написали поддержку для HDMI, а по закону бутерброда у меня как раз таки HDMI и никаких тебе ЮСБ тайп си.

И вот сегодня пришла вот такая вот штукенция благодаря ей теперь работаю на внешнем мониторе в маке чего и вам желаю. Владельцам же настоящиков эта штука позволит выводить картинку на несколько дисплеев. Работает так же и в Windows. Явных задержек мною замечено не было, даже видео c youtube в 4k 60fps тянет без отставания звука от картинки. в общем рекомендую. Ссылка не реферальная, вставил ее только потому что сам покупал у этого магазина, это не реклама поэтому можете покупать в другом месте, хотя отправил продавец быстро и пришло за пару недель.

((tabController)) != nil или как мой .xcworkspace падал при открытии

Здравствуй мой юный друг, я расскажу тебе сказочку, о том как давным-давно в тридевятом царстве-тридесятом государстве… Короче пол дня просовокуплялся я с этой ошибкой из кода ниже. Собрался я билдить для яблокостора очередную версию своей flutter приложуньки, и при открытии .xcworkspace моего проекта xcode молчаливо(с его стороны, я же со своей стороны был нескромен в высказываниях и перечислениях всех моральных качеств, всей родни разработчиков всея apple developers до седьмого колена) падал.

Решение было крайне простым, я тупо открыл проект в vscode и в каталоге .xcworkspace удалил наглухо каталог xcuserdata со всем его сратым содержимым. Занавес…

Process:               Xcode [650]
Path:                  /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier:            Xcode
Version:               12.3 (17715)
Build Info:            IDEFrameworks-17715000000000000~8 (12C33)
App Item ID:           497799835
App External ID:       839512638
Code Type:             X86-64 (Native)
Parent Process:        ??? [1]
Responsible:           Xcode [650]
User ID:               501

Date/Time:             2021-03-09 22:49:09.037 +0300
OS Version:            macOS 11.1 (20C69)
Report Version:        12
Anonymous UUID:        8C982321-3B9A-84D2-790A-2EA04A57AD85

Sleep/Wake UUID:       4F3724F4-187C-40B3-A7DB-CA517BF94559

Time Awake Since Boot: 100 seconds

System Integrity Protection: disabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
ProductBuildVersion: 12C33
ASSERTION FAILURE in /Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-17715/IDEKit/Workspace/IDEWorkspaceDocument.m:3270
Details:  (tabController) should not be nil.
Object:   <IDEWorkspaceDocument: 0x7fe3b9074a50>
Method:   -commitStateToDictionary:
Thread:   <NSThread: 0x7fe3b2c073c0>{number = 1, name = main}
Open FDs: 39/7168
Hints:   
 
Backtrace:
  0   -[IDEAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in IDEKit)
  1   _DVTAssertionHandler (in DVTFoundation)
  2   _DVTAssertionFailureHandler (in DVTFoundation)
  3   -[IDEWorkspaceDocument commitStateToDictionary:] (in IDEKit)
  4   -[DVTStateToken _copyStatefulObjectState] (in DVTFoundation)
  5   -[DVTStateToken pushStateToRepositoryAndReturnError:] (in DVTFoundation)
  6   -[DVTStateRepository _updateStateIfNeeded] (in DVTFoundation)
  7   -[DVTStateRepository collectStateFromRegisteredObjects] (in DVTFoundation)
  8   -[IDEWorkspaceDocument writeStateData] (in IDEKit)
  9   __28-[IDEWorkspaceDocument init]_block_invoke (in IDEKit)
 10   -[DVTDelayedInvocation runBlock:] (in DVTFoundation)
 11   __NSFireDelayedPerform (in Foundation)
 12   __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (in CoreFoundation)
 13   __CFRunLoopDoTimer (in CoreFoundation)
 14   __CFRunLoopDoTimers (in CoreFoundation)
 15   __CFRunLoopRun (in CoreFoundation)
 16   CFRunLoopRunSpecific (in CoreFoundation)
 17   RunCurrentEventLoopInMode (in HIToolbox)
 18   ReceiveNextEventCommon (in HIToolbox)
 19   _BlockUntilNextEventMatchingListInModeWithFilter (in HIToolbox)
 20   _DPSNextEvent (in AppKit)
 21   -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (in AppKit)
 22   -[DVTApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in DVTKit)
 23   -[NSApplication run] (in AppKit)
 24   NSApplicationMain (in AppKit)
 25   start (in libdyld.dylib)
 
abort() called

Application Specific Signatures:
((tabController)) != nil

Error installing BoringSSL-GRPC

Стал я значится flutter разработчиком с пол года как. И вот всё было довольно неплохо, напейсал цельных два приложения и успешно разместил в апсторах и плеймаркетах. Но после обновления на flutter 2.0.1 что то при билде под iOs пошло не так. Возникла ошибка которая представлена ниже при команде pod install

alexander@MBP-Alexander ios % pod install    
Analyzing dependencies
cloud_firestore: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_auth: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_core: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
firebase_messaging: Using Firebase SDK version '6.33.0' defined in 'firebase_core'
Downloading dependencies
Installing BoringSSL-GRPC (0.0.7)

[!] Error installing BoringSSL-GRPC
[!] /usr/bin/git clone https://github.com/google/boringssl.git /var/folders/fb/fxsnv_l944l5mg6p859jqxnh0000gn/T/d20210306-4220-ge6hhi --template=

Cloning into '/var/folders/fb/fxsnv_l944l5mg6p859jqxnh0000gn/T/d20210306-4220-ge6hhi'...
fatal: the remote end hung up unexpectedly

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

На буржуйских форумах сказали, что вероятно всяческие постоянные блокировки безбожные всяческих айпишников нашим великими организациями типа РКН и постоянные добавления беспорядочное различных айпишников в блеклисты приводит к таким вот недоразумениям. Всем добра.

Ходи на конфы!

Привет, бро!?
Давненько не общались. Расскажу в двух словах о прошлых выходных.
В прошлую субботу мне посчастливилось побывать на крутой конфе DevFest Krasnodar 2019 : Back To The Future .
Познакомился на ней с крутыми ребятами. И самое главное событие для меня стало знакомство с Ильёй, 20-ти летним, на первый взгляд, ничем не примечательным парнем. «Чем же меня так потрясло это знакомство?» — спросишь ты.
Не спросишь? Ну да ладно, ты же знаешь, я всё равно расскажу.???

Ну слушай. Короче, он окончил колледж по специальности «Монтажник холодильного оборудования» и сейчас в свои 20 лет работает в финтех компании, продакт менеджером, зарабатывает 80 тысяч рублей. Снимает со своей девушкой скромную двухкомнатную квартирку (80 кв.м.) с отличным ремонтом, располагающуюся почти в самом центре Краснодара. Он весь на саморазвитии, те методы и способы которые я начал применять для себя последние пару лет, он пользует уже в своём юном возрасте. И что примечательно еще год назад Илья жил с мамой в 1 комнате 12 кв.м. в общежитии и вместо того, чтобы как большинство сверстников «отдыхать, веселицо, танцевать», этот, по-хорошему, ненормальный парень, читал книжки и инвестировал в себя и свои скилы.

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

В общем респект Илье. В нём вижу себя, только не просравшего треть жизни в погоне за сиюминутными радостями. Не перекладывающего ответсвенность за свою жизнь с родителей на начальство. Не живущего с подспудной уверенностью в том, что мне кто-то, что-то, почему-то, но в большом количестве, пренепременно должен и вот сейчас, чуть-чуть только надо подождать и на меня все эти блага посыплются. Ну чтож, лучше поздно чем никогда?

Прошедшее воскресенье тоже не прошло впустую. Я побывал на «KRD STARTUP DAY 2019». Основным инсайтом этого мероприятия для меня стало, что «зная только лишь башкирский язык, не стоит выходить на западные рынки»? Не ну а чё, а я уже репетитора башкирского языка, себе искать было начал, а тут на тебе, новость???.

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

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

Если у тебя в будущем наклевывается какая-то конфа или митап, не тупи и не жмись потратить деньги, сходи, посмотри, пообщайся, познакомься. Ведь пока мы варимся в одном и том же котле, пока нас окружают одни и теже люди, ожидать разительных перемен в себе — глупо. Как известно твой заработок равен среднему значению 5 твоих знакомых с кем ты проводишь больше весего времени. То есть если ты зарабатываешь 100ку, а твои друзья по 20-30 тысяч, не удивляйся почему ты еще не в 300+.

Чё? Не в деньгах счастье? Ясен пень не в них, но ИМХО это лишь отмазка для того, чтобы вариться в привычном соусе.

Широко известный в узких кругах, бывший губернатор Калифорнии Шварценеггер как-то сказал: «Деньги не приносят счастья. У меня сейчас 50 миллионов, а счастлив я ровно также, как и тогда, когда у меня было 48 миллионов долларов». ???

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

Избавляемся от тиринга в Linux

Большинство пользователей Линукс систем, конечно же знают о существовании такой проблемы, как разрыв экрана или  tearing. Основной, и наиболее вероятной причиной данного «недуга», является X-сервер. Да, Wayland уже вполне себе работоспособен, но от Иксов пока ещё способны отказаться не все. Но не одним X-сервером жив тиринг. Следующей причиной оного может послужить драйвер GPU. Наиболее частым виновником разрывов является, как ни странно, самый популярный производитель видеокарт — NVIDIA и его видеодрайвера. Третьим виновником возниковения тиринга в Linux является окружение рабочего стола, со своими багами и фичами. Ну вот мы вкратце разобрались с классическим вопросом: «Кто виноват?», далее попробуем разобраться с не менее класическим: «Что делать?».

Небольшое видео с нашего Техноджем канала

Тиринг NVIDIA

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

Coming Soon Избавляемся от тиринга в Linux
Нужны ли подобные статьи о Linux?
Нужны ли подобные статьи о Linux?
Нужны ли подобные статьи о Linux?

Для начала вам нужно включить настройку модуля NVIDIA DRM (modsetting). Начните с создания файла конфигурации в каталоге modprobe:

sudo touch /etc/modprobe.d/nvidia-nomodset.conf

Предлагаю вашему вниманию так же статью Клиенты Google drive (google disk) linux webdav: Ubuntu, Mint

Затем правим его в любом удобном вам текстовом редакторе, и добавляем там следующую строку:

options nvidia-drm modset=1

Затем чтобы ядро получило информацию о наших манипуляциях делаем в терминале:

sudo update-initramfs -u

После перезагрузки разрывы должны пропасть. Радуемся но это не точно. Если не исчезло то попробуйте в /etc/X11/xorg.conf.d/20-nvidia.conf в разделе «Device», добавить такие строки:

Section "Device"
   Identifier "Nvidia Card"
   Driver "nvidia"
   VendorName "NVIDIA Corporation"
   Option "NoLogo" "true"
   Option      "metamodes"  "nvidia-auto-select +0+0 { ForceCompositionPipeline = On }"
EndSection

Тиринг Intel

Графика Intel в Linux обычно не составляет больших проблем. Вероятно, это связано с тем, что интегрированная графика обычно имеет меньше функций, а стек драйверов Intel вообще поставляется с открытым исходным кодом. Для устранения тиринга на Intel найдите и исправьте у себя конфигурационный файл, примерно по такому пути /etc/X11/xorg.conf.d/20-intel.conf (в различных системах он может находиться в различных каталогах).  Исправьте в нём раздел «Device» таким образом:

Section "Device"
     Identifier "Intel Graphics"
     Driver "intel"
     Option "TearFree" "true"
EndSection

 После чего сохраните и перезагрузитесь.

Тиринг AMD

Тиринг на видеокартах от AMD в Linux тоже хоть и не так часто, но бывает. Этот способ подходит как для проприетарных, так и для свободных драйверов. К сожалению этот способ не подходит для окружения рабочего стола KDE. Итак создайте или, если он есть, исправьте файл /etc/X11/xorg.conf.d/20-radeon.conf , доведя раздел «Device», до следующего сосостояния:

Section "Device"
    Identifier "Radeon"
    Driver "radeon"
    Option "TearFree" "on"
EndSection

xfce тиринг

<шутка>XFCE славится своим замечательным тирингом</шутка>. Это всегда было проблемой данного рабочего окружения, благодаря своему композитному менеджеру. Поэтому для решения этой проблемы заменим дефолтный композитор на Compton.

Для начала отключим стандартный композитный менеджер «Крыски» для этого выполним в терминале:

xfconf-query -c xfwm4 -p /general/use_compositing -s false

Или пройдём в настройки XFCE, в настройки менеджера окон, и снимем чекбокс с Enable display compositing, как на изображении ниже. 

Избавляемся от тиринга в Linux

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

Debian и производные

sudo apt install compton

Arch linux и производные

sudo pacman -S compton

Вернёмся к настройкам XFCE. На этот раз нажмите “Сеанс и запуск.” (Session and Startup) Добавить Compton в автозапуск, для этого добавим в атвозапуск комптон со следующим ключем:

usr/bin/compton --backend glx

как на скрине:

Избавляемся от тиринга в Linux

После чего перезагружаемся и проверяем работает ли Compton:

pgrep -l compton

Если всё норм, проверяем работает ли тиринг =)
Если тиринг в XFCE не пропал, то пробуем отредактировать файл ~/.config/compton.conf, в моём случае он такой:

backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
vsync = "opengl-swc";

# Shadow
shadow = true; # Enabled client-side shadows on windows.
no-dock-shadow = true; # Avoid drawing shadows on dock/panel windows.
no-dnd-shadow = true; # Don't draw shadows on DND windows.
clear-shadow = true; # Zero the part of the shadow's mask behind the window (experimental).
shadow-radius = 7; # The blur radius for shadows. (default 12)
shadow-offset-x = -7; # The left offset for shadows. (default -15)
shadow-offset-y = -7; # The top offset for shadows. (default -15)
shadow-exclude = [
  "n:e:Notification",
  "n:e:Docky",
  "g:e:Synapse",
  "g:e:Conky",
  "n:w:*Firefox*",
  "n:w:*Chromium*",
  "n:w:*dockbarx*",
  "class_g ?= 'Cairo-dock'",
  "class_g ?= 'Xfce4-notifyd'",
  "class_g ?= 'Xfce4-power-manager'",
  "class_g ?= 'Notify-osd'",
  "_GTK_FRAME_EXTENTS@:c"
];

# Opacity
detect-client-opacity = true;

# Window type settings
wintypes:
{
  tooltip = { shadow = false; };
};

По идее разрывы должны пропасть, если не пропали, значит что-то пошло не так. Ищите дальше, ведь это Линукс, за всё нужно платить=)

kde тиринг

KDE, является моим любим рабочим окружением. В нём есть такое огромное количество, так нужных пользователям, элементов управления, что с помощью GUI Панели управления можно настроить практически всё. Откройте приложение Настройки и найдите «Display and Monitor». Там выберите «Compositor». Найдите параметр «Предотвращение разрыва vsync»(Tearing prevention «vsync» и установите для него значение «Перерисовка всего экрана” (Full screen repaints). После этого нажмите «Применить» (Apply).

Избавляемся от тиринга в Linux

Нередко Kwin, оконный менджер KDE, тоже становится причиной тиринга. Если не после предыдущих манипуляци разры картинки не пропал, то создалим файл /etc/profile.d/kwin.sh следующего содержания:

export KWIN_TRIPLE_BUFFER=1

Перелогиньтесь и всё должно стать гладко.

Firefox тиринг

Удостоверьтесь, что тиринг у вас присутствует только в браузере Firefox, с помощью данного видео выполните проверку на тиринг просмотрев в 1080p60:

 если при просмотре видео, изображение будет рваться то переходите к следующим манипуляциям:
1) Откройте about:config в Firefox
2) Найдите layers.acceleration.force-enabled
3) Измените значение(Value) на true.
4) Перезагрузите браузер 

Трудисьнах

Привет, дружище!
Вспомнил, что этим летом прочёл ещё одну занимательную книжулю. Она вроде как и не про бизнес и не про жизнь и в тоже время обо всём сразу. Это книга «Гибкое сознание» автора Кэрол Дуэк, которая ни много ни мало является профессором психологии, преподавателем Стэнфордского университета в одной «малоизвестной» стране находящейся в Северной Америке.

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

«Столкнувшись с заданиями посерьезнее, один десятилетний мальчуган пододвинул стул поближе к столу, потер руки, облизнулся и заявил: «Люблю я трудные задачки!» Другой мальчик, изрядно попотев над головоломкой, поднял довольное лицо и веско заключил: «Вы знаете, я на это и надеялся — что будет познавательно!» «Да что же с ними такое?» — не могла понять я. Мне и в голову не приходило, что неудачи могут кому-то нравиться. Эти дети что, инопланетяне?»

В общем она пришла к выводу, что человеки с детского детства по тем или иным причинам имеют два вида установок. 

Первая установка на Данность — вызывает в нас потребность самоутверждаться снова и снова. Если нам даны определенные нравственные качества, определенная индивидуальность, определенное, строго фиксированное количество интеллекта, тогда остается лишь одно: доказывать, что количество всего этого добра довольно велико. Неудача при такой установке воспринимается строго на свой счёт, опускаются руки, человек не смог доказать всем свой непревзойдённый ум и прочие качества, это трагедия.

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

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

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

Не родись гением, а родись трудягой

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

«Вы знали, что Дарвина и Толстого считали обычными детьми? Что Бен Хоган, один из величайших игроков в гольф всех времен, в детстве был невероятно неуклюжим ребенком с очень плохой координацией движений? Что фотограф Синди Шерман, которая входит буквально во все перечни самых видных художников XX века, провалилась на первом курсе, обучаясь фотографии? Что Джеральдин Пейдж, одной из выдающихся актрис столетия, некогда советовали отказаться от этого занятия из-за отсутствия таланта?»

Майкл Джордан также не был самородком. Оказывается в юности Майкл Джордан был исключен из сборной школы. Затем Майкла не приняли в команду колледжа, за которую он хотел выступать, никто и представить не мог что из-за своего упорства он станет величайшим игроком NBA всех времён. «Моцарт корпел над своими произведениями более десяти лет, прежде чем написать первое из тех, что сегодня вызывают в нас восхищение. До этого результаты его композиторского труда не были ни столь оригинальными, ни столь интересными. Зачастую они и вовсе представляли собой соединенные вместе фрагменты произведений других композиторов.»

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