Вызов код C из Swift

К уже имеющемуся проекту на Swift можно добавить функционал на языке «С».
Для этого в Xcode создайте новый файл «*.c»

После создания файла Xcode сам предложит создать файл «моста»
Таким же образом можно создать мосты и с C ++, Objective-C.


Давайте создадим прототип функции  для кода C в файле (factorial.h):

#ifndef factorial_h
#define factorial_h

#include

long factorial(int n);

#endif /* factorial_h */

Реализуем метода в (factorial.c):

#include "factorial.h"

long factorial(int n) {
    if (n == 0 || n == 1) return 1;
    return n * factorial(n-1);
}

Далее в файле «моста» (write_to_file-Bridging-Header.h) импортируйте файл заголовка C :

#include "factorial.h"

Все! Можно использовать функцию в коде на Swift :

print("Hello \(factorial(5))!")

Оригинальная статья

Установка Swift 4.1 на Ubuntu 16.04

Установка Swift 4.1.1 на Ubuntu 16.04
Установка компилятора и библиотек:

sudo apt-get install clang libicu-dev libcurl3 libicu-dev libpython2.7

Скачивание Swift под вашу версию Ubuntu:

wget https://swift.org/builds/swift-4.1.1-release/ubuntu1604/swift-4.1.1-RELEASE/swift-4.1.1-RELEASE-ubuntu16.04.tar.gz

Распаковка:

 tar -xzf swift-4.1.1-RELEASE-ubuntu16.04.tar.gz

Далее необходимо добавить /usr, лежащую в папке swift-4.1.1-RELEASE-ubuntu16.04 добавить в переменную окружения PAHT:

 export PATH=/home/u5/swift-4.1.1-RELEASE-ubuntu16.04/usr/bin:"${PATH}"

Проверяем:

swift --version

Если после перезагрузки системы Swift слетит то нужно прописать переменную окружения в файл .profile :

vim ./.profile

В конце файла добавить :

PATH=/home/u5/swift-4.1.1-RELEASE-ubuntu16.04/usr/bin:"${PATH}"

Режим интерпретатора :

swift

Выход Ctrl + Z

Для компиляции полноценной программы понадобиться разобраться с понятием пакета, создадим пустую папку:

mkdir Hello
cd Hello

Для создания исполняемого файла нужно создать полную структуру пакета:

swift package init --type executable

Собираем пакет:

swift build

Запускаем пакет:

.build/debug/Hello

В итоге листинг программы лежит в папке:

Hello/Sources/main.swift

Установка KDE на Debian 9

Установка обновленной программы установки и инструменты работы с зависимостями.

apt install aptitude tasksel

Установка рабочего стола с использованием регулярных выражений.

aptitude install ~t^desktop$ ~t^kde-desktop$

Debian 9 в VirtualBox + Guest Additions

Установка Guest Additions в VirtualBox нужно для лучшей потдержки графики, работы буфера обмена и доступа к жесткому диску хост машины.
1. Загружаем Debian в VirtualBox, открываем Терминал и переходим в режим супер-пользователя. SU

 SU 

2. Обновляем систему

apt-get update
apt-get upgrade

3. Установка необходимых модулей ядра, заголовочные файлы.

apt install build-essential module-assistant dkms

4. Сборка модулей ядра

m-a prepare

5. В меню VirtualBox (Device -> insert Guest Additions CD image)

sh /media/cdrom/VBoxLinuxAdditions.run

Процесс должен завершиться без ошибок!
6. Перезагружаем систему

shutdown -r now

Монтирование диска Raspberry Pi (постоянное)

Возникла задача использовать Raspberry Pi как NAS хранилище.
Идея проста, Pi по MAC адресу получает у роутера постоянный IP, на роутере подключен сервис NO_IP или ( в Zyxel и Mikrotik есть свой собственный Dynamic DNS). В итоге получается некое доменное имя и настройками роутера переправляется на R-Pi.

1. Включаем SSH и меняем пароль пользователя Pi

sudo raspi-config

2. Подключаем USB внешний жесткий диск к Raspberry Pi (желательно с внешним питанием), проверяем подключенные диски командой:

fdisk -l

3. Создаем в домашнем каталоге папку

mkdir /home/pi/edit

4. Монтируем диск к этой папке

sudo mount /dev/sda1  /home/pi/edit

5. Далее смотрим содержимое файла /etc/mtab ВНИМАНИЕ НА ПОСЛЕДНЮЮ СТРОЧКУ!
6. Открываем на редактирование с правами sudo файл /etc/fstab и добавляем последней сточкой строку из /etc/mtab. ОЧЕНЬ внимательно не пропуская знаков и пробелов. Сохраняем /etc/fstab. Перезагружаем R-Pi
7. Если вы ошиблись при написании строчки то R-Pi скорее всего не загрузиться. Возможно прийдется переустанавливать Raspbian.

PS Вместо FTP лучше используйте SSH (SFTP), но понадобиться модель не ниже Pi-2.

Bash

Скрипт это обычный текстовый файл, поэтому просто создаем его в любом текстовом редакторе:

vim script.sh

Сделаем скрипт исполняемым :

chmod +x script.sh

Запускать скрипт будем командой :

./script.sh

Первая строчка в скрипте должна начинаться с :

#!/bin/bash

Объявление переменной :

a=175

Объявление ссылки на переменную :

var2=$a

Вывод на экран :

echo $var2
    Объявление строковой переменной :

    b="Hello World"

    Объявление строковой переменной :

    c=$(df --total)

Условие (обратите внимание на пробелы между знаками! ) :

#!/bin/bash
a=9
b=8
if [ "$a" = "$b" ]; then
echo "A = B"; else
echo "A! = B" 
fi

Цикл while / do
Бесполезный но понятный пример. Если a не равно b то пингуем ya.ru :

#!/bin/bash
a=3
b=6
while [ $a -ne $b ] ; do
ping ya.ru -c3
sleep 10
done

В зависимости от типа данных в условии можно использовать :
= — равно.
!= — неравно.
-eq — эквивалентно.
-ne — не эквивалентно.
-qt — больше чем.
-lt — меньше чем.

Цикл for
ping сначала пошлет 5 запросов , на втором круге 10 :

#!/bin/bash
for a in 5 10
do
ping ya.ru -c "$a"
done

Еще вариант (начальное значение, шаг , конечное значение)

for a in $(seq 10 5 90)
for (( a=10; a<=90; a+=5 ))

Если нужно передать в скрип параметры то :

#!/bin/bash
a=$1

Будет использоваться первый аргумент

Terminal

!! повтор последней команды.
sudo!! повтор последней команды с правами супер-пользователя.
history выводит список когда либо вводимых команд.
!23 Повторить 23 команду из списка history.
!$ использует аргументы от предыдущей выполненной команды.
Можно ускорить навигацию по различным папкам с помощью добавления их в стек папок
Находясь в нужной директории наберите :

pushd

папка добавиться в стек.

pushd /путь/к/папке/

добавит еще одну папку в стек.
Просмотр стека :

dirs -v

Переход между папками

cd ~цифра обозначенная напротив папки

Перенаправленние вывода программы в файл (при повторном вызове файл полностью перезапишится)

ps -ax > processes.txt

Перенаправленние вывода программы в файл (при повторном вызове в файл допишится информация)

ps -ax >> processes.txt

Создание папки сразу с подпапками :

mkdir -p ~/Documents/{work,admin,texts}

Сравнение двух папок :

diff /folder1 /folder2

Поиск команды по описанию :

apropos “download”

Генерация ключей GPG

Генерация новой пары ключей :

gpg --gen-key

1 — Вопрос тип ключа (RSA по умолчанию)
2 — Длинна ключа (2040 по умолчанию)
3 — Срок действия ключа (по умолчанию без срока)
4 — Введите имя (любое)
5 — Введите почту (неважно какую и не важно будите ли вы отправлять письма с этой почты с этим ключом)
6 — комментарий можно оставить пустым
7 — «O» — принять изменения
8 — Ввести парольную фразу
9 — Ввести повтор парольной фразы

Просмотреть список ключей в системе :

gpg --list-keys

Экспортировать ключ в файл :

gpg --output publik.key --armor --export ПОЧТА УКАЗАННАЯ ПРИ ГЕНЕРАЦИИ

Импортировать чужой ключ в систему :

gpg --import publik.key

Зашифровать файл для пользователя XxXxX файл main.c полученный файл main.c.gpg можно передавать по почте :

gpg -r XxXxX -e main.c

XRDP на Centos 7

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

yum -y install xrdp tigervnc tigervnc-server tigervnc-server-module

Включаем в автозагрузку и запускаем:

systemctl enable xrdp.service
systemctl start  xrdp.service
service xrdp restart

Открываем порт в фаерволе :

firewall-cmd --permanent --add-port=3389/tcp
systemctl restart firewalld.service 

Далее под Windows открываем «Подключение к удаленному рабочему столу» и вбиваем IP адрес linux машины.

Firewall CentOS 7

Добавить сервис в правило :

firewall-cmd --zone=public --add-service=ftp --permanent

Добавить порт :

firewall-cmd --permanent --add-port=40000/tcp

Добавить диапазон портов :

firewall-cmd --permanent --add-port=40000-40100/tcp

Просмотреть последние сохраненные записи в правилах фаервола :

iptables-save | tail -n 5

После каждого применения правил необходимо перезапустить службу :

systemctl restart firewalld.service