程序员…
18 Jul

参加了7月6日在法电参加“Orange开发者日“活动,此次活动的重点是寻找Android应用程序,分享Android应用开发的经验,参与活动的有Orange AppShop的总部和北京的成员、联通应用商城的负责人员、摩托罗拉应用商店的负责人员、和参加活动的应用开发者。我在会上有个主题,主要介绍了优亿市场(eoemarket)这个产品,于会的差不多有200多人,认识一些很熟悉但未见面的老朋友。参加了会后的商务一对一,orange的工作人员对我们的产品提了不少好的建议。
18 Jul

==活动简介==
我们希望更多的中国的android用户能获得更多优秀的本土化android应用和游戏,得到更好的服务和更贴心的体验,期望 您能安装和体验一下易联致远的优亿市场(eoeMarket),并为我们提供更多的反馈信息。
为此,优亿市场(eoeMarket)运营团队特别 推出“新版本兼容性大扫荡”活动,旨在使得优亿市场(eoeMarket)能运行在更多android设备上,服务更多的android用户。
活动地址:http://www.eoemarket.com/activities/release_bate_version
== 参与前的准备==
1. 您需要有一款运行android(ophone或乐phone等等)系统的设备(手机, MID或Pad等);
2. 您的设备需要有联网功能(通过gprs,edeg,3g或wifi等);
3. 您需要装上最新版本的优亿市场(eoeMarket),如果您尚未安装,请参考下面的《安装优亿市场》;
==安装优亿市场 (eoeMarket)==
在设备上打开浏览器,输入网址: eoemarket.com/a 即可下载最新版本的优亿市场(eoeMarket),下载完成后点击即可安装。
==活动内容==
1、参与对象:所有 Android用户(玩家,开发者,公司等);
2、参与方式:参与的用户按照本报告内容测试反馈;
3、我们会在官方网站公布被测试的机型 及其结果;
==更多资料==
优亿市场(eoeMarket)是由北京易联致远(eoeMobile)和开发者紧密合作、给玩家提 供优秀Android应用的集软件发布、搜索、推荐、安装等于一体的软件商店平台。其为国内最早发布的Android软件商店(2009年7月发布第一 版),已经发布超过1500款优秀的本土应用(游戏)!现在公测的是其2010年7月18日最新发布的公测版!
官方网站:http://www.eoemarket.com/
14 Jul
做移动互联网的过程中,有这样一些词是必须知道的,如MO,MT,GSM,LINKID
上行(MO)上行的意思就是短信发送到服务器端 MO又称 Mobile Original
下行(MT)下行的意思就是短信从服务器端发回到手机上,MT又称Mobile Terminated
简单的说,从手机发起一个的过程叫上行(MO),到手机结束的过程叫下行(MT),比如,平时给你的朋友发送一条短信,对你来说就是上行(MO),而对你的朋友来说,就是下行(MT)。在企业、行业应用中,从系统给手机发送信息的过程叫下行(MT),而手机发送信息给系统的过程叫上行(MO)。
所有用户点播的业务,用户MO(上行)消息通过网关送到MISC鉴权批价后,MISC会自动生成一个随机数linkid随后通过网关传给SP,当SP收到MO(上行)消息后下发MT(下行)消息给用户时必须在Submit包的linkid字段填上MO(上行)消息包里面带的linkid信息(Reserve值:设定的回复内容)。
28 Jun

2010年6约27日,周日下午,由CSDN和《程序员》杂志联合策划组织,旨在与业界人士分享IT产品背后的技术和用户体验故事的线下活动TUP(Technology, User Experience, Product)系列活动日前在北京丽亭华苑酒店成功举办,首期活动以“移动开发实践”为主题。
受CSDN&《程序员》总编刘江邀请,我去分享了自己对android方面的一些体会和心得,本来预期200人参加的活动,从wudi那边看到报名的有500多人,最终选了300多人参与了活动,场面还是比较火爆的,到处站的都是人,CSDN在国内技术圈还是有不错影响力的;
活动从下午1电30分正式开始,刘江主持,介绍了TUP的核心价值,然后我是第一个演讲的,我和大家分享的题目是《Google Android盈利模式探析及其应用突围之道》,和大家分享了android目前的市场;可行的一些盈利模式,我的观点是现阶段,广告和应用中收费(注意不是收费应用)是两个比较成熟的模式,除此之外还有做平台,做培训,咨询等等模式可以尝试;借着和大家分享了应用突围之道,举了两个例子,说明如何让你的应用在众多应用中脱颖而出(分析数据很重要),最后和大家分享了android的发展趋势,我个人觉得android终端多元化,终端网络化的趋势很明显,那么带来的就是应用的巨大需求(个性化,国际化,本地化的),从而使得android人才缺口非常大。
从大家的提问和会后的交流来看,很多人还是比较迷茫的,对现况的迷茫,对市场的迷茫,比如国内外大大小小的软件商店很多人就看不明白,原因很简单,看到的都是表表象,透过表象,把握住本质就很清晰了。
比较冏的是名片带少了,后来给不少人手工写了联系方式,本来后面还有个互动交流的环节,由于临时有些事情,没来得及参加就撤退了,有些遗憾。
今天各大媒体的报道都出来,看到基本商都是用的我topic里的一个观点“andoid应用突”》做为报道点,希望大家能顺利突围!
28 Jun
MySQL TEXT fields have a limit of 65,000 bytes. If you insert anything larger than that in to a normal TEXT field mySQL will silently truncate your data without telling you (meaning software checks are probably a good idea). MEDIUMTEXT will store 16 million characters and LONGTEXT can handle over 4 trillion, but this information does not appear to be readily available in the online mySQL manual (although it is hinted at in this table). Something to bare in mind when designing database applications.
MyISAM tables in MySQL have a maximum size of a row of 65,535 bytes, so all the data in a row must fit within that limit. However, the TEXT types are stored outside the table itself and only contribute 9 to 12 bytes towards that limit. (For more information about this refer to the MySQL Manual – Data Storage Requirements chapter).
ref::http://www.electrictoolbox.com/maximum-length-mysql-text-field-types/
TEXT data types are also able to store much more data than VARCHAR and CHAR text types so TEXT types are what you need to use when storing web page or similar content in a database.
The maximum amount of data that can be stored in each data type is as follows:
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
BIGTEXT 4,294,967,295 bytes ~4GB
In most circumstances the TEXT type is probably sufficient, but if you are coding a content management system it’s probably best to use the MEDIUMTEXT type for longer pages to ensure there are no issues with data size limits.
8 Jun
Delayed_job (or DJ) encapsulates the common pattern of asynchronously executing longer tasks in the background.
ref:
http://adamfortuna.com/2009/08/17/the-amazingness-of-delayed_job-for-rails/
http://www.magnionlabs.com/2009/2/28/background-job-processing-in-rails-with-delayed_job
http://github.com/tobi/delayed_job
2 Jun
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。
在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。
1、使用md5sum来产生指纹(报文摘要)命令如下:
md5sum filename > filename.md5
或者
md5sum filename >>filename.md5
示例:
[www@iceskysl 20100527]$ md5sum update.zip.1
cd32d060d5e4d1891dfa4d6552cc57bb update.zip.1
也可以把多个文件的报文摘要输出到一个md5文件中,这要使用通配符*,比如某目录下有几个iso文件,要把这几个iso文件的摘要输出到iso.md5文件中,命令如下:
md5sum *.iso > iso.md5
2、使用md5报文摘要验证文件,方法有二:
把下载的文件file和该文件的file.md5报文摘要文件放在同一个目录下,然后用如下命令进行验证:
md5sum -c file.md5
然后如果验证成功,则会输出:正确
26 May
近日需要实现feed(动态)消息,同时需要支持多语言,本来没什么难的,做一个多态表,然后存储消息的目标对象,再规定好一些动作,入库或者出库的时候拼装下就好了。这里有个比较有趣的是如何最大限度的重用代码或者规则,最后实现中借鉴了Rails国际化的规则。
1. 首先定义针对目标可以做的操作,用常量定义好(考虑到数量不会很多,且不会经常变化,就不存数据库),例如:
class FeedAction
#APP:1 – 99
APP_DOWNLOAD = 1 #Download
APP_FAV = 2 #Favorites
APP_PAY = 3
APP_INSTALL = 4
2. 对定义好的操作名为key,撰写其对应语言的动作描述,写zh.yml或者en.yml文件,例如:
zh:
FEED_ACTION:
APP_DOWNLOAD: “下载了”
APP_FAV: “收藏了”
APP_PAY: “购买了”
APP_RATE: “打了{{rate}}星”
3.生成消息输出的时候,直接
>> I18n.locale = ‘zh’
>> I18n.t ‘FEED_ACTION.APP_PAY’
=> “购买了”
>> I18n.t ‘FEED_ACTION.APP_RATE’,:rate=>2
=> “打了2星”
15 May
终结下来三大类
1,md5 sha1等消息摘要
用的很多,比较熟悉,只是用于验证消息的完整性,而消息本省的传递确是明码的,除非想登录密码md5,那要服务器客户端两边都有。如果需要传输数据给另一方,而这段数据又不希望明文发就得使用密钥了。
2,des等 ,私有密钥加密数据
只要约定密钥,然后在通过这个密钥对信息加密然后传送,另一方通过密钥对加密信息解密。
3,rsa , 公钥和密钥结合的高级货
公钥不是大家都使用的,而是可以公开的,我开始误会错了搞不懂。通过rsa生成一对密钥,公钥和私钥,通过公钥加密的数据,只有私钥才能解开。那在网络中可以随便告诉客户端公钥,然后对方通过公钥加密后传加密信息,即使地球人都知道公钥也不要紧,因为私钥是保密的,解不开得到了加密信息也没办法。当然私钥加密后信息,公钥也可以解开,但速度上差成百上千倍。
ruby中通过openssl这个自带的标准库来实现。举了几个例子,des和rsa的
#!/usr/bin/ruby
require “openssl”
#doc see http://www.ruby-doc.org/stdlib/libdoc/openssl/rdoc/index.html
class Encrypt
KEY = “aaaabbbb”
IV = “aaaavvvv”
def des_encrypt(plaintext)
c = OpenSSL::Cipher::Cipher.new(“DES-CBC”)
c.encrypt
c.key = KEY
c.iv = IV
ret = c.update(plaintext)
ret << c.final
end
def des_decrypt(encrypt_value)
c = OpenSSL::Cipher::Cipher.new("DES-CBC")
c.decrypt
c.key = KEY
c.iv = IV
ret = c.update(encrypt_value)
ret << c.final
end
def get_rsa_key
rsa = OpenSSL::PKey::RSA.new(1024)
# public_key only can public_encrypt or public_decrypt no private_encrypt nor private_decrypt
#rsa.public_key.to_pem the class of return value is String
[rsa.public_key.to_pem , rsa.to_pem]
end
def rsa_private_encrypt(value , rsakey)
rsa = OpenSSL::PKey::RSA.new(rsakey)
rsa.private_encrypt(value)
end
def rsa_private_decrypt(value , rsakey)
rsa = OpenSSL::PKey::RSA.new(rsakey)
rsa.private_decrypt(value)
end
def rsa_public_encrypt(value , publickey)
rsa = OpenSSL::PKey::RSA.new(publickey)
rsa.public_encrypt(value)
end
def rsa_public_decrypt(value , publickey)
rsa = OpenSSL::PKey::RSA.new(publickey)
rsa.public_decrypt(value)
end
end
def testrun
e = Encrypt.new
text = "a secret message"
puts "text:#{text}"
value = e.des_encrypt(text)
puts "des_encrypt:#{value}"
des_decrypt = e.des_decrypt(value)
puts "des_decrypt:#{des_decrypt}"
puts "-------------------------"
publickey , privatekey = e.get_rsa_key
puts "publickey:\n#{publickey} \n privatekey=\n#{privatekey}"
value1 = e.rsa_private_encrypt(text , privatekey)
puts "rsa_private_encrypt:#{value1}"
rsa_public_decrypt = e.rsa_public_decrypt(value1 , publickey)
puts "rsa_public_decrypt:#{rsa_public_decrypt}"
value2 = e.rsa_public_encrypt("another message" , publickey)
puts "rsa_public_encrypt:#{value2}"
rsa_private_decrypt = e.rsa_private_decrypt(value2 , privatekey)
puts "rsa_private_decrypt:#{rsa_private_decrypt}"
puts "----------------------------"
rsa = OpenSSL::PKey::RSA.new(1024 , 7)
value3 = rsa.private_encrypt("myself key")
puts rsa.public_decrypt(value3)
end
testrun
测试结果:
IceskYsl@eoe ~/Desktop $ ruby encrypt.rb
text:a secret message
des_encrypt:羻"j}####9"q###A##
des_decrypt:a secret message
-------------------------
publickey:
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBALrAGpm39jexyrrkYuM6kyP0z+pBlY/i3WnIYHrR3PDk9af2GsuIUwqg
vhKRMxv5EZh1CShec++DfRAaBHwM2zCcHA1rDqrzqoSMdyCav+wbVwkSblqGb6gz
Q4Zk/nM73mF1PaOkZvlpKN7B5H7BsUN2ngpaz4u9MxMm0Tn1guIVAgMBAAE=
-----END RSA PUBLIC KEY-----
privatekey=
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC6wBqZt/Y3scq65GLjOpMj9M/qQZWP4t1pyGB60dzw5PWn9hrL
iFMKoL4SkTMb+RGYdQkoXnPvg30QGgR8DNswnBwNaw6q86qEjHcgmr/sG1cJEm5a
hm+oM0OGZP5zO95hdT2jpGb5aSjeweR+wbFDdp4KWs+LvTMTJtE59YLiFQIDAQAB
AoGBAKbgsSR5yfBc1J8LJP6OQhvYUM6xCngILvivEN/PltJAlvAfMDR+Pk558z9e
NsChYcLNmoBTXuBBrEjuJuG/D0GpOmLadoZYDjlciJxj3Y9w85EvfRssdYGsBvIY
ksHVfsYEKJXp41ORux1jZgJXsnxn9276F7Unam65mPyUleiFAkEA8LMpAfgc3y4f
iHiDSon0AcgoIyH4eiiyxGPQEavIVgD2njRCM2pg3Z2uS3c/Et+EAaLjy9N1Cfy6
plZRwHuXqwJBAMafCjgUQaqFisJNSUWWsENVzjmfk2pnGK1TJot3BtpN67rX1dcC
Q3cNWbVhoF6zp6y+Kn/Lrdx1N+eNvhLOrT8CQQCl09jZuXUysVUaMWTKkrZgD+TP
J5VHnAhlUxrDQeU4k1tU7U36nDx2Ei9FYLc8qm8IrY9hGqLUqaBx/qA+CygXAkAu
sAGp7vEEkUFtrNcVWXdzTH8eQmlXcIZ3b302+TKOLBTGJafpU2niWSwGG72jpR07
2LOKuKjUkmUis8nDB/vnAkAxTVKBDYhfInF1/8/bhDAeqrWLifJUmxLEmO9WSRWm
I5ZodXZIaNOBRCSZToQSdfPbhWtQ68sWGNbI0YYwm3OZ
-----END RSA PRIVATE KEY-----
rsa_private_encrypt:#k4#e|#########F#####0 ###3
## õë######o#####')
c###########m##7e¼####u $>#######hUKc(#ۯ#####Us0T#######
rsa_public_decrypt:a secret message
rsa_public_encrypt:t####H
“#########’#H7############O#j####H###v#]Q`TR###Hs#U%####L###Z#####rѽ##
###F##(#X##˵#3####rsa_private_decrypt:another message
—————————-
myself key
15 May
require 'openssl'
require 'digest/sha1'
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
# your pass is what is used to encrypt/decrypt
c.key = key = Digest::SHA1.hexdigest("yourpass")
c.iv = iv = c.random_iv
e = c.update("crypt this")
e << c.final
puts "encrypted: #{e}\n"
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = key
c.iv = iv
d = c.update(e)
d << c.final
puts "decrypted: #{d}\n"
require 'openssl'
keyfile = 'test.key'
certfile = 'test.crt'
data = "this is a test"
cert = OpenSSL::X509::Certificate.new(File.read(certfile))
key = OpenSSL::PKey::RSA.new(File.read(keyfile))
cipher = OpenSSL::Cipher::AES.new("128-CBC")
tmp = OpenSSL::PKCS7.encrypt([cert], data, cipher,
OpenSSL::PKCS7::BINARY)
p7 = OpenSSL::PKCS7::PKCS7.new(tmp.to_der)
## Data will be stored as string so emulate that here
p7s = p7.to_s
## Create pkcs7 object out of pkcs7 data
p7 = OpenSSL::PKCS7::PKCS7.new(p7s)
dec = p7.decrypt(key,cert)
print dec
http://nunojob.wordpress.com/2008/12/08/rsa-encrypt-decrypt-in-ruby/
http://www.ruby-forum.com/topic/79319
Comments::最新评论