炫Q 发布的文章

C#获取当前路径的七种方法

//1.获取模块的完整路径。  
string path1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;  

//2.获取和设置当前目录(该进程从中启动的目录)的完全限定目录  
string path2 = System.Environment.CurrentDirectory;  

//3.获取应用程序的当前工作目录  
string path3 = System.IO.Directory.GetCurrentDirectory();  

//4.获取程序的基目录  
string path4 = System.AppDomain.CurrentDomain.BaseDirectory;
 
//5.获取和设置包括该应用程序的目录的名称  
string path5 = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;  

//6.获取启动了应用程序的可执行文件的路径  
string path6 = System.Windows.Forms.Application.StartupPath;  

//7.获取启动了应用程序的可执行文件的路径及文件名  
string path7 = System.Windows.Forms.Application.ExecutablePath;  
  

  
// 输出结果 
    1. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\XmlAndXsd.vshost.exe  
    2. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release  
    3. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release 
    4. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\ 
    5. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\ 
    6. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release 
    7. D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\XmlAndXsd.EXE

参考:https://www.cnblogs.com/AlexOneBlogs/p/7909692.html

五一劳动节,北宫国家森林公园游

适逢五一节日,也不能整天在家里写bug,休整了两天,也要出去放放风了,以循序渐进的原则,这次选择了强度不是很大的“北宫国家森林公园”,百度说:北京北宫国家森林公园,位于北京市丰台区西北部山区,距北京市中心20公里,是丘陵型自然风景区。北宫因帝王憩地而得名。公园始建于2002年10月,2005年12月被国家林业局正式批准为国家级森林公园。
19-1.jpg

首先是交通问题,这个公园位于西六环外偏南,交通不是很便利,建议驾车前往,会走一小段六环高速,应该是5块钱的样子,五一免费。当然也有公交地铁到附近,但是可能下车要走的路比较长,公园南门偏东的停车场是附近最大了,后来也证明是明智的选择,再往里走中午出来都是个问题。一早七点到,仅仅靠近门口有几排车,再往里走是国家电网的50个快速充电桩,停车场按次收费,小车10元不限时。
11.jpg

从停车场到公园南门也就200米的样子,路边有早点,据说还是比较实惠的,由于自带的干粮也就没有过问,大概也就是传统的油饼之类的早点吧,主动去售票处买票,结果吃了闭门羹,对不起,8点后才售票,之前免费进,又省了10块,另外又一说刷北京工会的京卡也免费,不过没有看到相关说明。
12.jpg

进园之后就是小江南景区,据说周末会有喷泉,平时不开,节假日更应该开吧,或许是由于工作人员还没有上班。
14.jpg

步道是传统的健步走道风格,还有一些小知识,什么猫步、内八、外八、脚掌走、脚跟走的示范,有部分是红色的塑胶步道,忙着体验,忘了拍照。
13.jpg

- 阅读剩余部分 -

mysql纵表变横表

数据以流水存放

CREATE TABLE `tab` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `n` varchar(3) DEFAULT NULL,
  `t` varchar(1) DEFAULT NULL,
  `v` float DEFAULT NULL,
  PRIMARY KEY (`id`)
);

INSERT INTO `tab` VALUES ('1', '101', 'A', '1');
INSERT INTO `tab` VALUES ('2', '102', 'A', '2');
INSERT INTO `tab` VALUES ('3', '102', 'B', '3');
INSERT INTO `tab` VALUES ('4', '103', 'B', '4');

上SQL

select n,
sum(case t when 'A' then v else null end) as A,
sum(case t when 'B' then v else null end) as B
from tab group by n order by n

结果

n   A   B
101 1   
102 2   3
103     4

重玩香蕉之一:玩M2U

今天是迷窟鞋盒运行第750天,除了期间因为整理接线或者误操作重启过两次,至今一直稳定运行,现在用uptime能查到的是连续536天了,过段时间可能会对鞋盒进行调整,难免会断电重启。
好吧,言归正传,下边是这次准备的清单

吃灰的bpi-m2u
二创专用电源线
川宇 8G TF卡
川宇读卡器
其它网线、USB插线板等

然后就是找一个比较新的镜像,百度云以慢著称,谷歌盘又在墙外,大球给了一个地址,https://dev.banana-pi.org.cn/Image/BPI-M2U/,下载了两个镜像

https://dev.banana-pi.org.cn/Image/BPI-M2U/2017-06-06-ubuntu-16.04-server-preview-bpi-m2u-sd-emmc.img.zip
https://dev.banana-pi.org.cn/Image/BPI-M2U/2017-11-13-ubuntu-16.04-mate-desktop-beta2-bpi-m2u-sd-emmc.img.zip

从命名看一个是desktop版,一个是server版吧,让人迷惑的是上百个镜像,除了preview版就是beta版,也不知道哪个是官方版,只能靠碰运气,以前比较喜欢用树莓系统控制一些外设,现在比较懒基本就是装软件玩,所以趋向于比较小巧的server版,如果能在emmc中运行还能省一块存储卡。
以前烧录镜像的工具SD Formatter & Win32DiskImager,还记得大球用来烧硬盘,听说有个新工具叫Etcher顺便也尝试一下吧,419M的镜像解压后7.28G,也服了做镜像的了,会是谁呢?烧录工具显示卡容量7.99G,镜像7.82G,应该是计量标准不同吧,怪不得很多程序员谈工资时说我要2k,不说我要两千,在他们的潜意识里1k=1024吧。
01.png

不光写完,还给校验了一遍,然后自动弹出了,怀着忐忑的心情把卡插入吃灰已久的M2U,插网线,接电源,红绿蓝三灯齐亮,如果一直这样就是死机了,还好,一会儿就闪动起来了,红灯常亮,绿灯闪烁,蓝灯熄灭了。登录路由,发现了一个叫bpi-iot-ros-ai的设备,附近bpi很多,暂时还不能确认是不是这个,ssh看一下吧,是它,应该就是它了

pi@bpi-iot-ros-ai:~$ uname -a
Linux bpi-iot-ros-ai 3.10.65-BPI-M2U-Kernel #1 SMP Thu May 25 11:46:04 CST 2017 armv7l armv7l armv7l GNU/Linux
pi@bpi-iot-ros-ai:~$

11点半了,困了,待续吧。

关于mysql的主从复制和文件位置

首先是文件位置,以前放到了docker里,结果docker容器崩溃了,数据也就找不回来了,
想到放共享文件夹,球猫说专业名词叫volume,好吧,其实就是个v的参数,下边开始从ubuntu开始,

mkdir mydata
docker run -ti -h mysql_1 --name mysql_1 -v /home/user/mydata:/mysqldata -p 10001:3306 ubuntu
apt-get update
apt-get install mysql-server
apt-get install vim
vi /etc/mysql/mysql.conf.d/mysqld.cnf
#修改datadir为/mysqldata,注释掉bind-address=127.0.0.1
cp /var/lib/mysql/. /mysqldata -r -a
service mysql restart
mysql -u root -p

CREATE USER 'test' IDENTIFIED BY '****';
create database testDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
grant all privileges on testDB.* to test@"%" identified by '****' with grant option;
flush privileges;
exit

应该就搞定了,可以通过客户端访问了,结果发现mydata文件夹是空的,后来通过find找到在这里,看来要写绝对路径/var/lib/docker/volumes/mydata/_data/

下面就是主从复制了,再建一个mysql容器

mkdir mydata2
docker run -ti -h mysql_2 --name mysql_2 -v /home/user/mydata2:/mysqldata -p 10002:3306 ubuntu
...

似乎很多重复过程,可以中间exit后保存一份镜像再继续run
docker commit -m "mysql ok" mysql_1 ubuntu:mysql

如果主库有了数据,就需要先备份一下

mysqldump -uroot -p'****' -S /run/mysqld/mysqld.sock --all-databases > /mysqldata/mysql_bak.$(date +%F).sql
cp /var/lib/docker/volumes/mydata/_data/mysql_bak.2018-03-2x.sql mydata2
mysql -uroot -p'****' -S /run/mysqld/mysqld.sock < /mysqldata/mysql_bak.2018-03-2x.sql

获取所有容器的ip

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

主机

vi /etc/mysql/mysql.conf.d/mysqld.cnf
#去掉Server-id和log-bin的注释
service mysql restart
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'test'@'172.17.0.*' IDENTIFIED BY '****';
SHOW MASTER STATUS;
#记下日志的名字mysql-bin.000001和位置446

从机

vi /etc/mysql/mysql.conf.d/mysqld.cnf
#去掉Server-id的注释改为2
vi /mysqldata/auto.cnf
#修改uuid
service mysql restart
mysql -u root -p
CHANGE MASTER TO MASTER_HOST='172.17.0.x', MASTER_USER='test', MASTER_PASSWORD='****', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=446;
start slave;
SHOW SLAVE STATUS\G

这样就好了,一下是一些笔记

show binlog events;
show binlog events in 'mysql-bin.000001';
show variables like '%server_uuid%';
stop slave;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;start slave;
find / -name mysqld.sock
cat /var/log/mysql/error.log
#!/bin/sh
service mysql start
/bin/bash

参考资料,排名不分先后
http://www.cnblogs.com/phpstudy2015-6/p/6485819.html
https://blog.csdn.net/seteor/article/details/17264633
https://www.cnblogs.com/phpstudy2015-6/p/6706465.html