文本随机

http://www.phpjm.net/encode.html                                              --php在线加密
http://www.osyunwei.com/archives/7882.html                                    --centOS7安装lamp环境
http://blog.163.com/yanenshun@126/blog/static/12838816920101013105536436/     --vi在线详细教程
http://linux.51yip.com/search/yum                                             --在线linux命令查询
http://www.jb51.net/list/list_245_1.htm                                       --不错的在线lua学习教程
https://zh-cn.bitcoin.it/wiki/API_reference_(JSON-RPC)                        --BTC相关api
http://www.ligerui.com/api/                                                   --ligerui API
http://www.open-open.com/                                                     --java php等开源代码
http://www.360doc.com/content/13/0701/14/12890102_296781676.shtml             --gitHub上比较不错的开源项目
http://blog.csdn.net/jackystudio                                              --cocos2D学习博客,非常不错哦
http://blog.csdn.net/bd_zengxinxin?viewmode=contents                          --很不错的android及java开发转发文章合计
http://cn.cocos2d-x.org/tutorial/show?id=1260                                 --cocos中对应状态机的机制,陈涛讲解的问题,还是很有用的
http://handsomeliuyang.iteye.com/blog/1156070                                 --一篇不错的关于ant打包介绍的文章
http://rensanning.iteye.com/blog/2163892                                      --Cordova开发详细教程
http://china.inmobi.com/                                                      --手机接入广告变现网站
http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#srlua                      --一些提供给lua的库和工具
http://lua-users.org/lists/lua-l/2007-09/threads.html#00008                   --lua一些高技术操作,如lua转exe操作等
http://my.oschina.net/liucundong/blog/160436                                  --android增量更新文章,很不错,基于linux
https://github.com/cundong/SmartAppUpdates                                    --增量更新github地址
http://blog.csdn.net/w_ww_w/article/details/7002880                           --c++动态库的一些知识
http://blog.csdn.net/jiangwei0910410003/article/details/23940445              --在浏览器里启动app的方法实现
http://www.grepcode.com/                                                      --一个不错的android在线源码查询网址
http://mobile.51cto.com/android-222164.htm                                    --8大你不得不知的android调试方法
http://www.jizhuomi.com/android/environment/305.html                          --一个日志输出的开源
http://www.dangshopex.com/                                                    -- 很漂亮的网站,做购物网站可以模仿
http://blog.csdn.net/lihenair/article/details/17441169                        --一篇讲解https的详细文章,有示例
http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html --讲解https的详细文章
http://a-jie.github.io/Agile/                                                 --一个不错的CSS3动画库或图形库
http://manual.51yip.com/mysql/                                                --很多语言的在线文档
http://zhoulifa.bokee.com/newest/1                                            --linux程序员的博客,很不错
http://www.knowsky.com/resource/gb2312tbl.htm                                 --GB2312简体中文编码表
https://code.google.com/p/androguard/                                         --androguard项目
http://download.qt.io/official_releases/qt/5.5/5.5.0/                         --QT下载路径,比较快
http://www.cnblogs.com/davesla/archive/2011/01/30/1947928.html                --介绍QSS的文章
http://fontawesome.io/cheatsheet/                                             --字体图标对照表,QT使用
https://github.com/kymjs                                                      --android插件框架的github开源
http://blog.codingnow.com/2013/12/ejoy2d.html                                 --风云的ejoy2d开源游戏引擎
http://www.cmd5.com/                                                          --md5解密网站
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0526/2934.html     --网络请求库volley详解
http://pan.baidu.com/s/1pJNrYn5                                               --matlab各个版本下载网盘
http://octave-online.net/                                                     --在线matlab运行网站
http://ba.sinacloud.com/#                                                     --SAE备案详细介绍
http://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html           --JNI官方文档
http://c.biancheng.net/cpp/u/hanshu/                                          --linux C语言函数手册
http://www.hanzify.org/teach/index.php?Go=Show::196-1108396800                --NSIS制作安装软件教程
http://blog.csdn.net/singwhatiwanna/article/list/2                            --任玉刚的博客,深入分析android
http://www.cnblogs.com/aimeng/archive/2012/03/13/2393244.html                 --经典案例android Demo
https://code.facebook.com                                                     --facebook开源项目


http://blog.csdn.net/hai836045106/article/details/39371777                    --SWIG在android中生成代码的例子




creating kernel interface -- does this kernel have pagemap?                   --linux详细介绍网站


$ ps # 找到进程号 
$ kill 进程号 # 发送SIGQUIT信事信号给该进程,此时生成hprof信息 


adb shell monkey -p com.example.httptest -v 500 > d:\m.txt  --monkey测试,并将测试结果写入m.txt


msconfig 设置开机启动项目
js中常用的技巧
var ret = !!a
等价于三元运算符:
var ret = a? true : false;


此外还有如下
var1+""转为string
~~var1转为int
1*var1转为float
[var1]转为array
其实 +'123' 也是可以转换为 int 型的 123
而 +new Data() 则等于 (new Date()).getTime()


--js效果网站
http://www.sharejs.com/
--js小游戏大全
http://www.sharejs.com/js/js_game/
--nginx在线详细讲解书籍
http://tengine.taobao.org/book/
--一个学习web的好博客
https://www.imququ.com/series.html#toc-8
http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ --在线android源码参考网站
http://www.w3cschool.cc/
http://lua-users.org/wiki/SampleCode --一个在线的lua开源资料库
http://www.bathome.net/index.php --批处理论坛,没事可以逛逛


http://www.wufangbo.com/jquery-examples-list/  --很不错的jquery学习网站,前端开发,包括jquery的动画效果等


http://www.cnblogs.com/iamzhanglei/archive/2011/08/16/2140113.html --一门新技术jscex,使用js异步编程


http://www.jb51.net/article/22620.htm --12个非常有趣的js小游戏


----------------------------------------------------------------------------------
jarsigner -verbose -keystore "证书库文件名" -signedjar "生成的最终文件名" -digestalg SHA1 -sigalg MD5withRSA "需要签名文件名" "证书别名"
例:
jarsigner -verbose -keystore key.keystore -signedjar signed.apk -digestalg SHA1 -sigalg MD5withRSA uucun.apk boyaafitloadland
zipalign -v -f 4 unaligned.apk aligned.apk


--以下是连同密码一起写入生成签名文件
jarsigner -verbose -keystore key.keystore -signedjar huawei_signed.apk -digestalg SHA1 -sigalg MD5withRSA -keypass jsdk3344556 -storepass jsdk3344556 huawei.apk boyaafitloadland 




http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/ch02.html --git在线学习资料


http://www.reddit.com/r/programming/comments/9egb6/programming_is_hard/?sort=old --编程好难(一个关于数取反的各种实现)


-VMWare服务开启脚本
cls&&echo 正在打开VMware相关程序,请稍候...
net start VMAuthdService>nul
net start VMnetDHCP>nul
net start "VMware NAT Service">nul
::net start vmount2>nul




echo VMware相关服务已启动,多谢使用 & pause > nul


cmd命令中,延时语句: choice /t 5 /d y /n > nul


Vmware stop.bat
@echo off
cls&&echo 正在关闭VMware相关服务,请稍候...
net stop VMAuthdService>nul
net stop VMnetDHCP>nul
net stop "VMware NAT Service">nul
::net stop vmount2>nul




echo VMware相关服务已关闭,多谢使用 & pause > nul


--一片不错的linux虚拟机安装流程
http://tieba.baidu.com/p/3152957061


----------------------------------------------------------
linux下安装VMWare-tool软件过程
1、点击虚拟机“安装VMWare-tool”
2、在/mnt目录下创建一个cdrom文件夹,把光驱挂载到cdrom上(centOS有挂在提示,直接点击“打开文件夹即可”)
   mkdir /mnt/cdrom
   mount /dev/cdrom /mnt/cdrom
3、解压安装包并安装
 tar xvzf VMwareTools-7.8.4-126130.tar.gz                 //解压安装包
 cd ./vmware-tools-distrib                                //进入解压后的安装包
 ./vmware-install.pl                                      //安装vmware-tools
4、安装过程中可能需要gcc编译软件,可以停止安装或者新打开shell
    yum -y install gcc gcc-c++ kernel-devel  //安装gcc: (yum线程被占用先执行rm -f /var/run/yum.pid)
5、重启才能生效


----------------------------------------------------------
rpm -qa|grep -i mysql //查看已经安装的名称中带有mysql的软件
rpm -ev 软件全名      //删除服务或安装的应用


find / -name mysql   //查看文件夹中关于mysql的目录列表


-----------以下是启动服务的两种方式-------------
systemctl start httpd.service #启动apache
service start httpd


systemctl enable httpd.service //允许apache开机启动


http://www.caipiaokong.com/open/3.html --此处提供了彩票结果采集的接口
http://api.opencai.net/apipaid/ --这里又一个彩票结果采集接口
http://www.haoservice.com/center/?subnav=debugbox --各种服务请求的api


http://www.bwlc.gov.cn/bulletin/prevkeno.html --北京快乐8开奖网址


md5sum生成密文
1、生成字符串密文
md5sum           //回车,然后输入123456
123456               //按下ctrl+d(按下两次)。
2、生成文件密文
md5sum 文件名
3、帮助信息
 md5sum --help
 
 /******************************************************************************/
3、Afinal框架
项目地址:https://github.com/yangfuhai/afinal
主要有四大模块:
 (1) 数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
 (2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI绑定和事件绑定。无需findViewById和setClickListener等。
 (3) 网络模块:通过httpclient进行封装http数据请求,支持ajax方式加载,支持下载、上传文件功能。
 (4) 图片缓存模块:通过FinalBitmap,imageview加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
             FinalBitmap可以配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等。FinalBitmap的内存管理使用lru算法,
             没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),
             更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络图片,比如ftp等。同时可以自定义bitmap显示器,
             在imageview显示图片的时候播放动画等(默认是渐变动画显示)。
4、xUtils框架


项目地址:https://github.com/wyouflf/xUtils
主要有四大模块:
  (1) 数据库模块:android中的orm框架,一行代码就可以进行增删改查;
            支持事务,默认关闭;
            可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
            支持绑定外键,保存实体时外键关联实体自动保存或更新;
            自动加载外键关联实体,支持延时加载;
            支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。          
  (2) 注解模块:android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
            新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
            目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
  (3) 网络模块:支持同步,异步方式的请求;
            支持大文件上传,上传大文件不会oom;
            支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
            下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
            返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。            
  (4) 图片缓存模块:加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
            支持加载网络图片和本地图片;
            内存管理使用lru算法,更好的管理bitmap内存;
            可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
5、ThinkAndroid


项目地址:https://github.com/white-cat/ThinkAndroid
主要有以下模块:
  (1)  MVC模块:实现视图与模型的分离。
  (2)  ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。 
  (3)  数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。  
  (4)  http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
  (5)  缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
  (6)  图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
  (7)  配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
  (8)  日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
  (9)  下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
  (10) 网络状态检测模块:当网络状态改变时,对其进行检
6、LoonAndroid 


项目地址:https://github.com/gdpancheng/LoonAndroid
主要有以下模块:
  (1)  自动注入框架(只需要继承框架内的application既可)
  (2)  图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
  (3)  网络请求模块(继承了基本上现在所有的http请求)
  (4)  eventbus(集成一个开源的框架)
  (5)  验证框架(集成开源框架)
  (6)  json解析(支持解析成集合或者对象)
  (7)  数据库(不知道是哪位写的 忘记了)
  (8)  多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
  (9)  自动更新模块
  (10) 一系列工具类
/**********************************************************************/


使用gradle打包成的jar文件,只能是作为lib被调用,如果jar包内含有入口程序(main函数可以直接调用的),则必须在MANIFEST.MF文件中添加上下面的信息:
Manifest-Version: 1.0
Main-Class: com.boyaa.test.HelloJava
注意:主动打开jar包后注意不要改变文件的原有内容,如原有文件没有Main-Class项目则添加上,下两行空出仍然保留,不能删除空格行。


执行jar文件的两种方法
1、执行jar文件请使用-jar开关选项,-jar开关会忽略classpath变量。
2、java -classpath ./HelloJava.jar com.http.java.Test,此方法是利用classpath找到jar,并进而找到相应的主类。


---------------------------------------------------------------------


sublime3常用插件
TAG:用于美化HTML代码的插件
HTML Export by revolunet ST2 8K INSTALLS
Export your code to nicely formatted HTML
HTMLBeautify by rareyman  TOP 100 100K INSTALLS
A plugin for Sublime Text that formats (indents) HTML source code. It makes code easier for humans to read.
HTML-CSS-JS Prettify by victorporof  TOP 100 130K INSTALLS
HTML, CSS, JavaScript and JSON code formatter for Sublime Text 2 and 3 via node.js


数据库sql文件中,verchar必须限制宽度,否则生成表时就报错,而且错误难以发现原因


数据库中“key”为关键字,当联合查询的时候,应该避免有字段为key的


sublime插件安装步骤
1、打开Sublime Text3 ,点击菜单栏的“Preferences”-->"Package Control",或者可以使用快捷键CTRL+SHIFT+P 打开
2、在打开的终端窗口,输入“install”,下方就会提示“Package Control:install package”,用鼠标点击
3、这时候等待几秒,就会弹出一个终端,在终端输入你想要安装的插件,这里我以“AlignMent”插件为例,点击下方,就会自动会为你安装插件了。
--------------------------------
1、如果不想通过Package Control,也可以直接下载好想要的插件,然后打开菜单栏里的“Preferences”--->"Browse Packages",打开包的位置
2、然后将下载的好插件直接放置到Packages目录,重启Sublime Text3 插件就会安装成功了。


--以下是sublime无法安装插件时候执行的命令(安装插件管理包)
1、通过主菜单->View -> Show Console或
2、import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf), 'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())


--关于totolink和tp有线路由器结合搭建wifi的过程
1、将电脑主网线入口接入tp的wan口,其它连入它的网线都从lan口出来。
2、具体连接过程是将电脑“本地连接”设置成自动获取ip和dns,连接好后直接进入192.168.1.1界面设置tp项,根据设置向导即可完成。
3、单独设置totolink(本项设置和步骤2没有关系,甚至可以关掉tp后再设置totolink),打开totolink,将电脑连入totolinkwifi后,在无线连接中将连接的ip改成192.168.0.XXX,然后访问192.168.0.254(totolink专有网关)。
4、在totolink中选择ap模式,设置加密等。
5、打开tp,并将网线lan连入totolink,打开totolink后即可上网。
6、在tp设置阶段,电脑无法进入tp界面,请检查本地连接是否写死了ip,并检查当前ip是不是处于192.168.1.xxx(即和tp处于同一网关)。
7、在tp网关设置界面请设置自动连接模式,如果访问网页自动转到网关界面(要求输入账户和密码),则可以尝试复位tp(用牙签等长按rst位5秒左右),然后重新按步骤操作。


sae上有些代码更新了,却没有显示更新内容,解决方法是将sae后台memcache状态中点击“清空”即可。


 split("\\s+")     --java中用来分割一个或多个空格,制表符
 String str1 = str.replaceAll("\\s{1,}", "");  --java替换一个或多个空格
 
 C++操作记录
1、crossapp搭建环境过程中,Util.h中debuglog的申明如下
#ifndef  _APP_UTIL_H_
#define  _APP_UTIL_H_

#include
#include
void debuglog(TCHAR *log);

#endif
如果不包含windows.h则会报错
2、要忽略某些警告信息,可以在工程属性中设置,如在Project -> Properties -> Configuration Properties -> C/C++ -> Advance 的 Disable Specific Warnings 中添加相应的警告编号:4819;


------------------------------股票数据接口------------------------------------
http://hq.sinajs.cn/list=sh000001      --新浪提供的股票数据接口
深成指:
上证指:
道琼斯:
纳斯达克:
恒生指:
日经指数:
台湾加权:
新加坡:


以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据
接口:
http://hq.sinajs.cn/list=sh601006
这个url会返回一串文本,例如:
var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92, 
22114263, 589824680, 4695, 26.91, 57590, 26.90, 14700, 26.89, 14300,
26.88, 15100, 26.87, 3100, 26.92, 8900, 26.93, 14230, 26.94, 25150, 26.95, 15220, 26.96, 2008-01-11, 15:05:32";
这个字符串由许多数据拼接在一起,不同含义的数据用逗号隔开了,按照程序员的思路,顺序号从0开始。
0:”大秦铁路”,股票名字;
1:”27.55″,今日开盘价;
2:”27.25″,昨日收盘价;
3:”26.91″,当前价格;
4:”27.55″,今日最高价;
5:”26.20″,今日最低价;
6:”26.91″,竞买价,即“买一”报价;
7:”26.92″,竞卖价,即“卖一”报价;
8:”22114263″,成交的股票数,由于股票交易以一百股为基本单位,所以在使用时,通常把该值除以一百;
9:”589824680″,成交金额,单位为“元”,为了一目了然,通常以“万元”为成交金额的单位,所以通常把该值除以一万;
10:”4695″,“买一”申请4695股,即47手;
11:”26.91″,“买一”报价;
12:”57590″,“买二”
13:”26.90″,“买二”
14:”14700″,“买三”
15:”26.89″,“买三”
16:”14300″,“买四”
17:”26.88″,“买四”
18:”15100″,“买五”
19:”26.87″,“买五”
20:”3100″,“卖一”申报3100股,即31手;
21:”26.92″,“卖一”报价
(22, 23), (24, 25), (26,27), (28, 29)分别为“卖二”至“卖四的情况”
30:”2008-01-11″,日期;
31:”15:05:32″,时间;


如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL:
http://hq.sinajs.cn/list=sh601003,sh601001


更多详细情况请访问:http://www.cnblogs.com/seacryfly/articles/stock.html
-----------------------------------------------------------------------------


chcp 936 --当dos窗口显示中文乱码的时候,使用此命令可以正常显示


jarsigner签名步骤
第一步:生成keystore
keytool -genkey -v -keystore android.keystore -alias android.keystore -keyalg RSA -validity 20000
第二步:jarsigner签名apk
jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore


项目中实现代码与android的R文件耦合方法
1、将R.class作为处理对象,R.class是每次程序运行时才会动态处理的。
2、通过如下函数将R内的各种资源分类放入不同的map中,后续可以直接冲map中取得资源
@SuppressWarnings("rawtypes")
public static void SetRes(final Class res) {
Class[] classes = res.getClasses();           //取得R类中的其它类
try {
for (int i = 0; i < classes.length; i++) {
Class cls = classes[i];
String name = cls.getSimpleName();        //取得类名
if (name.equals("drawable") ) {
SetResItem(cls, mDrawableMap);
} else if (name.equals("style") ) {
SetResItem(cls, mStyleMap);
} else if (name.equals("layout") ) {
SetResItem(cls, mLayoutMap);
} else if (name.equals("id") ) {
SetResItem(cls, mIdMap);
} else if (name.equals("string") ) {
SetResItem(cls, mStringMap);
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
3、使用如下代码彻底与R文件耦合
Class r = this.getClass();
try {
r = Class.forName(getPackageName() + ".R");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}


使用linux系统时普通用户不能执行sudo命令或不能切换到root域的解决办法。


1、使用root名登录linux系统,默认是不能选择root登录的,密码可能和delan的命令一样。
2、执行以下操作(来自于别人的博客,可行)


2.添加sudo文件的写权限,命令是:
chmod u+w /etc/sudoers


3.编辑sudoers文件
vi /etc/sudoers
找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)


ps:这里说下你可以sudoers添加下面四行中任意一条
youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL


第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.


4.撤销sudoers文件写权限,命令:
chmod u-w /etc/sudoers
sudo命令之后跟linux命令,表示不用切换身份的情况下以root身份执行命令(如创建目录就必须root身份执行),su命令是切换用户到root用户的命令,其后不用跟任何命令。


使用虚拟机运行dex文件的命令
adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld
-cp : classpath的缩写
/data/local/HelloWorld.zip dex文件的位置,可以在zip包中,也可以直接是dex文件
HelloWorld 主类的名称


Eclipse报错 due to restriction on required library XXX/jre/lib/rt.jar 解决方案
解决方法如下: 
1、进入Project --> Properties --> Java Build Path --> Libraries
2、remove 掉 JRE System Library
3、Add Library 重新加入JRE System Library
添加后即可解决此问题。


QT常用操作方式:
1 .Ctrl(按住)+ Tab快速切换已打开的文件
2 .快速添加方法实体(.cpp)声明,将光标移动到h文件中的方法声明。按Alt(按住)+ Enter,再按回车键将在cpp中添加该函数的声明。
3 .修改变量名,并应用到所有使用该变量的地方。将光标移动到需要更改的变量上,按Ctrl + Shift + R
4 .按Ctrl + M 添加/删除书签,按Ctrl + . 查找并移动到下一个标签
5 .F4 在 头文件(.h) 和 实现文件(.cpp) 之间进行切换。


Qt compile output 中文乱码
两个解决方法:
1.在系统环境变量里添加一个变量 LANG=en
2.或者不用中文,  %MinGW%\share\locale\zh_CN\LC_MESSAGES


sublime复制当前行到下一行快捷键 ctrl + shift + D


QT手动代码布局时,采用相对布局,在一个空的widget中填入下面的内容,则再向此widget中拖入控件时就是相对布局。
对此widget控件本身,可以根据水平,垂直设置成expand或fix,即可在父控件中的位置走向控制,默认情况下是充满整个父控件的。


0
0




100
33




0


QLayout::SetDefaultConstraint


0




关于wifi对战的学习总结
一、服务端
1、点击新建空房间后,wifiState里面会去开启服务监听,最终执行到NativeNet.NewServer。java层便打开端口监听(执行到startAccept函数处),此函数里面是个线程,监听客户端的请求,一旦请求到来,便在服务端new一个独立Client,与此客户端保持长久连接。与此同时,执行onAccept调lua层new一个Client对象,与java线程中新建的client保持一对一关系。
2、通过步骤1连续建立两个client监听线程之后,关闭广播消息,准备开始打牌了,此时,服务端监控客户端的连接线程任然存在(startAccept函数中),如果有新的客户端连接请求则继续响应,只是不会再new新的Client而已。
3、lua层一旦接收到onAccept消息(即有新的客户端连接进来),即new一个WifiNetServerClient对象(wifi_net文件中),此对象继承于WifiNetClient,也就是新建了一个client对象,此对象与java层对象保持对等关系。
4、服务端的两个Client线程实时接收数据,比如Client1和Client2,Client1接收来自Client1的数据,Client2接收来自Client2的数据,无论哪个线程接收到数据,都算是服务端的接收数据,只是在形式上表现为两个客户端接收处理数据。
5、将client1和client2接收到的数据听过接口监听执行onRecv调到lua层,lua层判断是哪个client收到消息并执行处理(判断方式是通过client的指针handle与lua层的handle比较,if handle == self.m_handle then),如果相同再往下执行,会执行到服务端的具体处理方法中,onRecvJson函数是分发处理方法的入口。此函数本来是client的函数,服务器的(客户端)复写该方法保证服务器接收到数据会与客户端不同。
6、由于通过handle判断了消息的接收体(具体的某一个client对象),使得即使在服务端存在两个client,也只会处理一次接收到的消息。此消息形式上是client在处理,其实是服务器的处理消息。
7、由于服务器和客户端保持一对一连接,如:服务端client1收到一条消息,其实表示此时client1向服务器发送了一条消息。
8、服务端保存两个client对象,要广播一条消息,其实是将消息发送给两个客户端,通过NetServer.broadcast实现,此广播和udp广播通知不一样,要仔细分析。
9、服务器向某客户端发送消息表现形式为每个client对象send消息即可。分析方法与接收消息一样。


二、客户端
1、客户端发起向某ip和端口的连接请求,java层执行NewClient方法,new一个client对象并返回句柄,client对象创建之后会尝试在有限次情况下连接服务器,一旦连接成功就开启一个新线程执行接收处理数据,在此时,服务端也new了一个线程保持与此client一对一的连接。
2、连接成功后,客户端向服务器发送一条消息,在服务器响应的client对象会收到,并下发到lua层执行相应的处理。
3、客户端收到消息后下方到lua层处理。


三、客户端和服务端的处理模式
1、在wifi_net中,WifiNetClient和WifiNetServerClient分别是客户端和服务端的对象,后者继承于前者,具有前者的所有行为。
2、服务端收到消息后,会在WifiNetServerClient中执行处理,向客户端发送消息是在WifiNetServer中处理的,可以把WifiNetServerClient理解成WifiNetServer的对象,WifiNetServer包含他们并操控他们,接收和发送消息都是通过WifiNetServerClient,无论怎样,都需要经过WifiNetServer同意才行。


在开发过程中遇到的问题解决
1、出了双王之后三个玩家轮换出现“不出,不出,不出”问题,在华为版本中,自己判断是否出牌是在room_ui中实现的,通过观察日志,发现new_turn变量没有控制住自己必须出牌,导致自动往后走,走到“上一手牌无敌”,自动pass,所以出现“不出,不出,不出”。解决版本就是newturn必须控制住逻辑,具体代码可参考华为预装版本。
2、wifi出牌时出现半截牌的问题,此问题一般是客户端出现,当服务端倒计时到0时,客户端也刚好倒计时到0,此时,服务端向客户端发送托管,想控制客户端托管,而此时客户端也向服务端发送了自己要托管,服务端又广播此条托管消息到两个客户端(也包括此客户端自己),导致客户端出现两次托管,逻辑混乱必然。解决版本是在WifiClient中复写timeoue函数,不作任何处理,客户端是否超时完全由服务端决定。




TCP/IP编程理解
1、服务器监听某一端口,如6666端口,客户端可以尝试连接到该端口。
2、客户端连接到服务端的端口一般都不一样,如12354端口,客户端的端口为源端口(peerPort),服务器端的端口叫目标端口(targetPort)。
3、至此,客户端和服务端连接完成,服务端可以有多个客户端与之保持连接。


搭建ejoy2d开发环境
1、qt版本的mingw执行make时不能编译,可以安装msys,打开msys后进入相关路径下进行编译。
2、按照以下步骤进行设置
1. lua-5.2.3/src/lua52.dll拷贝到MinGW/bin目录下
2. lua-5.2.3/src/liblua.a拷贝到MinGW/lib目录下,并改名为liblua52.a
3. lua-5.2.3/src/lua.h, lauxlib.h, luaconf.h, lualib.h 拷贝到 MinGW/include目录下
4. glew-1.10.0/lib/glew32.dll拷贝到MinGW/bin目录下
5. glew-1.10.0/lib/libglew32.a拷贝到MinGW/lib目录下
6. glew-1.10.0/include/GL/glew.h,glxew.h, wglew.h 拷贝到 MinGW/include/GL目录下 
以上步骤1、2、3为lua环境设置,4、5、6将软件包中的文件分别拷贝到mingw环境下即可。
3、cd到ejoy2d目录,执行命令make(此时在mingw环境下而非msys运行环境下)
4、ej2d examples/ex01.lua,即可看到相关运行图


阿里云操作记录(http://www.aliyun.com/)
1、购买阿里云主机(阿里云登录密码d*62*41*,阿里云主机密码:D*62*41*【因为需要大小写混合嘛】);
2、登录控制台的实例列表中可以看到自己的虚拟主机 https://ecs.console.aliyun.com/#/server/region/cn-beijing?status=Running
3、在“实例主机”的“更多”-“连接管理终端”中可以网页登录,在“链接帮助”中有主机ip和用户名。
4、启动电脑“远程桌面”,使用步骤三的用户名和密码登录即可,密码是阿里云登录密码,不是主机密码。
5、网页登录时的验证密码是336983
6、默认系统为win8正版英文界面,自己摸索吧


自己的阿里云登录信息:
IP:123.57.63.164
name:Administrator
key:d*62*41*


DIV标签css中的float属性是针对div内存的标签浮动方式,不是自己向哪个方向浮动。


vhttp编写笔记
1、线程池的使用方法,有序队列(具有优先级)的实现,并抽时间去研究一下线程池的具体实现。
向线程池中添加的线程(runnable)实现了Comparable接口的话,被加入队列中的线程任务就是有序的。
2、将请求任务和缓存任务合为一体,都放入一个线程池运行,此时这两种任务都应该能转换成同一个类,即继承相同的基类。
3、泛型类的实现方法,此框架中具体的请求分为多种,那么,基类就可以采用泛型实现,并且为abstract类,表示只给出一个框架,具体的实现由子类完成,基础类不做任何事情,故不能new。
4、ResDeliver负责将线程的消息派发到UI线程,实现原理是接收一个handler,new Handler(Looper.getMainLooper()),此handler的响应就会派发到主线程。想到主线程执行时,需要调用handler.post(rannable);此时rannable线程其实就已经到主线程中运行了。VHTTP中使用了Executor,用于响应多个runnable。


php发邮件记录
1、需要163的Pop3/smtp/imap服务,在邮箱的设置中可以开启。
2、开启后邮箱会给用户一个一次性随记密码,这个密码就是授权密码,可用于客户端发送邮件。


qt creater点击运行没有反应的解决方法
点击creater面板的项目tab页,找到运行配置,选择与工程相应的项目项




记录一次修改jar文件防止应用crash的问题
在一个视频插件中,点击播放后闪了一下马上就crash了,通过日志看到如下问题
10-08 15:12:13.147: E/AndroidRuntime(13844): FATAL EXCEPTION: Thread-5261
10-08 15:12:13.147: E/AndroidRuntime(13844): java.lang.UnsatisfiedLinkError: Native method not found: cn.mmachina.JniClientQQ.MDString:(Ljava/lang/String;Landroid/content/Context;Ljava/lang/String;)Ljava/lang/String;
10-08 15:12:13.147: E/AndroidRuntime(13844): at cn.mmachina.JniClientQQ.MDString(Native Method)
10-08 15:12:13.147: E/AndroidRuntime(13844): at com.tencent.ads.a.a.a.p(Unknown Source)
10-08 15:12:13.147: E/AndroidRuntime(13844): at com.tencent.ads.service.g.a(Unknown Source)
10-08 15:12:13.147: E/AndroidRuntime(13844): at com.tencent.ads.view.AdView$CountDownRunnable.run(Unknown Source)
10-08 15:12:13.147: E/AndroidRuntime(13844): at java.lang.Thread.run(Thread.java:856)
解决思路如下:
1、本问题属于android运行时异常,且异常并未上报到源代码应用层
2、打开jar包,可以依次跟踪到com.tencent.ads.view.AdView类中的CountDownRunnable类的run方法,试图修改次文件不让其报错后再编译成class文件,但由于关联太多,不断报错而终止。
3、于是将相关的引用文件全部拷贝到相关路径,却发现很多奇怪问题不能编译通过。
4、继续分析异常发现,最终报错是cn.mmachina.JniClientQQ类的MDString方法报错,查看源代码发现为native方法,报错信息显示Native method not found:,则有可能没有加载到动态库所致。其完整代码如下:
...//省略很多代码
public static native String MDString(String paramString1, Context paramContext, String paramString2);
5、通过ctrl+shift+G可以找到此方法的调用者,其实返回一个字符串。
6、既然调用者只是将此方法当做普通方法调用,与其是否native方法不关重要,于是直接修改成下面的方法:
public static String MDString(String paramString1, Context paramContext, String paramString2){
  return "test";
};
7、编译该文件成class文件后,用解压文件解压原jar包后替换即可。(由于此文件中引用了android的Context类,直接使java文件打包会出现错误,可以在eclipse中build后再去bin的classes文件中寻找class文件)
继上,通过反射实现视频titleUI控件的隐藏
1、由于sdk中包含了视频title栏的显示,title栏中含有TV版本引导按钮(其实是一个ImageView图标),想要把视频作为通用视频控件使用,我将要隐藏其功能。
2、通过点击TV出现crash,跟踪crash到com.tencent.qqlive.mediaplayer.uicontroller.playerController.t类的click方法中(其它类跟踪到之后都出现很多错误异常,不能编译通过),直接刨根铲除问题。
10-09 10:49:34.545: E/AndroidRuntime(9448): FATAL EXCEPTION: main
10-09 10:49:34.545: E/AndroidRuntime(9448): java.lang.NullPointerException
10-09 10:49:34.545: E/AndroidRuntime(9448): at com.tencent.qqlive.mediaplayer.uicontroller.UIController.startDlna(UIController.java:1005)
10-09 10:49:34.545: E/AndroidRuntime(9448): at com.tencent.qqlive.mediaplayer.uicontroller.x.prepareDlnaOnClick(UIController.java:448)
10-09 10:49:34.545: E/AndroidRuntime(9448): at com.tencent.qqlive.mediaplayer.uicontroller.playerController.t.onClick(MediaControllerView.java:2104)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.view.View.performClick(View.java:4171)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.view.View$PerformClick.run(View.java:17097)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.os.Handler.handleCallback(Handler.java:615)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.os.Handler.dispatchMessage(Handler.java:92)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.os.Looper.loop(Looper.java:137)
10-09 10:49:34.545: E/AndroidRuntime(9448): at android.app.ActivityThread.main(ActivityThread.java:4914)
10-09 10:49:34.545: E/AndroidRuntime(9448): at java.lang.reflect.Method.invokeNative(Native Method)
10-09 10:49:34.545: E/AndroidRuntime(9448): at java.lang.reflect.Method.invoke(Method.java:511)
10-09 10:49:34.545: E/AndroidRuntime(9448): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:808)
10-09 10:49:34.545: E/AndroidRuntime(9448): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:575)
10-09 10:49:34.545: E/AndroidRuntime(9448): at dalvik.system.NativeStart.main(Native Method)
3、t类的构造函数接受MediaControllerView类,这就是视频的UI控制器,t类本身没有对MediaControllerView对象接收处理(怀疑是反编译之后不能还原导致,一般情况下会接收该对象的),我主动给t类添加MediaControllerView私有对象,并在构造函数中接受传入的MediaControllerView对象。
4、在click方法中就可以通过MediaControllerView对象处理UI控制器类中的一些属性和方法了,下面是通过反射调用其方法和访问其属性的代码。
Method method = MediaControllerView.class.getDeclaredMethod("hideController");
method.setAccessible(true);
method.invoke(mediaControllerView);
Log.i("TenPay", "----------reflect go");
Field filed = MediaControllerView.class.getDeclaredField("mDlna");
filed.setAccessible(true);
ImageView tvView = (ImageView)filed.get(mediaControllerView);
tvView.setVisibility(View.GONE);
5、调用以上MediaControllerView类的属性和方法,可以先去MediaControllerView类查看有哪些属性和方法可被调用,理清大致逻辑后就可以实现调用了。
6、我还没有测试是否可以在jar包中增加自己的类实现调用。
续上,使用JClassLib修改.class文件中的字符串(http://blog.csdn.net/hexin373/article/details/6669813)
1、使用windows版本打开.class文件,查找到需要修改的常亮。
2、点击#后的连接,找到该常亮在常量池中的index。
3、利用工具修改.class文件并替换。
续上,在jar包中通过插入中间类,实现UI层接口调用
通过上面的分析,可以在jar包中修改t类隐藏控件(调用ControlView的一些方法控制界面显示),但是如何实现增加接口并回调到应用层(这里的应用层指调用jar包的源代码)呢。
1、在t类中增加新类OuterCaller,并定义成单例模式。只有单例模式才能保证在应用层与jar层调用的对象是同一对象。
2、在OuterCaller类中新增内部接口,如下
public class OuterCaller {
public interface OuterCallListner{
public void tvClick();
}
private OuterCallListner outerCallListner = null;
private static OuterCaller mTest = null;
private OuterCaller(){

}
public static OuterCaller instance(){
if (null == mTest) {
mTest = new OuterCaller();
}
return mTest;
}
public void setOuterListner(OuterCallListner mOuterCallListner){
outerCallListner = mOuterCallListner;
}
public void onTvClick(){
if (null != outerCallListner) {
outerCallListner.tvClick();
}
}
}
3、在jar包中的tv点击处调用OuterCaller.instance().onTvClick();
4、将编译好的t类和OuterCaller类拷贝到jar包对等路劲下面。
5、在应用层设置接口
OuterCaller.instance().setOuterListner(new OuterCallListner() {
@Override
public void tvClick() {
Log.i("TenPay", "-----------this is smallPlayerActivity");
}
});




NDK编译问题
1、在JNI项目的jni路径下,打开命令窗口,执行ndk-build即可编译jni项目描述的(用Android.mk文件描述)c文件,而与eclipse项目无关。
2、Android.mk文件的固定格式为,最后一项的include为BUILD_EXECUTABLE表示编译成exe可执行文件,BUILD_SHARED_LIBRARY表示编译成共享库(.so动态库文件)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    :=  daemon
LOCAL_SRC_FILES :=  ../daemon.c
LOCAL_LDLIBS := -llog -pie
include $(BUILD_EXECUTABLE)
3、从include $(CLEAR_VARS)开始到最后,重写这一段代码将构建另一个新的编译规则,一次可以实现编译多个文件的目的。
4、执行ndk-build会编译Android.mk文件描述的项目,编译平台在Application.mk文件中,ndk-build clean用于清理项目,ndk-build V=1显示详细的编译过程
5、android可执行程序在非root手机中是不能通过shell执行的,但是可以将文件push到/data/local/tmp目录下执行,这里执行不需要许可权限。
6、$(addprefix avilib/, $(MY_SRC_FILES)),函数addprefix调用,$(MY_SRC_FILES)表示变量名MY_SRC_FILES的变量,理解mk文件中函数的调用和变量的表示
7、ndk-build指令开关 -C(android.mk文件路径) -B(强制编译所有源文件)
8、eclipse中在path and symbols中添加${JAVA_HOME}/include和${JAVA_HOME}/include/win32用于解决找不到jni.h的问题
9、使用javah对Activity类生成jni头文件时提示:无法访问android.app.Activity 找不到android.app.Activity的类文件
使用指令:javah -classpath bin/classes -d jni com.example.hellojni.HelloJni  //-d表示创建目录
解决办法:
1、进入src目录,执行:javah -d ../jni com.example.hellojni.HelloJni
2、使用-bootclasspath开关制定android.jar包:javah -classpath bin/classes -bootclasspath D:\devsoft\adt-boyaa-windows-x86_64-20140702\sdk\platforms\android-7\android.jar -d jni com.example.hellojni.HelloJni
10、查看类中方法和字段签名的命令
javap -classpath bin/classes -p -s com.example.hellojni.HelloJni
11、查看该字节码文件的反编译
javap -c -l VolatileTest.class 


将javah命令集成到eclipse的解决方案(使用以上9-1的命令方式)
1、在eclipse->run->external tool configuration->Program页新建
2、Location : ${system_path:javah}  //也可以使用绝对路径:C:\Program Files\Java\jdk1.7.0_17\bin\javah.exe
   Working Directory : ${project_loc}\src
   Arguments : -d ../jni ${java_type_name}  //${java_type_name}表示具体的类名称com.example.hellojni.HelloJni
3、对某个类生成头文件时,需要选中该文件,再执行上面的程序
将javap命令集成到eclipse的解决方案(使用以上10的命令方式)
1、同上
2、Location : ${system_path:javap}
   Working Directory : ${project_loc}
   Arguments : -classpath ${project_classpath} -p -s ${java_type_name}
3、对某个类生成产生描述符时,需要选中该文件,再执行上面的程序




QT程序打包注意
在exe文件所在目录下qt.conf的配置文件。内容如下:
[Paths]
Prefix=.
Plugins=Plugins
并将qt目录下的plugins文件夹拷贝到exe目录即可


抓取java程序内存dump文件prof
run as --> Arguments --> VM arguments
输入:
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=c:/memoryLeakDemo.hprof
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps 
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime  
-Xloggc:c:/memoryLeakDemoGc.log


-- 通过ViewFipper实现页面滑动切换效果
1、在布局中添加ViewFlipper标签,并包含多个子节点,每个子节点都是一个view
            android:layout_width="fill_parent" android:layout_height="fill_parent">
       
                    android:layout_height="fill_parent" android:gravity="center">
                            android:layout_height="wrap_content" android:src="@drawable/a1" />
       

       
                    android:layout_height="fill_parent" android:gravity="center">
                            android:layout_height="wrap_content" android:src="@drawable/a2"
                android:gravity="center" />
       

       
                    android:layout_height="fill_parent" android:gravity="center">
 
                            android:layout_height="wrap_content" android:src="@drawable/a3"
                android:gravity="center" />
       

       
                    android:layout_height="fill_parent" android:gravity="center">
 
                            android:layout_height="wrap_content" android:src="@drawable/a4"
                android:gravity="center" />
       

   

2、此步骤也可以动态实现,如在代码中实现
for (int i = 0; i < imageID.length; i++)
{
ImageView image = new ImageView(this);
image.setImageResource(imageID[i]);
image.setScaleType(ImageView.ScaleType.FIT_XY);
viewFlipper.addView(image, new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
3、在onTouchEvent事件中处理调用接口实现页面切换
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = event.getX();
            break;
        case MotionEvent.ACTION_UP:
            if (event.getX() > startX) { // 向右滑动
                viewFlipper.setInAnimation(this, R.anim.in_leftright);
                viewFlipper.setOutAnimation(this, R.anim.out_leftright);
                viewFlipper.showNext();
            } else if (event.getX() < startX) { // 向左滑动
                viewFlipper.setInAnimation(this, R.anim.in_rightleft);
                viewFlipper.setOutAnimation(this, R.anim.out_rightleft);
                viewFlipper.showPrevious();
            }
            break;
        }
        return super.onTouchEvent(event);
    }
}

4、需要添加一些动画描述文件,如in_leftright,表示从左边进入的页面的动画,其它依次类推



android:duration="500" />
android:duration="500" />

你可能感兴趣的:(编程语言,技术实现)