-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcontent.json
More file actions
1 lines (1 loc) · 71.8 KB
/
content.json
File metadata and controls
1 lines (1 loc) · 71.8 KB
1
{"posts":[{"title":"一个码农的Mac配置","text":"我常用的一些Mac工具 iTerm2 一个增强的命令终端 SourceTree git代码控制工具 WunderList 一个出色的Todo工具,提供云同步,我把它当做我的任务列表 TextMate2 号称”The Missing Editor for Mac OS X” SublimeText2 另一个特别出色的Editor Alfred Option+Space,唤出,提高你打开软件的效率,购买Powerpack还可以使用很多强大的拓展 iFunBox 管理你的苹果设备的文件,可以不通过iTunes直接把文件放到程序的Documents下面 坚果云 国内一个特别出色的网盘,可以右键添加要同步的文件 Evernote 这个大家都懂的 XtraFinder 为你的Finder增加Tab,剪切等功能 shortcat键盘快捷键,写啥点啥,怒赞 Chameleon 打开第三方SSD的trim Agenda itsycal 不错的菜单栏日历 Sublime Merge Sublime Text出品的Git客户端 Netbeans 8 使用PlantUML插件用它来画UML iThoughtsX(Paid) Mindmap工具 ForkLift2 目前AppStore版本免费,强大功能齐全的FTP工具 shortcat快捷键12cmd+shift+space唤醒输入关键词后,如果匹配了多个,使用control+字母去点击相应的匹配 安装HomeBrewHomebrew是一个管理Mac拓展的工具,他可以很方便的安装你所需要的软件,以及软件的一些依赖包 比如安装mysql,你只需要 1brew install mysql Homebrew 安装特别简单,只需要键入 1ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" 相关的文档可以到官方去查看http://mxcl.github.io/homebrew/ 安装oh-my-ZshZsh是Mac上面的一个命令行增强工具,他提供了关键字高亮,命令补全,以及一些命令的拓展, 安装步骤 123456789101112curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh#备份你的.zshrc文件cp ~/.zshrc ~/.zshrc.orig#创建zsh配置cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc#设置zsh为你的默认shellchsh -s /bin/zsh#重启终端就会生效 这里还有一些主题https://github.com/robbyrussell/oh-my-zsh/wiki/themes 如果你要修改zsh的默认主题 123vi ~/.zshrc修改ZSH_THEME为你喜欢的主题名即可 如果不想继续使用,可以使用以下命令卸载 1uninstall_oh_my_zsh","link":"/2013/04/10/build-your-mac-os/"},{"title":"生成 github SSH keys","text":"本文主要来自github官方,Generating SSH Keys 12345cd ~/.sshssh-keygen -t rsa -C "your_email@example.com" 下面的步骤可以只敲回车进行确认即可 1234567891011121314151617181920212223242526272829Creates a new ssh key using the provided emailGenerating public/private rsa key pair.#这里直接回车就会生成一个默认名为id_rsaEnter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]#这里需要你输入一个你加密的key(一定要记住)Enter passphrase (empty for no passphrase): [Type a passphrase]Enter same passphrase again: [Type passphrase again]Your identification has been saved in /Users/welsonla/.ssh/id_rsa.Your public key has been saved in /Users/welsonla/.ssh/id_rsa.pub.The key fingerprint is:30:e8:aa:08:ee:bc:76:88:2c:3f:83:39:b0:6e:95:cc wyc.jar@gmail.comThe key's randomart image is:+--[ RSA 2048]----+| || . || . o || . o || o o S ||. E ||=++ ||%*o. ||OO+o |+-----------------+ 看到这个界面说明生成成功 copy加密字符到剪切板 1pbcopy < ~/.ssh/id_rsa.pub 打开你的github 12345671. 点击 Account Settings2. 点击左侧 "SSH Keys" 3. 点击 "Add SSH key"4. 粘贴你的可以到 "Key" 输入框5. 点击 "Add key"6. 输入你的github密码确认","link":"/2013/04/10/generate-github-ssh-keys/"},{"title":"Cocoapods 使用","text":"1gem install cocoapods cd到你的项目的根目录,就是跟project文件同级,建立Podfile文件 1touch Podfile 加入平台版本,(5.1可以省略,但是最好在podfile中加入,因为一些ARC相关的类库不加的话,会提示错误) 1platform :ios,'9.0' 搜索第三方的oc库 1234567pod search fmdb-> FMDB (2.0) A Cocoa / Objective-C wrapper around SQLite. - Homepage: https://github.com/ccgus/fmdb - Source: https://github.com/ccgus/fmdb.git - Versions: 2.0, 1.5.1, 1.5 [master repo] 通过搜索,我们已经找到了该类库的版本的名字,只需要将这些内容加入到podfile文件中即可 12platform :ios, '5.1'Pod 'FMDB','2.0' 然后执行下面的命令,将这些类库加到到本地 1pod install 修复Cocoapods,重置repo123pod repo remove masterpod repo add master https://github.com/CocoaPods/Specs.gitpod repo update 减少更新安装的时间,只安装或更新必要的库12pod install --verbose --no-repo-updatepod update --verbose --no-repo-update 之后将会生成一个workspace文件,以后我们打开项目的时候,就打开workspace文件即可,项目和其所需要的类库都以sub project的方式加到了这个workspace下面","link":"/2013/04/10/use-cocoapods/"},{"title":"使用RVM安装ruby","text":"今天突然发现ruby版本不小心又回到了1.8.7,可能是我修改了rvm的配置文件导致的,于是开始折腾安装rvm和ruby 首先还是先安装Homebrew吧很简单,一行代码搞定 1ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" 安装RVM 1curl -L https://get.rvm.io | bash -s stable --ruby 走着走着发现出错了 123456Missing required packages: autoconf, automake, libtool, pkg-config, libyaml, readline, libxml2, libxslt, libksba, openssl, sqlite.RVM autolibs is now configured with mode '2' => 'check and stop if missing',please run `rvm autolibs enable` to let RVM do it's job or run and read `rvm autolibs [help]`or visit https://rvm.io/rvm/autolibs for more information.There were package installation errors, make sure to read the log.Check Homebrew requirements https://github.com/mxcl/homebrew/wiki/Installation 透过错误信息,发现缺少一写依赖的包,和rvm的autolibs没打开,这时候我们就通过Homebrew先安装上(具体你要看清楚你缺少的是什么) 123rvm autolibs enablervm reloadbrew install autoconf automake libtool pkg-config libyaml readline libxml2 libxslt libksba openssl sqlite 漫长的等带后,依赖包终于装完了再次安装RVM 1curl -L https://get.rvm.io | bash -s stable --ruby 就会安装成功,你可以rvm -v查看下版本 安装并设置1.9.3为你的默认版本 123rvm install 1.9.3rvm use 1.9.3rvm rubygems latest Finish","link":"/2013/04/10/use-rvm-install-ruby/"},{"title":"blog with github(1)-前期准备","text":"##开始之前 安装Git 使用rbenv或者RVM安装ruby 1.9.3 安装完后确保你的ruby版本是1.9.3 1ruby -v ##设置Octopress 12git clone git://github.com/imathis/octopress.git octopresscd octopress 接下来安装一些依赖 123gem install bundlerrbenv rehash bundle install 安装Octopress默认主题 1rake install –未完待续,哥去睡觉","link":"/2013/05/10/blog-with-github/"},{"title":"different of class and category","text":"当需要重写父类中的方法时,这时候定义子类 123456789101112131415161718192021@interface JADanSideController : JASidePanelController@end@implementation JADanSideController- (UIBarButtonItem *)leftButtonForCenterPanel{ UIButton *leftBarButton = [UIButton buttonWithType:UIButtonTypeCustom]; [leftBarButton setFrame:CGRectMake(0, 0, 44, 30)]; [leftBarButton setBackgroundImage:[UIImage imageNamed:@"List_NaviSide.png"] forState:UIControlStateNormal]; [leftBarButton addTarget:self action:@selector(toggleLeftPanel:) forControlEvents:UIControlEventTouchUpInside]; __autoreleasing UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarButton]; return leftBarButtonItem;}@end 当需要为父类添加方法时,这时候定义类别 123456@interface JADanSideController : JASidePanelController- (void)setBackGroundColor;@end","link":"/2013/05/10/different-of-class-and-category/"},{"title":"blog with github(2)-部署到github","text":"###使用github pages 如果想使用 http://username.github.io 的域名作为你的blog地址的话,首先要创建一个仓库,名字为你的用户id.github.io(比如我的是welsonla.github.io) 用户使用的是Github Pages的master版本下面的public作为你的网站主目录,你可以通过浏览http://username.github.io 来查看。如果你想在source这个版本上面维护代码,并且把内容提交到master分支,Octopress有一个命令来帮助你完成这些 1rake setup_github_pages 然后,他将 询问你的github pages的url 将远程的重‘origin’重命名为‘octopress’ 在远程的origin讲你的github pages仓库添加进去 切换当前branch从master切换到source 根据你的仓库名,重新配置你的blog地址 在_deploy目录下面设置master分支,用于部署 接下来执行 123rake generaterake deploy 这将生成你的blog,并将生成的文件copy到_deploy目录下面,并添加到git,将他们commit和push到master分支上面,稍后,你会收到一份来自github的email告诉你,你的提交已经收到,并且很快将发不到你的web上面 并且,不要忘记提交你的代码到source分支 123git add .git commit -m 'your message'git push origin source ####自定义域名绑定 首先你要source目录下面创建一个CNAME, 1echo 'your-domain.com' >> source/CNAME 之后去你的域名服务商或者你的dns服务商那里创建一条CNAME记录,记录指向的IP为(不要使用顶级域名指向到pages,要使用二级域名) 1207.97.227.245","link":"/2013/06/03/blog-with-github-2/"},{"title":"blog with github(3)-Octopress配置","text":"Octopress的配置相当的简单,并且一般配置完成后,你不需要再对Rakefile和_config文件进行修改,下面这些是Octopress的配置文件 12345_config.yml # Main config (Jekyll's settings)Rakefile # Configs for deploymentconfig.rb # Compass configconfig.ru # Rack config Rakefile大多是与部署相关的配置,如果不需要同步的话,你就不需要进行修改 ####Blog配置 _config.yml有三部分配置,你必须修改url,并且title,subtitle和author也要修改,还有一些第三方的服务需要启用 #####主配置 1234567891011url: # For rewriting urls for RSS, etctitle: # Used in the header and title tagssubtitle: # A description used in the headerauthor: # Your name, for RSS, Copyright, Metadatasimple_search: # Search engine for simple site searchdescription: # A default meta description for your sitedate_format: # Format dates using Ruby's date strftime syntaxsubscribe_rss: # Url for your blog's feed, defauts to /atom.xmlsubscribe_email: # Url to subscribe by email (service required)category_feeds: # Enable per category RSS feeds (defaults to false in 2.1)email: # Email address for the RSS feed if you want it. #####Jekyll&Plugins 1234567891011121314151617root: # Mapping for relative urls (default: /)permalink: # Permalink structure for blog postssource: # Directory for site source filesdestination: # Directory for generated site filesplugins: # Directory for Jekyll pluginscode_dir: # Directory for code snippets (for include_code plugin)category_dir: # Directory for generated blog category pagespygments: # Toggle python pygments syntax highlightingpaginate: # Posts per page on the blog indexpagination_dir: # Directory base for pagination URLs eg. /blog/page/2/recent_posts: # Number of recent posts to appear in the sidebardefault_asides: # Configure what shows up in the sidebar and in what orderblog_index_asides: # Optional sidebar config for blog index pagepost_asides: # Optional sidebar config for post layoutpage_asides: # Optional sidebar config for page layout #####第三方配置 123456789Github - List your github repositories in the sidebarTwitter - Setup a sidebar twitter feed, follow button, and tweet button (for sharing posts and pages).Google Plus One - Setup sharing for posts and pages on Google’s plus one network.Pinboard - Share your recent Pinboard bookmarks in the sidebar.Delicious - Share your recent Delicious bookmarks in the sidebar.Disqus Comments - Add your disqus short name to enable disqus comments on your site.Google Analytics - Add your tracking id to enable Google Analytics tracking for your site.Facebook - Add a Facebook like button","link":"/2013/06/03/blog-with-github-3/"},{"title":"blog with github(4)-开始写吧,骚年","text":"Octopress提供很多的Rake任务去创建post和pages,他还会根据你的posts来生成Category,你可以在atom.xml或者blog/categories/<category>/atom.xml中找到这些内容 ####Post 这些Post页面必须存放在Source/_posts目录下面,并且命名方式和jekyll的命名方式一样,会转换成YYYY-MM-DD-Post-title.markdown,这个文件的名字就是你的blog的url slug,日期帮助你排序这些文章 1rake new_post["Title"] 在使用了ZSH的话,你要这样创建 1rake new_post或者rake new_post[\\"Title\\"] 例如 12rake new_post["Zombie Ninjas Attack: A survivor's retrospective"] Creates source/_posts/2011-07-03-zombie-ninjas-attack-a-survivors-retrospective.markdown or 1234~/Code/rails/octopress(branch:source) » rake new_post Enter a title for your post: blog-with-github-4mkdir -p source/_postsCreating new post: source/_posts/2013-06-03-blog-with-github-4.markdown 生成的内容大致如下 12345678---layout: posttitle: "Zombie Ninjas Attack: A survivor's retrospective"date: 2011-07-03 5:59comments: trueexternal-url:categories:--- 你可以关闭comments,或者为他添加categories的tag,并且你还可以添加author: Your Name与published: false来控制是否发布 ####Page 生成Page的命令 1234rake new_page[super-awesome]# creates /source/super-awesome/index.markdownrake new_page[super-awesome/page.html] 如果使用了zsh的话,方法要参照post的创建方式 生成的pages的默认内如大致如下 12345678---layout: pagetitle: "Super Awesome"date: 2011-07-03 5:59comments: truesharing: truefooter: true--- ####Content 如果列表中不想显示全文内容的话,可以添加<!-- more -->标签,这将在文章下面生成一个“Continue →” 链接,链接到全文的地址 ###Generate & Preview 123rake generate # Generates posts and pages into the public directoryrake watch # Watches source/ and sass/ for changes and regeneratesrake preview # Watches, and mounts a webserver at http://localhost:4000 本地使用http://localhost:4000就可以访问了","link":"/2013/06/03/blog-with-github-4/"},{"title":"git笔记","text":"一些全局配置123456git config --global push.default matchinggit config --global color.status autogit config --global color.diff autogit config --global color.branch autogit config --global color.interactive auto 添加所有新文件1git add . 从版本中去除一个文件1git rm test.html.rb 假设有很多新文件和删除了好多文件1git add -A 获取所有远程版本1git fetch 创建并切换到新分支1git checkout -b newbranch 切换到分支1git checkout master 迁移原有git项目到新得项目地址1git remote set-url origin git@git.github.com:welsonla/studio.git 查看当前git分支1git branch -r 查看git log1git log 查看当前tag1git tag 创建一个新的tag1git tag v1.1 降当前tag推送到服务器1234git push origin --tags推送单个git push origin v1.1 将现有svn项目转换成git项目,并保留所有commit log1git svn clone [SVN-Path] 回滚123#http://stackoverflow.com/questions/1338728/delete-commits-from-a-branch-in-gitgit reset --hard commitidgit push --force ignore.gitignore 新文件使用正则匹配12*.file_extension.idea/* remove exist files(现有文件需要软删除)123git rm -r --cached . //soft deletegit add .git commit -m 'remove ignore files'","link":"/2013/06/25/git-note/"},{"title":"vim-note","text":"####移动到行首 10 ####移动到行尾 1$ ####剪切多行 123v向下移动d ####粘贴 1P ####在nerdTree光标处新建一个文件 1m ####删除多行(数字+dd) 15dd #删除5行 ####多行注释 1234561.ESC+v2.方向键向下或者向上选中多行3.Control+v4.Shift+i5.#6.Esc,Esc","link":"/2013/07/06/vim-note/"},{"title":"generate new host RSA key","text":"最近oschina的git服务器进行了迁移,导致了原有的git项目push不上去,总是提示 1234567891011121314@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@The RSA host key for git.oschina.net has changed,and the key for the corresponding IP address 112.124.6.106is unknown. This could either mean thatDNS SPOOFING is happening or the IP address for the hostand its host key have changed at the same time.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!Someone could be eavesdropping on you right now (man-in-the-middle attack)!It is also possible that a host key has just been changed. 第一个问题非常简单,就是修改/etc/hosts,添加一个IP与域名的对应关系即可 第二个是要求你更新know_host中的RSA key,执行如下命令即可 1ssh-keygen -R git.oschina.net 1cat /.ssh/known_hosts 查看known_host中的数据可以看到key已经更新了","link":"/2013/08/06/generate-new-host-rsa-key/"},{"title":"encrypt sqlite with sqlcipher","text":"##Get the sqlcipher SourceCode 123#使用2.1的版本比较稳定些https://github.com/welsonla/sqlcipher/archive/v2.1.1.tar.gz ##Complite the source code动态链接的编译方法(Compiling with dynamic linking)[推荐]: 123./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto" make ln -s /Users/wanyc/sqlcipher/sqlite3 /usr/bin/sqlcipher 静态库的编译方法: (replace /path/to with the path to libcrypto.a) 12#./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="/path/to/libcrypto.a"#make ##How to encrypt a sqlite(In Shell) #加密数据库几种方式 ####1.shell方式加密一个sqlite 12sqlcipher test.db> PRAGMA key='test'; //必须在打开数据库第一步来执行 ####2.(In shell) 12345sqlciper test.dbPRAGMA KEY='helloworld';#第一步必须执行ATTACH DATABASE 'encrypted.db' as encrypted KEY 'SomePassword'; //encrypted.db是要导出的新的数据库SELECT sqlcipher_export('encrypted');DETACH DATABASE encrypted; #####3..Object-c代码实现对一个非加密库导入到加密库的方法(已经验证)(Xcode) 12345678910111213141516171819202122NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];NSString *attachPath = [documentPath stringByAppendingPathComponent:@"new.db"];if (sqlite3_open([path_u UTF8String], &convert_DB) == SQLITE_OK) { NSString *sql = [NSString stringWithFormat:@"ATTACH DATABASE '%@' AS encrypted KEY '1234';",attachPath]; //执行Attach操作 sqlite3_exec(convert_DB, [sql UTF8String] , NULL, NULL, NULL); // 导出数据库 sqlite3_exec(convert_DB, "SELECT sqlcipher_export('encrypted');", NULL, NULL, NULL); // 执行分离 sqlite3_exec(convert_DB, "DETACH DATABASE encrypted;", NULL, NULL, NULL); NSLog (@"End database copying at %@",[NSDate date]); sqlite3_close(convert_DB);}else { sqlite3_close(convert_DB); NSAssert1(NO, @"Failed to open database with message '%s'.", sqlite3_errmsg(convert_DB));} #为加密数据库解密####1.先导出现有库的数据(In shell) 123sqlcipher plaintext.db.output dsa.sql.dump ####将新的数据库导出,并加密,之后导入非加密的库里面的数据 123sqlcipher another.dbPRAGMA key='aaa';.read dsa.sql ####2. 为加密后的sqlite执行解密(其实步骤与加密一样,只要把key设置为空就实现了不加密) 123ATTACH DATABASE 'encrypted.db' as encrypted KEY ''; //encrypted.db是要导出的新的数据库SELECT sqlcipher_export('encrypted');DETACH DATABASE encrypted; ####3.(In shell) 12345sqlciper test.dbPRAGMA KEY='helloworld';#第一步必须执行ATTACH DATABASE 'encrypted.db' as encrypted KEY '';SELECT sqlcipher_export('encrypted');DETACH DATABASE encrypted; ##参考 sqlcipher配置 http://sqlcipher.net/ios-tutorial/ sqlcipher API http://sqlcipher.net/sqlcipher-api/ sqlcipher 使用 http://jordy.easymorse.com/?p=970 Mac SQLCipher导出工具 https://github.com/welsonla/SQLCipherExport","link":"/2013/08/13/encrypt-sqlite-with-sqlcipher/"},{"title":"我的2013","text":"####作品 对晴天进行了两次更新; 和小伙伴们一起做了一个密码管理的软件passbox 写了一个对SQLCipher加密数据库转换的Mac程序 ####读书 《打造Facebook》 《MacTack人生元编程》 《写给程序员的Web设计书》 《写给大家看的Web设计书》 《淘宝技术这十年》 《苹果开发之Cocoa编程》 《代码整洁之道》 ####健康12年有一阵子住院,13年特别注意锻炼身体,9月份每天和几个朋友去紫竹院跑步运动。强度不是很大,天气渐冷,入冬,雾霾跟严寒,使运动停止。 13年身体并没有什么大碍,感谢 ####技术感觉自己这一年的技术,进步不大,惭愧。在用户体验跟交互方面,倒是有了一些自己的心得。对Mac的编程有了越来越浓厚的兴趣。 ####济南从十月份,陆续跟女朋友在济南看了几套房子。主要参考的房子是90平米以上可以落户的房子,现在我女人已经开始考虑学区的问题了,经十路沿线现在也越来越多的高楼在崛起,房价也在逐渐的攀高,房价是每个年轻人心里的痛。 ####2014 多读书 更多的iOS上的作品 更多的Mac应用 深入Object-c,并继续强化Ruby on Rails 锻炼身体 从AppStore赚多一点钱 与几个朋友的小工作室,希望我们能成为TapBot 换新工作 买房结婚(房子已买)","link":"/2014/01/02/my-2013/"},{"title":"你的Mac慢了么","text":"本子是MC700,已经陪伴我coding了三年,中间升级了内存,硬盘加了SSD,但是自从电池坏掉以后,我拆掉了电池,接电使用,发现越来越卡,经历了三个月左右的煎熬,我的mac终于又重新焕发了青春,说说遇到的问题 必须安装电池,电池坏掉的话,赶紧买新的装上,否则你的macbook会降频运行 这就是为什么我是SSD硬盘,依然感觉慢的要死的原因,之前电池坏了,本想着拆下来,裸奔运行,后来就发现本子卡的不行.检测你的macbook是否在降频运行,可以使用这个小工具Intel(R) Power Gadget 使用时间长,本子会发热,你会发现kenerl_task这个进程占用的CPU特别大,试着用一些软件为mac降温 推荐Macs Fan Control ,能固定风扇的转速,防止温度飙的很高 如果是自己加装的SSD,默认trim是不打开的,需要自己使用打开 推荐一个小工具trim enables 如果你是geek,也可以使用命令行打开trim,打开后需要重启你的电脑,看看这个gist上trim_enabler.sh","link":"/2014/04/12/why-my-mac-so-slow/"},{"title":"Learn core animation the hard way","text":"###Document CABasicAnimation Keypath Animation Types and Timing Programming Guide CGAffineTransform Quartz 2D Programming Guide 放射变换 组合动画 http://www.cnblogs.com/v2m_/archive/2013/05/09/3070187.html 几个常用动画代码","link":"/2014/05/11/learn-core-animation-the-hard-way/"},{"title":"Instruments无法启动","text":"最近在iOS7的系统上使用Instrument想检查内存的leaks,启动时候总是提示失败,花了些时间,解决了这个问题,做下笔记。 ##issue 12345Error Starting RecordingAt least one target failed to launch; aborting runTarget failed to run. Permisson to debug [app name] was denied. The app must be signed with a development identity (i.e. iOS Developer) ##fix 1Product-->Scheme-->Edit Scheme,将Profile那栏中的Build Configuration将Release改为Debug ##issue1.如果发现leaks视图无法监控到任何的内存泄露,说明你开启了Zombie,将Scheme菜单中的Enable Zombie Objects勾去就可以了2.检查你是否启用了环境变量,变量中是否开启了zombie设置","link":"/2014/07/14/instrument-start-fail/"},{"title":"Xcode5 install command line tools","text":"之前遇到过,一直没做笔记,导致每次都要现查 1xcode-select --install","link":"/2014/07/14/xcode5-install-command-line-tools/"},{"title":"Mac Mini开箱","text":"###背景从3月份换了新工作,就一直在使用自己的电脑,每天背着上下班,后来自己又买了显示器和新的机械键盘。想想这时候如果上Mac mini的话,外设都已经齐全了。一直在等9月份的Mini新版,无奈对新版确实有些失望,一直摇摆不定,恰巧双十一的前一天,发现京东的MD387已经降价到了3588,果断决定入手了。 ###开箱11.11日下午收到了京东的货,用的京东白条,可以到12.10日进行还款,这个给京东点赞  ####正面照 ####背后有丰富的插口,再也不用担心USB口不够用了 ####配件是有一个HDMI转DVI的口 ###升级如果要换内存的话,是不用拧一颗螺丝的,旋转后壳,就能取下底部的壳,内部结构太美了 ###使用#####显示特别模糊 当我接上显示器的那一刻,我感觉眼睛都要瞎了,一定是我打开方式不对,屏幕为什么这么模糊,后来上网搜了一下,很多人都有这个问题。有人说线的问题,我换了几条线,显示效果都是一样糟糕后来终于找到了问题,并且感谢大神给的解决方案。Mac OSX 顯示模糊問題,完全解決辦法 12345mac的電腦如果搭配自家螢幕可能不會有這問題,不過如果不是用Apple的螢幕,然後又是跟我一樣是用HDMI輸出的話,那畫面就一定很難好了, 我把这个脚本放到了gist上面,你复制保存到本地,命名为patch-edid.rb将这个patch放到你的文档下,然后运行,会生成一套显示器配置 1ruby patch-edid.rb 将这套配置,放到系统/System/Library/Displays/Overrides,重启后就会生效了。 #####打开trim,支持10.10鉴于网上脚本众多,而trim enabler又让很多电脑出现了问题,现在终于发现一款10.10下完美的打开Trim的工具(free) Chameleon ###总结使用中,将MC700上的8G内存换到了Mini上面,现在的配置是 121. Mac Mini : DDR3 1333 8G2. MC700 : 4G DDR3 1600, Sandisk SSD 128 由于近期开销比较大,这样对两台机器进行了一个互补,发现都还可以进行正常的开发,但Mini还是要比我的MC700要快很多,不知道这台MC700还能陪伴我多久。 感谢老婆,让我这次败家,有了一个一直以来梦寐以求的工作套装","link":"/2014/11/22/mac-mini-show/"},{"title":"cocoa简洁写法笔记","text":"对cocoa的一些语法糖做的笔记 NSNumber12345678NSNumber *totalNumber = [NSNumber numberWithInt:1];toNSNumber *totalNumber = @1;## 更多拓展NSNumber *floatNumber = @2.5f;NSNumber *boolNumber = @YES;NSNumber *totalNumber = @(5 * 6.5f); NSArray12345678NSArray *members = [NSArray arrayWithObjects:@"father",@"mother",@"Jim",nil];toNSArray *members = @[@"father",@"mother",@"Jim"];# 取值NSString *username = [members objectAtIndex:2];toNSString *username = members[2]; NSDictionary1234567891011121314151617NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys:@"Jim",@"name",@"man",@"gender",nil];toNSDictionary *personData = @{@"name":@"Jim", @"gender":@"man"};# 取值NSString *username = [personData objectForKey:@"name"];toNSString *username = person[@"name"];# 设值和替换[personData replaceObjectAtIndex:1 withOjbect:@"woman"];[personData setObject:@"address" forKey:@"Beijing"];toperson[1] = @"woman";person[@"address"] = @"Beijing";","link":"/2014/09/05/cocoa-tidy-write/"},{"title":"我的2014","text":"生活今年完成了几件大事:三月,订婚五月,买房,成为了房奴八月,拍婚纱照九月,结婚 今年生活上发生了很大的变化,与小关关组建了新的家庭,也让我肩负起了一个男人的责任,为了我们新的生活而奋斗。希望我能为家人和老婆创造更好的生活条件。 感谢小关同志的陪伴与理解,七年长跑,我们终于走到了一起 工作今年工作发生了变动,离开了工作三年的老东家,加入了新公司,在各方面都对自己的提升非常大,技术上有了比较明显的提升,由于产品是直接面对用户的,在各方面的细节的要求也比较高,尤其是用户体验方面。 跨部门沟通上,由于团队非常大,涉及的业务部门也比较多,这一年有了不少机会与别的部门进行工作上的沟通协作,与人沟通上,也让我不再对人际交往有恐惧感。 工作方式上,拆分复杂业务,从最小的点逐步分析整个复杂的功能系统,在功能的实现上有了更明确的思路,对时间节点也有了更好的控制。抽离与重用,减少重复代码,精简了项目代码,提高了可扩展性。 通过龙哥的处理问题的方式跟思路,也让我积累到了很多宝贵的编程经验: 清晰的调试思路与正确的分析,在一些棘手的问题上,不再是猜和逃避,而要找到出错的地方进行修复; 对公共资源的全局封装,自定义的Color使用Category方法封装,比用宏定义更优雅; 对业务的不同状态进行枚举化,使用起来更可读 对Notification的name常量化,更易查找 接口都继承自同一基类,公共的处理由基类完成,在较大变动的情况下,只需要在基类做出理,就能兼容新需求 特定符号写成常量,如接口返回值,在接口变动时只需要修改下常量即可 推荐的书 《我编程,我快乐》 《大教堂与集市》 《重来》 bye, 2014","link":"/2015/02/01/my-2014/"},{"title":"Rails code snippets","text":"(摘录来自: persie. “Ruby on Rails 教程”) short key123g generated destorys server 脚手架以及一些常用的变量类型1rails g scaffold user name:string age:int email:string description:text cash:float 删除脚手架生成的代码1rails d scaffold Users 生成Controller与action1rails g controller TodoList list delete index 删除Controller1rails d controller TodoList list delete index 生成Model1rails g model User name:string email:string 删除Model1rails d model User name:string email:string 添加字段到表1“rails generate migration add_password_digest_to_users password_digest:string” 根据Model生成数据库表1rake db:migrate","link":"/2015/04/12/rails-code-snippets/"},{"title":"关于Xcode单元测试(XCTest)的一些总结","text":"单元测试可以让我们快速检测项目接口与一些功能的可用性,这次编写了大量的单元测试,让我对之前的一些疑惑有了一个透彻的理解 单元测试中,可以直接import我们项目中的类 想要执行的方法,必须使用test开头,testLogin会被执行,userLogin这样的方法名不会被执行 单元测试没有头文件,一些变量声明,写在interface里面 对于一些变量的初始化,放到setup里面进行 一个简单的单元测试类创建单元测试类 一个简单的类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#import <UIKit/UIKit.h>#import <XCTest/XCTest.h>#import "LoginService.h" //引入自定义的类@interface HelloTest : XCTestCase{ //变量声明 NSInteger count; LoginService *loginService;}@end@implementation HelloTest- (void)setUp { [super setUp]; //初始化 count = 5; loginService = [[LoginService alloc] init];}- (void)tearDown { [super tearDown];}- (void)testCount{ XCTAssertEqual(count, 6,@"count不等于6,count的值为:%ld",(long)count);}- (void)testExample { XCTAssert(YES, @"Pass");}- (void)testPerformanceExample { [self measureBlock:^{ }];}@end cmd+U 进行执行后会提示我们如下错误,测试通过的方法,会有绿色对号,失败的方法会显示我们写的错误提示 XCTest的测试方法大都类似XCTAssertGreaterThan12#判断count是否大于8XCTAssertGreaterThan(count, 8,@"count is not greater than 8"); XCTAssertNotEqual12#判断是否不相等XCTAssertNotEqual(count, 5,@"they are equal"); XCTAssertTrue12#判断某个表达式是否成立XCTAssertTrue(count>3,@"count greater than 3"); 运行结果 对于异步方法的测试(Asynchronous Testing)对于block等异步方式执行的方法,在测试的时候,我们要使用,一般的做法都是延迟,等待block执行完毕再进行检查 主要步骤 声明一个XCTestExpectation 在block中使用fulfill抛出错误 waitForExpectationsWithTimeout进行一个延迟时间设定 1#import <XCTest/XCTestCase+AsynchronousTesting.h> 比如上面的loginService 1234567891011121314151617181920212223- (void)testLogin{ ##声明一个Exception XCTestExpectation *loginException = [self expectationWithDescription:@"loginError"]; [loginService sendLoginWithMobile:TEST_MOBILE andCode:TEST_CODE onComplete:^(NSDictionary *jsonDict, NSString *jsonString) { MStatus *status = [loginService convertToMStatus:jsonDict]; XCTAssertEqual(status.returncode, 0, @"login error"); //抛出错误 [loginException fulfill]; } onFailure:^(NSString *msg) { XCTFail(@"login error:%@",msg); //抛出错误 [loginException fulfill]; }]; //延迟两秒执行 [self waitForExpectationsWithTimeout:2 handler:^(NSError *error) { XCTFail(@"time out:%@",error); }];}","link":"/2015/05/04/something-about-xctest/"},{"title":"Application Transport Security","text":"In Xcode7 You should add follow keys in Info.plist to allow the http requestA detail discuss could fond herehttps://forums.developer.apple.com/thread/3544 1234<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key><true/> </dict>","link":"/2015/07/13/application-transport-security-in-ios9/"},{"title":"为什么使用Mantle","text":"项目地址: https://github.com/Mantle/Mantle 今年上半年在两个项目中都将Model层替换为Mantle,大大减少了开发中实体转换的时间;选择mantle的初衷是因为看到了大神的blog,里面的应用场景也是在开发中我们经常遇到的情况:iWangKe.me - 为什么唱吧iOS 6.0选择了Mantle 对比一下12345678910111213141516# http://bubbler.labs.douban.com/j/user/wheats{ "homepage": "http://www.douban.com/people/wheats", "icon": "http://img3.douban.com/icon/u46721592-5.jpg", "userid": "46721592", "r": 0, "stats": { "board": 0, "bub": 0, "collect": 0 }, "title": "welsonla", "uid": "wheats"} You should know: 使用Mantle需要继承MTLModel 如果需要将实体中的某个字段映射成一个实体或者实体的数组,需要继承MTLJSONSerializing Mantle需要一个字典来讲字典中的字段与实体的字段进行匹配 将JSON转换为制定的Model1MDoubanUser *allModel = [MTLJSONAdapter modelOfClass:[MDoubanUser class] fromJSONDictionary:rstlDict] error:nil] 将JSON中的数组转换为Model的数组1NSArray *users = [MTLJSONAdapter modelsOfClass:[MDoubanUser class] fromJSONArray:userArray error:nil]; 将某个字段对应到某个实体1234567891011+(NSValueTransformer *)JSONTransformerForKey:(NSString *)key{ if ([key isEqualToString:@"stats"]) { #假设上诉到json中的stats创建了一个单独的实体类为MStats, return [MTLJSONAdapter dictionaryTransformerWithModelClass:[MStats class]]; }else if([key isEqualToString:@"books"]){ #假设中json中有一个books数组,并有对应的实体MBook return return [MTLJSONAdapter arrayTransformerWithModelClass:[MBook class]];; } return nil;} 自定义转换自定义转换只要定义一个字段名+JSONTransformer结尾的方法,就会执行我们自定义的转换,比如时间格式化,对某些字符进行一些操作处理 123456# 将uid前面加上"Author"+ (NSValueTransformer *)uidJSONTransformer{ return [MTLValueTransformer transformerUsingForwardBlock:^id(NSString *uid, BOOL *success, NSError *__autoreleasing *error) { return [@"Author: " stringByAppendingString:uid]; }];} 多个字段对应在项目中,经常遇到,接口A返回的用户id字段说uid,接口B返回的用户字段是ID,这种情况我们只需要中Model中将两个字段存到一个数组绑定到同一个属性上就可以了 123456789101112+ (NSDictionary *)JSONKeyPathsByPropertyKey{ return @{ @"uid":@[@"uid",@"ID"], @"userid":@"userid", @"stats":@"stats", @"title":@"title", @"r":@"r", @"homepage":@"homepage", @"icon":@"icon" };} 将实体中的值封装成一个dictionary,方便接口传输12345#使用全部的字段NSDictionary *params = [user dictionaryValue];#使用部分的字段NSDictionary *params = [address dictionaryWithValuesForKeys:@[@"uid",@"stats",@"homepage"]]; 最后在项目的开发过程中,我抽时间做了一个小工具,可以方便的将JSON转换为Mantle支持的Model类,希望对你们有帮助 Source: https://github.com/TimeBots/ModelBotDownload: ModelBot Download","link":"/2015/10/08/why-mantle/"},{"title":"从Objective-c迁移到Swift的一些坑","text":"NSString to String12345#ObjCNSString *notice#Swiftvar notice:String? NSArray,NSMutableArray to Array1234567891011121314#1. 声明#ObjCNSMutableArray *listArray = [NSMutableArray array];#Swiftvar listArray:[String] = Array() //必须带参数类型var listArray:[AnyObject] = Array()#2. 增加元素#ObjC[listArray addObject:@"foo"];#SwiftlistArray.append("foo") NSRange->Range123456#ObjCNSRange range = NSMakeRange(0,10)#SwiftRange(start: 0, end: 10) NSDictionary,NSmutableDictionary to Dictionary12345678910111213141516#ObjCNSMutableDictionary *score = [NSMutableDictionary dictionary];#Swiftvar score0:[String:String]?var score1 = [String:String]()var score2 = Dictionary<String,String>()var score3 = [:]#ObjCNSDictionary *person = @{@"name":@"Single Dog",@"Skill":@"Swift"};person[@“age”] = @“28”;#Swiftvar person = ["name":"Single Dog","Skill":"Swift"]person["age"] = "28" Random123456#ObjCarc4random%255#Swiftarc4random_uniform(255)random() % 255 Selector感觉Selector的方式不如ObjC那样有方法提示,容易写错,效率反而不如之前 12345#ObjCSEL callback = @selector(uploadCallback:)#SwiftSelector("uploadCallback:") id to AnyObject12345678910111213#ObjCid sender#Swiftvar sender:Anyobject?``` ### 三元运算缩写```swift#ObjCa ? : b#Swifta ?? b 枚举1234567891011#ObjCtypedef NS_ENUM(NSInteger,LocationState){ LocationStateStart, LocationStateFinish, LocationStateFail};#Swiftenum LocationState { case LocationStart, LocationFinish, LocationFail} Todo List Block to Closure DateFormatter nil value check…… 遇到继续添加,未完待续……","link":"/2016/01/27/Objective-c-to-Swift/"},{"title":"Mac Tips","text":"一些常用的命令备忘 显示隐藏文件1defaults write com.apple.finder AppleShowAllFiles -bool true;killall Finder 不显示隐藏文件1defaults write com.apple.finder AppleShowAllFiles -bool false;killall Finder 10.11后开启第三方硬盘的Trim1sudo trimforce enable 释放不活跃的内存1sudo purge 允许任何来源的软件进行安装1sudo spctl --master-disable","link":"/2016/03/23/Mac-Tips/"},{"title":"2016年2月29日","text":"仅为今天,特意发博一篇","link":"/2016/02/29/the-day-of-2-29/"},{"title":"iOS Tips","text":"Code Snippets 去除空白TableViewCell的分割线1listTable.tableFooterView = [UIView new]; 让header与cell一起滚动,不在顶部悬停1设置为UITableViewStyleGrouped 在拼音打字的时候,不让textField响应Change1234567891011//MARK: textfield notification- (void)textFieldDidChange:(NSNotification *)notification{ UITextRange *selectedRange = [self.searchField markedTextRange]; NSString * newText = [self.textField textInRange:selectedRange]; //获取高亮部分,拼音状态不进行搜索 if(newText.length>0){ return; }……} 将数组中的Model的某个字段合并成String12#假设listArray中是User实体,有一个Name字段[[listArray valueForKey:@“Name”] componentsJoinedByString:@"\\n"] 设置NavigationBarItem的Title,可以让其与Tabbar的Title区分开1self.navigationItem.title = @“Home”; 通过设置Cell的Custom Insets来替代自定义View的分割线 Xcode 按住Shift可以一次选择多个AutoLayout约束 按住Ctrl,再点按Alt可以Toggle设置是否添加Margin Ctrl+Command+↑切换h与m文件(Objective-C使用) 给类改名,并修改相关引用地方的类名 屏蔽Xcode8自带log1234[http://stackoverflow.com/questions/37800790/hide-strange-unwanted-xcode-8-logs](http://stackoverflow.com/questions/37800790/hide-strange-unwanted-xcode-8-logs)1- From Xcode menu open: Product > Scheme > Edit Scheme2- On your Environment Variables set OS_ACTIVITY_MODE = disable Xcode8 注释快捷键1Option+Command+/","link":"/2016/03/23/iOS-Tips/"},{"title":"配置多个SSH Keygen","text":"1ssh-keygen -t rsa -C "YourMail@github.com" -f ~/.ssh/github_rsa 添加到私钥列表12ssh-add ~/.ssh/id_rsassh-add ~/.ssh/github_rsa 查看私钥列表12345# 可以通过 ssh-add -l 来确私钥列表ssh-add -l# 可以通过 ssh-add -D 来清空私钥列表ssh-add -D 添加配置12cd ~/.sshtouch config 添加配置内容1234Host github.com HostName github.com PreferredAuthentications publickey #认证类型为私钥 IdentityFile ~/.ssh/github_rsa 添加github_rsa.pub内容到github的SSH KEY列表1cat ~/.ssh/github_rsa.pub 测试1234⇒ ssh -T git@github.com# 会提示, 说明已经配置成功Hi welsonla! You've successfully authenticated, but GitHub does not provide shell access. 参考资料https://my.oschina.net/stefanzhlg/blog/529403http://riny.net/2014/git-ssh-key/","link":"/2016/12/08/multiple-ssh-key-config/"},{"title":"heroku command","text":"记录一些经常使用到的一些heroku管理命令 login1heroku login show apps info展示你app的一些信息 1heroku apps:info deploy推送代码并部署 1git push heroku master ssh远程到你app目录项目,可以操作远程的一些文件,相当于ssh登录 1heroku run bash log查看实时输出的log 1heroku logs -t","link":"/2017/07/13/heroku-command/"},{"title":"使用Fastlane","text":"相关介绍Fastlane最初由KrauseFx(Github, Twitter) 发起,现在已经有百位代码和插件贡献者,丰富的Action与Plugin可以满足众多个性化的需求,目前官方主要的工具如下(来自fastlane项目Github页面), 但不仅限于此。 相关文档Github主页Gem主页官方文档 InstallFastlane是用ruby写的一套程序,最简单的方式是使用gem的方式来安装 1gem install fastlane 初始化你的项目创建Gemfile主要是为了让其他人安装的Gem保持统一,Cocoapods之后也可以用Gemfile来做统一的管理 123bundle initecho 'gem "fastlane"' >> Gemfilebundle install initinit期间会让你输入AppleID,如果该应用存在,Fastlane会通过iTunesConnect拉取应用的metadata和所有的App截图,如果不存在,会提示你是否在iTunesConnect中创建一个新的App 1fastlane init 安装完之后,会在项目中产生一个fastlane目录,使用tree命令查看结构如下 123456789├── Appfile├── Deliverfile├── Fastfile├── README.md├── metadata│ ├── some metadata file ...├── report.xml└── screenshots └── README.txt Appfile 记录了你appid,apple id,team id等信息Deliverfile 记录了bundle与appleid信息Fastfile 是我们打包使用到的主要文件,这里面可以自定义你的流程metadata 是通过iTunesConnect获取到的app的信息文件,包括介绍screenshots 保存了所有的截图信息 一个简单的Fastfile流程1234567891011lane :beta do git_pull increment_build_number #build number更新 cocoapods #安装cocoapods gym( scheme: "MyScheme", #主Target output_directory:"./build", #导出目录 export_method: "development" #导出方式 ) sh "./customScript.sh" #执行你的脚本文件或Shell命令end 更多关于gym的配置参数,可以参见 Actions - fastlane docs 每个Action下面都有Example和Parameters,默认是收起状态 通过执行fastlane beta 就可以进行打包,并且dYSM和ipa文件会导出到我们指定的项目下的build目录下面 1fastlane beta fastlane文件结构123456789101112131415161718192021222324252627282930313233343536373839fastlane_version "2.44.1"default_platform :iosplatform :ios do #1. 开始前的一些操作,如代码更新(git_pull) before_all do end #2. 打包一个测试版本 desc "build a beta version" lane :beta do gym( export_method: "ad-hoc", output_directory: "./build", ) end #3. 打包一个线上版本,并上传 lane :release do gym( export_method: "app-store" ) deliver(force: true) end #4.打包结束操作 after_all do |lane| #打开导出目录 sh "open ./build" end #5. 捕获错误 error do |lane, exception| endend 一些常用命令1234567891011121314# 列出现有的所有actionfastlane actions# 列出所有lane任务fastlane list# 创建一个新的Actionfastlane new_action# 打印环境变量,Fastfile中可以`ENV['PWD']`使用这些变量fastlane env# 显示本机Provision文件security find-identity -v -p codesigning 常见问题可以参见或官方issueshttps://docs.fastlane.tools/codesigning/troubleshooting/Issues · fastlane/fastlane · GitHub 参考文档FastlaneFastlane对应的Gem主页Fastlane官方文档Fastlane实战(一):移动开发自动化之道Fastlane实战(二):Action和Plugin机制Fastlane实战(五):高级用法fastlane actionsAdvanced fastlane","link":"/2017/07/13/using-fastlane/"},{"title":"Xcode BuildNumber 自动更新","text":"最近为了区分发包的id,从晚上找了一段代码原理就是,先用PlistBuddy获取当前的buildid,之后+1,然后再更新plist文件 123buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")buildNumber=$(($buildNumber + 1))/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" From: https://gist.github.com/sekati/3172554","link":"/2017/08/10/Xcode-buildid-autoincrement/"},{"title":"将 ReactNative 的默认终端改为 iTerm2","text":"自己平时使用iTerm2作为主力的终端,ReactNative的默认打开终端是系统自带的Terminal,这样就会经常存在同时开启两个终端软件的情况,搜索了一下,解决方式很简单 1open node_modules/react-native/scripts 选中launchPackager.command,右键切换它的默认打开工具 致谢 https://stackoverflow.com/questions/37814803/how-to-get-react-native-run-ios-to-open-in-iterm-instead-of-terminal-on-a-macos","link":"/2018/05/30/let-react-native-shell-open-in-iterm/"},{"title":"iTerm2 with powerline theme","text":"确保已经安装了oh-my-zshhttps://github.com/robbyrussell/oh-my-zsh 安装 oh-my-zsh-powerline-themehttps://github.com/jeremyFreeAgent/oh-my-zsh-powerline-theme 12345678910cd ~/.oh-my-zsh/themesgit clone git@github.com:jeremyFreeAgent/oh-my-zsh-powerline-theme.git#更新submodule,进行powerline-fonts安装cd oh-my-zsh-powerline-themegit submodule initgit submodule update#安装./install_in_omz.sh 更改iterm字体iTerm2 – Preferences – Profiles – Text找到Font,点击Change Font,将字体改为Fira mono for powerline, 字号14pt 修改zsh配置打开~/.zshrc文件,修改ZSH_THEME"为powerline 添加如下配置 12345678910111213141516POWERLINE_RIGHT_B="" POWERLINE_RIGHT_A="date" POWERLINE_RIGHT_A_COLOR_FRONT="black" POWERLINE_RIGHT_A_COLOR_BACK="red" POWERLINE_HIDE_HOST_NAME="true"POWERLINE_PATH="short"POWERLINE_SHORT_HOST_NAME="true"POWERLINE_DETECT_SSH="true"POWERLINE_GIT_CLEAN="✔"POWERLINE_GIT_DIRTY="✘"POWERLINE_GIT_ADDED="%F{green}✚%F{black}"POWERLINE_GIT_MODIFIED="%F{blue}✹%F{black}"POWERLINE_GIT_DELETED="%F{red}✖%F{black}"POWERLINE_GIT_UNTRACKED="%F{yellow}✭%F{black}"POWERLINE_GIT_RENAMED="➜"POWERLINE_GIT_UNMERGED="═" 最终效果","link":"/2019/06/13/iterm-with-powerline-theme/"},{"title":"解决 Mac OS 删除文件后磁盘空间不更新的问题","text":"这个问题存在了很久,一直也没有找到解决的办法,今天上网查询后发现,这个问题只存在于使用了Time Machine的用户,原因是因为Time Machine的快照自动生成造成的,于是试着按照解决方法查询了下本地快照 1sudo tmutil listlocalsnapshots / 得到如下结果,确实Mac在自动的生成系统的快照 1234567com.apple.TimeMachine.2019-12-31-214148.localcom.apple.TimeMachine.2019-12-31-223649.localcom.apple.TimeMachine.2020-01-01-103649.localcom.apple.TimeMachine.2020-01-01-113743.localcom.apple.TimeMachine.2020-01-01-124353.localcom.apple.TimeMachine.2020-01-01-143927.localcom.apple.TimeMachine.2020-01-01-153651.local 试着删除其中的一个快照 1tmutil deletelocalsnapshots 2019-12-31-214148 发现系统的空间立刻就释放了,猜测就是以为Time Machine的快照自动生成导致的,不知道是Mac系统的bug还是因为备份的策略, 试着写了一个Ruby的脚本来自动的删除这些快照,希望对遇到此问题的人有帮助: 1234567891011121314151617181920212223242526#/bin/bash#diskspace infoputs "Current Diskspace info:" puts "---------"puts %x[df -lh /]#list localsnapshotsputs "\\n\\n---------"list = %x[tmutil listlocalsnapshots /]puts list#delete snapshotsputs "\\n\\n---------"puts "Start delete snapshots:"matches = list.scan(/\\d{4}-\\d{2}-\\d{2}-\\d{6}/)matches.each_with_index{|snapshoot,index| puts "delete the listlocalsnapshots #{snapshoot}" sh = "tmutil deletelocalsnapshots #{snapshoot}" system(sh)}#diskspace info after delete snapshotputs puts "\\n\\n---------"puts "Diskspace info after delete snapshots:"puts %x[df -lh /] 将上面脚本保存为snapshots_clear.rb,或从我保存的gist上下载执行. 1ruby snapshots_clear.rb 参考资料Mac瘦身技巧 删除文件后可用空间还变少了?Solution: Reclaim storage back from “System”","link":"/2020/01/01/Mac-Diskspace-release/"},{"title":"Mac OS 安装 配置Laravel开发环境","text":"使用Homebrew安装PHP 7.3实用brew的好处就是PHP版本可以不被系统升级而改变,从而保证升级系统不会影响PHP环境 12brew install php@7.3brew link php@7.3 安装Composer12345wget https://getcomposer.org/installerphp -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"php composer-setup.phpphp -r "unlink('composer-setup.php');" 添加到全局1mv composer.phar /usr/local/bin/composer 设置国内镜像1composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 安装Composer多线程下载支持1composer global require hirak/prestissimo 安装laravel1composer global require laravel/installer","link":"/2020/01/01/composer-and-laravel-setup/"},{"title":"使用阿里云加速Maven包更新","text":"阿里云maven镜像官方地址: https://maven.aliyun.com/mvn/guide mac用户首先建立 ~/.m2/settings.conf 文件,然后将阿里云的Maven配置写入到文件, 然后重新加载maven配置即可, 完整配置如下 123456789101112<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> </mirrors></settings> 参考资料https://developer.aliyun.com/article/78124","link":"/2020/11/28/speed-up-maven/"},{"title":"Hello, Nuphy Halo 65","text":"购买理由很早就关注了Halo 65 这款键盘,一是因为颜值确实比较喜欢,其次是三模,支持蓝牙、2.4G与有线三种连接模式,只是一直没有在国内上市,双十一的时候发现淘宝居然上架了Halo 65,轴体比海外版本要少,据说轴也不太一样,因为之前比较习惯使用红轴键盘,所以轴体选择的簌簌晚风轴, 线性轴体,没有段落感,也没有青轴那么吵闹。 拆箱与配件等了两天就收到了顺丰寄来的快递,快递包裹很厚,拆开意外的发现店铺还额外赠送了一套黑色的键帽,算是一份意外的惊喜 外包装袋上还有二次元的形象印刷,打开盒子,发现还有几张键盘定制的二次元贴纸,然后是键盘防尘罩,键盘主体,侧面有一个Type-C数据线接口,一个开关键、还有一个2.4G的接受器插在侧面还有一个配件包装盒子,包含: 黑、红、绿、白集中体验轴体, 几个替换的其他颜色的键帽 一个拔轴拔键器 一条Type-C接口的键盘数据线 键盘第一感觉就是重,键盘上盖板是金属材质,腰下下部为塑料材质,整体感觉比之前我那把HHKB要重不少。 因为Halo 65官网的说明书比较难找,附带的说明书也记录的不太清楚,导致第一天一直没有找到如何开启蓝牙配对,一直使用的是2.4G来连接,体验下来感觉轴体比之前使用的红轴手感略重,但是按键的触感很不错,声音听着也很舒服,Nuphy为Halo 65都配置了隐声空格键,使空格键的敲击没有了弹簧音,减少了敲击空格键的噪音,算是一个不错的设计。 常用键盘快捷键记录一下Halo 65键盘的一些常用的快捷键,做个备忘: Fn+Q、W、E 对应蓝牙设备1、2、3, Fn+R 连接2.4G设备 Fn+X+C 关闭自动休眠模式 Fn+X+V 开启自动休眠模式 Fn+L 查看电池点亮, 绿 > 80%, 蓝 > 20%, 红 < 20% ~ Fn+Shift+Esc Fn+H<> 调整腰线的灯光亮度 Fn+H+→ 切换灯光颜色 Fn+H+← 切换腰线灯光模式 Fn+←切换键帽灯光模式 完全关闭键盘灯光效果Fn+<- 与 Fn+H+<- 调节可以完全关闭键盘等与侧面腰线灯光,这样能节约不少的电量,通过这几天的使用发现即使关闭键帽灯光不关闭侧面的腰线灯光,键盘的电量还是坚持不了一周,还是续航比较重要。 最后附上官方客服发来的说明书","link":"/2022/11/28/Hello-Nuphy-Halo-65/"},{"title":"deploy nuxt ssr with pm2 and nginx","text":"Why服务端渲染能更容易做SEO,方便每个页面单独的设置关键词以便被搜索引擎抓取,让其他人更容易在网络上搜索到。 测试 SEO 关键词很多但页面应用可能不能正确的让搜索引擎抓取你的页面头部keywords,一个简单的测试方法就是使用一些第三方网站来测试抓取效果 https://seo.chinaz.com/https://www.aizhan.com/https://pagespeed.web.dev/ 切换Nuxt到ssr模式如果你的nuxt应用之前使用的是静态站点的模式,请在nuxt.config.json里更新或删除如下配置 12ssr: true,target: 'server' 设置应用对应的端口在package.json文件中增加 123456"config": { "nuxt": { "host": "0.0.0.0", "port": "3334" }} 安装pm21npm install pm2@latest -g 生成pm2配置文件运行一下命令,这将会在你的项目目录下生成一个名为ecosystem.config.js配置文件 1pm2 ecosystem 修改pm2配置文件, 增加apps节点123456789apps : [ { name: 'blog', # 修改为您的项目名称 exec_mode: 'cluster', instances: '2', # 按需设置进程数量 script: './node_modules/nuxt/bin/nuxt.js', args: 'start' }] 启动pm21npm run pm2 查看运行实例1pm2 list 常用pm2命令12345678910# 重启应用pm2 restart allpm2 restart [name]# 删除应用pm2 delete [name]# 停止pm2 stop allpm2 stop [name] 启动pm2控制台,查看实时访问1pm2 monit 在 packge.json 文件的 scripts 中增加pm2启动命令1234567"scripts": { "dev": "nuxt --hostname '0.0.0.0'", "build": "nuxt build", "start": "nuxt start", "generate": "nuxt generate", "pm2": "nuxt build && pm2 start npm --name labapps -- run start" }, 部署到web服务器将除了node_modules目录之外的所有文件复制到你的web目录下面,启动web实例 1npm run pm2 修改nginx配置,增加反向代理注意,反向代理的端口必须与你的package.json中设置的应用的端口相匹配,这样才能在同一台主机,运行多个pm2实例,并且互不影响 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647upstream labapps { server 127.0.0.1:3334; keepalive 64;}server { server_name timebot.net; # 设置为你的域名 add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; add_header Set-Cookie "Path=/; HttpOnly; Secure"; #charset koi8-r; access_log /var/log/nginx/blog.access.log; error_log /var/log/nginx/blog.error.log debug; location / { access_log off; root /webroot/blog; # 修改为你的项目路径 index index.html index.htm; try_files $uri $uri/ /index.html; if ($request_filename ~* .*\\.(js|css|woff|png|jpg|jpeg)$) { expires 1d; } if ($request_filename ~* .*\\.(?:htm|html)$) { add_header Cache-Control no-cache,no-store,must-revalidate; } location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Nginx-Proxy true; proxy_cache_bypass $http_upgrade; proxy_pass http://labapps; #反向代理 } } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }} 查看访问1pm2 monit 查看实时日志1pm2 logs 另外,pm2还提供了pm2 monitor更强大的web端控制台,可以在web实时查看你的服务运行情况,只需要简单地配置即可.https://pm2.keymetrics.io/docs/usage/monitoring/ 参考资料Deploy Nuxt using PM2常用的seo查询工具(有哪些seo软件网站平台)","link":"/2022/11/29/deploy-nuxt-ssr-with-pm2-and-nginx/"},{"title":"Learning figma day 1 - 基本操作与Figma的一些常用快捷键","text":"基本操作由于本人只有一台Macbook,以下快捷键都是在Mac系统下的,可能跟Windows系统略有不同 K 等比缩放V 移动CMD+左键 快速选中Frame或组中的子元素Shift + R 标尺CMD+滚轮 放大缩小Shift+ 方向键 每次移动4pxCMD+左键框选 可以防止拖动到底部的Frame整体,只框选范围内的元素Shift + CMD + O 外轮廓描边,转换成一个矩形面积 图形R 矩形O 圆形L 直线T 文字A 画框,快速选择页面原型尺寸,比如手机尺寸、桌面网页、Watch等 数值增加所有的数值都可以在鼠标放到属性框附近的时候,按住Opt 按键左右拖拽鼠标进行增减 图形属性菜单 组和FrameCMD + G 编组Opt + CMD + G 合并为FrameShift + CMD + G 取消编组或取消Frame AutoLayoutShift + A 设置为AutoLayout布局","link":"/2022/12/09/learning-figma-day-1/"},{"title":"Learning-figma-day-2 自定义样式与组件","text":"只是记录一下学习Figma过程中的一些笔记,可能会有更多更方便的使用技巧。 本地样式添加本地样式在Figma 中不论是字体、颜色、样式等都可以添加为自定义的样式,操作步骤如下 点击属性右上的图标,弹出窗口中点击+按钮即可 使用本地样式之后我们再次点击此处就可以看到我们添加到自定义样式, 右侧的调整按钮是我们可以对保存的本地样式进行调整,这样调整后的样式会将使用该样式的元素同步进行更新,比如统一修改App的导航栏颜色、Tabbar的选中颜色等 取消样式关联如果我们使用了本地样式,但是想自己对该样式进行单独的修改, 如应用了阴影等设置,但是想单独调整下阴影的大小,则点击该样式右侧的断开链接图标即可 本地样式列表本地样式在我们鼠标单击空白处会在右侧的属性栏中进行显示,我们可以直接在此处对本地样式进行修改与删除,假如我们需要对设计统一修改色调就可以直接修改某一个本地样式 本地组件本地组件是为了更好的复用与批量修改,比如我们的新闻列表,每个条目的标题与简介、缩略图都是统一的,我们就可以做一个条目的组件来统一管理他们的样式,假如我们更新的标题的字号与颜色,所有使用到该组件的地方都会进行同步的修改,这样节省了我们每个都去单独修改的时间,也更方便让相同设计元素进行复用,降低设计更新的时间成本。 一般我们在一个设计稿中将所有的组件都放在同一个Frame中集中管理,不要在页面中创建组件,这样会在后期查找父组件比较费力,我们将一个设计稿中的本地组件都放置在同一个Frame中,这样不仅方便查找,而且比较清晰。 创建组件的快捷键为Opt + CMD + K, 也可以选中你的元素后,点击顶部的创建组件按钮 创建完毕组件之后,我们就可以按住Opt+拖动组件快速使用一个组件,多次复制之后,我们就能快速的完成一个新闻列表样式,我们可以单独对每个子组件的标题与描述进行修改,而不会影响父组件 当我们对父组件的属性进行修改时,子组件也会同步的更新样式, 可能这就是设计中的面向对象概念吧 父组件与子组件概念父组件与子组件的特点总结(不全面): 更新父组件会同步将样式同步给使用到的子组件 子组件可以单独更新自己的文本、高度,而不会影响父组件 子组件如果想单独更新组件某些样式,可以同样断开链接之后进行单独的修改,方法同本地样式 本地库本地样式与本地组件都会显示在本地资源库中,位置在Layers右侧的Assets栏目中, 从图中可以看到,我们将所有的组件放置在同一个Frame中的优势也显示出来了,这样就不会去多个页面下去寻找定义的组件,也节省了一部分的时间,本地库中的组件,我们可以直接拖动到设计页面中进行使用。","link":"/2022/12/10/learning-figma-day-2/"},{"title":"《TED演讲:我们为什么睡觉》 笔记","text":"最近饱受失眠的困扰,在截断了咖啡3天以及每天提高自己的运动量以后,并没有明显的改善,晚上难以入睡或者在听到声响后醒来,便再也难以入睡。 尝试使用白噪音、呼吸放松法思绪依然会不受控制的乱飞,打乱想要的节奏。 进入正题这并不是《Why We Sleep》的书摘,而是来自一个TED演讲:TED演讲:我们为什么要睡觉? 回到演讲,我们有30%的时间是在睡眠中度过的,大约占一生中的32年时间在睡觉; 我们不要像对待疾病一样对待睡眠,睡眠对我们的健康有着非常重要的作用 在睡眠时,大脑并没有停止活动,他们的某些区域还保持着活跃,甚至比清醒时更活跃 Why do we need sleep 一种观点是白天我们已经燃烧掉了我们所有的经历,需要在夜间得到修复、更换和重新生成;另一种观点是睡眠是你自身在保存热量;第三种观点是大脑处理与记忆的整合,如果视图学习某项任务,如果你的睡眠不足,学习的能力就被破坏了。睡觉增强了我们的创造力 睡眠可以比喻为从经济舱升级到头等舱,如果你不睡觉,你的这次航班可能就无法正常起飞。(If you don’t sleep, you don’t fly)当你缺少睡眠,你的记忆力会变差、创造力会下降,人变得容易冲动,整体的判断力也会降低 睡觉也与体重相关,如果你的睡眠低于5小时,那么你的超重的可能性会变高,这是因为大脑会产生一种饥饿的激素促使你去增加饮食。让你去进食碳水和糖。 睡眠与压力 如果是突然的压力,并不必担心,但是如果是一个长期与睡眠影响的压力,就要去关注;持续的压力会导致免疫功能被抑制,更容易被感染疾病。压力会增加血液循环中的葡萄糖,当血糖中的葡萄糖超过身体吸收的量时,就会产生2型糖尿病,压力也会影响心血管,造成高血压。所以,并不是人们常认为的睡眠会导致大脑轻微受伤 如何知道自己是否有充足的睡眠 如果你需要被闹钟叫醒 如果你情绪暴、看起来充满疲倦 需要花很长时间起床 需要复用大量兴奋剂 营造睡眠环境 是卧室尽可能的保持黑暗 降低室内的温度 在睡前的半小时减少光线照射、减少电子产品的使用 关闭所有能让大脑产生兴奋的外界因素 减少咖啡的摄入,最好下午就不要再喝 睡眠的时长建议 平均是8个小时,但是具体需要你的身体去感受,每个人对睡眠时长的要求都不同 早睡早起并没有证据去证明更科学(但是尽量还是早睡吧,白天有太多因素干扰睡眠) 总结:如果你有良好的睡眠,你会有更好的专注力、注意力、决策力、创造力、以及社会技能和健康。如果你入睡后,睡觉减轻了你的压力。所以,养成一个良好的睡眠吧。","link":"/2023/07/02/Why-we-need-sleep/"},{"title":"Hello World","text":"Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment","link":"/2015/10/10/hello-world/"},{"title":"Blog迁移到了Hexo","text":"Octopress的痛点受不了_deploy文件夹的折磨,以及AutoGenerate Disable这错误导致生成问题,rake deploy靠运气成功,今天将blog迁移到了hexo Hexo优点 更简洁的语法12345hexo new "title"hexo new pagehexo g #生成hexo d #部署hexo s #运行 更快的生成速度 直观的部署结果 安装 安装Node 参考node官方 https://nodejs.org 安装hexo以及用到的东西 12npm install -g hexo-cli 创建Blog 123456hexo init blogcd blognpm install#安装Servernpm install hexo-server --save 基本使用创建文章 1234hexo new "first blog"#创建独立页面hexo new page "about" 为页面设置多个Tag使用如下格式可以为文章设置多个tag 123tags: - hello - world 预备部署 123456789#添加github部署支持npm install hexo-deployer-git --save## 修改_config.yml deploy: type: git #不要再使用github作为type repo: git@github.com:<yourname>/<yourname>.github.io.git branch: master 部署静态到github1hexo clean && hexo deploy 修改配置安装主题,推荐Next, 有详细的安装文档安装参考http://theme-next.iissnan.com/five-minutes-setup.html 详细的配置https://github.com/iissnan/hexo-theme-next/wiki/主题配置参考 添加RSS 1npm install hexo-generator-feed --save 上传图片12放到./source/uploads文件夹下,代码中使用 修改生成文件的格式修改为Year-Month-Day-title样式,方便查找打开_config.yml 1new_post_name: :year-:month-:day-:title.md 开启代码高亮其实hexo本身已经自带了代码高亮,但是我的从2.x的版本升级到6.0不知道为什么就失效了,所以使用了第三方的高亮插件来代替https://github.com/ele828/hexo-prism-plugin 1npm i -S hexo-prism-plugin 修改_config.xml关闭hilight,替换成prism_plugin 123456prism_plugin: mode: 'preprocess' theme: 'default' line_number: truehighlight: enable: false","link":"/2015/10/10/start-using-hexo/"}],"tags":[{"name":"机械键盘","slug":"机械键盘","link":"/tags/%E6%9C%BA%E6%A2%B0%E9%94%AE%E7%9B%98/"},{"name":"Nuphy","slug":"Nuphy","link":"/tags/Nuphy/"},{"name":"Halo 65","slug":"Halo-65","link":"/tags/Halo-65/"},{"name":"Nuxt","slug":"Nuxt","link":"/tags/Nuxt/"},{"name":"pm2","slug":"pm2","link":"/tags/pm2/"},{"name":"Nginx","slug":"Nginx","link":"/tags/Nginx/"},{"name":"ssr","slug":"ssr","link":"/tags/ssr/"},{"name":"design","slug":"design","link":"/tags/design/"},{"name":"figma","slug":"figma","link":"/tags/figma/"},{"name":"study","slug":"study","link":"/tags/study/"},{"name":"Sleep","slug":"Sleep","link":"/tags/Sleep/"},{"name":"Health","slug":"Health","link":"/tags/Health/"}],"categories":[{"name":"life","slug":"life","link":"/categories/life/"},{"name":"技术随笔","slug":"技术随笔","link":"/categories/%E6%8A%80%E6%9C%AF%E9%9A%8F%E7%AC%94/"},{"name":"iOS","slug":"iOS","link":"/categories/iOS/"},{"name":"git","slug":"git","link":"/categories/git/"},{"name":"工具控","slug":"工具控","link":"/categories/%E5%B7%A5%E5%85%B7%E6%8E%A7/"},{"name":"随笔","slug":"随笔","link":"/categories/%E9%9A%8F%E7%AC%94/"},{"name":"ruby","slug":"ruby","link":"/categories/ruby/"},{"name":"自动化","slug":"自动化","link":"/categories/%E8%87%AA%E5%8A%A8%E5%8C%96/"},{"name":"Mac","slug":"Mac","link":"/categories/Mac/"},{"name":"PHP","slug":"PHP","link":"/categories/PHP/"},{"name":"Node","slug":"Node","link":"/categories/Node/"},{"name":"Design","slug":"Design","link":"/categories/Design/"},{"name":"something","slug":"something","link":"/categories/something/"}],"pages":[{"title":"","text":"google-site-verification: google2de6df67ca2f1b55.html","link":"/google2de6df67ca2f1b55.html"},{"title":"about","text":"Welsonla男 已婚 Object-c, Swift , PHP ,Ruby on Rails 只是一个喜欢技术并且想安安心心做技术的人,喜欢开源,乐于分享,最近在学习Ruby on rails 在社交网站上关注我 github twitter 我的iOS作品晴天 一款简洁的天气应用 PassBoxes 管理你所有的密码 写过的Mac小工具SQLCipherExport 将SQLite进行AES256加密解密转换的工具 ModelBot 将JSON生成NSObject,MTLModel(Mantle),Swift, ObjectMapper实体类的工具","link":"/about/index.html"},{"title":"list","text":"My Develop list工具控的闲暇阅读 The Setup利器Stackshare iTunesConnect第三方工具 AppAnnie(iOS)AppSales-Mobile(iOS)AppWage(Mac) For Mac DeveloperAnalytics Fabric DevMate In-App purchases FastSpring Code Editor TextMate SublimeText Atom VS Code BBEdit The github’s Shop Octodex Projects that power GitHub for Mac Projects that power GitHub","link":"/list/index.html"},{"title":"岁月匆匆,我已不是昨日懵懂少年","text":"大约从去年春节,家里人在耳边提到最多的两个字就是“结婚”。这个我特别敏感,一是还没有准备好,更重要的是毕业到现在,感觉自己发展太缓慢,或者说钱途太烂 今年清明节回家,妈妈说奶奶腿疼,一直身体硬朗的她现在走路也不得不扶着拐杖了。时间过的太快,我还记得上学第一天,奶奶用一块雪糕把我骗去幼儿园去上学。现在我都26岁了,将近二十年的时间已经过去了。 毕业也是三年有余,自认为自己技术能力还行,可是一路走来都是各种坑爹的公司。当身边朋友薪水都五位数的时候,我开始觉得我是不是有点太安于现状,或者太没勇气了。 我只想安安心心的专注做技术.","link":"/uploads/2013-04-10-the-time-past-so-quick.html"}]}