Monthly Archives: січня 2016

7 порад, як поліпшити роботу вашого сайту Microsoft Edge та інших сучасних браузерах

Коротка довідка: Microsoft Edge – це новий дефолтний браузер Windows 10, що прийшов на зміну Internet Explorer. Крім нового свіжого інтерфейсу, під капотом браузера також знаходяться і оновлені движки EdgeHTML (спочатку — форк движка IE11) і Chakra (для JS). Якийсь час браузер був відомий під тимчасовою назвою «Project Spartan».

Разом із зростанням Windows 10 ви, напевно, могли помітити на своїх сайтах і зростання числа користувачів Microsoft Edge. Тому саме час зробити кілька рухів, щоб ваші сайти працювали в Edge ще краще.

Поради, які я наводжу нижче, в основному, мають узагальнену природу. Іншими словами, від їх реалізації користь отримають не тільки користувачі Edge, але і інших браузерів.

Уникайте визначення браузера – визначайте наявність функціональності
Колись давним-давно в специфікації HTTP/1.1 і, відповідно, специфікації HTML було введено поняття User Agent, який повинен ідентифікувати браузер (або будь-який інший клієнт), який звертається до сервера. Ця функція, у багатьох випадках корисна і важко замінна (наприклад, для збору статистики), у реальному житті також здобула погану славу утилізації в цілях поділу браузерів на «погані» і «хороші».

Не вдаючись у перипетії браузерних баталій, зазначу лише, що були часи, коли розробники, спираючись на значення рядка UA, одним браузерам віддавали одну верстку, а іншим іншу. Чому було багато смутку у користувачів і болю у розробників браузерів. Останні, намагалися обдурити долю інтернет-роздачі і ховалися за чужими UA в надії на світле майбутнє.

За сучасними рядками UA популярних браузерів можна вивчати історію вебу:

(Ви ж в курсі, що згідно специфікації HTML5, navigator.appCodeName завжди дорівнює «Mozilla», а navigator.product – завжди «Gecko»? Все заради сумісності.)

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

Як кажуть джедаї, які стали на світлу сторону, правильний код дивиться на можливості браузера, а не судить за його User Agent String. Цьому підходу було дано ім’я Feature Detection, про що написано багато статей і сказано багато слів.

Порада №1: застосовуйте гнучкі рішення в коді, спираючись на доступну в браузері функціональність, а не версію або ім’я браузера.
Бібліотеки зразок Modernizr можуть вам в цьому допомогти.

Як би там не було, нова рядок User Agent в Microsoft Edge виглядає так:«Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240». Вона навмисно дуже схожа на рядок Chrome, хоча і має в кінці відмітний ідентифікатор Edge.

Команда Edge цілеспрямовано працює над тим, щоб забезпечити сумісність не тільки з веб-стандартами, але їх реалізацією в інших браузерах, зокрема, Chrome і Firefox. Тому в більшості випадків «верстка для Chrome сучасного вебу повинна просто працювати».

Тонкість тут в тому, що якщо на вашому публічному сайті ви детектируете Chrome, щоб використовувати функціональність, доступну тільки в ньому, і ця функціональність критична для UX, то люди з Edge будуть засмучені непрацюючим сайтом.

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

Автори багатьох сайтів та веб-додатків (не всі, звичайно) у мобільну епоху задумалися не тільки про те, щоб додати своїм ресурсів мобільний «look and feel», але також і про те, щоб обзавестися мобільними додатками під різні платформи.

Потім вони почали думати, як розповісти користувачам сайту з мобільних пристроїв, що їм тепер треба користуватися мобільними додатками. І тут вони знову згадали про рядок юзер-агента… і понеслася.

Загалом, як тільки IE зник, а на його місце прийшов Edge, який прикидається Chrome, який прикидається Safari, який прикидається Gecko і KHTML, які все прикидаються Mozilla… Edge користувачі Windows 10 Mobile раптом замість рідних додатків почали отримувати рекомендації поставити додаток під Android.

Часто це робить самописний код, часто скопійований з чергового блог-посту або StackOverflow, часто готові бібліотеки, наприклад, jQuery Smart Banner…

Як лірико-практичного відступу: я тут якось відкрив на одному російському новинному сайті js-код в налагоджувач і жахнувся бібліотеці 2012 року (час виходу iOS6 і Windows 8). Рік-два вона справно працювала, але тут спочатку вийшло оновлення WP8.1, а потім і мобільна версія Edge – і «все зламалося».

User Agent в мобільній версії Edge виглядає так: «Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Nokia; Lumia 520) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.10130».

Як ви можете здогадатися, десь у нетрях бібліотеки, згаданої вище і використовуваної на сайті, всі це розбирається приблизно таким кодом:

if (UA.match(/Android/i) != null) {
this.type = 'android'
} else if (UA.match(/Windows NT 6.2/i) != null && UA.match(/Touch/i) !== null) {
this.type = 'windows'
}

І, очевидно, у разі мобільної версії Edge відпрацьовує перша гілка. В результаті благий намір розробників сайту перетворюється в микроад для користувача. Не кажучи вже про те, що тут знову граблі версійності: Windows 10 версія платформи NT – 10, а не 6.2, причому в Windows 8.1 вже була версія 6.3. Втім, розробник, навряд чи міг про це здогадуватися в 2012 році.

Що ж робити? Виявляється, навіть UA-рядок, повна жодних «цікавих подробиць, повинна, згідно специфікації, слідувати простому правилу: всі перераховані продукти повинні розташовуватися в порядку пріоритетів, як їх бачить розробник клієнта (браузера).

Порада №2: розбираючи UA-рядок, враховуйте порядок входжень, а не тільки наявність ключових слів.
Якщо браузер каже, що він, в першу чергу, Windows Phone, і лише по-друге хоче отримувати контент для Android, то, напевно, він хоче, щоб ви в якості ОС сприймали саме WP.

Відносно невелика зміна в коді на сайті може принести вам нових щасливих користувачів мобільного додатку.

Оновлюйте бібліотеки до свіжих версій
Ми трошки поисследовали веб і з’ясували, що більше половини найпопулярніших 20000 сайтів використовують JavaScript-бібліотеки, які мають відомі проблеми, які усуваються в більш свіжих версій.

Ми зробили сканер для сайтів, який дозволяє перевірити:

До речі, вихідний код сканера доступний на GitHub. Якщо ви виявите баг, повідомте нам в репозитарії.

Проблема з застарілими бібліотеками має деколи дуже специфічну природу, сильно перекликающуюся з самою динамікою веба і реалізацією веб-стандартів, зокрема. Тут і копипастный код, і вендроные особливості і фішки, і стандарти, що змінюються в процесі стабілізації, і погані практики програмування. Повний букет.

На що варто звернути увагу при виборі бібліотек:

  1. Мінімальні вимоги до браузерів і їх движка. Повинно відповідати вашим мінімальним вимогам щодо підтримки браузерів.
  2. Відсутність посилань у коді на версії браузерів і в цілому детектування браузерів. Хороша бібліотека повинна дивитися в майбутнє і бути нейтральною, а не чіплятися за певний поточний зріз.
  3. Використання стабільних крос-браузерних API, а при використанні нових і, як правило, експериментальних API — наявність fallback-гілок на випадок відсутності їх підтримки в тому чи іншому браузері.
  4. Мінімізація використання вендорних API (як правило, з префіксами), краще – відсутність таких викликів і відсилань, а за наявності – обов’язковий fallback до стандартних «безпрефиксных» API. Іншими словами, бібліотека повинна надавати перевагу стандартизованим API.
  5. Стабільність версії і динаміка розвитку. Це завжди пошук правильного балансу. Стабільна бібліотека повинна забезпечувати середньострокову надійність, а динаміка розвитку повинна показувати, що це не мертвонароджений проект не цікавий більше своїм авторам.

Порада №3: використовуйте свіжі і браузеро-нейтральні бібліотеки зі стабільним кодом.

Наприклад, якщо у бібліотеки є офіційний репозиторій на GitHub не полінуйтеся перевірити, скільки в ній є відомих проблем і як часто вона оновлюється.

Уважний читач помітить, що в цьому розділі я ні разу не сказав, що мова йде тільки про JavaScript. І, дійсно, все це стосується не тільки JS (і відповідних API), але і будь-яких CSS-фреймворків і, зокрема, прекрасних експериментів, як зробити що-небудь прекрасне засобами нових фішок CSS, описаних в чернетці чергового стандарту або документації одного з виробників браузерів.

Слідкуйте за помилками, збирати статистику
Історія з бібліотеками підказує, що важливо не тільки грамотно підходити до написання свого коду та інтеграції чужого, але і відстежувати зміни в навколишньому середовищі, то й справа трапляються у світі інтернету. Десь стандарт змінився, десь браузери вимкнули підтримку експериментальної функціональності (наприклад, в префиксном вигляді, який ви використовували), де-то в новій версії стався баг реалізації, десь бібліотеки перестали стикуватися один з одним…

Загалом питання в тому, що, розробляючи деяке рішення, важливо не тільки переконатися в його працездатності в моменти самої розробки і безпосередньо впровадження, але і в ході подальшої експлуатації.

І якщо на першому етапі ви готові витратити помітні зусилля на те, щоб перевірити, як поводиться ваш веб-додаток в актуальних браузерах, то далі, якщо тільки мова не йде про постійно розробляється і динамічним проекті (а більшість сайтів не такі!), перевірки трапляються рідко або не трапляються зовсім.

А реакція і виправлення проблем, як правило, відбуваються в реакційному режимі, коли знаходиться якийсь черговий користувач з проблемою, про яку він знаходить сміливість і бажання розповісти.

У такій ситуації розумним виходом є впровадження збору статистики і її наступний аналіз. Іншими словами, ваш код повинен вміти «у разі непередбаченого», тобто у разі виникнення виняткових ситуацій, генерувати події і відправляти мета-дані в певний сервіс збору інформації. А, з іншого боку, ви або замовники сайту повинні мати можливість розуміти, що і як відбувається з сайтом в поточних історичних реаліях. Причому не тільки з точки зору маркетингу і продажів, але і з технологічної точки зору.

Порада №4. Впроваджуйте аналітику і відстежуйте непрацюючу функціональність або некоректну поведінку сайту.
У довгостроковій перспективі це, як мінімум, може допомогти бути обізнаним про проблеми сумісності.

«Хвилина реклами». Як ви, напевно, вже чули, у нас є спеціальний хмарний сервіс для розробників, зроблений для таких цілей – Application Insights Microsoft Azure. (Для студентів сервіс доступний в програму DreamSpark.) Крім відстеження загальних подій, начебто відвіданих сторінок, він також дозволяє вам вводити власні події і метрики, які ви можете відправляти в аналітику в потрібний момент часу свого коду:

appInsights.trackEvent // or trackPageView, trackMetric, ...
("WinGame",
// String properties:
{Game: currentGame.name, Difficulty: currentGame.difficulty},
// Numeric metrics:
{Score: currentGame.score, Opponents: currentGame.opponentCount}
);

Тепер давайте повернемося до CSS.

Уникайте префиксных властивостей CSS, використовуйте стандартні властивості
Колись здавалося, що впровадження виробниками браузерів експериментальних CSS-властивостей з вендорным префіксами – це відмінна ідея, що дозволяє і поекспериментувати, і «ніби» не забруднювати інтернет.

Виявилося, що це не так. Добра ідея, як це зазвичай буває, зіткнулася з суворою реальністю життя, в якій зачаровані красою багато веб-розробники почали експлуатувати нестандартні реалізації в живих проектах.

Ви, напевно, пам’ятаєте всі ці історії про драматичні зміни синтаксису градієнтів, що відбулися між початковою реалізацією в движку Webkit (Safari) і фінальною версією у відповідному веб-стандарті.

Ви також, напевно, уявляєте і як код з подібними фішками потрапляє в розмітку багатьох сайтів, будучи банально скопійованим з чергової красивої статті. Проблема в тому, що часто такий код написаний саме в демонстраційних цілях, а тому для спрощення або виходячи з міркувань компактності (або за яким-небудь ще непорозуміння), не містить повної історії. Тобто не розповідає, як його варто (і чи варто взагалі) застосовувати в експлуатації на реальних сайтах.

Останнє на практиці означає, що потрібно 1) перерахувати всі варіанти для різних браузерів і 2) не забути вказати версію коду, відповідну стандарту (можливо, проектованому).

 

Некоректне використання експериментальних і нестандартних можливостей може призводити банально до того, що сайт не просто виглядає менш красиво», але й банально перестає реалізовувати свою ключову функціональність. У наведеному вище прикладі застосування –webkit-transition без згадки альтернатив і стандартної версії призводить до того, що меню сайту перестає відкриватися в не-webkit браузерах. І це сумно.

Порада №5. Мінімізуйте використання вендорних префіксів і завжди додавайте як мінімум стандартну альтернативу.

Повторю, це стосується як коду, який ви пишете самі, так і копируемого коду і коду підключаються бібліотек. В якості прикладу візьмемо досить популярну бібліотеку normalize.css, яка має, як випливає з назви і опису, приводити відображення різних елементів в різних браузерах у більш-менш однаковий вигляд. Нижче приклад коду з бібліотеки:

html {
font-family: sans-serif;/* 1 */
-ms-text-size-adjust: 100%;/* 2 */
-webkit-text-size-adjust: 100%;/* 2 */
}

Як легко помітити, тут явно чогось не вистачає. Наприклад, властивості –moz — префіксом і версії, сумісної з розробляються стандартом. До слова, сканер, який я згадував вище, вміє такі речі визначати.

Виробники браузерів, зі свого боку, намагаються з цим боротися: розробникам сайтів ми розповідаємо, що так робити недобре, а ось для кінцевих користувачів нам доводиться реалізовувати в браузерах підтримку «чужих» префиксных API.

Просто для орієнтиру: Microsoft Edge підтримуваних –webkit — префіксів вже більше, ніж власних префіксів –ms-. (Не те, щоб нам це дуже подобалося… але потрібно.)

Обходитеся без плагінів там, де це можливо
Плагіни в браузерах – це довга історія багатьох цікавих рішень, прекрасних для свого часу, технологій та довгих і не дуже сумних падінь. Коротка версія стану справ на сьогодні: браузери рухаються до моделі без бінарних розширень.
Наприклад, це робить Chrome з відмовою від NPAPI і це робить Microsoft Edge з відмовою від ActiveX. Для всього цього є три прості і зрозумілі причини:

  1. Заміщення веб-стандартами (єдиними і стерпним)
  2. Зменшення поверхні для атак і потенційних дірок безпеки (а, як правило, мова йде про інтеграцію в браузер сторонніх мало контрольованих плагінів)
  3. Спрощення внутрішньої архітектури браузерів на користь використання тих же технологій, що і на веб-сайтах, які вони відображають (HTML, CSS, JavaScript).

Якщо ви робите рішення для мобільного веба, тв-веба і будь-яких інших недесктопных платформ, майже напевно, у відповідному браузері не будуть підтримуватися популярні на десктопі плагіни. Тому історія з бесплагинным вебом вам добре знайома.

Якщо ви робите рішення виключно для десктопа, то і ви обов’язково вже повинні бути в курсі всіх сучасних тенденцій на послідовне заміщення тієї чи іншої функціональності плагінів (наприклад, Flash і Silverlight) аналогічними або альтернативними можливостями.

Графіка, 3d-графіка, анімація, управління звуком – все це вже можна робити в сучасних браузерах, використовуючи такі технології, як SVG, Canvas, WebGL, CSS-анімації, WebAudio – все це в зв’язці з JavaScript. Наприклад, Unity вже дозволяє використовувати цей стек для ігор у браузері.

Одна з ключових ніш використання плагінів на сайтах – це програвання аудіо — і відео-контенту, в тому числі із захистом авторських прав.

HTML5 Audio/Video в поєднанні з DASH/CENC/MSE/EME і реалізацією DRM на апаратному або софтверному рівні цілком дозволяють замінити собою плагіни.

Рада №6: скрізь, де можна, намагайтеся замінити використання плагінів на сучасні веб-стандарти.
Як мінімум, для сучасних браузерів.

З впровадженням таких технологій, як WebRTC (ORTC), бесплагинный світ буде відкритий і для відео — та аудіо-комунікацій у браузері. Думаю, що впровадження веб-компонентів також дозволить істотно зменшити частку використання Flash в рекламному сегменті.

Звичайно, реальне впровадження технологій займає час і майбутнє без плагінів, яке ми чекаємо вже кілька років як, все ще ніяк не настане, але особисто я продовжую вірити, що «якщо не завтра, то коли-небудь вже точно».

Стежити за статусом впровадження тієї чи іншої функціональності можна на сайтах: Microsoft Edge, Webkit (Safari), Blink(Chrome і ін) – чи відстежувати загальну динаміку через caniuse.com.

Тестуйте сайти Microsoft Edge: безпосередньо або віддалено
І остання порція рекомендацій про те, як тестувати сайти безпосередньо в Microsoft Edge.

Перше, що потрібно розуміти: для роботи Edge потрібна Windows 10. Якщо у вас немає Windows 10 (нагадаю, що оновитися до Windows 7/8/8.1 можна безкоштовно), то ви можете поставити собі віртуальну машину з Windows 10 і новим браузером.

 

Ми постаралися підготувати образи для всіх популярних операційних систем (Windows, Mac OSX, Linux) і платформ для віртуалізації (HyperV, VirtualBox, VMWare, Parallels).

Друге: для налагодження сайтів ви можете використовувати різні інструменти. Це можуть бути як оновлені інструменти розробника F12 tools, вбудовані в браузер, так і віддалені кошти, наприклад, Vorlon.js. Ви також можете використовувати WebDriver для автоматизації тестування.

І третє: як ви, напевно, чули, з Microsoft Edge порівняно з Internet Explorer зникло багато застарілих і нестандартних речей. Тому, якщо ви на них покладалися в IE, не сподівайтеся їх використовувати Edge – ми всі випиляли.

Порада №7: додайте Microsoft Edge в список браузерів, в яких ви перевіряєте ваші сайти.
Якщо ви виявили проблеми в самому браузері (наприклад, відхилення від стандарту або відмінність з реалізацією в інших браузераз), повідомте нам через Connectу веб-переглядачі функцію «Send feedback» або в твіттері@msedgedev.

Підсумки
Нарешті, спробую зібрати всі поради разом:

  1. Застосовуйте гнучкі рішення в коді, спираючись на доступну в браузері функціональність, а не версію або ім’я браузера. (Feature Detection)
  2. Якщо вам потрібно визначити платформу, розбираючи рядок UA, враховуйте пріоритезацію.
  3. Оновіть бібліотеки до свіжих версій, вибирайте бібліотеки, нейтральні до браузерів.
  4. Впроваджуйте статистику на сайті не тільки для знімання маркетингових показників, але і для обліку технічної телеметрії.
  5. Використовуєте стандартні властивості CSS, мінімізуйте використання префіксів, а якщо додаєте їх, то робіть це для всіх браузерів.
  6. У міру можливостей замінюйте плагіни на технології, що мають в основі веб-стандарти.
  7. Слідкуйте за динамікою користувачів і додайте Microsoft Edge в список протестованих браузерів.

Атака на архіватори. Ховаємо файли в одному архіві від трьох програм

Стаття показує, як можна обдурити уважного користувача, знайомого з основами соціальної інженерії, стежить навіть за розширеннями файлів і жодною мірою не закликає до використання даної інформації в незаконних цілях. Мета – запустити виконуваний файл, видавши його за текстовий документ в zip-архіві, а якщо запустити навряд чи вийде, то не дати розпакувати або приховати файл.

На хабрі вже є стаття про можливості зміни порядку читання Unicode-символів за допомогою байта RLO. У ній розповідається, що, користуючись стандартним провідником Windows, складно помітити підміну (спуффинг) імені файлу. В ній йде мова про укритті реального розширення файлу. Також є стаття про фичах вбудованого в Провідник архіватора.

Мені, як людині, завжди стежить за розширеннями відкритих файлів, стало цікаво, а чи є програми, що попереджають про це? Зокрема, захищені архіватори? І що можуть зробити зловмисники, щоб обійти захист.

В якості піддослідного візьмемо виконуваний файл з розширенням exe, назвемо його «Об успtxt.exe».

Після літери «п» у режимі редагування імені файлу в контекстному меню провідника виберемо «Вставити керуючий символ Юнікоду» і виберемоRLO. В результаті коротке ім’я файлу зміниться на «Об успexe.txt».

Далі заархівуєм його. Я використовував найпопулярніший спосіб стиснення – Zip. І почнемо відкривати в різних архіваторах.

7-Zip 9.20/15.06

WinRAR 5.3

Вбудований в провідник Windows

Як видно, 7-zip відразу здався, WinRAR порадував стрілочкою, а вбудований в провідник архіватор не підтримує RLO. Тепер думаємо, а чи можна якось і останніми двома архіваторами здійснити спуффинг? Для цього відкриваємо заархівований файл в HEX-редакторі, одночасно читаючи специфікацію формату ZIP.

При стиску файлу zip ім’я файлу дублюється 2 рази.

Перше входження

Друге входження

І ось тут є велике поле для творчості.

По-перше, можна у другому входження затерти символи байти RLO. Тоді WinRAR відображає ім’я файлу «Про успexe.txt» і відкриє його як текстовий документ. Проте ж якщо піти далі змінити розширення .txt .jpg, то аж до версії WinRAR 4.20 ця псевдокартинка буде запущена як додаток. У WinRAR 5.3b2 даної уразливості вже немає.

Відкривши файл з затертим у другому входження RLO у вбудованому в провідник Windows архіваторі, можна спостерігати, що ім’я файлу стало майже читаним – не читаються тільки російські букви. Щоб ім’я стало читаним, замінимо їх кодування або напишемо латинські. Проте, нам не треба, щоб користувач відкрив програму як текстовий документ.

Щоб архіватор Провідника перестав бачити файл, достатньо в імені файлу вказати один із зарезервованих файловою системою NTFS символів (наприклад, <). Однак, це не врятує від перегляду архіву WinRAR-му. Що ж робити? Додати null-байт початок в імені файлу!

Тоді станеться маленьке диво: WinRAR 5.3 b відобразить файл як папку «Локальний диск», перейшовши в яку всередині архіватора, WinRAR автоматично розпакує наш файл з RLO символом в імені (ім’я для розпакування бере з першого входження!) в директорію «Temp\ Rar$*» і дбайливо покаже в провіднику виконуваний файл текстовий документ! Зауважте, що після закриття архіватор дбайливо спробує видалити цей файл як будь-який інший розпакований в тимчасовий каталог.

Можна одночасно зробити його таким, щоб він відкривався архіватором Провідника. Тоді замість null треба прописати інший недрукований символ.

Резюме
  • 7-Zip 15.06 відображає ім’я файлу з першого входження (з RLO символом). Виконуваний файл представлений як текстовий документ. Навіть якщо у вас включено відображення розширень зареєстрованих типів файлів. Подвійний клік у вікні архіватора запустить виконуваний файл.
  • Внутрішній архіватор Windows не бачить даного конкретного файлу. Інші файли бачить.
  • WinRAR 5.3 b відображає файл як папку «Локальний диск», перейшовши в яку всередині архіватора, WinRAR автоматично розпаковує наш файл з підмінним ім’ям (з RLO символом) – ім’я для розпакування бере з першого входження в директорію «Temp» і дбайливо показує в провіднику виконуваний файл текстовий документ!

Але не все так сумно. 7-Zip, наприклад, аж до версії 9.20 відображає ім’я файлу з іншого входження. Однак, якщо ім’я файлу у другому входження не міняти і зробити не Zip-архів, а якийсь рідкісний, з цих трьох архіваторів відкривається тільки 7-Zip, і покласти його в наш Zip-архів (не знаходите знайомий шаблон – реліз зламаною програми, куди кладеться зазвичай купа архівів з файлами readme.txt?), тоді атака вийде і на нього. Більше того, версія 9.20 також некоректно відображає ім’я файлу, що починається з null, і не дасть його ні прочитати, ні розпакувати.

Також в огляді не вказано архіватор WinZip. Якщо чесно, він мені не сподобався розміром, зовнішнім виглядом і рекламою в незареєстрованої версії. Проте в плані попередження користувача про виконуваних файлів і файлів з неправильними іменами він витримав всі перевірки.

Які продукти шкідливі для зубів?

Як відомо, при вживанні їжі мікрофлора, яка знаходиться у роті, активно розмножується і харчується тими ж корисними речовинами, що і організм в цілому. Бактерії активно вживають глюкозу, яка міститься в цукрі та інших солодких продуктах – відповідно, чим більше вживається їжі багатої на глюкозу, тим більше бактерій знаходиться в роті. Також варто відзначити, що продукти, які збагачені крохмалем, стають їжею для мікроорганізмів і стимулюють їх зростання.

Щоб зберегти цілісність зубів в першу чергу потрібно скоротити вживання продуктів, які містять велику кількість цукру. Люди, які сильно непокояться за своє здоров’я і стежать за ним, зазвичай знають, скільки і чого можна вжити, щоб не нашкодити своїм зубам. Активне зростання бактерій в цілому спостерігається при вживанні цукрового рафінаду – такий цукор міститься в кондитерських виробах, шоколаді, а також здобних виробах. Всі ці продукти сприяють виникненню карієсу, неприємного запаху з рота, а також зубного нальоту і каменю. Для усунення всіх цих небажаних наслідків однозначно доведеться звертатися за послугами до фахівця, наприклад, хороший дантист легко і швидко виправить ушкодження зубів як на початкових стадіях руйнування, так і на більш глибоких.

Також варто не забувати вживати в їжу тверді продукти, тому що, як показують дослідження, якщо зуби не навантажувати вони також сильно страждають і починають руйнуватися. Відсутність жувального навантаження привертає людину до формування неправильного прикусу. Однозначно відмовлятися від солодощів немає необхідності, просто варто знати міру в їх вживанні. Якщо ж не вдалося уникнути пошкодження зубів, то потрібно звернутися і записатися на прийом до лікаря-стоматолога.

Їжа, руйнує яка емаль? Існує довгий ряд продуктів харчування, які в своєму складі мають кислоту, що згубно позначається на емалі. Особливо сильно руйнують емаль газовані води, які в останні роки стали дуже популярні. Кислотність такого напою в ряді випадків досягає майже 3,0 одиниць за шкалою рН. Через частого вживання даного продукту зуби руйнуються в рекордно короткі терміни. Також небезпечні для зубів і фруктові соки, які містять велику кількість кислоти.

Читайте також

Кращі професії для ледарів

В сучасному світі досить мало трудоголіків, і повно ледарів. І якщо працевлаштування для перших, як правило, не представляє ніяких проблем, то останнім доводиться туго – дуже складно заробити на життя, не переймаючись. Виявляється, існує цілий ряд високооплачуваних професій, що не вимагають ні високої кваліфікації, ні великих зусиль. У цій статті ми розповімо про десять з них.

Професійний іноземець.
Якщо ви презентабельно виглядаєте, вмієте підтримати світську бесіду і навіть прикинутися важливою особистістю на офіційному заході, то можете сміливо претендувати на посаду професійного іноземця в Китаї. У цій країні присутність іноземних гостей надає будь-якому заходу особливий статус, так що ця професія досить популярна і платять за неї досить непогано: від $ 1000 до $ 1600 на тиждень. Крім харизми і зовнішнього вигляду для цієї роботи нічого не потрібно.

Професійний обіймальник.
Ця професія – справжня знахідка для того, хто обожнює ніжитися в ліжку цілий день безперервно, якщо звичайно, він / вона не проти розділити своє ложе з незнайомцем (в самому, втім, невинному сенсі цього слова). Цей бізнес зараз на зльоті – поки у світі існує тільки 16 подібних компаній. Так що, якщо ви хочете створити свою обнімальницьку компанію- зараз саме час. Залишається додати, що професійний обіймальник заробляє, в середньому, $ 80 в годину або $ 300 за ніч. Ніякої особливої ​​підготовки або ліцензування не потрібно – тільки готовність обійматися з абсолютно незнайомими людьми.

Вчитель англійської в Китаї.
Ще одна високооплачувана професія, яку в Китаї може отримати будь-яка людина, яка більш-менш стерпно говорить англійською мовою. У цій країні потреба у вчителях англійської неймовірно висока, а вимоги до претендентів – нижче плінтуса. Багато шкіл не цікавляться ні досвідом викладацької діяльності, ні наявністю спеціальної освіти. Так що будь-хто маючи незначні знання англійської мови може непогано заробляти, особливо не напружуючись. Педагоги-іноземці отримують в Китаї приблизно в три рази більше в порівнянні зі своїми висококваліфікованими місцевими колегами, в таких же самих школах.

Випробувач ліжка в готелі.
Це не професія, а солодкий сон! Причому в буквальному сенсі. Випробувачі постілей досить часто «працюють» в дорогих готелях, керівництво яких хоче переконатися, що їх гості зможуть добре відпочити і залишаться задоволені сервісом. Але іноді таких випробувачів наймають туристичні агентства, і тоді вони поселяються в готелях анонімно, проводять там ніч і потім звітують перед своїми роботодавцями, як їм спалося.

Дегустатор пива.
На цій роботі можна не тільки випивати, а й отримувати за це гроші. Правда, в цій справі вже потрібна певна кваліфікація. Необхідно бути в курсі тонкощів пивоваріння, вміти визначати унікальні відтінки смаку напою і знати достатнє число термінів, щоб описати свої відчуття. Зазвичай представників цієї професії навчають при пивоварних заводах.

Випробувач відеоігор.
Випробувачі відеоігор заробляють від $ 10 до $ 18 на годину, тобто, в середньому, близько 30 000 доларів на рік. У їх завдання входить знайти слабкі сторони гри і повідомити про всі гілках і проблемах.

Учасник експериментів з дослідження сну.
Ще один спосіб заробити уві сні. Різні медичні інститути постійно проводять дослідження, пов’язані зі сном і шукають людей, які погодилися б взяти в них участь. Зазвичай для кожного з експериментів запрошують людей певного віку або тих, хто веде певний спосіб життя. Учасники таких досліджень заробляють, в середньому, по $ 1000 в день.

Програміст.
Для цієї роботи деяка кваліфікація необхідна, але, як запевняють експерти, сама робота зовсім втомлива, добре оплачується, а працювати можна в піжамі і домашніх капцях. Білл Гейтс, наприклад, якось сказав, що вважає за краще наймати для виконання складної задачі в Microsoft ледачих програмістів, тому що вони «завжди знайдуть найпростіший спосіб для її виконання».

Статист в кіно.
Більшість статистів, яких ми бачимо в кінокадрах на задньому плані – це професійні актори, що прагнуть «великого прориву» в своїй кар’єрі. Однак є серед них і люди, які не тішать себе мріями про Оскара, а просто хочуть провести час в приємній компанії і заодно заробити. Статист отримує мінімум $ 100 на день. Однак якщо він є членом Гільдії кіноакторів, то йому не можуть заплатити менше $ 150 на день. Якщо знімальний день триває довше восьми годин, то статист отримує півтори чи дві ставки. А якщо під час зйомок використовується особисте майно статиста – одяг, автомобіль і т.д., то за це покладається додаткова надбавка до гонорару.

Спеціаліст з вигулу собак.
Ця робота пов’язана з певними фізичними навантаженнями, але не занадто нудними. Зайняті власники собак із задоволенням перекладають турботи про своїх улюбленців на чужі відповідальні плечі. Вигулюючи собаку, можна заробити до $ 50 на годину – все залежить від країни і від заможності господарів.

Перфекціонізм: вина, біда, претензії — як перемогти

Про «комплекс відмінниці» чув багато хто. Добре це чи погано — бути кращою і робити все ідеально? Чи може поведінку відмінниці зіпсувати життя?
Психологи стверджують, що перфекціонізм родом з дитинства. І виною тому — батьки. Чи не нова інформація, правда? :) Як що не так — відразу винні мама з татом. Але якщо серйозно, поведінка відмінниці в чому провокують в дитині саме дорослі.

У країнах, які раніше були у складі СРСР, подібне виховання — норма. А саме — порівнювати дитину з іншими дітьми, хвалити і лаяти перед всім колективом, влаштовувати змагання … Багато дорослих і сьогодні, хоча Союз розвалився давно, продовжують ось так виховувати дітей і онуків. А це ненормально! Адже в результаті дитина не вважає себе унікальним, тому що Саша, Маша, Наташа краще. Адже так вважають дорослі. Тому надалі він буде рівнятися на інших дітей, брати приклад з них, а не створювати власне життя.

Поведінка відмінниці, або перфекціонізм, виникає у тих, хто намагається заслужити любов і повагу у інших людей. Це і вина, і біда … Тому що така людина постійно не задоволений своєю роботою. Йому щоразу хочеться зробити її ще краще. А буває і навпаки — він свідомо відмовляється від цікавого проекту або підвищення по кар’єрних сходів, оскільки боїться, що не впорається. Він відчуває провину за те, що не дотягує до певного рівня. Що від нього чекають більше, а він не може цього зробити (хоча дуже часто попросту занижує свої здібності). Звідси постійні претензії до себе.

Ці дві крайності перфекціоністка навряд чи роблять людину счастлівм. А ось незадоволеним своєю роботою, постійно зайнятим і роздратованим — цілком!
Чи можна позбутися від поведінки відмінниці? Можна. )) Якщо життя ще не до кінця зруйнована постійним досконалістю і бажанням всім догодити.))

Що треба зробити Перфекціоністка в першу чергу?
1. У своїй книзі «Все відмінно» доктор Арт Улен пропонує задати собі питання: «Якою я хочу стати, коли виросту?» І не так важливо, скільки тобі років. На кожному життєвому етапі ми все одно ростемо.
Тому подумай про свої власні бажання. Нема про Машиних, Сашиних і Тетяниних .:)
2. Спробуй хоча б один день провести не ідеально, пропонує психотерапевт Олена Рихальська. Наприклад, з’їж шматок торта, який ти собі забороняєш. Дивись весь день фільми або проведи його в салоні краси, а не вдома за робочим столом. Напиши звіт від початку і до кінця, не звіряючись кожен раз, чи ти зробила правильно.
3. Протягом тижня відстежуй фрази внутрішнього критика, який звик нагадувати, що «Маша зробила б це краще», «а у Каті все відмінно … на відміну від тебе», «тобі постійно не щастить, ти ж невдаха». І замінюй їх який-небудь позитивної фразою. Наприклад, «Зате я гарна», «це все до грошей», «я єдина у всьому світі» і т.п.
4. Обіцяй більше ніколи не критикувати себе. Що б ти не зробила — це твої помилки, твої невдачі. Ідеальні тільки боги. :) А твої помилки і невдачі відправляються на віртуальний рахунок в якості досвіду. Твого, безцінного. :))
5. Спілкуйся з тими людьми, які тебе надихають, поважають і люблять. І уникай тих людей-вампірів, які за рахунок критики твоїх дій забирають енергію.

1 2 3 ... 9 10 11 12 13 14 15 16 17 18 19 20 21