分類
其它

意大利簽證

意大利簽證中文官網里詳細的申請步驟、所需材料和所需材料格式(如保險單的要求),不必去旅遊網站亂搜。

條件方面簡單概括下要求就是要有一份穩定的工作和足以支付本次旅行的資金,行程單要認真寫。首次辦理申根簽證需要在簽證中心錄十指指紋,所以沒有錄過指紋的就不要想代辦了。辦理順序就是自己根據所需資料準備材料》去簽證中心遞交材料並錄指紋》等待大使館發回簽證到簽證中心》領取簽證。順便一提,夫妻通行也是和單個辦理是一樣的,各自準備自己的結婚證複印件,即使是相同的材料也都需要各有一份。

我們的簽證辦理的挺順利的,雖然中間接到電話調查有點怕怕,但還好順利出簽。電話調查的應對秘訣就是誠實。

…… 2/16/2017.(到簽證中心交材料錄指紋)

Visa application ref no. SHEZ/xxxxxx/xxx/xx is being processed at the Italy Embassy/Consulate on 2/17/2017.(材料送抵大使館)

Visa application ref no. SHEZ/xxxxxx/xxx/xx – Your application has been processed and is in transit to the Italy Visa Application Centre on 2/22/2017.(大使館處理完畢)

Visa application ref no. SHEZ/xxxxxx/xxx/xx – Your processed passport has been dispatched to the Italy Visa Application Centre on 2/24/2017 and is ready for collection.(簽證送抵簽證中心)

分類
软件

Android下可用的SQL Client

SQL Client是一個可以在安卓手機上鏈接MySQL數據庫的應用,界面挺漂亮。如果偶爾要用手機檢查一下數據庫的資料,那麼基本的查詢功能是可以滿足的,看介紹說還能導出cvs文件。不足之處也不多:1,無法通過ssh連接數據庫,只能通過數據庫的地址和端口連接。2,每條SQL都保存爲一條記錄,好像會產生很多記錄。一些複雜的操作還是通過JuiceSSH進服務器執行吧。

電腦上一直在用MySQL Workbench,感覺還可以。

分類
程序

Ubuntu16給python3.5安裝OpenCV3.2

過程略繁瑣,參考了Install OpenCV 3.0 and Python 3.4+ on Ubuntu。安裝完成可在python中import cv2.

#安裝依賴及工具
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libjpeg8-dev libtiff4-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3.5-dev

由於我已經有python3.5的virtualenv了,所以這里就不再說了,可以参考pip3为python3安装模块

#啓動python3.5的環境
source ~/pythons/p35/bin/activate
#安装numpy
pip install numpy -i https://pypi.douban.com/simple/
#下載並解壓OpenCV,github我克隆不下拉
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.2.0.zip
unzip opencv.zip
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.2.0.zip
unzip opencv_contrib.zip
cd ~/opencv-3.2.0
mkdir build
cd build
#cmake中間如有終端,可參考錯誤提示直接從web下載相關文件放於提示位置
cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
    -D PYTHON_EXECUTABLE=~/pythons/p35/bin/python \
    -D BUILD_EXAMPLES=ON ..
#成功執行後要留意python3的環境是否正確應有類似如下字樣
--   Python 3:
--     Interpreter:                 /home/42/pythons/p35/bin/python3 (ver 3.5.2)
--     Libraries:                   /usr/lib/x86_64-linux-gnu/libpython3.5m.so (ver 3.5.2)
--     numpy:                       /home/42/pythons/p35/lib/python3.5/site-packages/numpy/core/include (ver 1.12.0)
--     packages path:               lib/python3.5/site-packages
-- 
--   Python (for build):            /home/42/pythons/p35/bin/python3
#然後就可以編譯了
make -j$(nproc)
#編譯完成後執行安裝
sudo make install
sudo ldconfig
#查看是否安裝成功
ls -l /usr/local/lib/python3.5/site-packages/ | grep cv2
#成功的話應該會有文件出現類似
-rw-r--r-- 1 root staff 3550256 2月  17 20:36 cv2.cpython-35m-x86_64-linux-gnu.so
#把cv2關聯到python環境裏
cd ~/pythons/p35/lib/python3.5/site-packages/
ln -s /usr/local/lib/python3.5/site-packages/cv2.cpython-35m-x86_64-linux-gnu.so cv2.so
#查看是否可用
python
>>> import cv2
>>> cv2.__version__
'3.2.0'
分類
Linux

Fedora Workstation Tricks

較新版本:Fedora 39 Xfce tricks

Fedora32 Xfce

時間來到 2020 年,下面哪些操作很多都不需要了。Virtual Box 的擴展已開箱可用。我還是喜歡 Firefox ESR,所以會從官網去直接下載。然後解壓就能使用。關注隱私的朋友如果想要關閉 WebRTC 可以先在地址欄輸入 about:config 然後搜索 media.peerconnection.enabled 將其值改為 False 即可。如果要裝 vlc,還是要啟用 RPM Fusion。然後就可以愉快的使用了。

sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm

給常用的命令起一個別名 alias,可以簡化日常的操作,對於 Fedora 可以把 alias 寫在 ~/.bashrc 文件裏。

alias p='proxychains4'
alias update='sudo dnf update'

#Fedora 的默認歷史記錄只有 1000 行
#下面兩行可將其改爲 5000 行
HISTSIZE=5000
HISTFILESIZE=5000

Virtual Box 5.2.20搭配Fedora29 Xfce

安裝完29版本後發現已經自動安裝好了虛擬機的擴展,但是共享文件夾功能是壞掉的,表現為vboxsf不識別,解決辦法如下:

#虛擬機菜單選“設備”/“安裝增強功能”
cd /run/media/fred/VBox_GAs_5.2.20/
sudo dnf install elfutils-libelf-devel kernel-devel kernel-devel-$(uname -r)
sudo ./VBoxLinuxAdditions.run
#重啟後再執行共享命令即可
sudo mount -t vboxsf share /mnt/share

#不安裝ffmpeg的話,火狐播放不了mp3和mp4
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install ffmpeg

安裝 vnstat 來統計網絡使用情況。

sudo dnf install vnstat
#啓用統計
systemctl enable --now vnstat
#查看網絡統計
vnstat -d
vnstat -h

安裝 flameshot 一款更多功能的截圖工具。

sudo dnf install flameshot

安裝之後參考 flameshot 官方文檔綁定一下鍵盤上的 Print Screen 鍵,使用更方便。 XFCE 的話,打開設置里的鍵盤,切換到應用程式熱鍵,找到 xfce4-screenshooter -fd 1 - Print 的條目,把 xfce4-screenshooter -fd 1 改爲 flameshot gui 就可以了。

下面那堆Tricks基本都是不必要的,尤其是Flash……Xface面板自帶的網絡指示器也很好用。


以下內容有些久遠僅供參考

Fedora25 Win10雙系統

買了新電腦,裡面自帶兩個3.5英寸鍵盤位。於是一個硬盤裝了Fedora25一個裝了win10。先裝得Win10,這樣Fedora安裝的時候就會自動把Win10添加到啟動項中,很方便。

Fedora新機Tricks

shadowsocks可以參考shadowsocks client and firefox on Ubuntu 12以及shadowsocks的systemd開機啟動設置可以參考Host a Debian in Win7 VirtualBox

#增加軟件源Activate RPMFusion Repository
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
#安裝楷體和明體字體
sudo dnf install cjkuni-ukai-fonts cjkuni-uming-fonts
#常用軟件
nano uget nethogs vlc mozilla-vlc gimp VirtualBox
#Adobe Flash
rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-x86_64-1.0-1.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-adobe-linux
dnf install flash-plugin alsa-plugins-pulseaudio libcurl
#Netspeed - 網速顯示控件
https://extensions.gnome.org/extension/104/netspeed/
#TaskBar - 任務欄(其實自帶也有,可以通過安裝GNOME Tweak Tool來配置)
https://extensions.gnome.org/extension/584/taskbar/
#強烈推薦安裝GNOME Tweak Tool

Fedora的坑

外接的USB無線網卡總是隨機斷線。其實wifi狀態還是連着的,但wifi標誌會變成問號,搜索後發現只要在無線設置里關閉IPV6就可以了。最後發現這個問題還是比較棘手的,搜了嘗試里很久也沒有搞定。

文件管理器的右鍵居然沒有“新增空白文件”,解決辦法是到自己的Templates(模板)文件夾下,新建一個空白文檔,右鍵就有新增文件了。

無法掛在windows的ntfs格式磁盤的時候,可以嘗試執行ntfsfix,我執行後即可正常掛在win7下的ntfs磁盤。注意此方法可能不安全。

Dell筆記本HDMI連電腦沒聲音,命令行執行pavucontrol,在配置選項卡中選HDMI即可,即使顯示未連接也沒關係。

後記

白天看到新聞說希捷關了蘇州的工廠,我還跟Emanon討論了一番,沒想到晚上回家Fedora便發出警告,說硬盤即將報廢。這塊1.5T的硬盤是08年生產的,到現在也將近9個年頭了,已經很不錯了。

最近在看機器學習的東西,發現各種工具對Ubuntu的支持還是最好,雖然有點捨不得Fedora,但晚上還是回歸到Ubuntu一段時間吧。

升級VirtualBox中的Fedora

可是太愛Xfce所以我還是在Fedora里玩。發現25已經不被支持了,於是決定升到26,升級很簡單:

sudo dnf upgrade --refresh
sudo dnf install dnf-plugin-system-upgrade
sudo dnf system-upgrade download --refresh --releasever=26
sudo dnf system-upgrade reboot

安裝完成後就是Fedora26了,VirtualBox出問題的話可以嘗試升級,然後更新虛擬機的擴展,如果還是不行,可以嘗試下面的命令載重裝擴展:

sudo dnf install VirtualBox-guest-additions kernel-devel-$(uname -r) 
sudo akmods 
sudo systemctl restart systemd-modules-load
sudo systemctl restart vboxservice

內核更新後一般需要更新 virtualbox 插件,為了方便可以排除內核更新,在 /etc/dnf/dnf.conf 增加一行:

exclude=kernel*

本文更新於 2024/04/02。

分類
其它

人為什麼都不肯死–賈平凹

文|賈平凹

人總是要死的。大人物的死天翻地覆,小人物說死,一閉眼兒,燈滅了,就死了。我常常想,真有意思,我能記得我生於何年何月何日,但我將死於什麼時候卻不知道。一覺睡起來,感覺睡著的那陣就是死了吧,睡夢是不是另一個世界的形態呢?我的一個畫家朋友,一個月里總要約我見一次,每次都要交我一份遺書,說他死後,眼睛得獻給某某醫院,心肺得獻給某某醫院。

過些日子,他又約我去,遺書又改了,說某某醫院管理混亂,決定把眼睛獻給另一個某某醫院的。對於死和將死的人見得多了,我倒有個偏見,如果說現在就業十分艱難,看一個孩子待父母孝順不孝順就看他能不能考上大學,那麼,評價一個人的歷史功過就得依此人死後是否還造福於民。秦始皇死了那麼多年,現在發掘了個兵馬俑坑,使中國贏得了那麼大的威名,又賺了那麼多旅遊參觀的錢,這秦始皇就是個好的。

人怕毛毛蟲,據說人是從小爬蟲衍變的,人也怕人,人也怕自己,怕自己死。在平日,壽比南山的話我們說得很多,萬壽無疆也喊過,是極少以死來恭維的話,死只能是對敵人最痛恨的詛咒,是法典中的極刑。

依我的經驗,三十歲以前,從來是不思考到死的,人到了中年,下一輩的人拔節似的往上長,老一茬的人接二連三地死去,死的概念動不動冒在心頭,幾個熟人湊一堆了,瞧,誰怎麼沒有來,死了,就說半天關於死的話題。凡能說到死的人,其實離死還遙遠,真正到了死神立於門邊,卻從不說死的。

分類
其它

狗的圖靈測試

給狗開發一款虛擬現實設備,連上虛擬世界的狗有真狗有假狗。人可以去那個世界扮狗。兩種玩法,一種降低智商,過一種正常的狗生,虛擬世界的狗基本都是真狗,遊戲結束可以瀏覽這一生。另一種是智商不變,但基本都是機器狗,有劇情模式和漫遊模式。@西部狗世界

額,忽然發現標題黨了,所以貼和圖靈測試的維基鏈接吧。

分類
Linux

服務器連接pptp

linux pptp client managment

需要從某網站頻繁獲取數據,但目標網站對IP限制嚴格,於是想到用vpn。市面上(淘寶)有種每次連接都會自動切換IP的PPTP VPN,很符合需求,下面就是怎麼用了,環境是CentOS6。

#安裝pptp
yum install pptp pptp-setup
#配置pptp
pptpsetup --create v --server vpn.server.address --username USERNAME --password PASSWORD
#淘寶的這種pptp vpn一般是不用加密設置的,萬一需要,可以在配置命令最後加--encrypt參數
#為了方便後續使用,我們複製兩個命令
cp /usr/share/doc/ppp-2.4.5/scripts/pon /usr/sbin/
cp /usr/share/doc/ppp-2.4.5/scripts/poff /usr/sbin/
chmod +x /usr/sbin/pon
chmod +x /usr/sbin/poff
#啟動pptp
pon v
#如果啟動成功路由表中應該會出現一個ppp0的設備
route -n
#如果沒出現可以查看那裡出了問題
tail -n 10 /var/log/messages | grep ppp
#這是如果把網關設置到ppp0所有流量就都走vpn了\
#但是啊,你將失去ssh連接,很恐怖吧\
#這時最好有服務器的網頁端供你連到內網進行操作\
#當然,重啟服務器也能恢復連接
#下面設置路由表
/sbin/route del -net default
/sbin/route add -net default dev ppp0
#此時所有流量就pptp了,通過下面命令查看
curl http://myip.dnsdynamic.org/
#執行需要pptp的ip完成的任務
#關閉vpn
poff
#理論上此時應該恢復之前的路由表
#但我偷了個懶,重啟了一下網絡
/etc/init.d/network restart
#從pon到重啟網絡,就完成了一個工作循環。

使用php腳本完成pptp的切換,其實就是php調用bash,兩點:運行用戶為root;命令最好寫相對路徑。

#!/usr/bin/php
<?php
class HttpClient{
    private $ch;

    function __construct($cookie_jar){
        $this->ch = curl_init();
        curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0');
        curl_setopt($this->ch, CURLOPT_TIMEOUT, 40);
        curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
        curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookie_jar);
        curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookie_jar);
    }

    function __destruct(){
        curl_close($this->ch);
    }

    final public function setReferer($ref=''){
        if($ref != ''){
            curl_setopt($this->ch, CURLOPT_REFERER, $ref);
        }
    }

    final public function Get($url, $header=false, $nobody=false){
        curl_setopt($this->ch, CURLOPT_POST, false);
        curl_setopt($this->ch, CURLOPT_URL, $url);
        curl_setopt($this->ch, CURLOPT_HEADER, $header);
        curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);
        return curl_exec($this->ch);
    }

    final public function Post($url, $data=array(), $header=false, $nobody=false){
        curl_setopt($this->ch, CURLOPT_URL, $url);
        curl_setopt($this->ch, CURLOPT_HEADER, $header);
        curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);
        curl_setopt($this->ch, CURLOPT_POST, true);
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($data));
        return curl_exec($this->ch);
    }
}

function getNewIP(){
    $logIPFile="/home/logIP.txt";
    $res=array();
    exec("/usr/sbin/pon v", $res);
    sleep(3);
    exec("/sbin/route del -net default", $res);
    sleep(2);
    exec("/sbin/route", $res);
    sleep(6);
    exec("/sbin/route add -net default dev ppp0", $res);
//	var_dump($res);
    sleep(1);
//    需要一個cookie文件,創建一個空文件即可
    $http = new HttpClient('/home/dump.txt');
    $ip = $http->Get("http://myip.dnsdynamic.org/");
    sleep(1);
    file_put_contents($logIPFile, date("Y-m-d H:i:s", time())."_".$ip.PHP_EOL , FILE_APPEND | LOCK_EX);

    $ips=array();
    exec("tail -n 2 '$logIPFile'", $ips);
    $isNewIP=0;
    foreach( $res as $oldIP ){
        if(strpos($oldIP, $ip) != false){
           $isNewIP=$isNewIP+1;
       }
    }

    return $isNewIP; 
}

function restoreIP(){
    exec("/usr/sbin/poff",$res);
//	var_dump($res);
    sleep(2);
    exec("/etc/init.d/network restart");
}

//如果IP沒有重複兩次以上就執行任務
if( getNewIP($logIPFile) <2 ){
//    doYourOwnStaff();
} 
restoreIP();
exit();
?>

crontab的設置,這裡不用crontab -e,而是直接編輯/etc/crontab:

nano /etc/crontab
#指定運行命令的用戶為root
03 * * * * root /path/to/the/script

這樣就完工了,感謝CentOS 6下配置PPTP VPN客户端在 Linux 命令列進行 PPTP VPN 連線。在完全不了解linux路由表和iptables的情況下,我也只能做到如此了。其實理想狀態是只轉發http和https到pptp,有空再研究吧,新年快樂!


由於政策原因,動態pptp沒那麼好買了。於是年後換了一批靜態pptp,做法就是新建多個pptp配置,然後隨機取。

$vpns = array("v47", "v11", "v18", "v12");
$rand_keys = array_rand($vpns, 2);
$vpn = $vpns[$rand_keys[0]] ;

在設置過程中,遇到了unknown authentication type 26; Naking錯誤,解決辦去掉/etc/ppp/options.pptp文件中的require-mppe-128的注釋,並在修改配置文件為如下:

# written by pptpsetup
pty "pptp SERVER --nolaunchpppd"
lock
noauth
refuse-pap
refuse-eap
refuse-chap
refuse-mschap

nobsdcomp
nodeflate
require-mppe-128
name MYUSERNAME
remotename CONFNAME
ipparam CONFNAME

另一種可能的錯誤是連接的時候出現LCP: timeout sending Config-Requests,我是通過chkconfig iptables off關閉iptables解決的,反正我在內網。

上文中的/etc/init.d/network restart有時並不能恢復本機網絡,此時我們可以替換腳本中的這一句為

#網關改回原來的網關
subprocess.call('/sbin/route add default gw 172.16.2.1 netmask 0.0.0.0 dev eth0', shell=True)

linux l2tp client managment

時間來到2018年,pptp換成了l2tp,發現同樣的需求使用NetworkManager真是簡單。設置好l2tp連接後,一行命令即可打開關閉連接。

#passwd-file只需配置一行PSK
vpn.secrets.password:YOUR_PSK
#打開l2tp連接
subprocess.call('nmcli con up l2tp76 passwd-file /home/42/vpnpass.txt', shell=True)
#關閉l2tp連接
subprocess.call('nmcli con down l2tp76', shell=True)

本文更新於 2018/11/09。