Posts Tagged ‘代码’
Nirvana Player
实在受不了凤凰网的网站布局,自己做了个客户端用来播放凤凰宽频中的节目
方便检索所有视频,自动认证帐户(不会弹出drm窗口)
首次使用会下载播放列表
双击视频进行播放
可以输入ifeng的视频帐户密码(以后播放视频会自动验证,不用登陆)
双击视频控件可以切换回播放列表
修复Chrome下iFeng播放控件
中国的网站总是不喜欢使用新技术,ifeng也不例外,wmv视频文件不用mms服务器而用ftp,新页面从来都是_blank方式打开,最糟糕的是chrome下居然无法播放视频。
先来看看他的播放页面的逻辑:
点击视频图片后最终导航到这个页面,ie下的播放效果是,先显示一张loading字样的gif,等待由js绘制的wmp控件缓冲视频完毕以后隐藏该图片。于此同时,在一个隐藏的iframe中对该视频进行验证。
而在chrome中你只能看到一张凤凰的logo,完全无法看到视频。
问题出在了AttachEvent这个方法上,WebKit不支持这个事件(https://bugs.webkit.org/show_bug.cgi?id=6598),有人提到用AttachEventLister可以解决这一问题,试了下没有成功,不过最简单的解决方法还是替换它们的播放器生成脚本,用最直接的方式显示视频。
好在chrome强大的扩展功能使这一目的得以实现,通过content script将自定义的播放器脚本插入目标页面,替换旧的播放器脚本。由于没有用到ie的dhtml特性,所以视频的播放就不再会有问题了。
根据这个原理,我做了个chrome插件
接下来还有个问题,chrome不支持activex,而drm的验证控件只有ie的版本,因此chrome无法通过后台验证drm,wmp下验证会弹出确认窗口,好在不太影响使用。
不得不说凭借drm的安全性,如果能通过https或者其他更方便些的方式进行验证,完全可以大大增加他的竞争力。
单片机学习记录02
上次遗留问题:
1如何计算芯片每秒执行的指令数?
不要求精度的可以在Keil的调试中预估代码执行时间,精确的还没学到估计和P3.5有关
2这个东西硬件相关,如果自己设计的电路与实验板接线不同,难道要代码重写?
目前看貌似是,悲剧啊
3为什么不把液晶屏的P2.7设置成低电平,所有的LED都会长亮,当程序执行时,应该亮起的LED的亮度会更高?
不明
4另外视频中介绍的计算与LED连接的电阻阻值的计算方法还没有试过
实践完毕,红扎泪目
刚刚学到数码管静态显示,我的板子很多地方都跟老郭的不一样,他手头的教材也没有,吃力啊。
根据网友的提示,自己先写了段数码管动态显示的代码,不知道正常情况下是不是也是这么实现的:
这次的诡异现象:
1手头的实验板做数码管试验时经常悲剧,字符显示不正确,断开usb重连后正常,可能跟液晶屏有关,目前液晶模块已卸感觉良好
2我的板子数码管模块没有锁存器,据说静态显示方式无法多位显示,红豆泥?
3蜂鸣器怎么用,P3.2设置低电平微弱响声后就没了
4数码管中间的冒号怎么控制,没看到原理图中没查到定义
livespace 什么时候支持源码格式,怨念啊
单片机学习记录01
这块学习板在书架顶上躺了好久了,最近整理模型的时候才翻了出来。打算近期除了钢弹外,就集中搞这个了。
找了份教学视频,目前看了第一课,大致操作是熟悉了。
查看原理图
keil写代码,编译
下载到实验板
硬件相关的代码写起来比较麻烦,之前按照视频中的代码操作,板子上的led始终不会亮,后来查了这块板的原理图和相关的代码才发现,与P0不仅与LED相连,还控制着液晶屏,而LED的电源还接着P3。
经过一番修改,我的第一个代码终于完成了:
单片机要做出Hello world对我来说还很困难,这是个流水灯的程序
单片机程序与PC程序不同,他的main会循环执行直至断电,因此我将初始化代码从main中分离出来,以避免初始化时造成的延迟。
用for修改了delay函数,这样结构更清晰,等到了解了如何计算芯片运行单条指令的时长后可以继续修改,将需要延迟的时间作为参数输入。
流水灯主代码用的循环,直接设置P0亮的bit用0表示,其余部分用1遮罩,而不是很多例子中的逐句设置显示状态,这个修改是目前最得意的部分,不知道入门以后再回头看看这段代码,会不会觉得特别的渣。
这次试验也发现了部分问题,做个记录:
1如何计算芯片每秒执行的指令数?
2这个东西硬件相关,如果自己设计的电路与实验板接线不同,难道要代码重写?
3为什么不把液晶屏的P2.7设置成低电平,所有的LED都会长亮,当程序执行时,应该亮起的LED的亮度会更高?
4另外视频中介绍的计算与LED连接的电阻阻值的计算方法还没有试过
PS:Keil实在用不惯,尤其是他的代码区域光标可以随意设置,一不小心代码的缩进就被破坏了,有没有让VS做IDE的可能性?调试也貌似很麻烦,无法测试变量值,所有的bug都要靠自己看啊~~
————无奈的分割线——————–
当天就发现了更简便的写法:直接移动比特位,然后取反……悲剧啊
免费图床WebFileStore欢迎试用
主机升级到.NET了,做了个图床站点练习.NET和MSSQL
在页面中选择需要上传的图片(小于400k)并且填写上你的邮箱地址
上传后,图片的地址将会发送至你的邮箱
由于数据库只有50M的容量,将会不定期地对不活跃的数据进行清理,以保证其他服务不至于崩坏
欢迎提交bug帮助我改进这个程序
WebFileStore测试地址:http://mewchew.com/WebFileStore/ 域名还没解析过来,暂时用ip凑合着
跨线程调用Windows控件
最近在做桌面版的iFeng视频播放器,其中用到了.NET的BackgroundWorker控件来创建后台线程,用于更新节目信息。当读取到新的节目后,将其添加到一个ListView控件中,由于窗体界面的与BackgroundWorker不在一个线程中,为了实现这个运行效果,可以有两种方法:
一种是使用公共变量,当需要更新数据的时候修改变量的值,然后抛出ProgressChanged事件,让主线程来处理。这种方法有一个缺点,由于线程是异步的,因此,很有可能后台抛出了多次事件后,主线程才进行处理,这样要么将公共变量改造成堆栈的形式,要么就会丢失数据。
另一种则是直接进行跨线程的控件操作,这种方法的好处是简单,不用花费太多的精力放在功能的完善上。
首先声明一个委托:
Public Delegate Sub myDelegate(ByVal strItemId As String, ByVal strItemName As String)
再创建一个委托方法:
这里是以a、b这两个参数来向listview中添加条目。
Private Sub myMethod(ByVal a As String, ByVal b As String)
Me.lstviewMain.Items.Add(a, b, "")
End Sub
在BackgroundWorker的线程中用invoke方法,调用委托的方法。
第一个参数是需要调用的委托方法名,第二个参数是传递给委托方法的参数,参数的数量需要与委托声明中定义的一致。
这里用的是同步调用,如果要使用异步调用则用BeginInvoke方法。
lstviewMain.Invoke(New myDelegate(AddressOf myMethod), New Object() {myMatch.Groups(1).ToString, myMatch.Groups(2).ToString})