键盘里的音符-生日快乐歌

在那个远古的年代,电脑没有MP3,没有声卡,那时的我用QUICK BASIC(QB)写了一段演奏生日快乐歌的代码,祝人生日快乐

B$="O3 CCDCFE P4 O4 CCDCFE"
PLAY "MN"+B$

最近看到Google上面的电吉他,想到今日有人生日,于是用它再一次演奏生日快乐歌

556587 556598 553176 443121

http://blog.lishewen.com/static/recordable-guitar.htm?tune=cA4JCzghEhEcS5xDTgknCccq4pixBgoocAKAJiJETCkS

在这里祝今日生日的某人生日快乐

VB2010动态调用类及里面的方法

我们在反编译的时候会遇到一些混淆过的程序,他们会将一些字符串也混淆变成乱码,再经过混淆后的代码调用如(?149.?150),对应的IL代码为

L_0026: ldstr "IŔɫͮЧԳشݻࡵॺ੾୴౼ഺ๰ོှᅽቻ።ᐢᕠᙤ᝭ᠧᥩᩴ᭶ᱽᴻṡὲ‼" // 72870B0070
L_002b: call string ?149::?150(string) // 285E030006

如果想知道加密字符串是什么东西,有两种办法

  1. 阅读?150方法的代码,用VB或C#模仿写一个出来调用
  2. 引用其DLL调用?150方法获得结果,输出

由于?150也是被混淆过的,阅读起来非常困难,所以我选择了第二个办法

但采用第二种方法时会遇到这样的情况

Dim r = ?149.?150(str)

这样过不了编译器,原因是不能用“?”开头,所以只能使用动态调用类,具体实现如下:

Sub Main()
     Dim str = "IŔɫͮЧԳشݻࡵॺ੾୴౼ഺ๰ོှᅽቻ።ᐢᕠᙤ᝭ᠧᥩᩴ᭶ᱽᴻṡὲ‼"
     Dim a = Assembly.Load("zymtl")
     Dim t = a.GetType("?149")
     Dim p = t.GetMethod("?150")
     Dim s = p.Invoke(t, New Object() {str})
     Console.WriteLine(s)
     Console.Read()
End Sub

用VirtualBox虚拟Android 2.2

苦于Android SDK模拟器启动慢的我,不断在寻找新的解决方案。最近发现一个Android-x86的项目不错,向大家推荐下

Android-x86可以使Android运行在x86的CPU上面,目前最高支持到2.2版本,并支援虚拟机虚拟

于是我马上下了android-x86-2.2-generic.iso 来试试

开始使用的是 Microsoft Virtual PC 结果失败了,花屏。于是改用VirtualBox

首先,在VirtualBox新建一台虚拟机,配置如下:

  • OS Type: Linux 2.6
  • Base Memory: At least 256MB, 512MB is better.
  • Video Memory: 8M
  • CD/DVD-ROM image: android-x86-2.2-generic.iso
  • Sound device: change to Sound Blaster 16. ICH AC97 will not work. (if you have a solution, let us know)
  • Network device: PCnet-Fast III, attached to NAT. You can also use bridged adapter, but you need a DHCP server in your environment.

具体安装步骤,请参考:

http://www.android-x86.org/documents/installhowto

安装成功后可以进行一些配置,镜像本身是支持简体中文的

android22

小窍门一:

如何虚拟SD CARD?

  • Create two partitions by fdisk or cfdisk. Format them to ext3. Then reboot.
    # cfdisk /dev/sda
    # mdev -s
    # mke2fs -j -L DATA /dev/sda1
    # mke2fs -j -L SDCARD /dev/sda2
    # reboot -f
  • On the boot menu, select VESA or Debug mode, press TAB, then add
    DADA=sda1 SDCARD=sda2

小窍门二:

如何修改引导菜单GRUB?(更改默认分辨率,默认加载SD CARD时需要)

  1. 先用Debug Mode进入命令行
  2. mount -o remount,rw /mnt (去掉mnt的目录的只读)
  3. chmod 777 /mnt/grub/menu.lst(去掉menu.lst文件的只读)
  4. vi /mnt/grub/menu.lst(启动文本编辑器,编辑menu.lst文件)
  5. 在适当的地方加上启动参数,如:虚拟SD CARD (SDCARD=sda2),更改分辨率为800*600 (vga=788)
  6. 按[ESC],输入 :wq 保存退出vi
  7. 可以用cat /mnt/grub/menu.lst查看修改后的结果
  8. 重启 ("reboot -f")

小窍门三:

如何测试自己编写的程序?

由于虚拟机工作在有DCHP的环境是可以访问网络的

所以我在电脑上架设了IIS,目录指向bin文件夹

测试的时候,用虚拟机访问内网的网站http://192.168.1.10/lsw.apk,下载进行安装测试

关于这套方案

优点:启动速度快,不用每次漫长地等待官方SDK模拟器的开启,VirtualBox是可以保存状态的

缺点:没有IDE集成,无法支援断点调试,环境安装还需具备一定的Linux知识

金庸武功考究——梧州八仙剑

最近接触到一款游戏《金庸群侠前传》,发现里面有这样一项武功

由于梧州是我从小生长的地方,所以有一种特殊情结在,而广西梧州八仙派我又是从来没听过,于是决定查证一下

首先,这部游戏系由小说制作完成的,而且游戏的作者不是梧州人,所以也应该不会无中生有这套武功

所以我从游戏的人物着手,在游戏中会这门武功的人物叫做袁紫衣,而袁紫衣是金庸小说《飞狐外传》中的人物。

于是我找了《飞狐外传》这部小说来阅读,在《飞狐外传》第六章 紫衣女郎 中 有这样一段话:

袁紫衣冷笑道:“我道是谁,原来是广西梧州八仙剑的掌门人蓝秦。”

我想这就是游戏中武功秘籍的出处吧

八仙剑是由八仙诸形(态),且右手操剑(左手操各种器械)演变而来的,八仙剑也有很多分支,如:武当八仙剑、少林八仙剑。为何金庸金大侠却唯独写梧州八仙剑?

梧州虽然是个小城市,但也有很多关于八仙的传说(如:金牛夜渡(吕洞宾骑牛过江),八宝塘(八仙曾云游至此,鼓弄仙乐玩赏通宵,后留下八个小宝洲作纪念,故称“八宝塘”。)等,这些都收录在梧州百科中,可惜。。。),我想这是金庸写梧州八仙剑的其中一个原因吧。

本站完成了Google +1按钮的实装

Facebooook 有 Like Button, Tvvitter 有 Tweet Button,人人网有”喜欢”,腾讯微博有”收听”,所以Google +1来了,来的如此之晚,带着Google Wave和Google Buzz那未完成的使命,毅然决然的闯入了Social Media的行列。

如何为自己的网站加上Google +1

  1. 访问 Google +1首页:http://www.google.com/webmasters/+1/button/
  2. 配置好信息,打开 Advanced options,此处可以填入网站首页URL,这样的好处是集中 Google +1 的权重分布,和Google PR 一个道理
  3. 将代码中如下段落放到网页需要的布局当中
    <g:plusone href="http://blog.lishewen.co.cc/"></g:plusone>
  4. 将需加载的JS放在 末尾的 </body>之前

测试一下呗,帮我点点顶部的 +1!

PS:Google 说 +1 不会影响网站排名,LOL~~~你懂的。(Google 自己都不信…….)

实装完成后,网站上的+1,将和搜索结果的+1同步

如:http://www.google.com/webhp?hl=en&q=lishewen

facebook的盈利模式

1、广告

游戏、组件内的植入式广告

推出时间:2006年起

效果:2009年营收超过7亿美元

2、游戏

Facebook与游戏开发者的合作模式是三七开,如果在未来5年Facebook游戏的充值收费能够增长到100亿美元的话,那么这就意味着Facebook可以轻取30亿美元。而现在Disney, EA和Zynga!的游戏都已经在Facebook安营扎寨。

3、团购

这个生意对于Facebook来说太简单了,如果能够开放每个品牌主页的自服务功能,使用户可以随时参加多档团购活动,那么品牌商有了进驻Facebook的动力,而Facebook获得上百亿美元的分成也不是没可能的。

4、电子商务合作

亚马逊与Facebook的合作堪称明智之举,由于用户为了获得更多Facebook Credits,而更愿意在Facebook网内进行商品购买。如果亚马逊与Facebook“malls-with-walls”的深度合作能够合作成功,那么其他电商网站将会蜂拥而至。也说不定Facebook或许会收购Paypal,再造世界经济的新货币。

5、收件箱

无论是Hotmail,Yahoo!还是Gmail,如果想要获得专业版都需额外付费。Facebook也可以这么干,把Inbox变得更像邮箱界面,再加上个地址簿和免费语音通话功能,一年收20美元估计也没有人会反对。毕竟Gmail的创造者 Paul Buchheit现在已经是Facebook的员工了。

6、照片

Facebook已经成了世界拥有最多的照片的站点,所以Facebook或许可以

和照片冲印领域的品牌谈谈合作,无论是柯达,沃尔玛还是咔嚓鱼,估计会有上千万本图册或是日历的生意。Facebook每一单分得10美元,5年拿到10亿美元估计也有戏。

这些只是Facebook未来可能选择的路,但其实Bret Taylor已经想好了其他10种增收方式,因为他永远让自己像刚刚开始创业的人一样思考。

C#判断字符串中是否包含指定字符串

今天QQ有人问这样一个问题:数据中有“1,2,3,4,5,6”,我想在程序中判断数据是否包含有 3, 这个值

对于这种问题第一反应就是用IndexOf解决

  string a = "1,2,3,4,5,6";
  if(a.IndexOf(“3,")>-1)
  {
   //字符串A中包含字符串B
  }

但后来想想,出于性能和判断的准确性来考虑,改用Contains会比较好

  string a = "1,2,3,4,5,6";
  if(a.Contains(“3,"))
  {
   //字符串A中包含字符串B
  }

关于IndexOf和Contains性能对比的讨论:http://www.cnblogs.com/uonun/articles/1698974.html

以上只是纯粹针对字符串的解法,但按照提问人的思路,按照面向对象的理念,比较正统的写法应该是

  string a = "1,2,3,4,5,6";
  List<string> oTempList = new List<string>(a.Split(','}));
  if(oTempList.Contains(“3"))
  {
   //字符串数据A中包含字符串元素B
  }

小试牛刀——Android上的算神计算器

试了一下在Android上开发程序,不难,由于Android采用的是j2se,比nokia上开发j2me还要简单点,而且能使用的类库也多点

这个是Hello world级别的练手之作,上截图

apk包也一同附上

http://down.qiannao.com/space/file/lishewen/share/2011/4/27/LSWCalc.apk/.page

已经上手了,看来以后可以接些这样的案子

不过习惯了.net平台的开发,感觉eclipse和vs相比,eclipse无论是功能,还是性能都很烂,Android的模拟器开机也慢,哎,为啥Android的SDK不能在vs上使用呢