安卓SD卡输入输出

2013-03-23 00:00:00 +0000

1、首先AndroidManifest.xml里面要写权限,如下:

<!-- 在SDCard中创建与删除文件权限 -->
<uses -permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses>
<!-- 往SDCard写入数据权限 -->
<uses -permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses>
<uses -sdk android:minSdkVersion="3"></uses>
安卓SD卡输入输出安卓SD卡输入输出
// 写文件
try {
    File myFile = new File("/sdcard/mysdfile.txt");
    myFile.createNewFile(); // 创建文件
    FileOutputStream fOut = new FileOutputStream(myFile);
    OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
    myOutWriter.append(i); // 填内容
    myOutWriter.close();
    fOut.close();
    Toast.makeText(SongsActivity.this, "写入文件成功", Toast.LENGTH_LONG)
        .show();
} catch (Exception e) {
    Toast.makeText(SongsActivity.this, "写入文件失败" + e, Toast.LENGTH_SHORT)
        .show();
}
// 读文件
File file = new File("/sdcard/mysdfile.txt");
try {
    FileInputStream inputStream = new FileInputStream(file);
    byte[] b = new byte[inputStream.available()];
    inputStream.read(b);
    String cc = new String(b);
    Toast.makeText(SongsActivity.this, "读取文件成功", Toast.LENGTH_LONG)
        .show();
    getListView().setDividerHeight(Integer.parseInt(cc));
} catch (Exception e) {
    Toast.makeText(SongsActivity.this, "读取失败" + e, Toast.LENGTH_SHORT)
        .show();
}

JAVA

2013-03-17 00:00:00 +0000

java Commander | java Burner | java Formatter

第一次知道JAVA可以这么写,其实应该还有很多有趣的写法

计算机图形之全息投影

2013-03-17 00:00:00 +0000

室友做的(伪)全息投影原理很简单,效果很棒!
结论:简单的东西也是可以有很棒的演示!
全息投影技术(front-projected holographic display)也称虚拟成像技术是利用干涉衍射原理记录并再现物体真实的三维图像的记录和再现的技术。
全息投影制作教程:
百度贴吧:

Python 用字典写 NFA to DFA

2013-03-17 00:00:00 +0000

NFA to DFA python

比如说这个字典:

这是我的输入,输入一个NFA
dictNFA = {
    'q1': { 'e': ['q2', 'q11'], '0': [''], '1': [''], 'acep': False, 'start': True },
    'q2': { 'e': ['q3', 'q5'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q3': { 'e': [''], '0': [''], '1': ['q4'], 'acep': False, 'start': False },
    'q4': { 'e': ['q5', 'q3'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q5': { 'e': [''], '0': ['q6'], '1': [''], 'acep': False, 'start': False },
    'q6': { 'e': ['q7', 'q9'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q7': { 'e': [''], '0': [''], '1': ['q8'], 'acep': False, 'start': False },
    'q8': { 'e': ['q9', 'q7'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q9': { 'e': [''], '0': ['q10'], '1': [''], 'acep': False, 'start': False },
    'q10': { 'e': ['q11', 'q2'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q11': { 'e': ['q12', 'q14'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q12': { 'e': [''], '0': [''], '1': ['q13'], 'acep': False, 'start': False },
    'q13': { 'e': ['q14', 'q12'], '0': [''], '1': [''], 'acep': False, 'start': False },
    'q14': { 'e': [''], '0': [''], '1': [''], 'acep': True, 'start': False },
}
dictDFA.keys()输出的是列表:
['q14', 'q11', 'q10', 'q13', 'q12', 'q1', 'q3', 'q2', 'q5', 'q4', 'q7', 'q6', 'q9', 'q8']
顺序是固定的这个形式


def loopB(xNFA, xe, tmpInI):
当xe=ε时这个是用循环将q1->q2(消耗ε:the empty string)q1->q11
然后q2->q3...
当xe=0时这个循环q5->q6(消耗0)
当xe=1时这个循环q7->q8(消耗1)
如果要找q1, 不能用dictDFA.keys()[0]
从这个列表得知dictDFA.keys()[0]变成了'q14'
q1的关键是它的'start'是true
那么只能用循环一个一个找
def seachStartOrAccept(startOrAccept): #这个是用来查账它开始start或者结束accept(accept就是两个圈)
    for x in xrange(0, len(dictNFA.keys())):
        if dictNFA.values()[x][startOrAccept]:
            return dictNFA.keys()[x]
dictNFA.values()[x][startOrAccept]其实是dictNFA.values()[x]['start']


tmpII = list(set(tmpII))用这个函数是为了除掉列表里面的重复项,列表重复是允许的,字典里面重复是不允许的。


dictDFA.update({ str(tmpIII): { '0': tmpIIIa, '1': tmpIIIb, 'start': False, 'acep': False } })
字典用update()添加新项目,如果重复,那么新添加的项会替换旧的项


程序开始:
先得出第一个项tmp0
然后tmp0消耗0得到tmp1
tmp0消耗1得到tmp2
tmp1消耗0得到tmp3
tmp1消耗1得到tmp4
。。。以此类推。。。
可以得到形如:
0 1 2
1 3 4
2 5 6
3 7 8
...
树状图如下:
用一个循环让它循环下去,什么时候停止呢?
就是当我被选出来的数,比如说4和之前的1相同,那么4就停止了
if str(tmpIIIa) not in dictDFA.keys():
    loopNFAtoDFA(tmpIIIa)


最后得到这个结构的字典:
dictDFAend = {
    str(qA): { '0': 0, '1': 1, 'start': False, 'acep': False },
    str(qB): { '0': 0, '1': 1, 'start': False, 'acep': False },
    str(qC): { '0': 0, '1': 1, 'start': False, 'acep': False },
    str(qD): { '0': 0, '1': 1, 'start': False, 'acep': False },
    str(qE): { '0': 0, '1': 1, 'start': False, 'acep': False },
}
NFA to DFA 原理如此图
接下来最小化这个DFA:
首先将non-accept组成一组,accept组成一组
non-accept消耗0归不同类的各自分开,若为同一类,则在一起。
non-accept一类的消耗1归不同类的各自分开,若为同一类,则在一起。
最后连接每一个类。
NFA转化为DFA,并且Minimum DFA过程如下:

Python raw_input input

2013-03-13 00:00:00 +0000

程序如下:


# -*- coding: cp936 -*-
#简单输入

name = raw_input("你猜:")
print "hello. " + name + "!"

name2 = input("你再猜(请输入数字,或者带有引号的字符串):")
print name2

Result:

>>> name = raw_input("你猜:")
你猜:d
>>> print "hello. " + name + "!"
hello. d!
>>> name2 = input("你再猜(请输入数字,或者带有引号的字符串):")
你再猜(请输入数字,或者带有引号的字符串):d
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'd' is not defined
>>> name2 = input("你再猜(请输入数字,或者带有引号的字符串):")
你再猜(请输入数字,或者带有引号的字符串):3
>>> print name2
3

说明:

# -*- coding: cp936 -*- 指定代码保存时候使用的字符集,建议使用UTF-8,cp936 是 Windows 系统使用的字符集。

excel作为数据库!

2013-03-13 00:00:00 +0000

C++操作excel:使用C++读写Excel

C#操作excel:URL

Android

2013-03-12 00:00:00 +0000

安卓itro

http://android.yaohuiji.com/about

Android layout

fill_parent布局指将视图(在Windows中称为控件)扩展以填充所在容器的全部空间。 wrap_content布局指根据视图内部内容自动扩展以适应其大小

界面的设计和CSS设计方式很像

Android imageView

imageView.setScaleType(ImageView.ScaleType.FIT_XY);

ImageView.ScaleType八种类型即

CENTER,CENTER_CROP,CENTER_INSIDE,FIT_CENTER,FIT_START,FIT_END,FIT_XY,MATRIX

References:

Web 开发前端要求

2013-03-07 00:00:00 +0000

要求
- 高超的原生JavaScript开发水平和丰富经验。最好参与过框架研发或深入研读开源js框架代码。
- 精通HTML5、CSS,AJAX及前端性能优化,能高效开发兼容各种现代浏览器的前端代码。
- 熟练使用jQuery,了解其它几种js框架的设计与使用。研读过jQuery等框架代码最佳。
- 苛求代码质量和产品品质,乐于不断改进并抽象完善代码结构。
- 突出的快速理解能力与高效表达能力,优秀的团队协作及沟通能力。
- 极强的好奇心和优异的习能力。积极分享知识技能与工作成果。
- 理解基本的用户体验原则,崇尚简约优雅的设计。

若符合以下条件将令我们非常高兴:
- 具备PHP/Python/Ruby/Java等任意一门后端语言经验,有前后端协同开发经验。
- 有jQuery插件开发经验,对移动平台js开发有研究。
- 熟悉iOS、Andriod等移动设备的特性,了解各种浏览器特性。
- 深度使用Google、Stack Overflow等技术工具。
- 优秀的英语阅读与书写能力。
- 熟练使用Mac OS X系统、*nix命令行环境。

请提供以下服务的个人页面或独立blog:GitHub、Stack Overflow、Quora、Twitter、V2EX

软文一则

2013-03-07 00:00:00 +0000

摘自《互联网——降级论》片段 from http://news.cnblogs.com/n/148842/

除此以外,我还发现一个现象,中国消费者在与奸商们的长期斗争中,已经培养出了一种非常苦B的品质:只要不被坑,他就谢天谢地。如果商家严格做到了承诺的每一件事情,客户就会感动的泪如泉涌。如果商家不仅做到了所有承诺的事情,还很贴心的提供了一些额外的服务(比如我们给每位客户赠送非常好吃的樱桃和进口巧克力作为甜点),那么客户就会激动的哭天喊地、奔走相告,推荐给他认识的每一个人。

其实这片肮脏的国土,就是上天赐予 IT 青年们的最好机会。

BASIC 语言与机器人

2013-03-02 00:00:00 +0000

实验一:I/O控制
' {$STAMP BS2}
' {$PBASIC 2.5}
DO
LOW   0      :I/O口输出低电平
LOW    1      :I/O口输出低电平
PAUSE  1000   :延时1000ms
HIGH   0      :I/O口输出高电平
HIGH   1      :I/O口输出高电平
LOOP
END
实验二:电机控制
' {$STAMP BS2}
' {$PBASIC 2.5}
DO              :无条件无限循环
PULSOUT 12,650   :表示在12I/O口输出650*2us的脉冲
PULSOUT 13,850   :表示在12I/O口输出850*2us的脉冲
PAUSE  20   :表示延时20ms
LOOP
注意:PULSOUT 12,650改为750则电机停转,电机转速控制应在650到850之间越靠近750,转速越低。

' {$STAMP BS2}
' {$PBASIC 2.5}
count1 VAR word     :count1为16位变量0-65535
count2 VAR byte      :count2为8位变量0-255
count3 VAR nib       :count3为4位变量0-15
count4 VAR bit       :count4为1位变量0-1
FOR count1 =1 TO 100
  PULSOUT 12,735
  PULSOUT 13,755
  PAUSE  20
Next

' {$STAMP BS2}
' {$PBASIC 2.5}
count1 VAR Word
count2 VAR Byte
count3 VAR Nib
count4 VAR Bit
DO
  GOSUB Backward         :调用子程序Backward
  GOSUB liftward           :调用子程序liftward
  GOSUB Forward          :调用子程序Forward
LOOP
Rightward:                 :通过标号定义子程序
  FOR count1 =1 TO 100
    PULSOUT 12,850
    PULSOUT 13,750
    PAUSE  20
  NEXT
RETURN                    :子程序返回
Liftward:
  FOR count1 =1 TO 100
    PULSOUT 12,750
    PULSOUT 13,850
    PAUSE  20
  NEXT
RETURN
Backward:
  FOR count1 =1 TO 100
    PULSOUT 12,850
    PULSOUT 13,650
    PAUSE  20
  NEXT
RETURN

Forward:
  FOR count1 =1 TO 100
    PULSOUT 12,650
    PULSOUT 13,850
    PAUSE  20
  NEXT
RETURN
实验三:触须机器人
' {$STAMP BS2}
' {$PBASIC 2.5}
count1 VAR Byte
count2 VAR Word
main:
FOR count2=0 TO 100
    FREQOUT 0,2,800   :I/O口0输出800Hz方波信号
NEXT
DO
IF(IN8=0 OR IN9=0)THEN   :I/O口8/9输入检测
FOR count2=0 TO 100
    FREQOUT 0,2,800
NEXT
    GOSUB Backward
    GOSUB Liftward
ELSE
    GOSUB Forward
ENDIF
LOOP
Backward:
  FOR count1 =1 TO 100
    PULSOUT 12,850
    PULSOUT 13,650
    PAUSE  20
  NEXT
RETURN

Liftward:
  FOR count1 =1 TO 100
    PULSOUT 12,750
    PULSOUT 13,850
    PAUSE  20
  NEXT
RETURN
Forward:
  FOR count1 =1 TO 10
    PULSOUT 12,650
    PULSOUT 13,850
    PAUSE  20
  NEXT
RETURN

References: