Long Luo's Life Notes

每一天都是奇迹

By Long Luo

.gitconfig

1
2
3
4
5
6
[alias]
st = status
co = checkout
br = branch
ci = commit
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

CONFIGURING GIT

Set the name that will be associated with your commits

1
git config --global user.name "[name]"	

Set the email that will be associated with your commits

1
git config -global user.email "[email]"	

Create a shortcut for a Git command (e.g. alias.glog “log —graph —oneline”)

1
git config -global alias.[alias] [command]	

Set the default text editor to use for commit messages (e.g. vi)

1
git config -global core.editor [editor]	

Open the global config file in a text editor for manual editing

1
git config -global —edit

INITIALIZING AND CLONING

Initialize an empty Git repository in the current directory

1
git init

Create an empty Git repo in the specified directory

1
git init [directory]

Clone a remote Git repository from the url into a local directory

1
git clone [url]	

Clone a remote repo into the specified local directory

1
git clone [url] [directory]	
阅读全文 »

By Long Luo

本站目前采用 Hexo 作为后台系统,托管在Github上。此前我曾在很多地方安过家,最开始新浪和QQ空间上写过博客,后来到网易博客,再后来看到程序员都有自己的个人网站,于是2014年也新建了一个人网站,当时是买了域名和一个VPS,使用的LNMP架构。

在使用了流行的WordPress两年后看到码农的乐土,Jekyll ,一个以纯静态文件的博客系统。但后来我发现 Jekyll 实在太慢,而且美观度也不够,于是投奔了在 Hexo

LNMP (Linux + Nginx + MySQL + PHP)

Ubuntu 20.04

使用Nginx官方源安装Nginx。

Nginx安装前必要环境。

sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

导入官方nginx签名密钥。

curl https://nginx.org/keys/nginx_signing.key | gpg –dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

设置apt仓库。

echo “deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu lsb_release -cs nginx” | sudo tee /etc/apt/sources.list.d/nginx.list

更新软件包列表并安装nginx。

说明 默认安装最新稳定版本Nginx,如果对版本有要求可以使用sudo apt list -a nginx搜索支持的Nginx版本并将安装命令替换为具体版本(例:安装1.22.1-1~focal版本,修改命令为sudo apt install -y nginx=1.22.1-1~focal)。

sudo apt update -y && sudo apt install -y nginx

安装MySQL数据库并设置密码。

更新软件包列表并安装MySQL服务器。

sudo apt update -y && sudo apt install -y mysql-server

将MySQL的配置文件中监听地址从127.0.0.1(即只监听本地连接)更改为0.0.0.0(即监听所有可用网络接口),从而允许远程连接到MySQL服务器。

sudo sed -i “s/127.0.0.1/0.0.0.0/” /etc/mysql/mysql.conf.d/mysqld.cnf

修改数据库root用户主机部分从localhost更改为%以允许从任何地址连接,同时修改root用户的密码和身份认证插件。您需要将命令中替换为您的密码。

重要 由于本地root用户的默认身份认证插件是auth_socket,如果命令执行后提示输入密码,请直接按回车跳过。

sudo mysql -uroot -p -e “ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH caching_sha2_password BY ‘’;” -e “UPDATE mysql.user SET Host=‘%’ WHERE User=‘root’ AND Host=‘localhost’;” -e “FLUSH PRIVILEGES;”

重启MySQL数据库服务使配置生效。

sudo systemctl restart mysql

安装PHP。

更新软件包,安装software-properties-common包,并添加PPA仓库ppa:ondrej/php。

sudo apt update && sudo apt install -y software-properties-common && sudo add-apt-repository -y ppa:ondrej/php

安装PHP8.4及相关组件,包括FPM和MySQL扩展。

说明 您可以通过sudo apt search php查看所有支持安装的PHP版本,安装其他版本需要修改命令中对应版本号(例:安装PHP8.1需修改命令sudo apt install -y php8.1 php8.1-fpm php8.1-mysql)。

sudo apt install -y php8.4 php8.4-fpm php8.4-mysql

验证LNMP环境。

查询php-fpm配置文件默认监听地址,需要替换为您的PHP版本(例:PHP8.4需要将替换为8.4)。

sudo grep ‘^listen =’ /etc/php//fpm/pool.d/www.conf

sudo grep ‘^listen =’ /etc/php/8.4/fpm/pool.d/www.conf

如果返回sock文件地址说明默认监听sock文件。

如果返回127.0.0.1:9000说明默认监听本地9000端口。

listen = /run/php/php8.4-fpm.sock

编辑 /etc/nginx/conf.d/default.conf 文件,在server内填写PHP转发规则,需要替换为您的监听地址(如果是sock文件需要在地址前方增加unix:)。

重要 如果监听的sock文件,需要sock文件的权限设置为允许读写,您可以使用以下命令来更改权限sudo chmod 666 更改为您的sock文件地址。

location / { index index.php index.html index.htm; } location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass ; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \(document_root\)fastcgi_script_name; include fastcgi_params; }

location / { index index.php index.html index.htm; } location ~ .php$ { root /usr/share/nginx/html; fastcgi_pass unix:/run/php/php8.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \(document_root\)fastcgi_script_name; include fastcgi_params; }

重启Nginx服务使修改后的配置文件生效。

sudo systemctl restart nginx

远程访问MySQL数据库

运行以下命令后,输入root用户的密码登录MySQL。

sudo mysql -uroot -p

依次运行以下命令,创建远程登录MySQL的账号,并允许远程主机使用该账号访问MySQL。

本示例账号为dmsTest、密码为Ecs@123****。

实际创建账号时,需将示例密码Ecs@123

更换为符合要求的密码,并妥善保存。密码要求:长度为8至30个字符,必须同时包含大小写英文字母、数字和特殊符号。可以使用以下特殊符号:

()` ~!@#$%^&*-+=|{}[]:;‘<>,.?/

创建数据库用户dmsTest,并授予远程连接权限。

create user ‘frank’@‘%’ identified by ‘wp291563pd’;

为dmsTest用户授权数据库所有权限。

grant all privileges on . to ‘frank’@‘%’;

刷新权限。

flush privileges;

运行以下命令,为WordPress网站创建一个名称为wordpress的数据库。

create database wordpress;

create user ‘wpuser’@‘localhost’ identified by ‘25789pwdb’;

cd /usr/share/nginx/html

sudo wget https://cn.wordpress.org/latest-zh_CN.zip

启动nginx服务

sudo systemctl enable nginx sudo systemctl start nginx

enable:设置 Nginx 服务在系统启动时自动启动。 start:立即启动 Nginx 服务。

Nginx服务是否启动成功

sudo systemctl status nginx

status:查看 Nginx 服务的状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2025-01-03 19:25:38 CST; 1h 47min ago
Docs: https://nginx.org/en/docs/
Main PID: 2658 (nginx)
Tasks: 3 (limit: 1930)
Memory: 3.3M
CPU: 14ms
CGroup: /system.slice/nginx.service
├─2658 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
├─2659 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
└─2660 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jan 03 19:25:38 iZwz9bi9yxqor74jqvhsr1Z systemd[1]: Starting nginx - high performance web server...
Jan 03 19:25:38 iZwz9bi9yxqor74jqvhsr1Z systemd[1]: Started nginx - high performance web server.

3 当修改了配置的时候,需要重启nginx,使配置生效的时候使用一下命令:

sudo systemctl reload nginx

  1. Nginx的配置文件存放的位置?

在Ubuntu环境中,Nginx的存放位置在以下目录中:

mysql -u wpuser -p -h localhost wordpress

Jekyll

$ git –version git version 1.7.1

$ ssh-keygen -t rsa -C “youremail@example.com”

id_rsa.pub

ssh -t git@github.com

$ git config –global user.name “Your Name” $ git config –global user.email “email@example.com”

1
2
3
4
5
6
7
The authenticity of host 'github.com (192.30.253.112)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.253.112' (RSA) to the list of known hosts.
PTY allocation request failed on channel 0
Hi longluo! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

修改SSH密码。登录ssh后, 通过passwd命令修改即可,命令格式:

1
passwd {用户名}

出现:(current) UNIX password: 然后输入当前系统登陆用户的密码 回车 出现:New password: 再输入新密码(新的密码必须是字母数字都有,不然的话不成功)

Hexo

参考文献

  1. 手动部署LNMP环境
  2. 在Linux实例中安装MySQL数据库
  3. 手动搭建WordPress(Linux)

By Long Luo

继第一篇 Android自定义View:如何实现一个模拟时钟? ,我们使用Android自定义View实现了一款模拟表盘,第二篇 Android自定义View:另一种实现手表指针转动的方法 ,我们又通过另外一种方法实现了手表指针的另外一种转动实现。

在日程生活中,我们常见的挂钟实际都是有个钟摆的,那么,如果我们想在我们所作的模拟时钟实现这种钟摆动画呢?那么具体应该如何实现呢?

一、钟摆

遇到问题,我们需要先分析钟摆动画的具体动画效果,然后再做下一步工作。

单摆是能够产生往复摆动的一种装置,将无重细杆或不可伸长的细柔绳一端悬于重力场内一定点,另一端固结一个重小球,就构成单摆

那么钟摆就是在一定角度内来回摆动,具体更多细节可以自行Google。

二、Android Animation分析

在这一节里,我们会简单谈谈Android动画。

2.1 动画分类

Android动画目前可分为以下3种:

2.1.1 补间动画(Tween Animation)

所谓的补间动画,其实就是定义了我们动画的起始点和终止点的状态,而动画的过程我们是不关心的,只需要达到我们想要的效果就行。

  1. 渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)
  2. 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应
  3. 组合使用步骤较复杂。
  4. View Animation也是指此动画

对于补间动画来说,无论是用纯java代码构建Animation对象,还是通过xml文件定义Animation,其实最终的结果都是

1
2
3
4
Animation a = new AlphaAnimation();
Animation b = new ScaleAnimation();
Animation c = new RotateAnimation();
Animation d = new TranslateAnimation();

2.1.2 帧动画(Frame Animation)

所谓的帧动画就是可以设置我们的动画的每一帧的效果,其实视频或者Gif的效果都是由许多张图片在很短的时间内播放,从而产生动画效果。

  1. 用于生成连续的Gif效果图。
  2. DrawableAnimation也是指此动画。

2.1.3 属性动画(Property Animation)

属性动画是Android动画里面最复杂也是最能做出复杂的动画效果的一种类型。

  1. 支持对所有View能更新的属性的动画(需要属性的setXxx()和getXxx())。
  2. 更改的是View实际的属性,所以不会影响其在动画执行后所在位置的正常使用。
  3. Android3.0(API 11)及以后出现的功能,3.0之前的版本可使用github第三方开源库nineoldandroids.jar进行支持。

属性动画的相关的API:

-ValueAnimator:值动画执行类,常配合AnimatorUpdateListener使用。 - ObjectAnimator:对象动画执行类。 - PropertyValuesHolder: 属性存储器,为两个执行类提供更新多个属性的功能。 - AnimatorListener:动画执行监听,在动画开始、重复、结束、取消时进行回调。 - Keyframe:为PropertyValuesHolder提供多个关键帧的操作值。 - AnimatorSet:一组动画的执行集合类:设置执行的先后顺序,时间等。 - TimeInterpolator:时间插值,用于控制动画执行过程。 - AnimatorUpdateListener:动画更新监听。 - TypeEvaluator:类型估值,用于设置复杂的动画操作属性的值。

ValueAnimator和ObjectAnimator是属性动画里面经常使用的对象类,ObjectAnimator是 ValueAnimator的子类。

当然Android属性动画是很复杂,达到熟练运用还需要深入研究,大家想了解可以去网上寻找相关知识学习。

阅读全文 »

By Long Luo

— 井中月 —

仿《繁星·春水》

1
2
3
4
5
6
7

水井啊

只要你的内心有哪怕那么一点点波澜

就不能拥有美丽的月亮了

*** Long Luo at 2016-8-22 23:24:49 @Shenzhen.***

整理 By Long Luo

这几天用了很长时间爬完了水木社区 很热的一个帖子: 我最大的错误在哪里(20年…略长)? ,这个帖子比较有营养,尤其是很多回帖非常有价值,让我学到了很多东西。

昨晚花了一个多小时整理并收集了一些精彩回帖,激励自己,时常看看,吸取力量。

人生坎坷太多,需要提高逆商啊!

苦海泛起爱恨,在世间,难逃避命运!


首先改变一下心态,不要总将问题归结于自己,查找自己的问题。很多时候就是命运弄人,没遇到好人而已。

建议,

第一,过平淡生活,不投机,老实赚钱,不求暴富,不追求女神,娶老婆性格为先。不是每个人能暴富。美女也不是随便那个人承受得了的。

第二,前妻提的些具体问题,可酌情做些改变。不得不承认,出身会带来一些不适应现代城市生活的特质,可适当修正,但不能急。

第三,对自己宽容些,不要给自己太多责任。


前面的受的苦只能说出身不是我们自己能选择的, 事实上你的努力也给了你足够的回报了,你所说的各种选择错误,只是错过了最优的选择, 但是人生就如同股票,没有经过,谁知道选择的就是最优的呢?

也许读博和出国了你后来得到的工作并不一定如你所选择的,因为你工作的平台并不差,导致后来每况愈下是因为自己的性格,即使你博士出来,换一个可能更好点的平台,极大可能也是一样搞的每况愈下;

对于自己的能力,还是要有自知之明,既然不适合迎合苟且,那就淡然的活好自己,毕竟你已经将自己从最贫苦的农村生活中挣扎出来了,而且你也有能力赡养老人还有余力自主兄弟,对于自己来说,已经是成功了,不是没人都能成刘强东啊;

最大的失败还是最终没有抵住诱惑加杠杆炒股,远超出了你自己的承受能力。

如果你认为自己的生活就是注定要在沼泽地里前行的话,你现在就是跌倒一个坑里了,但是还好,这个坑还不至于淹死你啊。 如果性格的缺陷终究是改变不了的, 我觉得你只要调整好心态,坚持努力,终究还是能够上岸的,

从你的叙述上来说,你小孩跟着妈妈并不是很好的选择, 你的孩子还是值得你继续奋斗,为他提供一个过得去的生活环境;

而且说又说的准你就一定不会再遇到一个能够真心相待的女人呢


楼主有几个重要的问题:

  1. 器量不够,心态太低。驾驭不住肤白貌美的女人和较多的金钱、权力,有挑战性但有前景的职业机会等。弱势的人不会被同情,只会被歧视

  2. 缺少投资、婚恋、职场等专业的知识和眼界,这个要么靠他人指点,要么靠自己学习,一般来说学习能力强的人走了弯路最后也能重新走到正路上,大学毕业后,要学的东西还是很多的。

  3. 怨天尤人,高考也赖这赖那,婚姻也赖前妻,炒股夜赖前妻,赚了估计就不赖了。。。要想拥有好东西,最重要是自己配的上,自己才是最重要的因素。


看到这样的帖子,也忍不住出来回复一下

  1. 总结出的失败,其实不存在这么多,你总结这么多等于没有总结

    • 比如学业失败,我恰恰觉得还挺成功,自己考研成功,指导自己老婆考研成功,可以做mentor了
    • 比如投资失败,也不怪你,不是因为炒股,而是因为杠杆炒股,只有千分之几的人能够把握,而且体制上也存在问题,国家没有管控好,身边很多70后的中产阶级,财富都被洗劫了,你还年轻这算什么?
    • 比如工作失败,每个人倒过来看,都会错过一些机会,本质上还是价值观的问题,见第二条
  2. 如果说存在的失败,那我觉得还是自我剖析、反思、总结、沉淀的失败
    你说原生家庭的失败,我承认,但是自己后续要能跳出来看,逐步建立起自爱、自信 追求美好的东西(这个美好不是说美貌什么的,而是价值观比较好),经过自己后天学习,深度思考,逐步建立起自己的思想体系

  3. 反复思考第一、第二点,你过去的经历是宝贵的财富


  1. 不要把责任推到别人身上。所有的决定都是自己的,对错都自己扛。
  2. 总结一下自己的优势,看看怎么样勤奋努力,可以增加收入。
  3. 你的主要问题是自卑心过重。其实现在干脆一切都放下,好好找个奋斗方向。

去年我也亏了不少,是你的几倍。不过我之前赚的多,虽然元气大伤所以承受住了。

别的我们没有交集我给予不了你太多建议。

  1. 投机是个长期的工作,而且是门科学,(学习,实践,提高)无限循环下去直到你退出为止。
  2. 你这年龄把目光放到投机上很正常,但是记住投机是从别人手里抢钱的游戏,你要多问问自己,凭什么你能从别人手里抢到钱。

做好自己能做好的一切吧,别想太多了,lz其实已经靠知识改变命运了,从最穷的人变成了在成都买两套房,婚姻失败也不算大事,吃一堑长一智罢了。在成都年入10万不算差了,可能上进心较强,总跟身边更高的人比。

很多事都是命,做出的选择不好跟出身还有自己的资源有很大关系。

其实错误和问题lz自己已经发现了,以后怎么改变也是命。欠30万也不算大事,挺过这个坎儿,后面会逐渐再好起来。

股市就是个买卖,做生意讲的是生行莫入熟行莫出,输钱皆因赢钱起。想尝试新鲜的领域一定要控制成本,不知道怎么面对失败本身就是很大的风险。

阅读全文 »
0%