26 Nov 2012

OSX 上默认 VIM 不支持 + 寄存器

OSX 上默认 VIM 不支持 + 寄存器,所以从系统剪贴板相互复制东西就麻烦了 所以,我重新装了一下vim

brew install vim

然后

which vim

发现还是 /usr/bin

于是,在 .zshrc内 把 /usr/local/bin 加入 PATH 就 ok 了 其实后来想想,把原来的 move 到 old 上去,将 /usr/bin/vim ln 到/usr/local/vim 就 OK 了 或者

brew install macvim --HEAD --override-system-vim

来安装 macvim 并覆盖系统原来的vim

下来,发现在OSX内用tmux后仍然无法访问+和*寄存器 一直提示 Nothing in + register SO上找找,发现

 brew install reattach-to-user-namespace

装这个补丁就可以访问tmux的buffer了 最后贴一下.tmux.conf

set-option -g default-shell $SHELL
set-option -g default-command "reattach-to-user-namespace -l zsh"
bind y run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
unbind p
bind p paste-buffer
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection

另外不要忘记设置vim的

set clipboard=unnamed

完整的配置https://github.com/huobazi/dotfiles

02 Nov 2012

tmux丢失或显示vim的配色

使用tmux,同时使用vim,发现配色总是和别人截图有差别 在.tmux.conf内设置了

set -g default-terminal "screen-256color"

还是木有作用,最后在SO上找到了解决的办法 在.bashrc内(我是在.zshrc内)添加

alias tmux='tmux -2'

就OK了

参见

http://vim.wikia.com/wiki/256_colors_setup_for_console_Vim http://stackoverflow.com/questions/10158508/lose-vim-colorscheme-in-tmux-mode

12 Sep 2012

将MySQL 的数据导入 PostgreSQL

开始学习使用PostgreSQL, 先尝试将MySQL数据导入到PostgreSQL

安装PostgreSQL

sudo apt-get install postgresql postgresql-client postgresql-contrib  

基本按照http://wiki.ubuntu.org.cn/PostgreSQL进行设置就OK了

安装开发工具

sudo apt-get install libpq-dev pgadmin3

PgAdmin3 这是一个桌面 GUI 工具, 可以很方便的管理 PostgreSQL

用到的RubyGems

在 Gemfile 中增加:

gem "pg" 
gem "mysql2"

然后

bundle install

完整的 Ruby 代码

# coding: utf-8
require 'mysql2'
require 'pg'

mysql_client = Mysql2::Client.new(:host => "localhost", :username =>"root", :password => "pa$$word", :database => "my_test", :encoding => "utf8")

postgres_client = PG::Connection.new(:host => "localhost", :dbname => 'mydb', :user => "postgres", :password => "pa$$word")
postgres_client.set_client_encoding('utf8')

mysql_result = mysql_client.query('select `code`,`name`,`level` from `chinese_regions`')

step = 0
mysql_result.each do |row|

  the_code = row['code']
  the_name = row['name']
  the_level = row['level'].to_i
  insert_sql_test = "insert into chinese_regions (\"code\",\"name\",\"level\") values ('#{the_code}','#{the_name}','#{the_level}');"
  postgres_client.exec(insert_sql_test)

  step += 1
  puts '-' + step.to_s + '-' + the_code + '--' + the_name + '--' + the_level.to_s

end

Run 啊 Run 啊的就 OK 了

15 Aug 2012

使用AjaxUpload和Carrierwave在Rails Mongoid中批量上传图片

file-uploader是一个用 Javascrit 编写的文件上传 Libary,在这里我使用CarrierWaveMongoid 来完成多文件的无刷新上传功能

RubyGems

gem 'mongoid', '3.0.4'
gem 'carrierwave', '0.6.2'
gem 'carrierwave-mongoid', :github => 'jnicklas/carrierwave-mongoid', :branch => 'mongoid-3.0' 
gem 'mini_magick', '3.4'
gem 'rack-raw-upload', '1.1.0'

Model

class Screenshot
  include Mongoid::Document
  include Mongoid::Timestamps::Created
  include Rails.application.routes.url_helpers

  attr_accessible :image 
  field :image 

  mount_uploader :image, ScreenshotUploader 

end

Controller

class ScreenshotsController < ApplicationController

  def index
    @screenshots = Screenshot.all.desc(:created_at)

    respond_to do |format|
      format.html # index.html.erb    
      format.js{ render :layout => false}
    end
  end

  def create
    file = params[:qqfile].is_a?(ActionDispatch::Http::UploadedFile) ? params[:qqfile] : params[:file]
    @screenshot = Screenshot.new
    @screenshot.image = file
    if @screenshot.save
      render json: { success: true, src: @screenshot.to_json }
    else
      render json: @screenshot.errors.to_json
    end
  end

  def destroy
    @screenshot = Screenshot.find(params[:id])
    @screenshot.destroy

    respond_to do |format|
      format.html { redirect_to screenshots_path }
      format.js{ 
        @screenshots = Screenshot.all.desc(:created_at)
        render :layout => false
      }
    end

  end

end

Uploader

# encoding: utf-8
require "digest/md5"
require 'carrierwave/processing/mini_magick'

class ScreenshotUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick

  storage :file

  # Override the directory where uploaded files will be stored.
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end


  process :convert => 'png'

  # Create different versions of your uploaded files:
  version :thumb do
    process :resize_to_fill => [120, 120]
  end

  # Add a white list of extensions which are allowed to be uploaded.
  def extension_white_list
    %w(jpg jpeg gif png)
  end

  # Override the filename of the uploaded files:
  # see http://huacnlee.com/blog/carrierwave-upload-store-file-name-config/
  def filename
    if super.present?
      # current_path 是 Carrierwave 上传过程临时创建的一个文件,有时间标记,所以它将是唯一的
      @name ||= Digest::MD5.hexdigest(File.dirname(current_path))
      "#{@name}.#{file.extension.downcase}"
    end
  end
end

Javascript

  $(document).ready(function(){

    var uploader = new qq.FileUploader({
      debug: true,
      allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'],
      sizeLimit: 1048576, // max size: 1MB
      minSizeLimit: 0, // min size
      multiple: true,
      element: document.getElementById('file-uploader'),
      action: '<%= screenshots_path %>',
      onComplete: function(id, fileName, responseJSON){
        $.getScript("<%= screenshots_path %>");
      },
      onSubmit: function(id, fileName) {
        uploader.setParams({
          xx: "xx",
          yy: 'yy',
          zz: 'zz',       
          authenticity_token: "<%= form_authenticity_token.to_s %>"
        });
      }
    });

});

你可以在 https://github.com/huobazi/ajax-upload-with-carrierwave-mongoid下载完整的示例代码

06 Mar 2012

从typecho转换到Octopress了

人生在于折腾,所以将博客转换到Octopress了
我的博客经历了如下几次变动:
2003年1月,自己装了个SnowForum,用来写些技术记录之类的东西
—————–>
2004年4月,搬到博客园,以前的记录停止维护,后来数据丢失
—————–>
2009年6月,搬出博客园,转换到Wordpress当时在旧博客上写了script,告知访问者此处停止更新,询问访问者是否停留在当前页,或转向新页面(可能有更新),因此被封号 @_@|||
—————–>
2009年7月,博客又转换到Typecho平台
—————–>
2012年3月,转到Octopress了,一个静态博客生成引擎,现在看到的全都是html页面,我写了几行ruby代码做了转换,在https://github.com/huobazi/typecho-to-octopress,希望对想转换的朋友有用。

25 Feb 2012

HG232破解一例

###0. 默认超级账户

如果电信没有改过你的猫账户,可以尝试使用下面的信息登陆,如果不可以在进入后面的步骤1和2破解 帐号: telecomadmin 密码:nE7jA%5m (注意大小写)

###1. 下载配置文件

猫上插入U盘,下面两种方法都可以,您挑一种吧。

#####1.1 手工操作—-乐趣

用猫后面印刷的普通用户useradmin登陆,这个用户登陆进去什么高级全选都木有,但是表着急,我这么干的,浏览器用firefox,如果木有就去下载,然后装上firebug,去看隐藏的html元素吧,把样式表的disply:none;都禁止掉,什么 备份配置文件、启动从U盘加载配置、回复出厂值、日志等等都出来了吧,插入U盘,点击备份按钮,文件就下载下来了。

#####1.2 连接下载—-直接

同时通过分析html和javascript代码,我直接把下载地址找到了,如果你不想或者木有firefox&&firebug,那就直接访问: http://192.168.1.1/html/ehomeclient/cfgUSBRestore.cgi?coverusbpath=usb1_1 这是firebug分析抓包后得到的地址,嘿嘿。 配置文件就能成功被备份出了,在U盘根目录生成的e8_Config_backup文件夹里ctce8_HG232.cfg。

###2. 解密配置文件

网上有现成的编译好的工具可以直接用,不过作为技术宅男,当然要做点有挑战性的了,我弄了俩,一个javascript写的,一个ruby写的,开源滴,您用着放心哦

#####2.1 无ruby环境

将代码库里的decrypt.html另存到本地,然后用浏览器打开,在Source里粘贴用ctce8_HG232.cfg文件的内容, 点击解密按钮,就可进行解密,加密同理。

#####2.2 有ruby环境

如果有ruby运行环境,则可以使用代码库里的decrypt.rb另存到本地来,把要破解或者加密的文件放入相同目录,在命令行运行 ruby decrypt.rb 按照提示做就可以了

#####2.3 超级管理员密码 到文本编辑软件打开破解后的文件,查找telecomadmin,找到 Userpassword里面的就是超级管理员的密码了。一般是telecomadmin加串数字。

###3. 设置

后面的情况就大同小异了,网上很多介绍,开路由,,自动拨号,开无线,一堆一堆的教程,另外有些设置在管理平台是没有的,比如下面的ftp和telnet设置,如果又必要使用这些相功能,修改配置文件,加密后,登陆后台后启用从usb恢复设备这个功能,然后把配置文件夹自己修改后,再恢复回去,就可以了。

###4. 代码

本文提及的代码可以在https://github.com/huobazi/hg232下载到

###5. 其他

4个RJ45口理论上都可以设置成接电脑或者itv输出,并不局限于写了itv的那个口。另外,也可以增加一个itv无线网络,在你的机顶盒上加个无线网卡,机顶盒拨入此无线网络,这样就不用拉一堆堆的线了,很适用于前期没有做好布线设计的朋友。

itv 不选择 无线的话 要选VLAN透传,选无线是VLAN修改

另外,网上有现成的改好的配置文件下载,http://email2me.blog.163.com/blog/static/34347033201101094128402/

13 Feb 2012

iOS通过UIActionSheetDelegate来实现警告的方法

有时候需要用户确认一些操作,比如退出,删除数据等等,用UIActionSheetDelegate实现比较友好,实现也很简单,controller实现UIActionSheetDelegate协议就可以了,示例如下:

01 #pragma mark-
02 #pragma mark UIActionSheetDelegate with logOff
03
04 - (void) onLogOffButtonClick:(id)sender{
05     UIActionSheet actionSheet = [[UIActionSheet alloc] initWithTitle:@“确认要退出登录吗?” delegate:self cancelButtonTitle:@“不退出” destructiveButtonTitle:@“退出” otherButtonTitles:nil, nil];
06    
07     [actionSheet showFromTabBar:self.navigationController.tabBarController.tabBar];
08     XX_RELEASE_SAFELY(actionSheet);
09 }
10 - (void)logOff{
11
12     //do logoff
13    
14     [self.navigationController popViewControllerAnimated:YES];
15 }
16
17 - (void)actionSheet:(UIActionSheet
)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex; {
18     switch (buttonIndex) {
19         case 0:
20             [self logOff];
21             break;
22         case 1:
23             [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
24             break;
25         default:
26             break;
27     }
28 }

04 Feb 2012

Ubuntu下设置 Sublime Text 2 显示中文 && 输入中文

Sublime text 2在mac os 下用的很舒服,今天尝试在ubuntu下使用一下,发现汉字显示不了,

后来找到方法:

菜单栏 -> Preferences -> File Settings - User,在配置文件中增加:

// Settings in here override those in "Default/Base File.sublime-settings", and
// are overridden in turn by file type specific settings. Place your settings
// here, to ensure they're preserved when upgrading.
{
    "font_face": "WenQuanYi Micro Hei Mono"
}
就OK了,其中文泉驿是著名的开源字体 http://wenq.org/

然后我们来解决中文输入的问题

sudo apt-get install scim

sudo apt-get install scim-pinyin

在“系统-首选项-scim设置里“

scim设置->全局设置->将预编辑字符串嵌入到客户端中  勾去掉
scim设置->gtk->嵌入式候选词标 勾去掉

下来 在“系统-语言支持”里面选上“scim-bridge”就可以了,记得这些修改完要注销重新登录进来哦。

或者 ,打开终端,输入 pkill scim,然后输入 scim -d,如果不起作用,那还是建议你注销一下

09 Dec 2011

How to,在iOS中点击文本框以外区域,隐藏键盘

当点击文本框以外部分时,隐藏键盘,实现很简单,加个Category就可以了,代码如下:

#import <UIKit/UIKit.h>
@interface UITextField (HideKeyBoard)
-(void)hideKeyBoard:(UIView *)view;
@end

#import "UITextField+HideKeyBoard.h"

@implementation UITextField (HideKeyBoard)
- (void) hideKeyBoard:(UIView*)view{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(doHideKeyBoard)];
   
    tap.numberOfTapsRequired = 1;
    [view  addGestureRecognizer: tap];
    [tap setCancelsTouchesInView:NO];
    [tap release];
}

- (void)doHideKeyBoard{
    [self resignFirstResponder];
}
@end

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    [self.txtInput hideKeyBoard:self.view];
}

see also: https://gist.github.com/1450404

28 Nov 2011

 [How to] 如何卸载Xcode

 

 $ sudo /Developer/Library/uninstall-devtools --mode=all