比較典型的新手切法是看起來沒用的5s切出去.
事實上在tenhou.net/2/上可知, 數學上的最優解也是切5s,
但是我在貼吧上看到很多特上和鳳凰都不建議切5s, 更建議切9p
http://tieba.baidu.com/p/1197110420?pn=1
這個帖子上有更多討論
最近两个月在研究一样从来没接触过的玩意,淫光娘(silverlight程序开发),不得不说微软的蓝泽光计划把我们几个死程同事完全击坠啊…
公司一个新项目下来,我们以使用新技术来做借口着手开发银光程序。
我自己从来没有真正写过c#,一下子从没有.net基础直接开发sl4的程序果然很难起步,不过一个月使用下来已经有很好的掌握了。接着下来就是深入www
sl4这玩意想法真心不错,可惜网页上的动画交互已经被flash完全垄断。不过flash很难在网页上做出可以和winform相匹配的玩意,sl可以说是补足了。(java?那玩意能吃么)
长期上来看flash和sl都会被html5和新的js库所代替,不过sl要在大家一起死之前还是很难获得一个可观的占有率。微软把sl作为wp7的画面控件可谓是省了微软和开发人员不少事情。
如题,总觉得现在如果需要雀力向上的话就必须慢慢记录各种日麻点滴,总结经验,可能会频繁更新。见证自己雀力向上!
pymssql是一個比較通用的在python中連接MS SQL數據庫的玩意, 不過他的開發版(2.0)版比正式版更加穩定, 功能也豐富一些.
項目地址 https://code.google.com/p/pymssql
源碼地址
hg clone https://pymssql.googlecode.com/hg/ pymssql
編譯之前你需要幾樣東西
首先是Cython (Cython的安裝需求是需要VS2008 (py2.6以上) 或mingw32編譯環境
然後是Mingw32編譯環境, 編譯pymssql需要
獲得源碼之後就setup.py build -c mingw32吧 然後install
一切都是輕車熟路
問題來了
你會驚訝的發現他連不上任何數據庫
在新版本中, pymssql依賴freetds連接, 因此即使在windows, 他也需要freetds的配置文件
[global]
port = 1433
[myserver]
host = 192.168.0.16
port = 1433
然後你還需要名字改成freetds.conf, 然後添加系統變量
set FREETDSCONF=c:/path/to/freetds.conf
或
set FREETDS=/path/to/freetds.conf路徑
然後就可以connect到host=myserver即可到達192.168.0.16了
有這麼一個數據表, 某字段用的varchar()
有那麼一個pymssql 這尼瑪connect的時候只能用utf8
然後select 出來的居然是 unicode 類型的 gbk編碼過的字符串
然後就有了這麼一個東西 將unicode類型的字符串轉換成普通的字符串 用來decode啥的
def fuckmssqlencode(s):
return ''.join(map(chr, map(ord, s)))
最近学了一些关于jQuery的玩意, 不得不说这东西实在好强力, 连我这个看javascript不爽的人都觉得这简直是神器.
这里说一下一个关于防止页面表单重复提交的事情.
Continue reading »
爪機是Milestone, 之前的文章有說過一下, 現在聊聊使用感受.
機子本身就不說了, 這也不是我所看重的地方, 據說最近一陣子最高性價比的Android機器就是MS, 於是就買下來而已. 我看中的是Android這個平臺.
Android有一個Linux的核心, 刷了OpenRecovery且root過之後, 整台機器的折騰性就提高了不止一個檔次, 特別是Recovery模式下的console配合實體鍵盤加ADB數據線console, 可以說只要能進Recovery機器就是不死的. busybox很強大, 基本的shell命令和語法都齊全了, 系統的文件系統也支持symbol link鏈接, 要玩app2sd之類的非常輕易.
談一下一些高級的設置=w=
首先是字體, 對於我來講, 替換DroidSansFallback是一個非常不明智的決定, 考慮到存在DroidSans和DroidSans-Bold兩個字體科, 我決定把他們分別替換成微軟正黑和微軟正黑粗體, 來實現粗細分明的中文字. DroidSansFallback保留原版.
替換過程中遇到了/system分區空間不足的問題. 是的, /system文件系統只有20M左右的剩餘空間, 不足放入正黑和正黑粗體, 我的解決辦法是在/data文件系統建立fonts文件夾, 然後把/system/fonts/整個目錄內容複製進去, 刪除/system/fonts目錄, 然後做一個軟連接到/data/fonts.,
下面是一張使用正黑體的效果圖, 可以清楚看出一些部份系統調用了粗體, 非常好看.
做了app2sd之後如何更換內存卡?
關手機拔卡
首先使用讀卡器, 使用Ghost將每一個分區單獨Ghost出來(你喜歡用Disk to Image也行), 然後換新卡分好區之後馬上把卡內容還原進去. 期間切勿不要開機, 如果你需要開機的, 請看下面
如果 你希望在買卡的時候把新卡放進手機測試一下再導數據怎麼辦?
首先在Recovery模式(推薦), 進入/data目錄 建立/data/app2,/data/app-private2,/data/dalvik-cache2 三個目錄, 然後將這個腳本丟進去, 用root執行一次, 臨時撤銷app2sd, 然後換新卡開機, 切記不要安裝任何軟件, 該測試的測試完, 趕緊關機分區ghost數據, 然後再執行一次剛才那個腳本切換回app2sd模式, 開機即可.
#!/system/bin/sh mv /data/app /data/app1 mv /data/app-private /data/app-private1 mv /data/dalvik-cache /data/dalvik-cache1 mv /data/app2 /data/app mv /data/app-private2 /data/app-private mv /data/dalvik-cache2 /data/dalvik-cache mv /data/app1 /data/app2 mv /data/app-private1 /data/app-private2 mv /data/dalvik-cache1 /data/dalvik-cache2
如果, 我在用新卡的時候不小心裝了軟件, 用回來舊卡數據和app的時候發現所有程序都運行不了了怎麼辦,
恩 我就是遇到這種問題, 這個時候, 你應該進入/data/app目錄, 將所有的apk重新安裝一次 或使用usb調試模式 adb shell 下 pm install –r yourapp.apk, 或把所有的apk取出來(把剛才的ghost鏡像用ghostexp取出文件)后adb install –r yourapp.apk. 或在/data/app下使用這個腳本…
#!/system/bin/sh LINE=`ls *.apk|wc -l` THIS=1 for FILE in `ls *.apk`; do if [ -f "$FILE" ]; then echo $LINE "/" $THIS " " $FILE pm install -r $FILE THIS=$(($THIS+1)) fi done
另外 重新安裝所有程序的話 根據機體體質差異會死機好幾次, 所以最好還是使用手工或半自動方式來安裝.
首先你需要有 python-messaging, 除非你想自己写一大堆的pdu解码编码吧
https://github.com/pmarti/python-messaging
安装依赖是setup-tools, 因为安装脚本依赖他来解决其他依赖=_=.
当然还需要pySerial…用来和串口通讯,
这里假设ser是你的串口对象, 带timeout的设定(否则你就华丽丽等卡死吧23333)
发短信
from messaging.sms import SmsSubmit
from messaging.sms.deliver import SmsDeliver
pdu = SmsSubmit(number, text).to_pdu()[0]
ser.write('AT+CMGS=%d\r' % pdu.length)
ser.readlines()
ser.write('%s\x1a' % pdu.pdu)
for i in range(100):
a = self.ser.readlines()
for line in a :
#print line
if "OK" in line:
print "SUCC"
break
if "ERROR" in line:
print "ERROR"
break
收短信
from messaging.sms import SmsSubmit
from messaging.sms.deliver import SmsDeliver
ser.write('AT+CMGL=0\r')
time.sleep(0.5)
recv_once = ser.read(1000)
recv = ''
while recv_once:
recv = recv + recv_once
recv_once = self.ser.read(1000)
time.sleep(0.1)
for line in recv.split():
try:
sms = SmsDeliver(line.strip())
print sms.number, sms.text
except:
pass
这里收的是所谓的未读短信, 执行过AT+CMGL=0之后就算已读了, 要AT+CMGL=4才能找到了…
def connectdb():
name = "db" + hashlib.md5(str(time.time())).hexdigest()[0:4]
db = QtSql.QSqlDatabase.addDatabase("QMYSQL", name)
db.setHostName(dbcfg['server']);
db.setPort(dbcfg['port'])
db.setDatabaseName(dbcfg['dbname'])
db.setUserName(dbcfg['dbuser'])
db.setPassword(dbcfg['dbpw'])
db.setConnectOptions("CLIENT_COMPRESS=1;MYSQL_OPT_RECONNECT=1;")
dbstatus = db1.open()
if not dbstatus:
return None
else:
return db
这是一段连接到MYSQL数据库的函数
这里要指出的是
db.setConnectOptions("CLIENT_COMPRESS=1;MYSQL_OPT_RECONNECT=1;")
这行, 设定自动重连接恩
至于如何判断数据库断开,
class dbthread(QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self)
def go (self):
self.start()
disconn = 0
def run(self):
query=QtSql.QSqlQuery(db=db)
query.exec_(QtCore.QString('''SHOW STATUS LIKE 'Uptime';'''))
print "db.isOpen()",db.isOpen()
status=query.next()
if not status:
self.emit(QtCore.SIGNAL("debug(QString)"), u"数据库断开, 正在重连...")
self.disconn = 1
elif self.disconn:
self.emit(QtCore.SIGNAL("debug(QString)"), u"重连接成功")
self.disconn = 0
写个定时器去运行吧
原来使用的是可怕到死的硬替换, 非常容易崩溃, 换成这样去做就基本不崩溃了
近期迴響