Проблемы с Linux на ноутбуках ASUS

Я решил, что после всего что я пережил, стоит об этом написать, может кому это пригодится.

После череды из бракованного ноутбука HP, ожидания решения диагностического центра вернуть мне деньги и второго бракованного ноутбука HP, я купил себе ASUS X555UF.

Мне в нем нравится все. И новость о том, что я не могу установить Linux была для меня ужастной.

Как это проявилось, призагрузке с дистрибуива Ubuntu (16.04, 15.10, 14.04) была такая картина, после ответа на вопрос загрузить обновления во время установки вылетало сообщнение

"ubi-partman error with exit code 10"

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




С Kali Linux все поначалу было лучше, но в итоге все ранво

"Ошибка во время выполнения шага: Установка системы"

И тут мой ненаглядный ArchLinux. Он все таки встал, но вот был косяк! Если включить NetworkManager, то потом во время выключения или лог аута я видел тоже самое, черный экран с невероятно бысто летящей ошибкой.

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

А именно во время загрузки с LiveCD нужно дописать параметр linux.

Появляется окно grub там на нужной там строчке жмем 'e' ищем строку

linux <много разных слов и UUID> quiet

у автора был еще параметр splash, но у меня его не было, и перед ним(ними) пишем pci=nomsi
linux <много разных слов и UUID> pci=nomsi quiet
и жмем F10. После установки изменяем параметр GRUB_CMDLINE_LINUX_DEFAULT в /etc/default/grub

Было GRUB_CMDLINE_LINUX_DEFAULT="quiet" стало GRUB_CMDLINE_LINUX_DEFAULT="pci=nomsi quiet"

и обновляем grub

# update-grub

или
# grub-mkconfig -o <путь к вашему грабу>

Это все, после этого у меня проблем не было.

Очень надеюсь, что это кому-нибудь пригодится.

Основы С++: ввод и вывод


Так как первым что пишут на любом языке программирования является строка "Hello, World!", этим мы и займемся сейчас, а именно разберемся со вводом и выводом.

 В языке программирования C++ предусмотрены операции ввода/вывода в поток. Это операции >> и << и потоки istream и ostream.

Сейчас мы рассмотрим как их использовать.

Данные потоки находятся в заголовочном файле iostream в пространстве имен std. О заголовочных файла и  пространствах имен позже. Сейчас вам необходимо знать только то что это необходимый минимум для использования потоков istream и ostream.



//Подключаем заголовочный файл
#include <iostream>

//Создаем главную функцию
int main()
{
    //Выводим строку в консоль
    std::cout << "Hello, World!" << std::endl;
    
    return 0;
}

Запуск любой программы на языке С++ начинается с вызова функции main. Когда мы вызовется функция main она выполнит команду:


std::cout << "Hello, World!" << std::endl;

А именно эта команда выводит на экран строку "Hello, World!". Она состоит из потока вывода std::cout, операции вывода в поток <<, строки "Hello, World!" и перевода курсора на новую строку std::endl.

Теперь мы знаем как написать самую простейшую программу на языке С++.

Давайте добавим в нее небольшую работу с пользователем, а именно попросим его ввести число, в ему вернем квадрат этого числа.


//Подключаем заголовочный файл
#include <iostream>

//Создаем главную функцию
int main()
{
    //Выводим строку в консоль
    std::cout << "Enter number: ";

    //Создаем целочисленную переменную x и присваиваем ей значение 0
    int x = 0;

    //Ожидаем ввод с клавиатуры
    std::cin >> x;

    //Выводим квадрат введенного числа в консоль
    std::cout << x * x << std::endl;

    return 0;
}

Что мы тут делаем? Как и в прошлом примере выводим на экран строку, только в этот раз не переводим курсор на новую строчку. Затем объявляем переменную x со значением 0. Затем ждем пока пользователь введет число с клавиатуры после чего сохраняем введенное число в переменную x. Далее выводи на экран произведение x * x и переводим курсор на новую строку.

Что мы добавили, собственно сам ввод переменной:

std::cin >> x;

Эта команда состоит из std::cin поток ввода, операции ввода >> и переменой x куда будет записываться результат ввода.

Теперь посмотри особенность ввода строк. В С++ два вида строк, одни из них пришли из Си, это массивы символов. Массив это последовательность одинаковых элементов. И оба вида строк можно вводит двумя способами.

Первый способ это через уже знакомую операцию ввода >>.


//Подключаем заголовочный файл
#include <iostream>

//Создаем главную функцию
int main()
{
    //Выводим строку в консоль
    std::cout << "Enter string: ";

    //Создаем переменную хранящую 50 символов
    char str[50];

    //Вводим первым сопособом
    std::cin >> str;

    //Выводим то что ввели
    std::cout << str << std::endl;

    return 0;
}

Если мы введем в консоль любую строку без пробелов (Mama, Table, pig), то программа выведет тоже самое на экран. Но если мы введем любую строку содержащую пробел, то программа выведет только то, что будет до пробела.

Ввод:
Mather washed window

Вывод:
Mather

Поэтому есть второй способ через метод потока ввода getline. Метод это функция которая принадлежит какому-нибудь объекту.


//Подключаем заголовочный файл
#include <iostream>

//Создаем главную функцию
int main()
{
    //Выводим строку в консоль
    std::cout << "Enter string: ";

    //Создаем переменную хранящую 50 символов
    char str[50];

    //Вводим вторым сопособом
    std::cin.getline(str, 50);

    //Выводим то что ввели
    std::cout << str << std::endl;

    return 0;
}

Теперь если мы введем строку содержащую пробелы она выведется правильно.

Функция getline принимает переменную, в которую нужно записать введенную строку с клавиатуры и размер этой переменной.

 На самом деле функции getline две, одна является методом потока ввода std::cin, а вторая просто функция std::getline. Вторая используется для строк добавленных в C++ std::string.

Вот измененный прошлый пример с использованием std::string

//Подключаем заголовочный файл
#include <iostream>
//Подключаем заголовочный файл для std::string
#include <string>

//Создаем главную функцию
int main()
{
    //Выводим строку в консоль
    std::cout << "Enter string: ";

    //Создаем строковую переменную
    std::string str;

    //Вводим вторым способом
    std::getline(std::cin, str);

    //Выводим то что ввели
    std::cout << str << std::endl;

    return 0;
}

Функция std::getline принимает поток ввода и переменную, в которую нужно записать результат ввода.

Теперь вы знаете как написать простую программу на С++, и уже можете писать программы решающие примеры по математике. Что бы не считать все на калькуляторе.

Взлом в кафе


Сейчас я расскажу всем любителям бесплатных Wi-Fi'ев в кафе, общежитиях, да и дома, как это может быть опасно.

Представим что есть некий бесплатный Wi-Fi (показывать буду на примере своего, но он ничем не хуже любого бесплатного Wi-Fi в кафе) Вы приходите и спокойно начинаете пользоваться им. Открываете vk.com | facebook.com | ok.ru | yandex.ru | google.com и т.д. Вводите логин и пароль. Строчка браузера подсказывает, что Вы используете защищенное соединение HTTPS (зеленый заголовок адресной строки в браузере), а это значит, что Ваши данные нельзя перехватить, точнее как бы можно, но они зашифрованы. Но на деле все не так. Против лома нет приема, кроме как другого лома. И сейчас я покажу Вам такую сценку. Вы пришли в кафе подключились к бесплатному Wi-Fi. А там сидит человек желающий получить пароли от соц. сетей или что хуже от мобильного банка.

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

Установка Oracle JDK 8 на ArchLinux


Для установки Android Studio требуется jdk, но если установить стандартный OpenJDK, то Android Studio это не понравится. Поэтому решил в догонку к записи про yaourt показать на примере Oracle JDK как им пользоваться. 
Для начала поиск вводим в консоли: 
$ yaourt -Ss jdk
Вы увидите примерно следующее: 
Находим там нужный пакет, в нашем случае это aur/jdk и устанавливаем:
$ yaourt -S aur/jdk
На вопросы отвечаем так: 

-Отредактировать PKGBUILD ? Да/нет [Y/n]
n
-Отредактировать jdk.install ? Да/нет [Y/n]
n
-Продолжить сборку jdk ? Да/нет [Y/n]
y

После этого пойдет установка, по окончанию которой вы сможете установить Android Studio (например).

Установка yaourt на ArchLinux

Думаю сделаю цикл публикаций про использование ArchLinux. А начну так. Если Вы любите Linux, но не можете выбрать удобное сочетание всего в различных дистрибутивах, то ArchLinux именно для Вас. А первое, что я опубликую это короткую инструкцию для установки yaourt(йогурт): От администратора (root) открываем конфигурацию pacman:
# nano /etc/pacman.conf
Затем добавляем репозиторий:
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
Сохраняем и так же от администратора запускам установку yaourt:
# pacman -Sy yaourt
Все, yaourt установлен, можно качать любимые программы и использовать их.