Author Archives: alex

继续折腾PiAware

之前一篇说到,在闲置的RaspberryPi上折腾了PiAware,到现在已经运行了快三周了。之前提到说原配的天线信号不好,可能要再折腾个更强大的。这不,上周末,我又折腾了一把,不过不是买了新的天线,而是将整套设备从客厅挪到了阳台上,虽然仅仅隔了一扇玻璃门,但是接收到的信号却强了不少,每天追踪到的飞机,几乎增加了20-30%。

上图中,前三天是室内,后五天是转移到阳台上以后的数据,可以明显得看到蓝色加深了不少(颜色越深,则代表接收到的信号越多)。

Woke up to this orange sky

早上醒来,被窗外的橙色的天空给惊到了,于是赶紧背上相机,去小区后面的公园拍了几张照。

看着眼前的一切,很不真实,像是走在火星上,又像是世界末日的感觉。奇怪的是空气又没有很差,不像前几天空气中弥漫着烧焦的味道。

至于这种天色的成因,专家是这样说的:

The ominous skies, experts said, were a product of the plumes of smoke billowing from the historic number of wildfires burning across the state. Wind conditions overnight pushed smoke into lower elevations, filtering sunlight and producing dark tints of red, orange and gray. Still, air quality remained mostly unchanged.

之前每年都有山火,但是今年特别厉害,刚到9月,已经超过了之前全年的过火面积;加之仍在肆虐的新冠病毒;连续几天40多度的高温;以及周六的地震,希望这些灾难很快会过去,一切平安!

My Olympus Gears

  • Olympus PEN E-PL2
  • Olympus PEN E-P3
  • Olympus PEN E-P5
  • Olympus OM-D E-M5 Mark II
  • Olympus M.Zuiko Digital ED 12-40mm f/2.8 PRO
  • Olympus M.Zuiko Digital ED 40-150mm f/2.8 Pro

未出镜的还有:

  • Olympus M.Zuiko Digital MC-14 1.4x Teleconverter
  • Olympus M.Zuiko Digital ED 9-18mm f/4-5.6
  • Olympus M.Zuiko Digital ED 45mm f/1.8
  • Olympus M.Zuiko Digital ED 12-50mm f/3.5-6.3 EZ
  • Olympus M.Zuiko Digital ED 40-150mm f/4.0-5.6 R
  • Panasonic Lumix G 20mm f/1.7 II
  • Panasonic Lumix G 14mm f/2.5 II

折腾WordPress的Media Library在迁移后不显示图片的故障

用WordPress自带的migration tool迁移到新服务器,会遇到这样的问题:虽然之前上传的照片都已经拷贝到wp-content/uploads目录下,但是在Media Library下,这些照片都无法正常显示,原因是有两张表的数据没有导过来:wp_posts和wp_postmeta。

搞了半天,才找出解决办法。

首先,在旧服务器,导出所有attachment类型的posts:

sudo mysqldump wordpress wp_posts --where="post_type='attachment'" > wp_posts.sql

导出所有与attachment有关的wp_postmeta记录:

sudo mysqldump wordpress wp_postmeta --single-transaction --where="post_id in (select id from wp_posts where post_type='attachment')" > wp_postmeta.sql

之后,将两个sql文件上传到新服务器,并导入对应数据库:

mysql -u root -p wordpress < /home/wp_posts.sql

mysql -u root -p wordpress < /home/wp_postmeta.sql

这个方法存在一个问题:导出的记录的id可能在新实例中的表里已经存在了,这就很麻烦了,一个办法是,在sql文件里手动改掉冲突的id;另一种就是放弃所有冲突的id(在sql文件手动删掉对应的脚本)。我在wp_posts里使用手动改id的方法,因为一共只有四五条记录冲突;而在wp_postmeta表,我采用了批量修改新插入记录的ID后导入。具体方法是,首先在新实例的数据库上执行

select max(meta_id) from wp_postmeta;
+--------------+
| max(meta_id) |
+--------------+
| 15840 |
+--------------+
1 row in set (0.00 sec)

找出当前wp_postmeta表最大ID,然后用文本编辑器打开wp_postmeta.sql,查找”),(“,替换为”),(15840+”,也就是在原ID的基础上自增15840,以保证新ID不存在。当然,脚本第一条记录由于不符合”),(“的格式,所以需要手动修改为(15840+”。完成以后,放到服务器上导入,问题顺利解决。

继续折腾:Piwigo相册

前阵子,趁迁移blog的机会,把计划了很久的相册给建了起来。最早用的是Flickr的免费相册,无限容量,而且画质优化也特别棒,可是几年前,免费用户的容量被限制到了1000张照片,远低于我希望管理的照片数,所以就慢慢地放弃了Flickr。之前也试用过其他一些免费云端相册,总有这样那样的限制,还用了一阵子QNAP自带的Photo Station,始终没法习惯他的管理模式,所以也放弃了。

这次试用了一下selfhost的Piwigo相册,出人意料的满意。Selfhost意味着可以为所欲为,不用为容量或者照片数量担心,于是便慢慢的将自己过去几年拍的一些照片,传到了Piwigo里。经过一个月左右的摸索,感觉已经达到了一个比较理想的状态了。

Piwigo的相簿管理非常简单,而且支持子相簿,相簿的封面照片可以自选。同时,每张照片都能看到拍摄时的exif信息,并且支持添加GPS坐标(如果拍摄时自动添加了坐标,则无需手动添加),并显示在地图插件上。

另一个比较有意思的功能是Piwigo支持标签功能,每张照片可以添加多个标签,便于管理。比如我,就创建了彩虹、瀑布、极光、野生动物、湖面倒影的几个标签,方便检索同一类型的照片。

不过,我平时管理的照片,基本都是用相机拍摄的,然而每次出游,Mei都会用自己的手机拍不少照片,其中也不乏一些蛮有意思的作品,我现在还没想好该用什么样的一种方式去管理这些相片。

Raspberry Pi – 继续折腾FlightAirMap

PiAware最大的问题是没办法记录曾经检测过的飞机,于是我又开始折腾起了功能更强大的FlightAirMap

安装过程

Install git, mariadb, apache and PHP with needed modules:

sudo apt-get install git mariadb-server apache2 php5 php5-curl php5-mysql php5-gd php-pclzip

Or this on Stretch:

sudo apt-get install git mariadb-server apache2 php7.0-common php7.0-cgi php7.0-mysql php7.0-curl php7.0 php7.0-xml php7.0-zip php7.0-gd php7.0-json

Get FlightAirMap from git:

cd /var/www
sudo git clone --recursive --depth=1 http://github.com/ysurac/flightairmap

Edit Apache conf /etc/apache2/site-available/000-default.conf, add this in VirtualHost section:

<VirtualHost *:8088>
        ServerName 192.168.68.128/flightairmap
        DocumentRoot "/var/www/flightairmap"
        <Directory /var/www/flightairmap>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
</VirtualHost>

Enable mod rewrite:

sudo a2enmod rewrite

Restart apache2:

sudo service apache2 restart

Fix permissions:

cd /var/www/flightairmap
sudo chmod 666 require/settings.php
sudo chmod 777 install/tmp
sudo chmod 777 data

Create database and user, may skip if already created:

mysql -u root -p
update mysql.user set password=password('YOUR_DB_PASSWORD') where user='root';

Then:

CREATE DATABASE `flightairmap`;
GRANT ALL ON `flightairmap`.* TO 'youruser'@'localhost' IDENTIFIED BY 'yourpass';
FLUSH PRIVILEGES;

Now use your browser to go to http://127.0.0.1/install/ (or ip of your server) Run scripts/update_db.php in a shell.

cd /var/www/flightairmap/
php scripts/update_db.php

Add FlightAirMap service:

sudo cp /var/www/flightairmap/install/init/flightairmap.service.systemd /etc/systemd/system/flightairmap.service

Alter paths to match your path, may skip i no change to the installation folder:

sudo nano /etc/systemd/system/flightairmap.service
sudo chmod 644 /etc/systemd/system/flightairmap.service

Then you can run flightairmap daemon:

sudo systemctl enable flightairmap.service

Add update_db.php in /etc/crontab:

sudo 5 * * * * root php /var/www/flightairmap/scripts/update_db.php >/dev/null 2>&1

运行效果:

折腾Raspberry Pi:安装PiAware

PiAware是什么鬼?

官方解释:

您的地面站可以运行 FlightAware 的 PiAware 软件,用于跟踪在 100-300 miles (视线内,取决于天线的安装范围) 内的飞行,并自动将数据传送给 FlightAware。 您可以直接从您的 PiAware 设备或通过 FlightAware.com 跟踪航班。为了表达FlightAware的谢意,发送ADS-B数据的用户将享受以下优待:

  • flightaware.com上的实时数据(存在最多两分钟的标准数据处理延迟)
  • 访问本地设备最近一秒接收的最新实时数据(可通过本地网络连接在统计信息页面访问)
  • 来自本地设备的数据在FlightAware航迹上突出显示
  • 站点性能详细统计
  • 一个免费Enterprise Account (价值每月89.95美刀)

安装过程:

硬件:

将amazon购买的ADS-B接收器连上天线,并插入RasPi的USB口。

软件:

wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.8.1_all.deb
sudo dpkg -i piaware-repository_3.8.1_all.deb

sudo apt-get update
sudo apt-get install piaware

sudo piaware-config allow-auto-updates yes
sudo piaware-config allow-manual-updates yes

sudo apt-get install dump1090-fa

sudo reboot

安装完毕后,登录flighwaware网站激活刚安装完毕的客户端

https://flightaware.com/adsb/piaware/claim

激活以后,就能在本地局域网看到本地地图以及正在追踪的飞机了。

还有一个问题,由于我这个RasPi,之前已经安装了Apache运行wordpress和piwigo相册,而PiAware默认使用的是lighttpd服务器,两者(Apache和lighttpd)同时运行,会造成端口监听冲突,同时也会加重主机的负荷,所以我又多做了几个步骤,把dump1090-fa的服务迁移到了Apache上。

具体步骤很简答,只需要改动两个文件:

第一个是在/etc/apache2/ports.conf中加入对8080端口的监听 :

Listen 8080

其次,将8080端口的服务加入到/etc/apache2/sites-available/000-default.conf:

<VirtualHost *:8080>
        ServerAdmin [email protected]
       DocumentRoot /usr/share/dump1090-fa/html/
       Alias  "/dump1090-fa/data/" "/run/dump1090-fa/"
       Alias  "/data/" "/run/dump1090-fa/"
       Alias  "/dump1090-fa/" "/usr/share/dump1090-fa/html/"
       Alias  "^/dump1090-fa$" "/dump1090-fa/"
        #SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        <Directory "/usr/share/dump1090-fa/html/">
        Require all granted
        Options All
        AllowOverride All
        SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        </Directory>
        <Directory "/run/dump1090-fa/">
        Require all granted
        Options All
        AllowOverride All
        SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


重启Apache服务

sudo service apache2 restart

禁用lighttpd

sudo systemctl disable lighttpd

sudo update-rc.d -f lighttpd remove

将Apache服务设为自动启动

sudo systemctl enable --now apache2

实际运行效果:

下一步:

Amazon买的ADS-B自带的天线信号有点弱,只能接收到周围25NM左右的范围,接下来可能另外买一个信号强一点的天线,同时需要调整一下摆放位置。

参考资料:

https://flightaware.com/adsb/piaware/install
https://discussions.flightaware.com/t/migrate-dump1090-fa-to-apache/34053/11

F1 70th Anniversary GP @ Silverstone

本周,再次开闹钟六点起来看比赛。

本周的比赛是银石背靠背两场的第二场。从上周的表现来看,我本以为这又会是一场Mercedes AMG一二带回的无聊比赛,没想到Red Bull的轮胎策略发挥了奇效,让Verstappen在赛车性能不占优的情况下,出人意料的拿下了冠军,这才是我原本印象中的F1,可以靠进站,加油的策略左右比赛的进程,而最近几年的比赛,由于取消了加油,又统一了轮胎供应商,令比赛的不确定性减少了很多,也让比赛少了很多看点。

除了Max的夺冠,Racing Point的代打车手Hulkenberg也有出色的表现,排位赛跑入前四三,正赛也一度位列第四,只是最后运气不佳,因为车胎的缘故被迫多进一次站而位列第七。不过下周巴塞罗那站,如果Perez不能及时康复,那他应该还有一场表现的机会,祝他好运。

另外,就是Vettel,延续了最近的恶劣表现,发车没多久就自己失误spin,后来又在team radio里和车队发脾气,最后落到一分没得,和队友Leclerc的第三形成了鲜明对比。

这场比赛,Team Radio也有许多亮点,有些也挺搞笑的,我截了几个图大家一起乐呵乐呵。

Max Verstappen, during the race, when asked to back off and manage tires

Hamilton is obviously worried about his tires

Vettel…

Verstappen on final lap

2020 F1 Silverstone Grand Prix

这场比赛真是太戏剧化了,前51圈基本上就是半看半打瞌睡,直到倒数第二圈,博塔斯爆胎了。没想到这还不是全场最高潮的,最后一圈,整场领跑的汉密尔顿也爆胎了,眼看着维斯塔潘从差20多秒一点点追进,最后还是功亏一篑,汉密尔顿拖着一条爆胎冲过了格子旗终点线。维斯塔潘最后回场圈的时候在team radio里气的破口大骂,如果不是倒数第二圈回去换了个胎刷最快圈速,本场冠军就是他的了。。。

另外有一点遗憾的是我今年特别欣赏的年轻车手诺里斯,老老实实跟在队友塞恩斯后面开了大半场,最后被里卡多慢慢追近,并利用DRS的优势超越,白白丢了一个位置。不过我还是很看好他的,希望下一场比赛能继续延续这个赛季的出色表现。

 

 

Continue reading

折腾Raspberry Pi:Migrating WordPress to Raspberry Pi

Preparation

Take full backup of existing system

Copy files to USB drive (extFat format)

 

On Raspberry Pi:

Update system

sudo apt-get update
sudo apt-get upgrade

Mount USB Drive

sudo apt install exfat-fuse exfat-utils

Install Apache

sudo apt install apache2 -y

Install MariaDB

sudo apt-get install mariadb-server -y

Install PHP

sudo apt-get install php php-mysql -y

Install PHPMyAdmin

sudo apt install phpmyadmin
select "apache2" option by pressing SPACE and then ENTER
select "Yes" at the next prompt
Set a password for PHPMyAdmin

Create a new user to create and access data tables within PHPMyadmin

sudo mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password_set_in_previous_step' WITH GRANT OPTION;
exit out of MySQL cmd line by typing “quit” in the terminal

Configuring Apache for PHPMyAdmin

sudo nano /etc/apache2/apache2.conf
Add the following line to the bottom of the file:
Include /etc/phpmyadmin/apache.conf
Save and exit by pressint CTRL + X and then pressing Y then ENTER.

Restart Apache service

sudo service apache2 restart

Accessing PHPMyAdmin

Type http://localhost/phpmyadmin in browser
User Name and Password are the ones set in previous step.

Install GEdit

sudo apt install gedit -y

Increase import file size of PHPMyAdmin

sudo gedit /etc/php/7.3/apache2/php.ini
update the following values:
memory_limit: 256M (default = 128)
post_max_size: 64M
upload_max_filesize: 40M
Save and exit.
Restart apache
sudo /etc/init.d/apache2 restart

Import Database

Create new database (match the database name in the backup sql file)
Go to Import tab (ignore errors), select backup sql file and import

“Install” WordPress

Copy from USB drive (files and folders under public_html folder/) to /var/www/html/ folder

Edit “wp-config.php”

Open “wp-config.php” with Text Editor.
Update the following values:
DB_USER
DB_PASSWORD
Also, add the following values:
define(‘WP_SITEURL’, ‘http://www.hi-alex.com/’);
define(‘WP_HOME’, ‘http://www.hi-alex.com/’);

Done

 

Fixing phpmyadmin “phpmyadmin – count(): Parameter must be an array or an object that implements Countable” error:

sudo nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php
replace code

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr'] == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*')))

with

((empty($analyzed_sql_results['select_expr']))
    || (count($analyzed_sql_results['select_expr']) == 1)
        && ($analyzed_sql_results['select_expr'][0] == '*'))

Ctrl + O
Enter
Ctrl + X
sudo service apache2 restart
sudo nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php
replace code

if ($options != null && count($options) > 0) {

with

if ($options != null && count((array)$options) > 0) {

Ctrl + O
Enter
Ctrl + X
sudo service apache2 restart
 

Securing phpmyadmin, block access from internet

Open it in a text editor (sudo nano /etc/phpmyadmin/apache.conf) and find the block that looks like:

<Directory /usr/share/phpmyadmin>
...
</Directory>

Inside the block, add the following lines:

Order Deny,Allow
Deny from all
Allow from localhost
Allow from 127.0.0.1
Allow from 192.168.68.0/24

Ctrl + O
Enter
Ctrl + X
sudo service apache2 restart
 

Map www.hi-alex.com to a sub folder under /var/www/html/

sudo nano /etc/apache2/sites-enabled/000-default.conf
Add the following lines:
ServerAdmin [email protected]
DocumentRoot /var/www/html/blog
ServerName www.hi-alex.com
Ctrl + O
Enter
Ctrl + X
 

References:

How to Install WordPress on Raspberry Pi
How to Install phpmyadmin on Raspberry Pi
Increase phpmyadmin import file size
Mount ExFat disk on Raspberry Pi
Copy or Move WordPress to Another Server
Fix phpmyadmin error
Fix phpmyadmin error on Import tab