大海Online的博客

Looking for Interest

maven常用技巧

maven常用技巧

限定只使用内置的archetypes

mvn archetype:generate -DarchetypeCatalog=internal

mvn创建spring mvc https://github.com/kolorobot/spring-mvc-quickstart-archetype

mvn archetype:generate -DarchetypeGroupId=com.github.spring-mvc-archetypes -DarchetypeArtifactId=spring-mvc-quickstart -DarchetypeVersion=1.0.0-SNAPSHOT -DgroupId=hello -DartifactId=hello -Dversion=1.0.0

sunxi-bsp 脚本分析

cubieboard刷sd卡时, 使用了下面的脚本 https://github.com/linux-sunxi/sunxi-bsp/blob/master/scripts/sunxi-media-create.sh

命令如下: ./script/sunxi-media-create.sh /dev/sdb 引导文件 操作系统文件

####分析如下:

  • umount sd
  • sd卡前1M的字节,全部清0
  • sfdisk命令写分区表
  • 两个分区分别格式化成vfat与ext4文件系统
  • 解压两个文件到临时目录
  • /bootloader/sunxi-spl.bin 写至sd卡8K处, (第二引导系统处)
  • /bootloader/u-boot.bin 写至32K处 (真正的引导模块)
  • 两个分区mount至文件系统
  • 拷贝文件 /kernel/uImage => 第一分区
  • 拷贝文件 /kernel/*.bin => 第一分区
  • 拷贝文件 /kernel/*.scr => 第一分区
  • 拷贝文件 操作系统文件/* => 第二分区
  • 拷贝文件 /rootfs/* => 第二分区

####总结如下:

  • 脚本主要是分区,格式化,拷贝文件
  • 分成两个区,两个文件解压后,拷贝至分区内

####关于源码 源码的github上,有几多很特别的目录, 是打不开的, 很怪~~~ 更详细的可参考: http://linux-sunxi.org/Main_Page/zh_cn#.E8.BD.AF.E4.BB.B6

cubieboard上手

最近刚买了cubieboard, 入手到玩转后的各个过程记录下

购买链接: http://item.taobao.com/item.htm?id=18271795262 已有装备: 笔记本, 无线路由器 入手装备: cubieboard, 带电源,ttl2usb线等 关键问题: 无显示器与电视 超市购物: 读卡器+网线, (从手机上拿的TF卡)

Q: 没有显示器与电视, 如何连接

  • 板子预装的android, 启动后, 可以直连至无线路由器, 但无法ssh或telnet上
  • 使用TTL线进行连接 http://linux-sunxi.org/Cubieboard/TTL
  • 然后使用windows/putty连接 方式:serial COM3 速率:115200
  • 然后接上电源就可以看到输出信息了, 这时就可以敲shell命令了 (如ls)
  • 没有找到命令行下载与安装软件的方式, 后续考虑

Q: 在tf卡上安装ubuntu

  • 用读卡器装tf卡连接到了ubuntu笔记本上
  • 刚开始时, 容量有问题, 只有64M, 用fdisk命令解决了, 见前一博文
  • 刷tf方法见: http://blog.sina.com.cn/s/blog_5459f60d0101h0j3.html http://cn.cubieboard.org/forum.php?mod=viewthread&tid=55&extra=page%3D1 (precise在镜像上已经失效了,换quantal(即v12.10))
  • 装上tf卡, 拔电源重启, 就可在ttl上看到, 已经连接到ubuntu上, 并且可以敲命令了
  • 在/etc/resolv.conf配置nameserver, 就可以ping通baidu.com了
  • apt-get install openssh-server, 然后就可以拔掉ttl线了,
  • 买上无线网卡, 就可拔掉网线, 连接线, 只剩下电源线了

Q: 刷nand

  • 可使用官网提供的方式刷系统
  • 也可以用tf卡的ubuntu, 直接写系统至 /dev/nand
  • 拔掉tf卡, 用nand上的系统启动

接下来, 就可以搜索各种有趣的玩法了~~~


sd卡刷ubuntu/linaro, (来源见前面描述)

git clone https://github.com/linux-sunxi/sunxi-bsp/ 
cd sunxi-bsp 
wget http://dl.linux-sunxi.org/amery/sunxi-3.0/latest/cubieboard_hwpack.tar.xz
wget http://releases.linaro.org/latest/ubuntu/quantal-images/alip/linaro-quantal-alip-20121124-519.tar.gz
./scripts/sunxi-media-create.sh /dev/sdb cubieboard_hwpack.tar.xz linaro-quantal-alip-20121124-519.tar.gz

ubuntu 下使用 tf 卡

记录下,在ubuntu下使用tf卡的问题

在ubuntu使用了下tf卡,在windows下使用读卡器正常, 在ubuntu下就变成63M了

使用

sudo fdisk /dev/sdb

之后为交互式的命令行操作

  • 使用p显示当前分区情况
  • 使用d命令删除了所有的分区
  • 使用o命令改为兼容的分区表结构 或 用c,没有研究
  • 使用a命令,增加可引导标识
  • 使用w命令,保存退出
  • 使用q命令,不保存退出

中间操作时,会遇到一些error(如设备忙),请尝试以下办法

  • 操作完一个命令,如o后,先w保存退出,然后重新fdisk进命令后,再操作
  • 使用d删除完全后,w保存后,再重新进入操作
  • 分区后,还要再格式化为某个文件系统, 关键词 mkfs
  • /dev/sdb为tf卡, /dev/sdb1为第一个分区, /dev/sdb2为第二个分区

fdisk后, ubuntu与windows就都正常了, 没试过U盘,改天看看~~

使用符号链接提高工作效率

使用符号链接提高工作效率

目标 本文主要阐述一种理念,如何使用符号链接来提高工作效率

什么是符号链接

  1. windows下使用junction或者mklink /J创建的符号链接 (非快捷方式)
  2. linux下使用ln -s创建的符号链接

让我们来先看看各种使用场景

dropbox 很多网盘只支持同步单一个文件夹,容易设计,容易理解,容易使用 但事实上会遇到很多不方便,尤其是想同步一个已经存在的目录时 使用junction或ln -s吧,不仅同步,还不影响原来的开发环境

apache apache默认安装的时候,根目录是指向 /var/www 的 很多人喜欢去改 apache.conf 来修改ROOT 比如改至 ~/workspace 这样的 其实可以这样用 ln -s ~/workspace /var/www/workpsace 这样能解决几个问题 a). 系统重装时,或者更换环境时, /home/xx/workspace要换成 /home/yy/workspace,因为使用 ~ ,apache可能不知所云 b). 这时,如果想重新搭环境,改apache.conf是个问题,是从网上下载一份,还是拷贝之前,有时喜欢把这些配置放在云盘备份,但有些目录系统重装后目录就没了,或者要配置另一个环境 c). SCM维护大量机器的时候,也是希望.conf可以统一,不统一的再用include子conf d). 如果使用 alias, 这不要改配置还要重启吗? 试试符号链接吧, ls一目了然 e). 也许会有很多不错的使用方式 i). 把公司统一配置的tools从共享服务器别名过来,里面已经装了dummyimage等等 ii). 把github目录别名过来,直接浏览器预览 iii). 把 ~/personal/secret 临时别名下,使用完后,马上删除别名 f). 很多好处

切换版本 比如: http://backup.com/nodejs/lastest/index.html http://backup.com/nodejs/v8.0.16/index.html http://backup.com/nodejs/v8.0.22/index.html 这里的lastest目录,就使用符号链接吧

http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/latest/ 这里的lastest,也应该是某个版本的符号链接吧 难道每发布一次版本,改下apache.conf,再重启,用符号链接

你经常在python2 与 python3 之间切换,这些路径在很多地方都配置过,在shell,在历史维护任务,在很多django工程中,你新找到一个python3的运行统计工具,你想尝试下,建立一个python别名,大家都指向到这里吧,随时切换

mod-enabled 无意中发现ubuntu中的/etc/apache2/中的模块是这样管理的 将增加删除一个模块,改为文件操作,不用再修改配置文件了 如果能不改配置文件,就会有以下好处

  1. 命令行工具,帮忙调整apache配置时,可以不用去改配置文件,避名意外
  2. apt-get做插件开发时,不需要去解析修改配置文件,直接改文件就可能是一个插件了

/etc/init.d/ 在linux下面,有很多目录下,都是由一些别名文件组成的 /etc/init.d/ /etc/fonts/conf.d 这些目录大部分是相当于一个list的工作,用于收集需要进行的任务 然后将各个任务从四面八方收集而来,这里只是一个汇总工作,不破坏各个任务的内容

库 win7引入的库,其实也是一个别名,也是一个符号链接的应用

你有什么想法?

包管理软件

常见的各类包管理软件对比

包管理分类

  • 操作系统包管理 如: yum (RHL), apt-get(ubuntu), homebrew(mac)
  • 语言级别 如: npm(nodejs), gem(ruby),pip(python), bower(javascript), maven(java)

总结

  • 包管理几乎都有list, install, uninstall, update upgrade, search 等功能
  • 语言级别时, 因涉及到应用, 会分 local与global, 会有工程配置如package.json
  • maven比较特殊, 不支持install, 需要手工配置pom.xml (需要不少插件)

一些列表 [table] |name | list | install | uninstall| update | search | init| |apt-get| apt-cache | install | uninstall | upgrade | apt-cache search | | |yum | |||||| |brew | list | install | uninstall | upgrade | search | | |npm | local | -g –save | prune | update | /regexp | package.json| |gem | –local | local| cleanup | update | –remote | Gemfile (bundle init)| |pip | freeze | install | uninstall | —- | search | | |bower | list | -g –save | cache-clean | update | search | component.json | [/table]

心得

  • yum, apt-get, npm, gem 几乎是官方的, 但mac, python还是选择性较多
  • install 并保存至 .json 配置时, 使用 –save参数, 但gem,python不清楚,待补充
  • 有些update是更新版本信息的, upgrade才是升级所有组件
  • 组件的依赖版本冲突如何办, npm的方法确实不错

汇总列表

  • apt-get(ubuntu),yum(fedora),macports(mac),homebrew(mac),pkg(solaris),emerge(Gentoo)
  • npm(nodejs),gem(ruby),pip(python),easy_install(python),nuget(vs),bower(javascript)
  • maven(java),grunt(java),gradle(java),pear(php),cpan(perl)

各种镜像: http://ruby.taobao.org/ http://gems.rubyforge.org/ http://gems.github.com/

chrome support for sass

chrome support for sass

很多人说 chrome 已经支持 sass了,但是怎么个支持法,却没有提及,通过google,搜出来一些资料,共享下

chrome开启sass

  1. chrome://flags, 启用开发者工具实验 => 点击最下方重启
  2. chrome开发者工具(F12), 右下角setttings,experiments,support for sass => 重启
  3. OK 可以了

如何使用

  1. 使用sass –watch文件夹, 实时编译 .scss 文件至 .css
    sass --watch .:. --debug-info --line-number
    

    其中冒号前后,为监视的目录

  2. chrome打开页面, 页面中的link,使用编译后的 .css
  3. 开发者工具中, 查看 .css 文件, 已经变成了 .scss文件,并可以点击过去

注意点: debug调试, .scss 文件只支持 file://

Ps: 原以为会支持实时编译,原来不是,可惜了

参考:

  • http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html
  • http://wiki.netbeans.org/SourceMapsExampleSASS

ubuntu 与 windows 的互联与共享

windows访问ubuntu

  1. ubuntu 安装 samba
sudo apt-get install samba
  1. 修改 /etc/samba/smb.conf文件

[global]
   workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)
;   wins support = no
   wins server =  (用ipconfig /all里看, 或者直接填网关ip)
   dns proxy = no
   name resolve order = lmhosts host wins bcast

   security = share
   usershare allow guests = yes
[share]
      path = /home/ubuntu/
      available = yes
      browseable = yes
      public = yes
      writable = yes

  1. 重启服务
    sudo restart smbd
    sudo restart nmbd
    
  • smbd 是 samba 的文件共享服务
  • nmbd 是 windows name 解析服务
  1. OK 这样,windows 就可以ping 通,且能查看unbutu的共享文件

ubuntu 访问windows

  1. 安装服务
    sudo apt-get install cifs
    
  2. mount
    sudo mount -t cifs //hostname/share  /mnt/path/to/name -o username=user
    

补: 上述是通过samba即cifs实现,也可通过ftp, webdav 等等其它协议实现互相访问

其它问题

  1. ubuntu ping 的时候速度很慢,ping taobao.com 也慢 http://forum.ubuntu.org.cn/viewtopic.php?f=116&t=345288
  2. ping 默认会解析全域名 可以在 /etc/resolv.conf 中进行修改,将 search 修改为 正确的域后缀

git的本质

git 的本质

配置: git的配置操作,本质上,都是在修改config文件 (.git/config)

  • git config -l

其中 remote.origin.fetch 与 remote.origin.url 即是 remote 的配置

  • git remote -v 就是显示配置, git remote -v show 细节
  • git remote add rm set-url rename 即是增删改操作
  • git prune 是与服务器同步的功能

其中 branch.master.remote 与 branch.master.merge 即是 branch的配置

  • git branch -v 就是显示配置
  • git branch |-m|-d 就是增删改的操作
  • git branch –set-upstream 设置分支对应的 remote

分支名: git 命令,使用分支时,需要一个名字, 如origin/master, refs/remotes/origin/HEAD等 其实,可以参考 .git/refs目录, 就明白了

  • heads 代表本地分支
  • remotes 代表远程分支
  • tag 代表tags分支
  • master 与 HEAD 同义

当我们需要使用分支时,语法大致是这样的 (refs/)? (heads/|remotes/|tags/)? 即,refs 或者 heads 等, 都是可以省略的, git 会遍历查询 假如有冲突时, git报错 warngin: refname '...' is ambiguous , 但还会执行第一个

当然还有更精确及表示更多标识的方式, 即 commitId 而 tag 只是将 commitId 取了一个容易记忆的名字 而 分支,远程分支,可以理解为是一个 commitId 的有序列表(可变数组)

分支操作: 假如将远程仓库也看成是一个个本地分支的话, 就会明白了

  • git pull 就是 git merge origin/master
  • git reset 就是 还原至某分支的状态 (会根据参数,还原 文件,index, commit)
  • git rebase 可以看作是另一种merge操作, 算法不同

操作index

  • git add 追加 index
  • git rm 删除文件,以追加index
  • git mv 移动文件,并追加index
  • git reset 清除uncommit的index

clone

  • 这个大家都知道了,就是一系列git操作的组合

checkout

  • 就是在操作HEAD的位置

git

  • git的所有操作,如果理解清每个命令, 是如何操作 file, index, commit, branch 的,就都理解了

关于平台

所谓“平台”就是能够独立运行并自主存在,为其所支撑的上层系统和应用提供运行所依赖的环境。 (来自百度百科)

越来越多的平台出现了

  1. 操作系统层面: PC, MAC, IOS, Android,
  2. 技术体系层面: HTML5, Flash
  3. 语言层面: java, .net, python
  4. 业务开放平台: webbo, qq, baidu, taobao 开放平台
  5. ….

每个大公司都在制造自己的大平台, 各方各面的大平台 很多程序也在不断完善着自己的产品, 在每个平台上, 推出自己的产品

如:

  1. 很多云盘都在不断扩充自己的战线, 支持着越来越多的平台
  2. 音乐听歌软件,也是pc, mac, web, ios, mp3, 甚至不少开放平台上

继续:

  1. 如果有着各色各样的虚拟机,模拟器, 我们就可以将另一个平台的软件迁移至新的平台
  2. 但是移植并不是那么容易的,很多软件移植时,必须作更改,甚至是界面,操作上的更改
  3. 平台的差异同时也决定着移植的难度, 如PC上软件,迁移至触摸屏上
  4. 当然:平台的迁移也有着自己的复杂度

考虑一类迁移

  1. FC游戏机上软件的迁移,我们会统称这类软件为模拟器,我们会建立各种各样的模块器
  2. windows上的模拟器,mac上,flash的,html5版的
  3. 我们不需要,一个游戏一个游戏的迁移, 我们只需要一个模拟器就可以了

然后:

  1. 各色各样的模拟器出现了
  2. FC的,GBA的,DOSBOX, 然后是IOS的
  3. 最重量级的, 就是虚拟机了, 直接模拟硬件,连各类操作系统也模拟了

好了

  1. 你可以在一个终级模拟的PC上玩着,各色各样的终端的产品
  2. 现在触模的笔记本也出来,你可以模拟更多的终端了

  1. 突然想通了GOOGLE的本质,google就是想在web上,搭建着更加终极的终端,其它终端能干的事,他也要做出来,做不出来,就模拟一个终端出来
  2. 想想这个可能性: a) web版linux b) web版模拟器,有flash版本的,也有nacl版本的 c) web版远程连接,有vnc, 有RDP的,还有chrome与chrome的 d) web版的云盘,相当于硬盘 e) web版的操作系统, chromeOS f) web版的。。。。
  3. 一流的企业做平台啊~~~

  1. 我们经常在代码中,设计一些中间层,借此来统一各类解决方案
  2. 如JDBC接口的出现,就是JAVA当年为了统一存取各种关系数据库
  3. 而这样一来,带来了相当多的好处,上层使用方面了,中间层可以各类扩展,底层也有一依据,大家都很愉快
  4. 同时,成功与失败都在于接口的设计的好与坏
  5. 类似这样的设计有很多:opengl, 各类图片视频格式,tcp/ip, 等等。。
  6. 硬件也是同理的,像USB, wifi, 都是这样的例子

用于实际中

  1. 我们平时的软件开发过程中,也需要加入这样的思考
  2. 一是采用业界通入的解决方案,这样会有很多的第三方的技术,工具支持
  3. 二是从中抽象出自己的中间平台来,让别人帮你丰富起来
  4. 在中间平台上,作更多的文章

平台的成功与失败

  1. 平台的成功有时不在于平台的技术实力,接口的完善
  2. 更多的还是在于,支持者的实力,以及平台对应工具的实力了
  3. 只有用户看到平台真正带来的好处,才会明白过来

举例:

  1. 之前还是ant+cvs的年代的时候,并没有感觉到,会被新的maven+svn取代,但是周边工具丰富起来时,慢慢的大家也就接受了
  2. 再想想现在的git与svn,有人喜欢有人讨厌,但git支持的人多,有很多人共同努力,替代svn估计也是迟早的事情了
  3. 等到svn最后一个让你挽留的特性也被git模仿超越的时候,你就会改变你的想法了
  4. 早点尝试,多学习下,对你有好处
  5. 更多的趋势正在进行,你捕捉到了吗? 要不要提前学习下

有人说,变化每天都在继续,说不定,将来谁笑到最后 而且变化那么多,哪有办法都学的过来,实在太多了 提高自己的开发效率,从手头相关的工具,框架,平台开始吧

  1. IDE,开发语言,编程框架,浏览器,操作系统,文件共享,版本管理,知识管理
  2. 太多的基础平台,多研究下,改进下效率吧
  3. 如果有兴趣,可以找一个方向,大胆深入底层去看看
  4. 别忘了,找志同道合的人去一起研究