Vikhrmodels/habr_qa_sbs huggingface dataset:
Вопрос: Как написать таким шрифтом ｎｏｓｔａｌｇｉｃ?

Лучший ответ:
Вот так - ｎｏｓｔａｌｇｉｃ
ｌｏｌ
UPD: Если серьезно, то это не шрифт, это символы UTF-8 начиная U+FF41
Вот тут покликайте влево-вправо www.fileformat.info/info/unicode/char/ff41/index.htm чтобы посмотреть остальные символы и копируйте нужные.

Худший ответ:
Раздел Юникода «Полуширинные и полноширинные формы» (FF00—FFEF)
https://unicode-table.com/ru/blocks/halfwidth-and-...
https://en.wikipedia.org/wiki/Halfwidth_and_fullwi...В ККЯ (китайский, корейский, японский) вычислительные, графические символы традиционно классифицируются как полноширинные (в Тайване и Гонконге: 全形; в дальневосточные и японские: 全角) и полуширинные (в Тайване и Гонконге: 半形; в дальневосточные и японские: 半角). Полуширинные символы занимают место равное половине полноширинного символа, отсюда и название.
В век компьютерных текстов, символы, как правило, выложены в сетке, часто 80 столбцов на 24 или 25 строк. Каждый символ отображается небольшой матрицой точек, часто около 8 пикселей в ширину. SBCS (single byte character set; набор однобайтных символов) используются повсеместно для кодирования символов западных языков.
По ряду практических и эстетических соображений, символы хань должны быть в два раза шире однобайтных. Эти «полноширинные символы» закодированы в dbcs (double byte character set; набор двухбайтовых символов).
Вопрос: Помогает ли PDO для защиты?

Лучший ответ:
PDO защищает только от mysql инъекций а от этого нет?
Совершенно верно. Prepared statements (не PDO) используются для безопасной вставки данных в БД. А если сами данные небезопасны - это уже совсем другой вопрос и решается совсем другими инструментами.

Худший ответ:
Пропускай входные данные через эту функцию это xss атака function namefunction($data){
		foreach($data as $key => $value){
			if(is_array($value)) namefunction($value);
			else $data[$key] = htmlspecialchars($value);
		}
		return $data;
	}
Вопрос: Как узнать на какой запрос пришел ответ?

Лучший ответ:
Запрос тут не причём. Вы отправляете запрос и получаете ответ. Если вы отправляете параллельный запрос, синхронизируйте код вашего приложения, а не интернет протоколы, они работают правильно.
P. S. 
На всякий случай поясню, что запрос-ответ неразделимы. Не может прийти ответ на другой get/post запрос на прикладном уровне.

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

Лучший ответ:
Откройте инструменты разработчика в браузере, вкладке sourses

Худший ответ:
Реклама сайта?
Вопрос: Есть ли движки вебмагазинов на nodejs или golang?

Лучший ответ:
Node.js и Go заточены немного под другие вещи. Единственное нечто похожее - CMS Ghost. Это CMS для блогов на node.js.
Но вообще логичнее сделать интернет-магазин на Joomla, WP или OpenCart

Худший ответ:
На ноде была CMS и фреймворк какой-то...
Golang а смысл на нём магазин делать? Разработчики дорогие, мощность избыточна. Так-то и на С++ сайт написать можно
Вопрос: Как установить Ubuntu и Хакинтош на один компьютер?

Лучший ответ:
Итак, решил вопрос следующим образом:
1) Ставим Mac с помощью загрузчика Clover.
2) Делаем все обязательные постустановочне плюшки под Mac.
3) Делаем загружочную флушку с Ubuntu
4) На флешке с Ubuntu в папке EFI создаем папку Ubuntu
5) Из папки BOOT копируем файл grubx64.efi в папку Ubuntu
6) Устанавливаем Ubuntu из GUI Clover`a

Худший ответ:
это называется dual-boot 
Сначало установите Ubuntu , а следом хакинтош
Вопрос: Где ошибка ajax?

Лучший ответ:
Где ошибка ajax? Ошибка практически везде. Налицо попытка адаптировать форму которая раньше работала методом пост с перезагрузкой на аякс. Ну ладно, ничего криминального, но... понеслись по граблям!
1) аякс запрос, который выполняется по загрузке страницы, причем в произвольном месте, то есть в форме еще ничего нет. Ладно, это еще пол беды...$('#pass_edit_form').on('submit',function(e){
   e.preventDefault();
   $.ajax({
      type: "POST",
      url: "_settings.php", // оно реально в этой же папке лежит?
      dataType: 'text',
      data: $(this).serialize(),
      success: function(data) {
         console.log('Received: '+data); // для начала можно остановиться тут и посмотреть что падает в консоль.
         if(data.length > 0) {
             $('#result_pass_edit').text(data);  
          } 
          else {
              $('#result_pass_edit').text(data);
          }
      }
     });
      }			 
   });	 
});
Так это будет работать по нажатию кнопки.
Код пхп даже не буду комментировать, хватит того что там есть строка header("Location: logout.php");

Худший ответ:
1. ajax надо отправлять не сразу же, а лишь по сабмиту формы
2. ajax обработает location не так, как вам хочется. Он загрузит новую страницу внутрь div
Вопрос: Поясните некоторые моменты в git, как поступить?

Лучший ответ:
4. Подскажите что значат цифры на скрине prntscr.com/bj4o94 идут по бокам по 2 @@ для чего они?
Это формат unified diff, инструкция для программы patch. Числа означают следующее: удалить 463 строки начиная со строки 26 (удаляются строки, начинающиеся с пробела или знака "минус") и вставить 234 строки начиная со строки 26 (вставляются строки, начинающиеся с пробела или знака "плюс").

Худший ответ:
1) Да
2) Нет, на сервер изменения идут через push, т.е. даже commit- локально.
3) Ветка от ветки будет, в вашей терминологии, подветкой. Это определяется коммитом-родителем, общим для двух веток, от которого "отпочковалась" новая ветка. Если он был веткой, то это подветка =) Но, по сути, никакого четко определенного "ствола" в GIT нет, master- это такая же ветка, как и остальные.
4) Не знаю, но мне "@@" кажется просто разделителем.
5) Автоматически мержатся изменения в непересекающихся частях документа. Допустим, если поредактировали начало и конец. Если изменения было в одной и той же части, то тому, кто не успел сделать push придется разрешать конфликт. Так что не обязательно.
Вопрос: Как использовать Gulp для мелких проектов?

Лучший ответ:
Нет, все модули можно установить глобально через флаг -g. Например: "npm install gulp-sass -g"
А затем залинковать модуль в папку проекта таким образом: "npm link gulp-sass".
Таким образом у вас будет папка node_modules со ссылками на глобально установленные пакеты.

Худший ответ:
Как вариант собрать bat/sh скрипт запускающий gulp в текущей рабочей директории.
Сам конфиг с модулями при этом может валяться где угодно, главное использовать в конфиге пути относительно текущей рабочей директории.
Полученный скрипт прописать в %PATH% чтобы он был доступен в любой директории.
Вопрос: Как установить одинаковый url для категории таксономий и кастомного типа записей?

Лучший ответ:
Если я правильно понял что нужно сделать. То можно попробовать так.
Сначала регистрируем таксономиюregister_taxonomy(
    'type_work',
    'portfolio',
    array(
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false )
    )
);
Потом кастомный типregister_post_type(
    'portfolio',
    array(
        'rewrite' => array( 'slug' => 'portfolio/%type_work%', 'with_front' => false ),
        'has_archive' => 'portfolio'
    )
);
и потом добавляем фильтр, который переформирует урлfunction wpa_portfolio_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'portfolio' ){
        $terms = wp_get_object_terms( $post->ID, 'type_work' );
        if( $terms ){
            return str_replace( '%type_work%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_portfolio_permalinks', 1, 2 );
Надеюсь поможет.

Худший ответ:
Два одинаковых слага ВП не допустит.
Вопрос: Какую книгу по SQL стоит прочитать для изучения?

Лучший ответ:
Совсем кратко - в моём учебнике
Более продвинуто: на сайте Postgres PRO

Худший ответ:
М.Грубер. Понимание SQL. (ссылка для скачивания/чтения)
Она конечно 1993 года, но там разжевано так что даже гуманитарий поймет.
Вопрос: Почему document.onload не выполняется?

Лучший ответ:
document.onload срабатывает когда DOM загружен.
window.onload срабатывает когда DOM, картинки и стили загружены. Типа. Потому что есть разница в браузерах.
Если хотите выполнить скрипт после загрузки всего контента лучше использовать DOMContentLoadeddocument.addEventListener('DOMContentLoaded', function(){
    // ... code here
})

Худший ответ:
Вот правильный ответ:
window.addEventListener("load", function() {
  console.log(document)
});
Суть в том что если писать так
window.onload = function() {
  console.log(document)
}
то такой вызов переопределяет значения ранее присвоенному событию. Т.е. на это событие нельзя повесить несколько обработчиков. Каждое новый обработчик будет переопределять предыдущее.
Именно поэтому у Вас оно не работало!
Надо делать только таким способом.
А все эти грамотеи которые тут советы давали, их советы не имеют силы так как они не в курсе что событие переопределяется при присвоении. 
А ведь задача ведь стоит не просто вызвать функцию при загрузке сайта, а вызвать при загрузке всех ресурсов. 
Например вызвать AJAX запрос. Какой смысл вызывать AJAX если картинки не прогрузились.  Да и вообще тормозить загрузку отображения сайта не нужно без явной причины.
Например комментарии внизу прогрузить, или подгрузить всплывающие подсказки.
Грамотеи даже не спросили у Вас, какая зависимость Вашего скрипта, и является ли критичным ожидание загрузки всех ресурсов сайта. 
document.addEventListener('DOMContentLoaded', function() {
} );
Такой способ тупо будет задерживать отображение сайта.
Вопрос: Как работает передача ссылок в нативное приложение из хрома на лету?

Лучший ответ:
Гуглите "custom url protocol",  "URI scheme"
https://msdn.microsoft.com/ru-ru/library/aa767914(...

Худший ответ:
Гуглите "custom url protocol",  "URI scheme"
https://msdn.microsoft.com/ru-ru/library/aa767914(...
Вопрос: Aliexpress — конец халяве?

Лучший ответ:
Тут надо понимать, что т.н. "бесплатная" доставка на Али - на самом деле не бесплатная, конечно. На Али она включена в цену (как и скидка заранее), поскольку китайцы себе не враги. Другое дело, что китайская почта просит за свои услуги на порядок меньше, чем наша (но это отдельный разговор).
Я долгое время тоже вёлся на замануху "бесплатной" доставки, но однажды случайно забыл включить этот фильтр и увидел весь спектр цен. Обнаружилось, что чаще всего тот же товар суммарно с ценой доставки стоит столько же, сколько у другого с бесплатной. Иногда даже видел суммарно дешевле с платной, чем с бесплатной.
Ну а дальше элементарно - кладёте в корзину весь нужный товар от одного продавца, оплачиваете не по отдельности, а разом всю сумму, и продавец тоже отправляет не по отдельности, а в одной посылке. У меня такое несколько раз проходило. Хотя писать потом отзывы и проставлять звёздочки приходилось по каждому товару в отдельности.

Худший ответ:
Так задайте параметр фильтра - бесплатная доставка.
Да, фри-шипинга в Украину стало меньше, но он по-прежнему есть. Да и двухдолларовая доставка из Китая при большой партии явно не означает "конец эры Ali Express"
Вопрос: CSS. Wordpress. Как сделать, чтобы при выводе записи картинки была шире текста?

Лучший ответ:
Вам нужно убрать обертку из тега Р вокруг IMG
Вот так напримерfunction filter_ptags_on_images($content){
   return preg_replace('​/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content);
}

add_filter('the_content', 'filter_ptags_on_images');

Худший ответ:
Вот, пример - https://jsfiddle.net/kyjo7xta/2/
Вопрос: В чём техническая сложность борьбы с телефонными звонками о ложных минированиях?

Лучший ответ:
Наверное, есть какие-то паттерны: звонки в одно время, через один гейт, по одному списку телефонов.
Смысл не в паттернах а в регламенте. Есть закон, внутренние инструкции МВД всякие, где прописано что вы обязаны: эвакуировать, завести собак, проверить и т.д.
Представьте себе что он 100 раз за неделю позвонит и скажет про бомбу, а потом 101й раз реально заложит её и взорвёт. И если этот раз не эвакуируют и не проверят то будет ппц. Вы же не знаете, может там с родителем кого-то из учеников договорённость или с самим учеником.
Поэтому регламент есть, регламент надо выполнять. Всё. Если появилась новая информация или новые технологии можно только поменять регламент, например ввести ускоренную проверку.

Худший ответ:
Грамотный звонок с "одноразового" телефона или через "одноразовый" же гейт практически невозможно отследить. Единственная надежда - что при массовых звонках будут замечены какие-то паттерны, и звонящий проколется на повторном использовании тех же гейтов или будет повторять звонки из того-же района.
Вопрос: Почему мне кажется, что это говнокод?

Лучший ответ:
Держи еще вариант ГК$message = 'У юзера выпало %s, а у компьютера %s. %s';
$resultMessages = ['Выигрыш компьтера', 'Ничья', 'Выигрыш игрока'];

$userDice = mt_rand(1,6);
$compDice = mt_rand(1,6);

$diff = $userDice - $compDice;
$result = ($diff ? $diff / abs($diff) : $diff) + 1;

printf($message, $userDice, $compDice, $resultMessages[$result]);
Рефакторим на php7 (минус две строки)$message = 'У юзера выпало %s, а у компьютера %s. %s';
$resultMessages = ['Выигрыш компьтера', 'Ничья', 'Выигрыш игрока'];

$userDice = mt_rand(1,6);
$compDice = mt_rand(1,6);

printf($message, $userDice, $compDice, $resultMessages[($userDice <=> $compDice) + 1]);

Худший ответ:
Если не устраивать из этого ООП, то в голову приходит только это:<?php
$userDice = mt_rand(1,6);
$computerDice = mt_rand(1,6);
$text = 'У юзера выпало ' . $userDice . ', а у компьютера ' . $computerDice . '.'; 
if ($userDice > $computerDice){
  $text .= ' Выигрыш юзера';
} else if ($userDice < $computerDice){
  $text .= ' Выигрыш компьютера';
} else {
  $text .= ' Ничья';
}
echo $text;
Вопрос: Почему крупные ребята переезжают с поддоменов в поддирректрии для гео локации?

Лучший ответ:
ребятки все проще, тиц стар и тд и тп проще ростить на 1 сайте чем на 10 совершенно разных, это банально дешевле.

Худший ответ:
сабдомены хорошо помогают по странам-языкам, 
внутри страны ( по городам) - по ситуации
Вопрос: Как в этом примере работает принцип метода replace()?

Лучший ответ:
// у элемента img берется аттрибут src и записывается в переменную imgFile
var imgFile = $(img).attr('src'); 
// создается новое изображение preloadlmage
var preloadlmage = new Image(); 
// в переменную imgExt записывается регулярное выражение
var imgExt = / ( \ . \w{3,4}$)/; 
// значение imgFile модифицируется при помощи регулярного выражения imgExt, и результат записывается в preloadlmage. src
preloadlmage. src = imgFile.replace(imgExt, '_h$l') ;
Документация:
1. api.jquery.com/attr
2. https://developer.mozilla.org/ru/docs/Web/API/HTML...
3. https://learn.javascript.ru/regular-expressions-ja...
4. www.w3schools.com/jsref/jsref_replace.asp
Конкретно эта регулярка ищет в конце строки точку, и за ней 3-4 буквы или цифры. Если находит - дописывает перед ними _h
Пример:http://example.com/images/my_photo.jpg
заменится на http://example.com/images/my_photo_h.jpg

Худший ответ:
С помощью регулярных выражений вычленяется расширение файла (/(\.\w{3,4}$)/ на языке шумеров означает: "в конце строки, слово из 3-4 символов после точки") и с помощью метода replace к перед ним добавляется префикс _h.Шумерский алфавит\. - это просто точка\w{от, до} - это любое слово (набор букв), длиной от-до символов.$ - означает конец строки( ) - круглые скобки образуют группы, на которые можно потом сослаться, как $1...$N, по порядку.imgFile.replace(imgExt, '_h$l') - Таком образом мы предлагаем заменить группу на нее же, но с префиксом перед ней.
Вопрос: Как узнать, открыт ли сайт внутренним браузером приложения на мобильных устройствах?

Лучший ответ:
Проверить есть ли в user-agent   FBAN / FBAV function isFacebookApp() {
    var ua = navigator.userAgent || navigator.vendor || window.opera;
    return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);
}
FBAN = Application Name
FBAV = Application Version
FBBV = Build?
FBDV = ?Device??
FBMD = ?
FBSN = ? Obviously something to do with the OS/platoform
FBSV = ? Can it be OS version?
FBCR = Carrier
FBLC = Language codeFacebook user agent

Худший ответ:
тыц
Вопрос: Почему во многих сервисах нужно обязательно получить access token для работы с api?

Лучший ответ:
Вам следует начинать с прочтения спецификации https://tools.ietf.org/html/rfc6749
В двух словах - реализация OAuth API вконтакте не является полноценной. 
В спецификации указано, что токен требуется для предоставления доступа к защищённому ресурсу. В Facebook большая часть информации имеет контролируемый доступ, например приватность или количество запросов за период времени. Поэтому использование токена позволяет этой системе работать. В Facebook довольно сложная система ограничения доступа - есть лимит на уровне токена и самого приложения. 
Плюс, Facebook довольно серьёзно относится к приватности, поэтому без токена работать не получается.
Токен является обязательным условием для взаимодействия с API через OAuth. Это часть протокола.
Установка приложения является стандартной практикой в цивилизованном мире. Именно это и подтверждает то, что вы относитесь к данным ваших клиентов серьёзно.

Худший ответ:
token - это часть OAuth-метода авторизации
Это не связано с лояльностью или нелояльностью тех или иных сервисов - это связано с тем, какую технологию они выбрали для авторизации и управления авторизованными пользователями.
Вопрос: Как испортить кровь копипастерам?

Лучший ответ:
Как человек который занимается парсерами говорю сразу никак. Весь текст проверяется специальными регулярками и в случае каких-то аномалий ими же исправляется. Картинки вместо текста убьют SEO и не дадут копировать инфу самим юзерам ссылаться по нормальному и обмениваться ей. В случае наличия чего-либо на JS просто запускается PhantomJS. На одном проекте была капча на скачивание файлов, тогда я потратил день и обучил скрипт на разгадывание этой капчи )) Все файлы были скачаны.

Худший ответ:
Положить в ящик стола, закрыть на ключ, ключ в яйцо, яйцо в курицу :)
Единственный адекватный вариант, ограничить доступ к части информации и давать к ней доступ, только после регистрации, например по смс (и мб минимальной оплаты)
В остальном, как бы ты не представил информацию, если она будет читаема, специалист по парсингу напишет скриптик получающий её за считанные часы.. Хоть в картинку с помехами конвертируй, хоть буквы переставляй, хоть ограничивай через каптчу или ip... Это давно уже не представляет сложностей..
Ну, а вообще, лучше сосредоточься не на защите, а на открытости и предоставлении удобства для пользователей..
Вопрос: Вопрос по функции хеширования паролей?

Лучший ответ:
Нет
php.net/manual/ru/function.password-hash.phpИспользованный алгоритм, стоимость и соль будут возвращены как часть хеша. Таким образом, информация необходимая для проверки хеша будет в него включена. Это позволит функции password_verify() проверять хеш без необходимости отдельного хранения информации о соли и алгоритме.

Худший ответ:
Да. Поэтому вы можете сразу указать PASSWORD_BCRYPT, либо когда-нибудь потом при переезде указать (если нужно будет).
Вопрос: Несколько интернет каналов под разные приложения?

Лучший ответ:
Традиционно для этих целей служит технология policy base routing. Она позволяет настроить нужные маршруты исходя из source и destination портов соединения. Однако, как пишут в блоге windows, они не собирались включать поддержку в своей ОС данного функционала. Может быть вы найдете софтварное решение данной проблемы.
Впрочем, если для ваших служб используются разные destination IP, можно действительно прописать static route.

Худший ответ:
Да вот софтварное решение меня и интересует...
Я предполагал что в Окнах такого функционала нет.
Где-то встречал статью что можно как-то через брондмауер настроить, о не могу ее найти ((
Вопрос: Существует ли переходник mSata на Sata3?

Лучший ответ:
Плохо искали

Худший ответ:
разьем у сата1 сата2 и сата3 одинаковый,
Вопрос: Почему компьютеры и ноутбуки в офисе при первом запуске не сразу подключаются к интернету?

Лучший ответ:
Пропиши вручную ДНС и в роутере и на ПК 8.8.8.8 и 8.8.4.4

Худший ответ:
Тут м.б. что угодно - и неверная раздача IP-адресов, и битые кабели, и глючащие устройства. Или кто-то воткнул два конца кабеля в свич.
Для начала надо запустить ping по IP-адресам - с каждой машины пинговать все остальные. Возможно, будет видно местоположение проблемы.
Если неполадки с DNS - надо смотреть, какой DNS-сервер прописан в настройках: статически или с DHCP-сервера (ipconfig /all). И смотреть - есть ли там DNS-сервер.
Как вариант - роутер может неверно переадресовывать DNS-запросы на вышестоящий сервер.
В таких вопросах надо указывать геолокацию - что-то типа "Москва, пять минут на трамвае от метро Киевская" (я в курсе, что там нет трамвая - это как пример).
Вопрос: Как организовать связь между ASP.NET Web API + windows service + SignalR?

Лучший ответ:
Почему бы не использовать signalr только для отправки сообщений клиенту, а для общения служб с mvc, rabbitmq?

Худший ответ:
Почему бы не использовать signalr только для отправки сообщений клиенту, а для общения служб с mvc, rabbitmq?
Вопрос: Сервис для создания простой БД?

Лучший ответ:
Тут можно даже без создания БД обойтись, просто работать с облачным NoSQL хранилищем в стиле REST:
https://firebase.google.com/

Худший ответ:
Тут можно даже без создания БД обойтись, просто работать с облачным NoSQL хранилищем в стиле REST:
https://firebase.google.com/
Вопрос: Какие курсы по ремонту ПК выбрать?

Лучший ответ:
ремонт не считая конденсаторов не выгоден
да и конденсаторы нынче ставят безпроблемные
а так тебе нужно учиться паять bga

Худший ответ:
Этот вроде неплохим считается: https://www.plati.com/itm/videokurs-po-remontu-nou... . Но я учился другим способом, поэтому рекомендовать не могу.
Вопрос: На чём сделан сайт и на каком хостинге располагается?

Лучший ответ:
смотришь исходники хтмл жс и цсс и обычно сразу видно на чем сделано

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

Лучший ответ:
Для перевода денежных средств вам нужны не данные держателей карт, а их платежные реквизиты. Поэтому храните, как хотите. Настоящие проблемы начнутся на вопросах о налоговом агенте.

Худший ответ:
Раз такой вопрос задаётся, то лучше хранить данные не у себя, а у платёжной системы.Стандарт безопасности данных индустрии платежных к...
Вопрос: Как убрать отступ между DIV блоками?

Лучший ответ:
Из-за того, что у вас inline-block, между блоками есть пробельные символы. Можете сделать .my-teasert { font-size : 0 }, например. Или используйте float.

Худший ответ:
из-за display: inline-block
Вопрос: Разобраться с серваком, какой лучшие выбрать и что купить?

Лучший ответ:
Может стоит доверить это работу знающему человеку?

Худший ответ:
У вас есть готовая стойка, а вы хотите купить напольный сервак?
А монитор зачем понадобился? и т.д.
Присоединяюсь к предыдущему оратору.
Вопрос: Где хранить большое кол-во файлов?

Лучший ответ:
Вариант 4 был бы наиболее корректным.
А ftp - самое не то. Как и хранить файлы в базах.
P.S. И ваша десктопная часть должна общаться с серверной, а не с базой напрямую, как реализовано сейчас.

Худший ответ:
Мы храним здесь: https://min.io/