分类目录归档:coding

mbp瘦身记

因为穷,mbp买的120g ssd的,最近饱受硬盘空间不足之苦,导致我把office套件都删除了,然后adobe套件都不敢安装,下载稍微大点的电影都无法。像系统自动更新都没办法进行,还有就是要更新xcode也只能重新安装。

前几天使用daisydisk试用版发现好些隐藏的大文件,比如brew的cellar下多个版本的mongo,还有xcode下都历史版本模拟器,还有工作目录下的.git记录,还有就是sts的.ecplise目录下的初始化包,都积攒了快3年(17年初换的电脑),清理了一二十个G空间把word,PowerPoint给安装好了,顺便安装了个PhotoShop,还剩余差不多个10来个G空间,美滋滋。

昨天就晚上发现不对劲,怎么空间在不断变小,系统自动更新我早都关了,我还以为是apple自动在后台下载更新,没辙,我只好拿出移动硬盘,本来想重新安装这些大应用比如office到移动硬盘,发现不行,硬盘上没有macOS,那我就安装个mojave吧,因为这个盘早安装过10.13的,只不过之前因为没用就给删掉了,结果没想到10.14安装是如此的麻烦,镜像都没地下载,放弃了,干脆把xcode,office,ps都直接从Applications目录下拖到移动硬盘上,一样能正常使用。腾完后剩余15个G空间,到我去睡觉发现只有12个G了,我还想是不是自动更新,电脑开一晚上是不是就正常了。

结果早上就不到10个G了,也没更新系统。感觉有点诡异,开始用du -hd1命令进行深度遍历,这个命令等同于linux下du -h –max-depth=1。发现在/usr/local/下有两个mysql,一个mysql目录,还有个mysql-8.0.11-macos10.13-x86_64目录,ls -la后发现第二个目录下data有26个G,而且还在实时更新,另外发现 mysql -u root -p也无法登陆本地mysql,估计这个坏掉了,而且mysql也不是系统必须,不知道哪个应用干的,直接rm -rf把两个mysql给删掉了,再去相应的

  • /Library/StartupItems/MySQLCOM
  • /Library/PreferencePanes/My*
  • /Library/Receipts/MySQL*
  • /var/db/receipts/com.mysql.*

这几个地方把相关的全给删除掉,系统就有40来个G空间了,当然大应用都在移动硬盘上,晚点在重新安装mysql。

终于不用担心空间问题了,另外下次更新电脑,最次也得256G SSD,否则太难受了,手机也是。

]]>

乱码,原来是虚惊一场

整个数据库全部乱码,首页都是韩文,刚刚升级到php7也是一样,很诡异,登陆到mariaDB命令行查看wp_posts数据也是中文乱码,发布一篇新文章试试。

更新:

测试发现新写的日志没问题,然后到mysql -u root -p登陆数据库去查看表,显示前面几条都是乱码, 用 SHOW VARIABLES LIKE ‘character%’ 查看字符集都是latin1,进入/etc/my.cnf.d/去修改client.cnf和server.cnf两个文件,systemctl restart mariadb.service重启数据库,还是乱码。

接着我先将文章的韩文复制了去翻译,发现是能翻译的通顺的正常文章,只不过和我的日志没半毛钱关系,不是乱码,然后我再进去wp后台,往最后一页翻,发现正常,再翻第二页,恍然大悟,原来所有文章都在,只不过估计是密码被破解了,有人给我增加了30多篇韩文文章,我现将文章删除,接着SET password for ‘root’@’localhost’=password(‘newpassword’)去mariadb终端修改密码,再修改wp后台登陆密码,然后重启mariadb,httpd两个服务,一切正常了。之前还让我有点小紧张,以为都没了,结果虚惊一场。

附带升级php7命令:

yum list installed | grep php 查看安装的php版本

yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 添加php7源

yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64

yum install php70w-fpm

systemctl enable php-fpm.service 开机启动

]]>

Go语言学习笔记

  • Goroutines are extremely cheap when compared to threads. They are only a few kb in stack size and the stack can grow and shrink according to needs of the application whereas in the case of threads the stack size has to be specified and is fixed.
  • The Goroutines are multiplexed to fewer number of OS threads. There might be only one thread in a program with thousands of Goroutines. If any Goroutine in that thread blocks say waiting for user input, then another OS thread is created and the remaining Goroutines are moved to the new OS thread. All these are taken care by the runtime and we as programmers are abstracted from these intricate details and are given a clean API to work with concurrency.
  • Goroutines communicate using channels. Channels by design prevent race conditions from happening when accessing shared memory using Goroutines. Channels can be thought of as a pipe using which Goroutines communicate. We will discuss channels in detail in the next tutorial.
对于channel,就是读取写入阻塞的队列。select就是多个阻塞队列任意又一个不再阻塞,select就会被执行。mutex就是互斥,和channel搭配使用。
f() //普通阻塞方法
go f() //创建一个新的goroutine然后执行该方法
ch := make(chan int) // 可以写入读写int类型的channel ch <- x //写入 ch = <-ch //读取 <-ch //读取并直接舍弃 func hello(done chan bool) { fmt.Println("Hello world goroutine") done <- true } func main() { done := make(chan bool) go hello(done) <-done fmt.Println("main function") }
defer 表示延迟方法延迟到return之前最后执行,不过如果是defer stack(defer列表),按照last in first out原则。自定义error,使用struct+interface即可。panic主要是用于抛出异常,recover则是捕获这个异常并进行处理,两者必须在同一goroutine中,如果defer a()中加个recover方法,recover方法必须使用defer调用,否则无法捕获,然后 go b()中抛出一个panic,这是无法捕获的,此刻程序就会终止掉。class function则是很像iOS中的block。reflection以为着我们能在运行时获取一个struct的所有变量的type,value。这是高级语言的特性,java,iOS都有这块,不过iOS是要基于runtime获取,java的反射则是spring的基础。 学完了教程,感觉go这块用在后台开发实现高性能是很容易。]]>

静态lib使用注意事项

最近做的项目用了一个三方包,纯C++的,打包成的静态文件,这种包需要注意的地方在于需要引入libstdc++库,然后还需要在build settings中将Language C++中的C++ Standard Library修改为libstdc++(GNU C++ standard)。 另外的就是基本规则,使用的地方将后缀名修改为mm。 几个常用的命令 lipo -info your.a 查看lib支持的架构. lipo create i386.a arm64.a -output universal.a 将多个lib合并为一个通用lib,方便调试,当然上架肯定得用最小的lib了。

]]>