macOS поправка на счупени приложения

Едно от най-досадните неща във новите macOS (OSX) е когато каже, че дадено приложение е повредено и няма да работи повече. Това се причинява от новия GateKeeper който вече не позволява на неподписани приложения или счупени такива да работят.

Ето и как изглежда това:
macos damaged app
И защо се появява:
gatekeeper
забележете, че липсва „Anywhere“.

Ето и как можете да го оправите:
1. Отваряте терминал
2. Пишете това:
sudo spctl –master-disable
забележете че има две тирета и така и трябва да бъде
3. Ще бъдете помолени да си оставите паролата.

Сега вече можете да пускате приложения:

Тъй като „Anywhere“ вече присъства.

Ако искате да го върнете следвайте горните стъпки, но за точка 2 напишете това:
sudo spctl –master-enable

macOS поправка на счупени приложения

PHP7 Mac

Ако сте на Мак и не ви се ползват Портовете или Самоварките (ports/homebrew) обаче PHP 7 ви липсва…

https://php-osx.liip.ch

Поддържа се всичко от PHP 5.3 до 7.3 и работи на всички macOS 10.6 до 10.13.

PHP7 Mac

Node.js and npm update

Наложи ми се да обновя на macOS някакъв остарял node.js и ето конкретните стъпки
1. Пишем npm version и виждаме това:
{ npm: ‘3.10.3’,
ares: ‘1.10.1-DEV’,
http_parser: ‘2.7.0’,
icu: ‘57.1’,
modules: ’48’,
node: ‘6.5.0’,
openssl: ‘1.0.2h’,
uv: ‘1.9.1’,
v8: ‘5.1.281.81’,
zlib: ‘1.2.8’ }
2. Пишем node -V и виждаме това:
v6.5.0

Които са инсталирани някъде 2015 или 2016та и са праисторически спрямо днешните стандарти.

Обновяванието става лесно:
1. sudo npm install -g npm
2. npm version вече връща това:
{ npm: ‘6.1.0’,
ares: ‘1.14.0’,
cldr: ‘33.0’,
http_parser: ‘2.8.0’,
icu: ‘61.1’,
modules: ’64’,
napi: ‘3’,
nghttp2: ‘1.32.0’,
node: ‘10.6.0’,
openssl: ‘1.1.0h’,
tz: ‘2018c’,
unicode: ‘10.0’,
uv: ‘1.21.0’,
v8: ‘6.7.288.46-node.13’,
zlib: ‘1.2.11’ }
3. sudo npm cache clean -f
4. sudo npm install -g n
5. И вече можем да напишем sudo n latest или sudo n stable. Изчакваме малко
6. node -v вече връща
v10.6.0

Оттук насетне обновяването към последните версии е само:
1. sudo npm install -g npm
2. sudo npm cache clean -f
3. sudo n stable (или latest)

Node.js and npm update

Принтиране от мобилно устройство

Използването на принтер от мобилно устройство било то таблет или телефон е лесно когато имате принтер със такава поддръжка. Обикновенно тези принтери разполагат със връзка към безжична мрежа и (ама разбира се!) съответно са малко по-скъпи. Проблема възниква когато разполагате със по-стар принтер който е или само жичен (USB или Centronics) или принтер със безжична поддръжка, но по-стар модел. Сега ще ви покажа как да се преборите със тази житейска несправедливост.

Печатане от Android

Под Android проблемите се решават сравнително по-лесно със Google Cloud Print. Изисква се браузър Chrome и регистриране на принтера във облака. Така можете да принтирате от целия свят на вашия принтер. Разбира се има уловка – трябва да се логнете във мобилното устройство и във Chrome със един и същи потребител. Ето и процедурата:

  • Регистрираме принтера на настолния компютър тук chrome://devices/
  • На мобилното устройство инсталираме Cloud Print

И общо взето е това. Има няколко благинки:

  • можем да използваме принтера от друг компютър. Хитрото е, че принтера тогава може да се намира във друг град, страна и даже континент. Разбира само от Chrome
  • можем да си закупим по-модерен принтер със поддръжка на Google Cloud Print. Текущите модели са налични ето тук
  • можем да наблюдаваме заявките през интернет оттук
  • можем да печатаме документи от Google Drive директно
  • можем да печатаме директно към CUPS под Linux със използване на специализиран драйвер за него. Кода на драйвера може да бъде взет оттук или да използвате прекомпилиран пакет оттук

И тъжната новина – връзката става само и единственно през интернет. Ако няма интернет дори и във същата стая да се намира принтера ако не е вързан със кабел към компютъра ще е просто неизползваем. Същото важи и за мобилното устройство – дори и да е във същата безжична мрежа. Ако няма интернет няма да може да използва принтера.

Печатане от iOS

Под iOS нещата са малко по-различни. Тук най-лесния и удобен начин е когато принтера поддържа AirPrint през протокола Bonjour. Ако нямаме такъв принтер разбира се ще си го емулираме:

  • инсталираме HandyPrint на macOS оттук. Под Windows ще трябва да се хакне ето така или оттук със по-новата версия. Отделно под Windows ще се наложи да инсталирате и Bonjour Print Services оттук.
  • на мобилното устройство избираме иконката за споделяне (share) и ако приложението поддържа AirPrint принтера ще се появи във списъка. Няма никакви настройки

Сега малко особенности:

  • принтера трябва да се намира във същата локална мрежа със мобилното устройство
  • няма функция печатане през интернет
  • може да се печата дори и когато интернет липсва във локалната мрежа
  • ако имате принтер свързан със AirPort Extreme или AirPort Express то самия принтер трябва да поддържа AirPrint за да можете да го ползвате. Официален списък на поддържаните принтери през AirPort има тук и неофициални тук и тук. Но ще трябва да проверите дали и принтера поддържа AirPrint иначе от мобилно устройство няма да можете да го видите и използвате
  • може да се ползва CUPS и да се емулира подобен принтер. За повече информация как – тук, тук и тук

Разбира се това са официалните начини. Има и алтернативи. Hewlett Packard поддържат стандарта ePrint използващ техните устройства. FedEx имат мобилно принтиране също тук – като след отпечатването можете да изберете да минете през техен офис за да го вземете или те да ви го доставят. Можете да използвате Printer Pro – оттук или някое от многобройните алтернативни приложения. Можете да видите дали производителя на принтера ви няма приложение: Samsung, Canon, Epson или други.

Както виждате – има богат избор вече на пазара. А само преди няколко години използването на принтер от мобилно устройство беше мит. Вече е реалност.

Принтиране от мобилно устройство

ET Legacy и macOS Sierra проблем

Човек и добре да живее минава на по-нова версия на операционната система. Част от проблемите от новата версия е, че ETLegacy спря да работи поради липсата на файлове. Всъщност аз ги виждам през файловата система, но приложението не.

FS_InitFilesystem: Original game data files not found.
Please copy pak0.pk3, pak1.pk3 and pak2.pk3 from the ‘etmain’ path of your Wolfenstein: Enemy Territory installation to:
„/private/var/folders/ph/72hb8_ds1cg98mvs4xb61c9w0000gn/T/AppTranslocation/55316FBE-BCC2-43C9-B1DC-817D7B012C32/d/etmain“

Разбира се при вас цифрите може да са малко по-различни. Може да отказва да зареди и заради липсата на файла librenderer_opengl1_mac въпреки, че го има. Проблема се оказва новата защита на приложения във macOS (Gatekeeper path randomization) и решението е сравнително лесно. Трябва само да отворите терминал и да изпишете следните команди:

cd /Applications/
xattr -dr com.apple.quarantine ET\ Legacy/

след което можете да си пуснете играта.

ET Legacy и macOS Sierra проблем

Global Firefox Console

Firefox е един от най-любимите ми браузъри по много причини. Днес установих, че е възможно да се активира глобална конзола където той да започне да показва информация относно целия мрежов трафик от всичките плъгини, него самия и сайтовете. Единственното което трябва да се направи е да се стартира със параметър от командния ред -jsconsole. Как става това?
Windows 32 битов

"C:\Program Files\Mozilla Firefox\firefox.exe" -jsconsole

Windows 64 битов

"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -jsconsole

OSX

/Applications/Firefox.app/Contents/MacOS/firefox-bin -jsconsole

Linux

firefox -jsconsole

Това е всичко. Разбира се подгответе се за потоп от информация във глобалната конзола. На мен лично ми трябва да открия проблем при обновлението му. На версия 48.0 съм и ми казва че няма обновление. Което е лъжа при положение че има 48.0.2 налична.

Global Firefox Console

Restarting Firefox

Току-що открих как може да се рестартира Firefox без да се загуби нищо.

  1. Натискате Shift-F2. За Mac е Fn-Shift-F2.
  2. Във конзолата която излиза пишете restart

Това е.

Restarting Firefox

zlib extraction

Снощи докато чистех един сайт от вируси намерих интересна директорна структура която просто не и беше мястото там (директория със транслации на javascript) със над 9999 файла и един добре обфускиран PHP скрипт. Разбира се любопитството ми проработи и преглеждането на файловете със шестнадесетичен редактор не даде никакъв резултат – или бяха криптирани или компресирани. Общото беше че всички файлове започваха със 0x78 0x9c. Опитите да видя какво е със file (*nix инструмент показващ типа на файла) не дадоха резултат. Но търсачките веднага разконспирираха, че това е zlib компресиран поток. Това ми разпали още повече любопитството да видя какво има във горните файлове.

Опитах да ги разкомпресирам със gunzip. Не се получи защото gzip използва zlib за компресия, но тогава файла започва със 0x1f 0x8b 0x08 и след няколко байта е самия zlib поток. Мързеше ме да си компилирам програма за разкомпресиране на zlib, можех да спретна и нещо на скриптов език. Но бях убеден че има и далеч по-лесен начин.

ИМА! Цялата магия се осъществява със следния „магически“ ред:
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - zlib.raw |gzip -dc
което ми спести няколко цени минути. Има и още един подобен трик със openssl (и двата правят едно и също просто разликата е във самия синтаксис):
openssl zlib -d < zlib.raw
openssl zlib -d -in zlib.raw

Резултата – видях съдържанието на файловете което беше вече първото реално доказателство за наличие на пробив във сайта. И за пореден път се убедих че от *nix-а по-голямо няма.

zlib extraction

Използване на няколко профила под Firefox

Когато ровенето във интернет се превърне във професия неминуемо човек се сдобива със няколко профила и започва едно чудене тип „със този браузър къде се бях логнал?“. Сега ще ви покажа как да активирате мултипрофилната поддръжка под Firefox и да я използвате във ваша полза.

  1. Излезте от Firefox ако е пуснат, ако не е пуснат пропуснете тази стъпка.
  2. Стартирайте команден ред. Под Windows трябва да се стартира cmd.exe, Linux/BSD/OSX потребителите трябва да отворят един терминал.
  3. Активиране на Firefox Profile Manager. Това е може би най-трудната част. Общо взето трябва да се напише един единствен ред.
    Windows 32 битов

    "C:\Program Files\Mozilla Firefox\firefox.exe" -ProfileManager

    Windows 64 битов

    "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -ProfileManager

    OSX

    /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

    Linux

    firefox -ProfileManager
  4. Firefox ще ви покаже заветния екран със списък със няколко профила (в момента е един) и няколко бутона. До сега сте работили във профила „default“. Сега натискате бутона „Create Profile…“
  5. Излиза един нов прозорец който ще ви попита как да се казва новия профил. Напишете име под което ще свързвате новия профил със предназначението му. Ако сте начинаещ не бутайте папките – Firefox сам ще се оправи и няма да омеши профилите.
  6. Натискате бутона „Done“
  7. Et voila! Имате чисто нов профил под който можете да стартирате Firefox.
  8. Сега при всяко стартиране Firefox ще ви попита под кой потребител искате да продължите работата си ако махнете „Don’t Ask at Startup“. Ако го оставите Firefox винаги ще стартира със Default профила и горната гимнастика от точка 3 ще трябва да се изпълнява когато трябва да влезете под другите профили.

Тъй като профилите не се смесват всички пароли, настройки, плъгини, бисквитки, отметки и други такива са индивидуални между профилите. Между профилите не може да се прехвърли нищо от горепосочените неща защото те са индивидуани за всеки един потребител. Единственно Firefox е общ и обновяването му ще обнови Firefox на всички потребители.

Има още един малък трик който ще опиша тук. Тъй като Firefox използва стартирания профил за да се взлезе със друг потребител трябва да се излезе от текущия. Което е малко досадно, ако трябва да се направи нещо малко по-бързо едновременно от двата потребителя. Mozilla са помислили за хитро решение на проблема като Firefox се стартира със опция „-no-remote“ примерно като така:

"C:\Program Files\Mozilla Firefox\firefox.exe" -no-remote
"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -no-remote
/Applications/Firefox.app/Contents/MacOS/firefox-bin -no-remote
firefox -no-remote

Използвайте реда който е за операционната система която ползвате както по-горе. Това ще доведе до стартирането на две (или повече!) работещи копия на Firefox във паметта и може да затормози доста компютъра ви в зависимост от дейностите които изпълнявате. Затова е по-удобно да изнесете тази команда някъде като икона за бърз достъп (shortcut). Никога ама абсолютно НИКОГА не стартирайте два пъти браузъра със един и същи профил едновременно! Може сериозно да повредите профила. Отделно трябва и много да се внимава при изтриването на профилите защото процедурата няма лесно възстановяване на данните ако случайно бъде изтрит профил който не е трябвало да се пипа.

Можете също така да стартирате и Firefox със бързо влизане във профил. Тук опцията е „-P <името -на-профила>“ и може да се прибави и „-no-remote“ за да се влезе във него дори и ако е стартиран вече браузъра под друг профил.

Отняколко месеца използвам тази техника успешно и вече не ми се налага да излизам и да влизам във различните услуги със различни профили. Механизма е проигран успешно и може да ви помогне ако имате повече от един акаунт във социалните мрежи (например 2-3 Facebook), ако правите активна оптимизация на сайтове или просто трябва да използвате акаунти на клиенти или приятели.

Ако искате повече информация можете да я намерите от извора тук, тук или тук

Използване на няколко профила под Firefox

Recover Android with ADB

Настоящето го описвам защото днес се сблъсках със много интересен проблем. Евтин китайски таблет забива на логото на Android и няма измъкване оттам. Във различните форуми споделяха за рестартиране при задържане на Vol+ бутон, на друго място бутона беше Vol-, а имаше и места където искаха и двата бутона да бъдат задържани. На друго място споделяха, че можело безболезнено да се почисти самото потребителско съдържание със помоща на ADB. За щастие намерих оттук ADB за OSX и започнах със експериментите.

Първоначално установих, че имам със ADB контрол над устройството докато си цикли на логото на Android. Затова написах следната команда:

adb shell
recovery --wipe_data

Уви тук се натъкнах на следния проблем. Екрана премигваше няколко пъти и горната команда връщаше „segmentation fault“ което е друг проблем. За мой късмет имало и по-къса команда wipe. Затова си натраках следния ред:

adb shell wipe data
adb reboot

Във резултат на което устройството успя да се рестартира и почисти всички потребителски настройки. Инсталацията на Android тръгна и устройството беше завърнато към живот. Както можеше и да се очаква всички данни от устройството бяха затрити. Което е както и минус така и плюс.

Ако „случайно“ сте под Windows то ADB може да бъде намерено оттук. Разбира се няма как да потвърдя, че е работоспособно. Всъщност цялото ADB може да бъде смъкнато оттук, но е около 400MB и идва със цялата среда за разработка под Android.

Recover Android with ADB