Air for Desktop开发中的几个问题

使用air for desktop开发应用程序时,如果需要与本机系统进行相关操作。

例如:

1.执行本机系统的某一个可执行文件

2.使用openWithDefaultApplication打开目录或者文件

那么需要注意,在调试环境下如果遇到莫名其妙的安全或者错误问题。需要将应用配置文件做一个修改

<supportedProfiles>extendedDesktop desktop </supportedProfiles>

如上,需要把extendedDesktop放到前面,正式发布的时候需要换回来。

原因是调试模式如果用到了扩展桌面才能用到的一些东西,会执行不通过。

ruby字符串替换技巧

def replaceImg(str)
return str.gsub!(/\{\{img ([\S]*)?\}\}/,”<img src=\”img/\\1\” />”)
end

原始:”abcde{{img aa.jpg}}bbbb{{img bbb.jpg}}bb”

期望效果:abcde<img src=”img/aa.jpg” />bbbb<img src=”img/bbb.jpg” />bb

说明:其中\\1表示第一个括号中找到的内容

jondo动态ip

http://anonymous-proxy-servers.net/en/jondo.html

http://www.anonym-surfen.de/jondo.html

一个动态ip的东东

http://wenku.baidu.com/link?url=BV0AQaQPZKlkrTfNWXz0XKbArxOjAPEgVXmqT3sDBKynR7fE1Nxvub9yAfX2lbsx-UKxzWsK-W_TdI48lBvGzyeUsf44BHvE68Hk1U2j_Oe

来一篇文章学习

http://www.lirui.name/post/124.html

 

Linux下面可用的代理程序没有MS-Windows下面多。比较常用的Tor 的速度有时不尽如人意。

这里介绍一个新东东:JAP/JonDo

这是一个基于Java的代理程序。在选对了服务器的情况下速度是相当的。安装很简单。

首先在控制台下输入 java -version 并回车,查看自己的Java版本。如:

ray@ray-laptop:~$ java -version
java version “1.6.0_06”
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)
ray@ray-laptop:~$

根据上面的信息到这个页面选择自己的版本。对于多数兄弟来说都是装了Java 1.2 / 1.3 / 1.4或者更高的版本。那么点击这里直接下载JAP.jar文件。没装Java的兄弟可以参考Ubuntu官方Wiki的介绍安装一下。

下载到任意位置,因为这个程序是不需要安装的。比如我把这个东东放在 /home/ray/ 文件夹下。那么运行这个程序的命令就是:

ray@ray-laptop:~$java -jar /home/ray/JAP.jar

简单回答几个问题后看到的界面如下:

124.JAP.JonDo.png

全部试验成功以后可以在桌面上创建一个程序启动器来解决每次都要使用命令行的问题。要注意的是界面上的那个Anonymity开关。开启意味着匿名,中间的那个指针意味着在线用户数量。用户越多您的尾巴就藏得越好。

浏览器的设置也很简单,把代理服务器设置成 127.0.0.1:4001 就可以了。在Firefox下面设置成这样:

124.JAP.firefox.png

在选择服务器的时候请注意,有些是免费的,有些是收费服务的。可以在配置文件里面把服务器选项里面的收费服务器去掉。这样就省得麻烦。因为经常会因为误选收费服务器而关闭匿名状态。

老是改Firefox的代理服务器配置是很麻烦的。建议通过扩展解决。原来的 Switch Proxy扩展在 Firefox 3 里面暂时无法使用。可以先用 Multiproxy Switch 顶一下。需要登录才能安装。

MS-Windows用户也可以在官方网站找到安装版本或者可以放在U盘上走的JonDo-Portable

 

 

 

ruby中match和scan的用法

match

只匹配第一次,返回为MatchData类型。

如果未能找到,返回nil

如果找到返回结果中包括两部分:1、完整匹配部分  2、()匹配到的内容

如:

a='a1b2<td>a1b3</td><td>a2b4</td>'
b=a.match(/<td>([a-z1-9]{4})<\/td><td>([a-z1-9]{4})<\/td>/)

#<MatchData "<td>a1b3</td><td>a2b4</td>" 1:"a1b3" 2:"a2b4">

scan:

查找全部匹配的内容。如果正则表达是中带有(),则只记录()的匹配内容。

返回结果为数组,如果没有匹配的结果,数组长度为0,否则返回匹配内容

如:

a='a1b2<td>a1b3</td><td>a2b4</td>'
b=a.scan(/<td>[a-z1-9]{4}<\/td>/)
#没有包含()内容,直接匹配正则内容。
#["<td>a1b3</td>", "<td>a2b4</td>"]

b=a.scan(/<td>([a-z1-9]{4})<\/td>/)
#包含()内容,记录()中的内容
#[["a1b3"], ["a2b4"]]

ruby正则表达式中的编码问题

问题描述:

用ruby写一个抓网页分析的小程序,用match进行正则表达式匹配时,常常会遇到编码的问题。

比如一个简单的程序:

def getSomething
    uri = URI('http://blog.163.com/ma95221@126/blog/static/2482210220100159516893/')
    s=Net::HTTP.get(uri)
    r=r=s.match(/先建个\w\w\w/)
    if(r!=nil)
        puts "haha"
    else
        puts "false"
     end
end

运行时会报错: `match’: invalid byte sequence in UTF-8 (ArgumentError)

原因是加载的内容不是utf-8编码,通过下面两步可以解决

s.force_encoding("GBK")    #先将字符认为成GBK
s=s.encode("UTF-8)        #将字符按照UTF-8来编码

已知两条线段的四个顶点,求交点坐标AS3实现方法

(1)设定直线1的倾角a1,及其上一点(p1,q1);设定直线2的倾角a2,及其上一点(p2,q2)

(2)判断是否a1=a2
如果是,输出"两直线平行",程序结束
如果否,程序继续

(3)判断是否a1=90
如果是,计算x=p1,k2=tana2,y2=k2*x+q2-k2*p2,输出x,y2,程序结束
如果否,程序继续

(4)判断是否a2=90
如果是,计算x=p2,k1=tana1,y1=k1*x+q1-k1*p1,输出x,y1,程序结束
如果否,程序继续

(5)计算k1=tana1,k2=tana2
计算x=(q2-k2*p2-q1+k1p1)/(k1-k2)
y=k2*x+q2-k2*p2

输出x,y

程序结束
/**
     * 求两条线段的交点 ac与bd相交
     * @param a
     * @param b
     * @param c
     * @param d
     * @return
     */

    private function jiaodian(a:Point, b:Point, c:Point, d:Point):Point
    {
      var angle1:Number = Math.atan2((a.y - c.y), (a.x - c.x));
      var angle2:Number = Math.atan2((b.y - d.y), (b.x - d.x));
      var p1:Number = a.x;
      var q1:Number = a.y;
      var p2:Number = b.x;
      var q2:Number = b.y;
      var tmpX:Number;
      var tmpY:Number;
      var k1:Number;
      var k2:Number;
     
      trace(hd2jd(angle1), hd2jd(angle2));
      if (Math.abs(hd2jd(angle1)) == 90)
      {
        tmpX = p1;
        k2 = Math.tan(angle2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      else if (Math.abs(hd2jd(angle2)) == 90)
      {
        tmpX = p2;
        k1 = Math.tan(angle1);
        tmpY = k1 * tmpX + q1 - k1 * p1;
      }
      else
      {
        k1 = Math.tan(angle1);
        k2 = Math.tan(angle2);
        tmpX = (q2 - k2 * p2 - q1 + k1 * p1) / (k1 - k2);
        tmpY = k2 * tmpX + q2 - k2 * p2;
      }
      return new Point(tmpX, tmpY);
     
    }

使用ruby的AES加密、解密

ruby的AES加密使用openssl库来操作,第三方的库可以使用fast-aes和aes。

我这里没有用第三方的。

require 'openssl'
require 'base64'
 
text='{"message":"对不起,你没有此权限,无法操作"}'
key="0315b6e6e482ff7e"
iv="44b5618f44f1dfa9"
alg = "AES-128-CBC" 
 
puts %(clear text:    "#{text}")  
puts %(symmetric key: "#{key}")  
puts %(initialization vector: "#{iv}")  
puts %(cipher alg:    "#{alg}")  
 
puts "--Encrypting--"  
des = OpenSSL::Cipher::Cipher.new(alg)  
des.encrypt  
des.key = key  
des.iv = iv  
cipher =  des.update(text)  
cipher << des.final  
str=Base64.encode64(cipher)
puts %(encrypted text: #{str})  
 
puts "--Decrypting--"  
des = OpenSSL::Cipher::Cipher.new(alg)  
des.decrypt  
des.key = key  
des.iv = iv  
out =  des.update(Base64.decode64(str))  
out << des.final  
puts %(decrypted text: "#{out}")  
puts

Air for Mobile中使用软键盘

通常情况下我们在手机项目开发中使用TextField足矣,但是有些时候总觉的别扭。

比如,在手机中创建一个手机号码的输入框,你希望直接显示数字形式的软键盘来进行操作以获得最好的操作体验。这个时候TextField就无能为力了。

Adobe给了我们另一种选择StageText,这个类最主要的特点是让我们可以设置软键盘的类型以及可以设置软键盘的“return”键显示为“下一项”、”done”还是”search”。

StageText的在线帮助:http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/text/StageText.html

不过,StageText直接使用起来有点麻烦。这里推荐一下Adobe的工程师做的一个封装好的类:NativeText。

NativeText可以在这里下载:https://github.com/cantrell/StageTextExample

相关说明可以看这里:http://blogs.adobe.com/cantrell/archives/2011/09/native-text-input-with-stagetext.html