博客图片的快速处理

经常写微信公众号或博客的朋友,总会面临图片处理的效率问题,找图片或截屏,调整大小,上传,复制粘贴图片地址,让人做得很厌烦。

说说怎么提高效率,找图片和截屏就不提了,而后面三件工作在mac下完全可以用workflow来协助我们完成。

调整图片的大小我是参考了MacTalk 的文章(原文我忘了),基本思路就是复制图像文件到统一目录中,调整图像大小,转换为JPG格式,并可以统一签上前缀名称。这样你就可以上传到微信公众平台,而无需担心图像文件过大影响用户浏览消耗过多的流量。

如果是写博客,我采用七牛云作为图床,使用上传脚本,上传后的结果可以直接 生成markdown格式日志 。同样写一个workflow,将图像文件移到七牛云的上传目录,执行shell脚本即可。(先在/tmp下生成一个qiniu.log文件)

最后上传文件的地址只需要查看/tmp/qiniu.log文件即可,已经修改直接采用了markdown格式。所以你最好采用一个支持markdown的编辑器和博客站点。

attempt to write a readonly database

使用Adminer,一个PHP文件的数据库管理工具管理SQLite时,简单地删除一张表,报错:attempt to write a readonly database。

原因在于Adminer是在Apache中运行,在mac中使用的用户身份是_www用户,就没有写的权限了。所以要修改目录权限让apache可写


$ sudo chown -R _www:staff db
$ sudo chmod -R 775 db

权限如果改成755的话,个人用户就又没有写权限了。当然更好的方式是保留原有权限,只给_www用户新增所需权限:sudo chmod -R +a ‘_www allow read,write,delete,add_file,add_subdirectory,file_inherit,directory_inherit’ #dir#,就打起来复杂点。

升级Yosemite

总是挡不住升级的诱惑,即使总会有这样或那样的问题。在看了MacTalk的文章“OSX Yosemite,焕然一新”后,觉得也差不多,就开始升级了。

备份,下载Yosemite,安装,一切顺利,周五晚上就成功升级到Yosemite了。想想太顺利了,开始折腾应用,然后悲剧就发生了。

升级后,提示有四个应用不兼容Yosemite:

  • Glims
  • SogouIM
  • Trim Enabler
  • Kindle

没当回事,前两个我都不记得是什么了,到时删掉得了。Trim Enabler是为了提升SSD硬盘的读写性能的,针对非苹果原装的SSD,我上次给机器在光驱位装了个SSD之后用了这个软件,于是鬼使神差就把原来老的Trim Enabler应用运行,再Enable一下,提示需要重启生效,然后就悲剧了。机器重启登录后一个大大的停止图标。

再之后查问题,发现这个问题搞起来还是有点复杂,折腾良久无果,最后我还是恢复到了原先的10.9,再重新做了一次升级。等搞明白或者有稳定的解决方案再说。

升级后处理的问题简单整理一下:

  • QQ拼音打字在从候选字列表中选自时经常出错,比如是打“一堆”,暂时用原生的输入法。
  • Homebrew更新后安装MacVim,提示“checking uint32_t is 32 bits… configure: error: WRONG! uint32_t not defined correctly.”错误,参见macvim install failed in 10.10 #33357,需要把XCode升级到6.1。升级后安装成功,再brew linkapps安装到/Applications 即可。

最迫切的就是Google Chrome和Trim Enabler了,暂时先不折腾了。

升级后的体验还得慢慢来,但升级后最想用的iOS协作却发现我的MacBook Pro太老了,都无法支持,呜呜。简单说一下:Yosemite和iOS协作最大的提升就是AirDrop在Mac和iOS设备间的共享、HandOff功能实现应用的无缝切换,不过不幸的是这两个功能都需要蓝牙4.0的支持,而我的MacBook Pro是2011年的,不支持蓝牙4.0。当然也有牛人替换了老设备的蓝牙,实现了黑、白苹果开Handoff教程 - ME294GM3亲测可用

想要知道自己的设备是否支持蓝牙4.0,可以在”About This Mac”点”System report”,查看“Bluetooth”即可。 如果知道自己的设备年限,大致可参考OS X Yosemite 的 Handoff 功能可能不支持所有 Mac,其中说到:

由于Continuity 的 Handoff 功能需要蓝牙4.0才能正常工作,这意味着并不是所有安装 OS X Yosemite 的 Mac 电脑都能用上 Handoff。2011年中期之后的 MacBook Air、2012年中期之后的 MacBook Pro、2012年末的 iMac、2011年中期的 Mac mini 和2013年末的 Mac Pro 才支持蓝牙4.0。

Objective C property



Objective C的属性定义时提供了一堆的修饰符,readonly, readwrite, assign, retain, copy, nonatomic,看代码都糊涂,看了一下《The Objective-C Programming Language》中有关属性定义的章节,节选如下:

Accessor Method Names 存取方法名称> 属性对应的getter, setter默认的方法名称是propertyName和setPropertyName:,比如属性“foo”的存取方法是foo和setFoo:。
>
>
getter=getterName 指定属性的get存取方法名称。对于布尔型值会用is作为get存取方法的前缀。
> setter=setterName 指定属性的set存取方法名称。如果属性是readonly,而指定了setter方法,会得到编译错误。
>
> 使用.是对getter和setter的简便的封装,两者是一致的。
Writablility 读写属性> readwrite: 默认。
>
readonly
>
> 在implementation块中使用@synthesize 自动生成getter/setter存取方法。

Setter Semantics setter方法语义> assign: 默认,表明setter使用简单的赋值,用于标量数据类型,如NSInteger, CGRect,或者不是你拥有的对象,比如delegate。retain和assign在GC模式下是一样的。
> retain:用于对象赋值。前一个值会被发送一个release消息。Mac OS X v10.6以前只针对Objective-C对象类型有效,不能用于Core Foundation对象;但在v10.6以后可以使用attribute关键字标明Core Foundation属性在内存管理上和对象同样对待,比如:
> > @property(retain) attribute((NSObject)) CFDictionaryRef myDictionary;
> > `
>
>
copy:表明对象的拷贝用于赋值,前一个值会被发送一个release消息,拷贝通过调用copy方法实现。只针对对象类型有效,并且必须实现NSCopying协议。
>
> 不同的约束依赖于你是否采用GC:
>
> 如果你没有使用GC,那么对于对象属性你必须严格标明是采用assign,retain或者copy,否则会得到一个编译器警告。(鼓励你想明白到底采用什么方式的内存管理。)
>
如果你使用GC,那么默认情况下不会得到警告,除非属性类是基于NSCopying。

Atomic 原子性> atomic,默认。存取方法在多线程环境中提供更安全的存取。如果使用了retain或copy,而没有表明nonatomic,那么在引用计数的环境中,get存取方法使用锁来保持和释放要返回的值,类似于:
> >
`
> > [_internal lock]; // lock using an object-level lock
> > id result = [[value retain] autorelease];
> > [_internal unlock];
> > return result;
>
> nonatomic,直接返回值,效率更快。
>
> 注意:属性的原子性并不等同于对象是线程安全的。
Manage Ownership> weak
>
strong: default。
>
> 这个要和assign, retain, copy整合在一起看看Objective C的内存管理机制才行。

Mac book Pro升级



虽然用了Tmpdisk将内存虚拟成临时存储,但整体性能还是没有提升,所以最后还是选择对自己的老机器做一次升级,将内存从4G到8G,并在光驱位上安装一个SSD硬盘。

首先确定自己的主机配置情况,我是搞不太清楚的。到Check Your Service and Support Coverage,输入我的序列号:XXXXXXXXXXXX,得到的结果MacBook Pro (13-inch, Early 2011)。然后在如何识别 MacBook Pro 机型中可以看到,“MacBook Pro(13 英寸,2011 年初)MacBookPro8,1 MC724xx/A 13.3”/2.7 i7/2x2GB/500-5400

MC700xx/A 13.3”/2.3 i5/2x2GB/320-5400”,我的机器是i5。

可以看到最大内存是4GBx2 DDR3,也就是只能到8GB,内存的安装和拆卸还是比较简单的,参见如何安装或拆卸内存

比较麻烦的是光驱位安装硬盘,先是选择硬盘,可以在关于本机的system report - system information中看到,Link speed 是6Gb,SATA3 的接口,选择了Toshiba的2.5 SATA3 128G

拆机安装前重点参考了两篇文章:

一是自行 DIY 打造 Fusion Drive 雙碟合一環境! 二是MacBook Pro 升级 SSD 全流程图解

我采用的也是Fusion Drive模式,把两个硬盘混搭,懒得自己去分别管理两个不同的硬盘。

安装基本还算顺利,注意的点是,卸下光驱的时候,在光驱左上角还有一颗隐藏的螺丝,不要硬拔。还有在安装完成后,使用Trim Enabler打开SSD硬盘的TRIM功能,以起到保护作用。

最后可以采用Disk Speed Test做一次磁盘读写的测试。这两天使用速度不错,感觉挺好。

没钱买SSD的人可以用内存做临时存储



在知乎上看到一个问题程序员如何优雅地使用 Mac?的回答,里面提到了一个mac上的工具TmpDisk,开源的内存磁盘管理工具,用来将你的内存虚拟成硬盘,加速文件的读写,缺点当然是关机或弹出磁盘文件就丢失了。不过这个貌似也看成是优点,你都不需要去考虑清理文件。

立即下载安装,设置好后,将我常用的下载目录(包括邮件附件)设置到该虚拟硬盘上,体验果然飞快啊。其实大多数邮件的附件下载下来并不需要长期保存,只要当时快速处理即可。这样只需要每天关机前将需要保存的文件转移到硬盘即可(刚好是一次整理过程),其他自动删除,爽。

没钱买SSD的人有福了,不过速度越快,心倒是更痒了。

spotlight搜索不到明明存在的文件



刚想找个几个月前的文件,文件名也不记得了,先到gmail搜索邮件,然后把找到的文件名贴到spotlight,满心想可以立马得到搜索结果了。神奇的是居然啥结果也没有,难道都被我删除了,不应该啊!

无奈只好到目录层级中一级级地找,找了4级才找到。不过这就奇怪了,明明文件存在,为啥spotlight找不到呢?这都是半年没更新的文件了,何况也没提示索引更新啊?google了一下,貌似spotlight也存在工作不正常的时候,于是重新re-index,操作方法是在System Preferences中选择Spotlight,在Privacy中增加失效的目录到阻止索引的清单中,完成后确认,再在Privacy中删除该目录,这样目录中的文件就会被重新索引了。

在Spotlight中再输入文件名,搜索正常。

BTW. Spotlight中找到文件后,输入Command+Enter,可以直接打开文件所在目录,还是挺方便的。

在mac lion 设置802.1X使用证书连接有线网络



之前在知乎上提过一个问题“在mac lion 设置802.1X如何使用证书连接有线网络”,后来自己解决了,也是自问自答。

不过当时描述的比较简单,有朋友问起,都忘了,再重新整理一下。

先是得下载工具iphone configuration utility,安装后运行。

1. 点击“Configuration Profiles”,New一个,在General中填写Name, Identifer,界面如图:
config1

2. 在Credentials中,选择Configure,会提示选择证书,找到管理员提供的证书后继续,填写证书密码。
config2

3. 在Wi-Fi 中,选择Configure,我们如果是连有线网络的认证,可以随便输入SSID,选择Security Type,这个要看你的有线网络认证类型了,我选择WPA/WPA2 Enterprise,会出来相应的协议和验证要填写,如图:
config3

4. 还是在在Wi-Fi 中,勾选完协议后,再选择”Authentication”,你需要在Identity Certificate中选择之前设置的证书。

5. 至此iphone configuration utility中设置完成,点击Export导出为.mobileconfig文件。

6. 双击倒出的.mobileconfig文件,会提示我们导入user profile,此时按提示操作,最后点击Install即可。

7. 成功导入后,在System Preferences中,你应该看到一个新的图标Profiles在System下,点击Profiles可以查看导入的信息。
config4

8. 在System Preferences中,点击Network,选择Ethernet,点击Advance,tab选项中就会看到有802.1X,里面就有会有新增的配置profile。图上显示的profile名称和前面的设置不同,主要是我前面的截图是为了示例新建的,后面并没有实际导入。
config5

9. 插入网线,应该会做验证,你也可以在Ethernet中,连接802.1X。

大致就是这样了,希望能有所帮助。

碰上一个关不掉的文档

朋友发过来一个office word文档,能正常打开,但每次关闭后Word就崩溃了。

Microsoft Error Reporting

可恼的是不论我是否选择“Recover my work and restart Microsoft Word”,重启word后这个文档就又打开了,导致我就不断地关闭文档,word崩溃,再打开。陷入死循环了。

后来用了最土的一招,把文档的内容全部删除再保存,关闭时总算不崩了,吐血。

PS. 现在关闭还是不行,但不选择“Recover my work and restart Microsoft Word”重启Word,也不会打开那个该死的文档了。

PS2. 大概windows office是否又升新版本了,现在老碰上文档的兼容性问题。

关于pow的使用



pow 一个小工具,在Mac下使用rack开发时方便采用域名来访问,而无需localhost:xxxx。安装和使用都很简单。

安装:

$ curl get.pow.cx | sh `
使用:在~/.pow目录中创建到rack应用的符号链接,然后访问域名http://myapp.dev 即可。
`
$ cd ~/.pow
$ ln -s ~/Projects/myapp

可以查看服务进程是否启动:$ ps -ef|grep pow 如果需要重启服务进程 $ touch ~/.pow/restart.txt
* 查看日志 $ tail -f ~/Library/Logs/Pow/access.log

使用时碰到一个问题,安装后访问http://myapp.dev 没有任何反应,查了以为是.dev resolver doesn’t “register” properly ,结果是自己给chrome设置了翻墙代理。