- Запуск Сталкера в Linux
- Warning: file_get_contents(): SSL: ��������. Warning: file_get_contents(): failed to open stream: HTTP request failed?
- Символы Unicode: о чём должен знать каждый разработчик
- Введение в кодировку
- Краткая история кодировки
- Проблемы с ASCII
- Что такое кодовые страницы ASCII?
- Безумие какое-то.
- Так появился Unicode
- Unicode Transform Protocol (UTF)
- Что такое UTF-8 и как она работает?
- Напоследок про UTF
- Это всё?
- Заключение
Запуск Сталкера в Linux
Wine — программа для запуска программ для Windows в операционной системе Linux (и в MAC OS X, куда же без него?!). Wine недописан, и многие программы в нём не работают. Оконные приложения работают почти все (плохо работают в основном программы от самой Microsoft, которые используют огромное множество слабодокументированных возможностей системы, и игры, которые портированы с XBoX). А если хочется запустить игру, то половина работает сразу, а вторая половина работает или с небольшим шаманством (самые простые и очевидные действия: взять библиотеку из Windows, изменить regedit Wine’а, установить noCD, отредактировать файл конфигурации игры), или не работает. Перед запуском какой-либо игры необходимо зайти на сайт appdb.winehq.org/ и посмотреть последовательность действий для её запуска. Рекомендую с Wine вообще не связываться, потому что он привносит в повседневную работу много багов — 99% багов в Linux это баги Wine. Но помимо недовольства, программа Wine привносит и много радости: стакан наполовину полон, а не наполовину пуст. Если посмотреть на картину крупным планом, Wine прекрасно запускает десятки тысяч программ! Почему запускает, а не эмулирует: Wine не эмулятор, а хитроумная прослойка между ядром и библиотеками Windows и Linux, которая не использует файлы из Windows, но если свои эквиваленты ещё недописаны, то спокойно работает и с родными файлами Windows’а. Поэтому, в отличие от эмулятора, потеря в скорости работы составляет всего лишь 15-20% (а с оконным приложением может вообще не быть — в единичных случаях замечена бОльшая скорость, чем в Windows).
Что касается того, что не работает — вы не встретите в Wine ошибку в вычислениях, или чтобы программа выдавала неверный результат. Программа или не будет работать совсем, или будет работать правильно. Могут только не включиться более-менее новые графические навороты, и всё. Прежде чем пользоваться этим руководством, я предполагаю, что вы уже умеете работать с Wine и знаете, как запускать с помощью него программы.
Игра Сталкер запускается в Wine начиная с версии 0.9.35. Когда вышла игра, актуальной версией программы была 0.9.34, и игра полностью запускалась при условии, что перед компиляцией программы будет применён быстро написанный поклонником игры патч. Патч решал какую-то мелкую неисправность, и получился настолько удачным, что был включён в саму программу Wine начиная с версии 0.9.35, так как не мешал другим программам и даже исправлял похожие баги при их запуске. Далее Wine выходил с периодичностью в 2 недели по пятницам вплоть до версии 0.9.61, затем было 5 релиз-кандидатов, первая версия, 1.1.0, и снова выходили новые версии со сменой третьей цифры в номере версии. Актуальной версией программы Wine на сегодня является 1.2. Игра работает в каждой из них, однако рекомендуется использовать первую версию, потому что в первых трёх релиз-кандидатах было исправлено несколько случайно допущенных ошибок в работе игры при разработке программы Wine (неправильно выглядящая вода в локации Припять; снижение скорости игры до 1-2 кадров в секунду, если герой оказывается рядом с аномалией; неправильно наложенные тени). Эти ошибки просуществовали недолго, и уже никто о них не вспомнит через три года после их исправления.
Первая часть игры
Для того, чтобы запустить первую версию игры, необходимо установить noCD: программа Wine не умеет запускать драйвер защиты от копирования дисков StarForce. Затем игру можно запустить либо с ключом -dsound (например, отредактировав ярлык запуска игры), либо заменив файлы openal32.dll и wrap_oal.dll в каталоге с игрой на версии вайлов с сайта компании Creative. Дело в том, что они испорченные, и не работают даже в Windows — вместо них встаёт библиотека, установленная в системные каталоги. Можно играть!
Начиная с версии Wine 1.1.30 ключа -dsound или замены файлов больше не надо: Wine научился использовать библиотеку OpenAL из системы. Но если в системе этой библиотеки нет, или Wine не скомпилирован с ней, то замену библиотек или ключ для запуска игры всё ещё необходимы.
Игра работает не полностью: сетевая игра не запускается, динамическое освещение объектов не показывает небо (скриншоты можно посмотреть на странице бага). В общем, только статическое освещение, увы.
Нужно установить патч для игры, или 1.004, или 1.005. Без него будет исчезать часть травы при движении. Дело в том, что программа Wine, входящая в систему, компилируется со свободной реализацией OpenGL, Mesa3D. А там не то чтобы ошибка — там кое-что недописано. Поэтому нужно или скомпилировать Wine с драйвером nVidia/ATi, где свой, полноценный OpenGL, или пропатчить игру. Это редкая ошибка и проявляется только в Сталкере, и в игре Morrowind, где вместо пиксельно-шейдерной воды какое-то безобразие. Дело в том, что в некоторых конфигурациях Windows это встречается тоже, и патч 1.004 исправляет ошибку.
Вторая часть игры
Начиная со второй части разработчики убрали поддержку вывода звука с помощью средств DirectSound, поэтому если версия Wine меньше чем 1.1.30, необходимо заменить библиотеки OpenAL. До выхода второй версии игры никто и не догадывался о том, что библиотеки OpenAL испорчены — люди могли запускать игру только с ключом -dsound.
По-прежнему нужен noCD.
Начиная со второй версии появляются новые проблемы, препятствующие игре. Первая: необходимо установить DirectX. Оказалось, первая версия игры работает сразу только потому, что библиотеки d3dx9_номер.dll лежат в каталоге с игрой! У программы Wine есть эквиваленты этих библиотек, которые в данный момент в разработке, и не могут запустить игру. Поэтому необходимо либо установить DirectX, либо скопировать файлы d3dx9_31.dll, d3dx9_36.dll, d3dx9_37.dll в каталог с игрой (bin).
Вторая проблема — начиная со второй версии игры, запускаемой в Wine, не работает мышь: немного сдвинувшись, она оказывается в центре экрана. Для того, чтобы исправить проблему, есть патч, который нужно наложить на исходный код программы Wine (bugs.winehq.org/attachment.cgi?id=15638), или взять уже пропатченный файл dinput.dll (rapidshare.com/files/206718949/Patched_Wine_1.1. Если уже пропатченный файл работает неправильно (отзываются о том, что игра встаёт на паузу, стоит пошевелить мышь), значит, нужно пропатчить установленную версию Wine (этот сделан в 1.1.16). Есть ещё ключ запуска -i, с ним работает без патча, но развернуться можно только на 180°. Кстати, возможно, это касается только последний версий Wine: этому сбою подвержены много игр, например Far Cry, который ещё в 1.1.2 спокойно работал без патча. Патч нельзя включить в основной состав программы Wine, потому что из-за него могут начать работать неправильно другие программы (это скорее хак, чем патч). Именно этот патч возвращает указатель мыши с края экрана в центр — есть нормальный патч, но на страничке бага их так много, что не разберёшься, какой лучше. Я выбрал этот, не найдя правильного, и замучившись патчить исходный код.
С улучшенным графическим освещением исчезает сбой, из-за которого не работало небо в первой части игры — но лучше его всё же не включать из-за того, что в логе запуска программы пишется много ошибок (как в первой части) и игра притормаживает как с мощным, так и со слабым компьютером.
Если запускать игру не ярлыком, а из консоли, то начиная со второй части её нельзя запустить прямо из каталога bin. Есть два способа. Зайти в каталог ниже:
$ cd ..
$ wine bin/xrEngine.exe
Или выполнить из bin вот такой командой:
$ wine xrEngine.exe -fsltx ../fsgame.ltx
Ну и ещё один совет. Если не устанавливать игру с диска, а запускать уже установленную игру (например, из раздела диска с Windows), то не будет работать клавиатура. Этот сбой касается и Windows, для его решения надо зайти в настройки игры мышью, зайти во вкладку назначения клавиш управления игрой, и нажать на кнопку «По-умолчанию».
Третья часть игры
Запуск ничем не отличается от запуска второй части игры: необходим патч для мыши, файлы из DirectX от Windows, файлы opanel32.dll и wrap_oal.dll (если версия Wine меньше 1.1.30), и noCD. Динамическое освещение не работает, сетевая игра — тоже, улучшенное графическое освещение легонько притормаживает.
В остальном игра работает отлично, неисправности те же, что и в Windows.
Приложение:
Как устанавливать DirectX?
Это научились делать начиная с версии Wine 0.9.4x. Тогда было длинное руководство, теперь это делается быстро. Можно просто запустить программу установки и подождать (раньше без дополнительных манипуляций это заканчивалось ошибкой). Подождать потому, что установка будет длиться 10 минут. Чтобы не ждать, нужно положить файлы mscoree.dll и streamci.dll из Windows в каталог системных файлов Wine (
/.wine/drive_c/system32) для Wine начиная от 0.9.4x и заканчивая 1.1.1. С более новыми версиями чтобы не ждать нужно установить .NET. Версия 2.0 подходит идеально. Установка .NET также позволит запуститься бОльшему количеству программ.
Как установить .NET?
Запускаем утилиту winecfg и устанавливаем имитируемую версию Windows как 2000. Берём файл l_intl.nls из Windows и копируем его в каталог системных файлов Wine (
/.wine/drive_c/system32). Запускаем файл установки .NET 2.0. Возвращаем значение имитируемой операционной системы Windows обратно.
После этого появляется сбой: минутное ожидание перед запуском любой программы. Начиная с версии Wine 1.1.1. Оказывается, .NET ищет перед запуском файлы Visual Basic C++. Перед или после установки .NET необходимо установить Visual Basic C++ 2005, 2005 SP1, 2008 или 2010 — любую. Чем новее, тем лучше! Просто берёте и запускаете — ничего сложного в этом нет. Лично я использую 2005.
Есть и автоматизированный способ установки .NET: это скрипт winetricks. Просто набираешь ./winetricks vc2005sp1 — и он устанавливается. С ним также можно установить .NET 3.0, и ещё несколько десятков программ. Но у него есть огромный минус: он не позволяет использовать файлы установки, которые уже есть у пользователя. Он их скачивает с сайта Майкрософта. Я считаю это возмутительным! Я не в состоянии постоянно скачивать 30-50 мегабайтов.
winecfg — программа для настройки Wine. В ней можно, например, выбрать оконный режим работы программ для Windows. Создаётся небольшой виртуальный рабочий стол (размеры указываются в winecfg), к вотором работают программы. Очень многим моим знакомым нравится эта возможность! Вот только в Сталкера 2 и 3 с ней не поиграешь — из-за корявого патча для мыши в оконном режиме работы игры разворачиваться можно только на 180°. Ещё полезна вкладка Аудио. До версии Wine 1.1.6 для того, чтобы в любой игре работал звук, там надо выбрать в выпадающем списке слово Эмуляция. Начиная с версии 1.1.6 этого делать не надо — но очень многие люди этого не знают и продолжают это делать по привычке!
wineserver -killall — мгновенное выключение программ в Wine. Очень полезна, если что-нибудь зависло и выключаться не хочет. Команду можно набрать, например, в окне «Открыть с помощью. «, вызываемой сочетанием клавиш Alt+F2. Есть ещё крайний случай — голая консоль, вызываемая сочетанием клавиш Ctrl-Alt-F1. Вводим имя и пароль пользователя (звёздочки набираться не будут, не удивляйтесь). Возвращаться оттуда — Ctrl-Alt-F7. Жаль только, что выборочно программы не закрываются этой командой, и если был запущен uTorrent или QIP, то он закроется тоже.
wine eject — вы видели в Windows окно с ошибкой из-за того, что вытащен компакт-диск, с которого запущена программа? Я — да. Linux не позволяет вытащить диск в этом случае — пока программа не выключится. Что делать, если программа установки игры просит «Вставить следующий диск»? Раньше помогала только эта команда, теперь ошибка исправлена (это можно проверить, например, в DooM III). Но есть такие недобросовестные пиратские программы установки, с которыми полно проблем даже в Windows. Вытаскиваешь диск — и видишь ошибку. Чтобы в Linux можно было установить и пиратскую игру, выпущенную недобросовестными пиратами, помогает только эта команда.
Источник
Warning: file_get_contents(): SSL: ��������. Warning: file_get_contents(): failed to open stream: HTTP request failed?
изучаю по немногу PHP и столкнулся с такой проблемой.
Warning: file_get_contents(): SSL: �������� ���� ������������ �������� ��������� ���������.
in C:\xampp\htdocs\fileName.php on line 167
Warning: file_get_contents(https://stats.nba.com/stats/boxscoretraditionalv2. failed to open stream: HTTP request failed! in C:\xampp\htdocs\fileName.php on line 167
Строчка с кодом после которой возникает эта ошибка:
$f = file_get_contents(‘https://stats.nba.com/stats/boxscoretraditionalv2. ‘);
подскажите пожалуйста в чем тут вообще проблема, что почитать чтоб это понимать ?
почему SSL: �������� ���� ������������ �������� ��������� ���������. а не нормальные символы. Кодировка на странице установлена utf-8.
из того что мне удалось заметить это то что если ссылка не заканчивается как .json то выдается такая ошибка.
В мозилле во вкладке монитор сети там где я нашел эти ссылки, у обоих ссылок
Причина была xhr Тип JSON
Так же пробовал проделать те же действия с помощью функции fopen, но эта попытка так же не увенчалась успехом:)
Ещё попробовал тоже самое сделать с помощью CURL, то что извлекалось с помощью file_get_contents получилось извлечь и с помощью curl, а то что не извлекалось то и CURLом не извлеклось. Ошибок на экран не вылезо, curl_error вернул это OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
Источник
Символы Unicode: о чём должен знать каждый разработчик
Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.
Введение в кодировку
Компьютеры понимают лишь двоичные числа — нули и единицы, это их язык. Больше ничего. Одно число называется байтом, каждый байт состоит из восьми битов. То есть восемь нулей и единиц составляют один байт. Внутри компьютеров всё сводится к двоичности — языки программирования, движений мыши, нажатия клавиш и все слова на экране. Но если статья, которую вы читаете, раньше была набором нулей и единиц, то как двоичные числа превратились в текст? Давайте разберёмся.
Краткая история кодировки
На заре своего развития интернет был исключительно англоязычным. Его авторам и пользователям не нужно было заботиться о символах других языков, и все нужды полностью покрывала кодировка American Standard Code for Information Interchange (ASCII).
ASCII — это таблица сопоставления бинарных обозначений знакам алфавита. Когда компьютер получает такую запись:
то с помощью ASCII он преобразует её во фразу «Hello world».
Один байт (восемь бит) был достаточно велик, чтобы вместить в себя любую англоязычную букву, как и управляющие символы, часть из которых использовалась телепринтерами, так что в те годы они были полезны (сегодня уже не особо). К управляющим символам относился, например 7 (0111 в двоичном представлении), который заставлял компьютер издавать сигнал; 8 (1000 в двоичном представлении) — выводил последний напечатанный символ; или 12 (1100 в двоичном представлении) — стирал весь написанный на видеотерминале текст.
В те времена компьютеры считали 8 бит за один байт (так было не всегда), так что проблем не возникало. Мы могли хранить все управляющие символы, все числа и англоязычные буквы, и даже ещё оставалось место, поскольку один байт может кодировать 255 символов, а для ASCII нужно только 127. То есть неиспользованными оставалось ещё 128 позиций в кодировке.
Вот как выглядит таблица ASCII. Двоичными числами кодируются все строчные и прописные буквы от A до Z и числа от 0 до 9. Первые 32 позиции отведены для непечатаемых управляющих символов.
Проблемы с ASCII
Позиции со 128 по 255 были пустыми. Общественность задумалась, чем их заполнить. Но у всех были разные идеи. Американский национальный институт стандартов (American National Standards Institute, ANSI) формулирует стандарты для разных отраслей. Там утвердили позиции ASCII с 0 по 127. Их никто не оспаривал. Проблема была с остальными позициями.
Вот чем были заполнены позиции 128-255 в первых компьютерах IBM:
Какие-то загогулины, фоновые иконки, математические операторы и символы с диакретическим знаком вроде é. Но разработчики других компьютерных архитектур не поддержали инициативу. Всем хотелось внедрить свою собственную кодировку во второй половине ASCII.
Все эти различные концовки назвали кодовыми страницами.
Что такое кодовые страницы ASCII?
Здесь собрана коллекция из более чем 465 разных кодовых страниц! Существовали разные страницы даже в рамках какого-то одного языка, например, для греческого и китайского. Как можно было стандартизировать этот бардак? Или хотя бы заставить его работать между разными языками? Или между разными кодовыми страницами для одного языка? В языках, отличающихся от английского? У китайцев больше 100 000 иероглифов. ASCII даже не может всех их вместить, даже если бы решили отдать все пустые позиции под китайские символы.
Эта проблема даже получила название Mojibake (бнопня, кракозябры). Так говорят про искажённый текст, который получается при использовании некорректной кодировки. В переводе с японского mojibake означает «преобразование символов».
Пример бнопни (кракозябров).
Безумие какое-то.
Именно! Не было ни единого шанса надёжно преобразовывать данные. Интернет — это лишь монструозное соединение компьютеров по всему миру. Представьте, что все страны решили использовать собственные стандарты. Например, греческие компьютеры принимают только греческий язык, а английские отправляют только английский. Это как кричать в пустой пещере, тебя никто не услышит.
ASCII уже не удовлетворял жизненным требованиям. Для всемирного интернета нужно было создать что-то другое, либо пришлось бы иметь дело с сотнями кодовых страниц.
��� Если только ������ вы не хотели ��� бы ��� читать подобные параграфы. �֎֏0590��׀ׁׂ׃ׅׄ׆ׇ
Так появился Unicode
Unicode расшифровывают как Universal Coded Character Set (UCS), и у него есть официальное обозначение ISO/IEC 10646. Но обычно все используют название Unicode.
Этот стандарт помог решить проблемы, возникавшие из-за кодировки и кодовых страниц. Он содержит множество кодовых пунктов (кодовых точек), присвоенных символам из языков и культур со всего мира. То есть Unicode — это набор символов. С его помощью можно сопоставить некую абстракцию с буквой, на которую мы хотим ссылаться. И так сделано для каждого символа, даже египетских иероглифов.
Кто-то проделал огромную работу, сопоставляя каждый символ во всех языках с уникальными кодами. Вот как это выглядит:
Префикс U+ говорит о том, что это стандарт Unicode, а число — это результат преобразования двоичных чисел. Стандарт использует шестнадцатеричную нотацию, которая является упрощённым представлением двоичных чисел. Здесь вы можете ввести в поле что угодно и посмотреть, как это будет преобразовано в Unicode. А здесь можно полюбоваться на все 143 859 кодовых пунктов.
Уточню на всякий случай: речь идёт о большом словаре кодовых пунктов, присвоенных всевозможным символам. Это очень большой набор символов, не более того.
Осталось добавить последний ингредиент.
Unicode Transform Protocol (UTF)
UTF — протокол кодирования кодовых пунктов в Unicode. Он прописан в стандарте и позволяет кодировать любой кодовый пункт. Однако существуют разные типы UTF. Они различаются количеством байтов, используемых для кодировки одного пункта. В UTF-8 используется один байт на пункт, в UTF-16 — два байта, в UTF-32 — четыре байта.
Но если у нас есть три разные кодировки, то как узнать, какая из них применяется в конкретном файле? Для этого используют маркер последовательности байтов (Byte Order Mark, BOM), который ещё называют сигнатурой кодировки (Encoding Signature). BOM — это двухбайтный маркер в начале файл, который говорит о том, какая именно кодировка тут применена.
В интернете чаще всего используют UTF-8, она также прописана как предпочтительная в стандарте HTML5, так что уделю ей больше всего внимания.
Этот график построен в 2012-м, UTF-8 становилась доминирующей кодировкой. И всё ещё ею является.
Что такое UTF-8 и как она работает?
UTF-8 кодирует с помощью одного байта каждый кодовый пункт Unicode с 0 по 127 (как в ASCII). То есть если вы писали программу с использованием ASCII, а ваши пользователи применяют UTF-8, они не заметят ничего необычного. Всё будет работать как задумано. Обратите внимание, как это важно. Нам нужно было сохранить обратную совместимость с ASCII в ходе массового внедрения UTF-8. И эта кодировка ничего не ломает.
Как следует из названия, кодовый пункт состоит из 8 битов (один байт). В Unicode есть символы, которые занимают несколько байтов (вплоть до 6). Это называют переменной длиной. В разных языках удельное количество байтов разное. В английском — 1, европейские языки (с латинским алфавитом), иврит и арабский представлены с помощью двух байтов на кодовый пункт. Для китайского, японского, корейского и других азиатских языков используют по три байта.
Если нужно, чтобы символ занимал больше одного байта, то применяется битовая комбинация, обозначающая переход — он говорит о том, что символ продолжается в нескольких следующих байтах.
И теперь мы, как по волшебству, пришли к соглашению, как закодировать шумерскую клинопись (Хабр её не отображает), а также значки emoji!
Подытожив сказанное: сначала читаем BOM, чтобы определить версию кодировки, затем преобразуем файл в кодовые пункты Unicode, а потом выводим на экран символы из набора Unicode.
Напоследок про UTF
Коды являются ключами. Если я отправлю ошибочную кодировку, вы не сможете ничего прочесть. Не забывайте об этом при отправке и получении данных. В наших повседневных инструментах это часто абстрагировано, но нам, программистам, важно понимать, что происходит под капотом.
Как нам задавать кодировку? Поскольку HTML пишется на английском, и почти все кодировки прекрасно работают с английским, мы можем указать кодировку в начале раздела .
Важно сделать это в самом начале , поскольку парсинг HTML может начаться заново, если в данный момент используется неправильная кодировка. Также узнать версию кодировки можно из заголовка Content-Type HTTP-запроса/ответа.
Если HTML-документ не содержит упоминания кодировки, спецификация HTML5 предлагает такое интересное решение, как BOM-сниффинг. С его помощью мы по маркеру порядка байтов (BOM) можем определить используемую кодировку.
Это всё?
Unicode ещё не завершён. Как и в случае с любым стандартом, мы что-то добавляем, убираем, предлагаем новое. Никакие спецификации нельзя назвать «завершёнными». Обычно в год бывает 1-2 релиза, найти их описание можно здесь.
Если вы дочитали до конца, то вы молодцы. Предлагаю сделать домашнюю работу. Посмотрите, как могут ломаться сайты при использовании неправильной кодировки. Я воспользовался этим расширением для Google Chrome, поменял кодировку и попытался открывать разные страницы. Информация была совершенно нечитаемой. Попробуйте сами, как выглядит бнопня. Это поможет понять, насколько важна кодировка.
Заключение
При написании этой статьи я узнал о Майкле Эверсоне. С 1993 года он предложил больше 200 изменений в Unicode, добавил в стандарт тысячи символов. По состоянию на 2003 год он считался самым продуктивным участником. Он один очень сильно повлиял на облик Unicode. Майкл — один из тех, кто сделал интернет таким, каким мы его сегодня знаем. Очень впечатляет.
Надеюсь, мне удалось показать вам, для чего нужны кодировки, какие проблемы они решают, и что происходит при их сбоях.
Источник