前端开发,音游狗

HTML5

HTML5 PNG 解码测试

基于这篇文章的研究结果,做了一个小实现。 测试入口 不支持IE。。。 几点经验吧: escape和unescape采用Unicode编码,encodeURI(Component)和decodeURI(Component)采用UTF-8编码。 Opera不支持HTML5原生拖拽(?) 一旦在源HTML里设置图像宽度,无论是width,还是内置css还是style标签,更新innerHTML之后都会乱码,原因不明。 forEach虽然好用,但是只支持数组,nodeList之流还是乖乖for循环。。。 Chrome存不了拖拽dataTransfer的setData,刚set完get就没有,而且直接看对象也是只存了key没存value,原因不明。 effectAllowed里面,move跟移动文件的光标一样,copy跟复制文件的光标一样,link跟创建快捷方式的光标一样。 如果在dataTransfer里面set了text/plain的data,drop时firefox会自动打开搜索页。就跟选中一段文本拖动是一个感觉。Chrome没有估计是因为5的原因。要防止的话preventDefault可能不是万能的,drop时clearData才是万全之策。 Safari的宽度计算有问题?四宫格视图里面,总宽度500,其他浏览器只要每个宽度250就可以放下,Safari必须248,然后拖动一下之后250居然又可以放下了。目测BUG。 其实主要还是想练Python。 头回写Python,

快速切换代码与注释的技巧

本文适合各种同时支持//与/* */注释的语言。 在调试的时候有时要在代码中反复注释与取消注释一段代码,在没有碉堡的IDE的Ctrl+/的帮助下,每次添加与删除/和/是一件十分浪费时间的事情。于是总结出了一些可以提高注释与取消注释效率的技巧。 例1,要反复注释与取消注释一段代码的情况: /* foo(); bar(); //*/ 是为注释状态 //* foo(); bar(); //*/ 是为取消注释状态,代价是输入与删除第一个斜杠。 例2,要反复切换两段代码的注释与取消注释状态的的情况: //* foo(); bar(); /*/ foo2(); bar2(); //*/ 是为第一段代码有效状态 /* foo1(); bar1(); /*/ foo2(); bar2(); //*/ 是为第二段代码有效状态,代价同样是输入与删除第一个斜杠。 例3,要反复切换许多段代码的注释与取消注释的情况。 //* foo1(); bar1(); /*/ foo2(); bar2(); /*/ foo3(); bar3(); /*/ foo4(); bar4(); /*/ foo5(); bar5(

C

计算机是蛋疼人类的好朋友系列(

实验室有个玩具,不知道是谁手欠买来的。是这样的一个东西: 据说它原来是个3x3x3的正方体,不知道又是谁手欠给展开了。 由于智商很宝贵的原因,我拿手里摆弄了好几天都没给它恢复成一个正方体。 怒,写个搜索算法。 #include <stdio.h> #define sbyte signed char // sbyte: (-128 to +127) #define SIZE 3 // Size of cube. #define AREA (SIZE * SIZE) // Area of a face of cube. #define VOLUME (SIZE * SIZE * SIZE) // Volume

jQuery

jQuery 中监视背景图像(列表图像)加载完成的一种 hack 。

在jQuery环境下,一般HTML元素的load事件无法监听到背景图像的加载。 当我们需要监听到背景图像的加载时,可以利用浏览器的缓存机制,创建一个空Image对象同时进行加载,此时该Image对象的load事件即为源图像加载完成的事件。于是在jQuery中我们可以利用此函数 function imageListener(url, handler) { $("<img />").attr("src", url).load(handler); return url; } 来监听背景图像的加载,用法如下: $("body").css("background-image", "url(" + imageListener("background.png", backgroundImageLoadedHandler) + "

HTML

HTML 中对于固定表格布局且首行合并时单独控制列宽的方案

对于设置了table-layout为fixed的表格,其每一列的宽度都由第一行的单元格的宽度确定,与第二行以后的单元格宽度及内容无关。所以可以大幅度提高表格解析的性能,当表格的第一行解析完成后,用户即可看到整个表格。 当表格的第一行有合并的单元格的时候,被合并的每一列的单独宽度均无法直接调整。举一个例子: <style> table { background-color: black; border-spacing: 5px; table-layout: fixed; width: 200px; height: 100px; } td { background-color: white; padding: 0px; } </style> <table> <tbody> <tr> <td colspan="

iOS

部分 iOS 程序闪退的一种解决方案

直接上解决方案: 将iOS设备连接到iTunes上。 确保iTunes上的登录AppleID与iOS设备的Apple ID相同。凑点字,具体方法如下: 在iTunes上点击“Store(S)”,观察倒数第二项的内容。 如果倒数第二项是“显示我的帐户(XXX)中的内容(V)…”,记录括号内的XXX的内容,并转到第6步。 否则转到第9步。 在iOS设备上点击“设置”->“Store”。 比较“Apple ID:”后面的内容与第4步记录的内容是否相同,若相同直接转到第11步,若不同则记录“Apple ID:”后面的内容。 在iTunes上点击“Store(S)”->“注销(O)”。 在iTunes上点击“Store(S)”->

ActionScript3

终于战胜了 ByteArray 的 AMF 写入读取,总结几个要点。

复制整个ByteArray可以使用newBytes.writeBytes(oldBytes)方法。用readBytes似乎也可以,有时间把它理解清楚了。此外这个方法执行后,两个ByteArray的指针都在EOF处,即BytesAvailable都是0。注意重复利用的时候调整position属性。 要使对象支持AMF序列化,必须使用全局函数registerClassAlias对类进行注册别名的操作。别名唯一即可,一般可采用完整含包路径的类名称。 序列化的类必须__只能__有__无参数的__构造方法。因为Action Script不支持方法重载,而是使用默认参数的方式进行多种参数形式的声明,而设计支持AMF序列化的类其构造函数必须是无参数的,换句话说,即使所有参数都有默认值也不行。 序列化的类必须为public,参与序列化的属性也必须是public,使用其他命名空间均不能参与序列化,即使在作用域内拥有访问权限。 AMF序列化习作:PaintingRecord

ActionScript3

仿 jQuery 的 once 方法,在 ActionScript 中指定一个只触发一次的监听器。

package net.gerhut.eventUtils { import flash.events.EventDispatcher; public class OnceEventDispatcher { public static function add(eventDispatcher:EventDispatcher, type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void { var onceListener:OnceListener = new OnceListener(eventDispatcher, type, listener, useCapture); eventDispatcher.addEventListener(type, onceListener.

Metasploit

Metasploit 安装时,连接不上7337端口的解决方案

在中文Windows XP系统下安装Metasploit时,系统调用psql后提示could not connect to server: Connection refused (0x0000274D/10061)。因为psql数据库下的地区不兼容SQL_ASCII,所以我们需要手动修改本机的地区。具体操作方法是进入控制面板中的区域和语言选项,在标准和格式栏中选择英语(美国),然后进行安装。安装结束后可以再改回中文(简体,中国)。即可使用

AIR

Adobe AIR 应用程序目录文件访问漏洞

在ActionScript 3.0参考的FileStream条目中,标明了当文件位置位于应用程序目录中,并将fileMode参数设置为“追加”、“更新”或“写入”模式时,FileStream对象的open和openAsync方法会抛出SecurityError异常。亦即AIR程序是没有权限修改应用程序目录中的文件的。应用程序的配置文件则推荐存储于File.applicationStorageDirectory文件夹中。测试后发现,其判断文件位置是否位于应用程序目录中的算法是判断File对象是否是File.applicationDirectory对象的resolvePath方法返回的值,而不是进行nativePath的判断,所以可以通过nativePath的导出再导入的方式突破这个限制。具体来说就是 var f:File = File.applicationDirectory.resolvePath("hello.world").nativePath; var s:FileStream = new FileStream(); s.open(f, FileMode.WRITE); s.close(); 这个过程会在open一行抛出SecurityError异常。

Windows

USB 设备全部失效的解决方案。

Windows XP,USB插什么都无法识别,但是有反应,本来应该是“咚哒”的声音变成了响三声“咚咚咚”。查看设备管理器后发现通用串行总线控制器的下属设备全部是感叹号(无法启动)的状态。详细的错误信息是“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备(代码 19)”。解决方案是展开注册表中的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class目录,下面有很多ClassID的目录,一个一个翻,会有一个右面显示“通用串行总线控制器”的目录。将这个目录中的upperfilter项或lowerfilter项删除。在设备管理器中将通用串行总线控制器下面的所有叹号设备删除,重新扫描硬件设备改动,USB恢复正常。

Java

java7 swing提供以及WinXP提供的所有界面皮肤预览。

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.UIManager.LookAndFeelInfo; @SuppressWarnings("serial") public class LookAndFeelDemo extends JFrame implements ActionListener { private static class LookAndFeelApplication { private LookAndFeelInfo lookAndFeelInfo; private LookAndFeelApplication(LookAndFeelInfo lookAndFeelInfo) { this.lookAndFeelInfo = lookAndFeelInfo; } public static LookAndFeelApplication[] getInstalledLookAndFeelApplications(

JavaFX

用 JavaFX 1.X SDK + Eclipse JavaFX 构建 JavaFX 编译环境。

Eclipse用的3.8M1,在eclipse官网找最新版下载。 JavaFX SDK用的1.X,最新版本在http://www.oracle.com/technetwork/java/javafx/downloads/previous-jsp-137062.html下载,JavaFX 2.0 beta目前似乎在eclipse上还没有对应的插件。 SDK装好后,做一个改动,在SDK安装目录下有一个timestamp文件,中间有一行开头是 Product: javafx-1.XXX 改成 Product: javafx-1.2.1 即可在Eclipse中使用。 Eclipse JavaFX插件用Eclipse的自动安装,地址是http://javafx.com/downloads/eclipse-plugin/。 安装好后需要重启Eclipse,之后在Window->Preferences-&