七月 24th, 2010
1.定义menu.xml资源文件
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:id=”@+id/settings”
android:title=”@string/settings_label”
android:alphabeticShortcut=”@string/settings_shortcut”></item>
</menu>
<menu xmlns:android=”http://schemas.android.com/apk/res/android”> <item android:id=”@+id/settings” android:title=”@string/settings_label” android:alphabeticShortcut=”@string/settings_shortcut”></item></menu>
2.在activity的onCreateOptionsMenu中inflate menu
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu)
3.在acitvity的onOptionsItemsSelected中添加事件
switch ( item.getItemId() ) {
case //...
}<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">
</span></span>
Tags: activity, android, inflate, inflater, menu, oncreateoptionsmenu, onoptionsitemsselected
Posted in Java, android | No Comments »
七月 22nd, 2010
最近一个项目需要实现将PDF文件转成图片的功能,由于转换时间较长,所以选择在系统后台执行转换工作,使用的是一个叫imageMagic的程序(貌似很多图片处理软件用的就是这个库)。查看imageMagic的官方文档,参数实在太多,做了一番research之后,记录如下:
PDF转图片
convert -density 300 -quality 100 -resize 1024×768 -antialias test.pdf[0-50] test.jpg
使用convert命令进行转换:
density参数是设置图片DPI值
quality参数是设置图片质量(0-100,对png格式图片无效)
resize参数是对图片进行缩放(按比例)
antialias参数是设置开启文字抗锯齿效果
test.pdf是要转换的pdf文件(必要时需要指定绝对路径,不一定是pdf格式,图片格式即可,0-50是指要转换的页码,不指定就全部转换)
test.jpg是转成图片后的名字(如果pdf有多页,图片名称按照 test-0.jpg, test-1.jpg, test-2如此类推)
PHP中调用convert命令
PHP中有几个调用系统shell命令的函数,这次项目中我使用exec这个函数,使用方法如下:
$cmd = "convert -density 300 -quality 100 -resize 1024x768 -antialias test.pdf[0-50] test.jpg";
// $output变量记录命令执行时的所有输出,以数组格式返回
// 执行后可以对$output变量进行检查,因为convert命令正常的话是没有输出的,如果有输出可能就是转换失败
exec($cmd, $output);
解析PDF等图片的信息
可以使用identify命令对PDF进行解析,可以得到文件的分辨率等信息,简单命令如下(详细参数参考官方文档):
identify test.pdf
Tags: convert, identify, imageMagic, jpg, pdf
Posted in PhP | No Comments »
七月 20th, 2010

多文件上传
以往我打算是实现同时上传多个文件,会使用多个”file”表单元素,这是令人讨厌的,效率低下(译者注:用户需要一个文件一个文件地选择),但我无法想象我如果不使用它的话,我的用户会怎么样。很幸运,Safari, Chrome和firefox 现在已经实现了使用一个file表单元素就能完成完成多文件上传的方法。
查看DEMO
HTML
<form method="post" action="upload-page.php" enctype="multipart/form-data">
<!-- 译者注:注意這個multiple属性和name属性 -->
<input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" />
</form>
<br/>
简单的给file 表单元素添加一个muliple属性就允许多文件上传了。(译者注:multiple的值的作用不清楚,原文的意思大概是可以添加验证功能)
Listing Multiple Files with JavaScript
//get the input and UL list
var input = document.getElementById('filesToUpload');
var list = document.getElementById('fileList');
//清空列表
while (list.hasChildNodes()) {
list.removeChild(ul.firstChild);
}
//遍历每一个选择上传的文件
for (var x = 0; x < input.files.length; x++) {
//add to list
var li = document.createElement('li');
li.innerHTML = 'File ' + (x + 1) + ': ' + input.files[x].name;
list.append(li);
}
file表单元素的files属性是一个数组,所以可以通过length属性可以知道用户选择的文件。可以遍历得到每一个文件的路径(path)和名称(name)。
Receiving and Handling Files with PHP
使用PHP接收并处理文件
if(count($_FILES['uploads']['filesToUpload'])) {
foreach ($_FILES['uploads']['filesToUpload'] as $file) {
// 你可以在处理图片
echo $file;
}
}
PHP根据表单的那么属性创建了一个文件数组。
当然,你也可以在IE和opera中通过flash实现多文件上传,可是想这样要另外的组件支持始终不是什么好主意。希望这些浏览器快点支持多文件上传吧!
by 译者
评论中以外发现一个flash上传的jquery插件http://www.uploadify.com/,这段时间在弄大文件上传的处理方式,是使用swfupload这个组件实现的。
记录一下这个uploadify, 以后也许用得着:)
Tags: flash, multiple, upload, 上传, 多文件, 翻译
Posted in PhP, html | No Comments »
七月 19th, 2010
java开发好像大多都是以xml作为配置文件(php大多使用ini格式的文件),一开始真是有点不习惯,而且很多配置项给人糊里糊涂的感觉,目前只是处于复制粘贴,不知其所以然的水平。以下是在android开发中使用单元测试的配置项要点:
1.在AndroidManifest.xml中的application节点下添加如下节点:
<uses-library android:name=”android.test.runner” />
2.在AndroidManifest.xml中的根节点(mainfest)下添加如下节点:
<instrucmentation android:name=”android.test.InstrumentationTestRunner”
android:targetPackage=”cn.sharp.action” //这个属性必须与单元测试用例class所在的package一致
android:label=”Test for My App”/>
杂碎记录
1.限制输出格式为数字(整数或浮点数)的属性
android:numeric=”integer|decimal”
2.字符串转浮点型
String s = “1.2″;
float f = float.parseFloat(s);
3.java中浮点型转字符串
String str = “”+f;
结束语
终于开始认真学android开发了,入门还是不难的,加油!
Tags: instrumentation, java, runner, testrunner, unittest, uses-library, xml, 单元测试, 配置
Posted in Java, android | No Comments »
七月 19th, 2010
如何导出sqlite的sql语句
作者:axgle
这是我实际经验的总结,是有效的。不知道有没有更简单的办法呢?
知道的朋友回复一下,谢谢.
1.选择源db_src
sqlite3 src.db
2.选择输出模式
.mode insert
3.选择输出文件名
.output sql.txt
4.开始dump
.dump table1,table2
Posted in 砸碎念 | 3 Comments »
七月 16th, 2010
定义匿名类
在声明某个类的成员属性时,可以将匿名类的实例赋值给改成员变量,也可以在某个方法中,将匿名类实例作为方法返回值
case1: 赋值给类中成员变量
class Outer {
public B bb = new B() { // B是匿名类的父类或者是一个接口
private int a = 1;
private int b = 2;
public function func(){
// do sth.
}
}; // 此处的分号一定要记得,因为这里是一条语句(表达式)
}
case2:方法中返回匿名类的实例
class Outer {
public B getAnoy(){
return new B() { // B是匿名类的父类或者是一个接口
private int a = 1;
private int b = 2;
public function func(){
// do sth.
}
}; // 此处的分号一定要记得,因为这里是一条语句(表达式)
}
}
向匿名函数父类的构造函数传递参数
//很简单,只要在声明匿名函数的时候传递
new B(1){
//声明匿名函数
}
方法中的匿名函数使用方法的参数
当方法的参数为final时,匿名函数才能使用该参数变量
class Outer {
public B getAnony(final String param) {
return new B() {
private String paramHolder = param; // param必须为final
}
}
}
匿名函数的构造函数
因为是匿名函数,那么就不可能有命名的构造函数,但是可以通过Instance initialization(实例初始化)来实现类似构造函数的效果
class Outer {
public B getAnony() {
return new B() {
{ System.out.println("初始化对象时调用") } //这样就可以实现构造函数的效果了
private int a = 1;
}
}
}
匿名类与正常的类继承的不同
尽管匿名类可以实现某个接口,也可以扩展(extends)某个类,但是不能同时实现一个接口并扩展某个类。鱼与熊掌不能兼得。
Thinking In Java内部类中讲到匿名类时,通过匿名类巧妙地实现了工厂方法。
Tags: java, 匿名类
Posted in Java | No Comments »
七月 13th, 2010
HTML5的API加入了一个很有用的功能,那就是classList。
classList对象被添加在所有的DOM元素中,提供了DOM元素的class相关操作,如添加、删除等。
classList对象结构如下:
node.classList = {
length: {number}, /* # of class on this element */
add: function() { [native code] },
contains: function() { [native code] },
item: function() { [native code] }, /* by index */
remove: function() { [native code] },
toggle: function() { [native code] }
}
正如你所看到的,classList对象内容不多,但都是一些很有用的属性和方法。
添加一个class
myDiv.classList.add('myCssClass');
删除一个class
myDiv.classList.remove('myCssClass');
切换class
myDiv.classList.toggle('myCssClass');
检测元素是否拥有某个class
myDiv.classList.contains('myCssClass');
现在只有firefox支持classList这个对象。相信其他浏览器也会陆续支持。
Tags: class, classList, css, dom, html5
Posted in JavascriPt | No Comments »
七月 13th, 2010
PHP中有三个配置项是控制上传相关的:
memory_limit
post_max_size
upload_max_filesize
其中只有memory_limit可以在脚本中动设置
ini_set(‘memory_limit’, ‘60M’); // 可成功设置
ini_set(‘post_max_size’, ‘40M’); // 失败
ini_set(‘upload_max_filesize’, ‘40M’); // 失败
还可以通过.htaccess文件设置:
php_value memory_limit 60M
php_value post_max_size 40M
php_value upload_max_filesize 40M
当然,还可以直接php.ini中配置
Tags: htaccess, ini, PhP, post, 上传, 大小, 限制
Posted in PhP | No Comments »
七月 11th, 2010
mysql中复制表结构和数据的方法(只复制表结构,不复制约束):
假设要建一个表tableNew,数据结构与已存在的表tableOld一致
CREATE TABLE tableNew SELECT * FROM tableOld WHERE 1<>1
如果要全部复制(包括数据),可以这样写
CREATE TABLE tableNew SELECT * FROM tableOld
这两天给人写一个电话本,需要修改数据库中的一个表的名称,修改表名的语句如下:
ALTER TABLE mytable RENAME TO newTable
Tags: mysql, 修改, 复制, 结构, 表名
Posted in mysql | No Comments »
七月 2nd, 2010
我在公司的所属部门是外包,我虽然也不喜欢做外包,但觉得在这方面目前还是有很多东西学习的。另外公司主要方向不是做外包,等公司主要产品上了轨道之后,就不需要做外包,到时就可以做真正自己的产品。所以自己其实是在以一种“等待和学习”的心态在工作。
前几天我试用期满了,Michael找我谈话,和我谈了公司的发展情况等等,并且分析了我的工作职责等问题,使我的心态有所改变。这是我才明白到,我们在做外包项目的同时(特别是对于我来说)不要仅限于为了提高编程水平。对于公司来说,公司是在积累案例,我们的客户是国外的,有很多服务在国内目前是没有的,在将来,我们可以把这些曾经做过的项目,移植到国内市场来。比如之前我们做过的一个“位置服务”,现在随随便便就可以改个包装就可以在国内翻一个版本。
不要仅仅限于解决技术上的问题,而是要理解需求,要理解客户为什么要求这样做,这样的好处是什么。要不然就算你做过很多项目,但都不知道这些项目为什么有这样那样的需求,不知道具体某个功能的好处在哪里,缺点在哪里的话。做过再多的项目,你也只不过是个coder。
思考技术以外的事情(在这里指理解产品,理解需求),并不会浪费太多时间,可以说这两件事是可以同时进行的,既然在技术能够提高的同时,能够让自己思考得更多,何乐而不为呢。
要变得更有智慧,而不只是更有知识。
Posted in 砸碎念 | No Comments »