月度存档: 10 月 2013

socket初探

客户端flash:
[code]
package
{
import flash.net.Socket;
import flash.events.*;
import flash.display.Sprite;
import flash.errors.*;
import flash.display.SimpleButton;
import flash.utils.Timer;

public class Client extends Sprite
{
private var mysocket:Socket;
private var host:String=”127.0.0.1″;
private var port:int=2046;

private var timer:Timer=new Timer(1000);
public function Client()
{
btn.addEventListener(MouseEvent.CLICK,SendData);
mysocket=new Socket();

mysocket.addEventListener(Event.CONNECT,OnConnect);
mysocket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
mysocket.addEventListener(ProgressEvent.SOCKET_DATA , receivedata);
//mysocket.addEventListener(SecurityError
mysocket.connect(host,port);

timer.addEventListener(TimerEvent.TIMER,showTimer);
timer.start();
}
private function OnConnect(e:Event):void
{
log(“连接成功”);
mysocket.writeUTFBytes(“test”);
mysocket.flush();//发送数据
}
private function ioErrorHandler(e:IOErrorEvent):void
{
log(“连接失败”);
}
private function receivedata(e:ProgressEvent):void
{
log(“收到的字节数”+mysocket.bytesAvailable);
var msg:String=””;
while (mysocket.bytesAvailable)
{
msg+=mysocket.readMultiByte(mysocket.bytesAvailable,”utf8″);
log(msg);
}
}
private function SendData(e:MouseEvent):void
{
mysocket.connect(host,port);
log(“发送”);
mysocket.writeUTFBytes(“i am flash/n”);
mysocket.flush();//发送数据
}

private function showTimer(e:TimerEvent):void
{
mysocket.connect(host,port);
log(“发送2”);
mysocket.writeUTFBytes(“my time/n”);
mysocket.flush();//发送数据
}

private function log(s:String):void
{
ta.appendText(s+”\n”);
ta.verticalScrollPosition=ta.maxVerticalScrollPosition;
//ta.scrollV=ta.maxScrollV;

}

private function clearHandler():void{
socket.removeEventListener(ProgressEvent.SOCKET_DATA, receivedata);
socket.removeEventListener(Event.CONNECT, OnConnect);
//socket.removeEventListener(Event.CLOSE, closeHandler);
socket.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
}
}

[/code]
服务器端php:
[code]

[/code]

滚动条到最下面

ta.verticalScrollPosition=ta.maxVerticalScrollPosition;//for TextArea
//ta.scrollV=ta.maxScrollV;// for TextField

bat定时任务

@echo off
:AA
test.exe
ping -n 1000 127.1 >nul
goto AA

~~~~~~~~~~~~~~~~~~~~~~~~~~~
每隔1000秒跑一次test.exe

浮动水墙

浮动水墙>

As3获取本机字体和嵌入字体函数enumerateFonts

enumerateFonts () 方法
public static function enumerateFonts(enumerateDeviceFonts:Boolean = false):Array
语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9
指定是否提供当前可用嵌入字体列表。

参数

enumerateDeviceFonts:Boolean (default = false) — 指示是否要将列表限制为仅当前可用的嵌入字体。如果设置为 true,则返回一个包括所有字体(设备字体和嵌入字体)的列表。如果设置为 false,则返回一个只包括嵌入字体的列表。
返回
Array — 一个作为 Font 对象数组的可用字体列表。

示例

此示例首先调用静态方法 Font.enumerateFonts() 来获取包括所有设备字体和嵌入字体的列表。然后此示例按 fontName 属性对生成的 Array 的 Font 对象进行排序。
接下来,此示例显示如何调用 enumerateDeviceFonts 参数设置为 false 时的 Font.enumerateFonts() 方法。生成的 Array 只包括嵌入的 Font 对象。(如果在不包含任何嵌入字体的应用程序中运行此代码,则 embeddedFonts 数组将为空。)

import flash.text.Font;

var allFonts:Array = Font.enumerateFonts(true);
allFonts.sortOn(“fontName”, Array.CASEINSENSITIVE);

var embeddedFonts:Array = Font.enumerateFonts(false);
embeddedFonts.sortOn(“fontName”, Array.CASEINSENSITIVE);

Mysql常用命令

1.避免查询重复数据
select DISTINCT field1 from table_name
2.格式化显示查询结果(field2*12表示field2列数据乘12,yearsalary代表前面表达式结果都属于这个字段)
select CONCAT(field1,’your format:’,field2*12) yearsalary from table_name
3.模糊查询
查询field1中以字母A开头的数据记录,%匹配多个字符串,_匹配单个字符串
select field1 from table_name where field1 LIKE ‘A%’;
查询不是以A开头的:
select field1 from table_name where field1 NOT LIKE ‘A%’;
4.排序:
升序:select * from table_name order by id ASC
降序:select * from table_name order by id DESC
多字段排序:select * from table_name order by id DESC,value ASC
5.限制数据记录查询数量
select * from table_name limit 5;//显示5条数据
select * from table_name limit 5,15; //显示从第6条记录起的15行数据
6.统计函数
select function(field) from table_name
count():统计记录条数
AVG():统计字段平均值
SUM():统计字段总和
MAX():查询字段最大值
MIN():查询字段最小值
7.分组数据–GROUP BY,HAVING
1).创建分组GROUP BY
先列出所有的vend_id,以便作对比

mysql> SELECT vend_id FROM products;
+———+
| vend_id |
+———+
| 1001 |
| 1001 |
| 1001 |
| 1002 |
| 1002 |
| 1003 |
| 1003 |
| 1003 |
| 1003 |
| 1003 |
| 1003 |
| 1003 |
| 1005 |
| 1005 |
+———+
14 rows in set (0.00 sec)

用GROUP BY进行分组
mysql> SELECT vend_id,COUNT(*) AS num_prods
-> FROM products #先分组,再分别计算COUNT(*)
-> GROUP BY vend_id;
+———+———–+
| vend_id | num_prods |
+———+———–+
| 1001 | 3 |
| 1002 | 2 |
| 1003 | 7 |
| 1005 | 2 |
+———+———–+
4 rows in set (0.00 sec)

TIPS:
*如果列中有多行NULL值,它们将分为一组
*GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前

2).过滤分组HAVING
*HAVING 与 WHERE 的区别:
WHERE过滤行,而HAVING过滤分组

eg:
mysql> SELECT vend_id,COUNT(*) AS num_prods
-> FROM products
-> GROUP BY vend_id
-> HAVING COUNT(*)>2; #从结果中过滤不符合COUNT(*)>2的组
+———+———–+
| vend_id | num_prods |
+———+———–+
| 1001 | 3 |
| 1003 | 7 |
+———+———–+
2 rows in set (0.00 sec)

* WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤,所以,WHERE排除的行不包括在分组中

eg:
先列出原始数据作对比
mysql> SELECT vend_id,prod_price FROM products
-> ORDER BY prod_price;
+———+————+
| vend_id | prod_price |
+———+————+
| 1003 | 2.50 |
| 1003 | 2.50 |
| 1002 | 3.42 |
| 1003 | 4.49 |
| 1001 | 5.99 |
| 1002 | 8.99 |
| 1001 | 9.99 |
| 1003 | 10.00 |
| 1003 | 10.00 |
| 1003 | 13.00 |
| 1001 | 14.99 |
| 1005 | 35.00 |
| 1003 | 50.00 |
| 1005 | 55.00 |
+———+————+
14 rows in set (0.00 sec)

mysql> SELECT vend_id,COUNT(*) AS num_prods
-> FROM products
-> WHERE prod_price >14 #WHERE过滤后只剩下上表中最后3条记录,
-> GROUP BY vend_id #HAVING再过滤分组后vend_id为不符合COUNT(*) >=2组
-> HAVING COUNT(*) >=2;
+———+———–+
| vend_id | num_prods |
+———+———–+
| 1005 | 2 |
+———+———–+
1 row in set (0.00 sec)

3). 分组和排序
GROUP BY和ORDER BY的区别
*ORDER BY指定的条件可以是任意列
*GROUP BY指定的条件只可能使用选择列或列表达式

TIPS:
一般在使用GROUP BY子句时,也应该给出ORDER BY子句
Examples:
先列出原始数据:

mysql> SELECT order_num,quantity,item_price FROM orderitems;
+———–+———-+————+
| order_num | quantity | item_price |
+———–+———-+————+
| 20005 | 10 | 5.99 |
| 20005 | 3 | 9.99 |
| 20005 | 5 | 10.00 |
| 20005 | 1 | 10.00 |
| 20006 | 1 | 55.00 |
| 20007 | 100 | 10.00 |
| 20008 | 50 | 2.50 |
| 20009 | 1 | 10.00 |
| 20009 | 1 | 8.99 |
| 20009 | 1 | 4.49 |
| 20009 | 1 | 14.99 |
+———–+———-+————+
11 rows in set (0.00 sec)

mysql> SELECT order_num,SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >= 50;
+———–+————+ #未用ORDERBY指定排序,结果可能不是想要的,例如按ordertotal升序
| order_num | ordertotal |
+———–+————+
| 20005 | 149.87 |
| 20006 | 55.00 |
| 20007 | 1000.00 |
| 20008 | 125.00 |
+———–+————+
4 rows in set (0.00 sec)

mysql> SELECT order_num,SUM(quantity*item_price) AS ordertotal
-> FROM orderitems
-> GROUP BY order_num
-> HAVING SUM(quantity*item_price) >=50
-> ORDER BY ordertotal; # 用ORDERBY指定排序方式
+———–+————+
| order_num | ordertotal |
+———–+————+
| 20006 | 55.00 |
| 20008 | 125.00 |
| 20005 | 149.87 |
| 20007 | 1000.00 |
+———–+————+
4 rows in set (0.01 sec)

php常用函数

1.字符串分割成数组

输出:
Array
(
[0] => Hello
[1] => world.
[2] => It’s
[3] => a
[4] => beautiful
[5] => day.
)
2.小数点精确到后面3位
四舍无入的:
number_format(numble,位数);

11个在线编码网站

Topcoder

TopCoder可以说是全球最大的竞赛软件开发社区,全球各地的开发者都会来此参加比赛。该社区提供各种类型的编程竞赛,包括算法、测试、设计、组装、SRM、马拉松等。赞助商包括微软和NSA等一些巨头公司为获奖者提供现金奖励。提交的解决方案可以采用的语言有:Java、C++、C#或VB。

CodeChef

CodeChef是一个非营利性组织,这是印度的一家软件公司DirectI提供的,总部设在孟买。它是一个全球性的编程社区,举办网上竞赛、培训等各种活动。

Sphere online judge (SPOJ)

Sphere online judge是最早的竞赛网站之一,支持超过40种编程语言以及编译器。如今,SPOJ平台已经建立了在线评测系统,用于自动评估用户提交的项目。

CodingBat

CodingBat是一个现场编程网站,支持利用Java和Python构建的相关问题。该问题提供即时反馈,此外,它还可以作为编码者实践和掌握编程基础知识的实用平台。

Google Code Jam

由谷歌公司推出的Google Code Jam是一年一度的编程竞赛。在这里,专业人士和学生程序员可自主选择编程语言在有限的时间内挑战复杂的算法竞赛。

Dream in Code

Dream In Code (DIC)是一个专为程序员和Web开发者提供的在线社区。该社区会员可以免费访问成千上万的编程教程、代码片段、论坛主题等。

Codeforces

Codeforces是一个在线编程平台,基于该平台你可以练习各种问题,提交竞赛试题并与其他用户提交的问题进行PK。

UVa Online Judge

这个在线编码网站是由西班牙Valladolid(巴利亚多利德)大学维护。在这里你可以找到以往编程竞赛各种类型问题,包括ACM国际编程大赛;此外你还可以提交各种编程语言的源代码。

Python Challenge

以Python为主,Python Challenge是个系列性的编程竞赛。尽管任何一门语言都可用来解决这个问题,但倘若你用Python,将更加有助于你理解问题。

Facebook Puzzles

顾名思义,这套编程问题是由Facebook提供的。用户可以利用各种语言提交解决方案,包括C++、C、Haskell、Java、Perl、PHP、Python、Ruby。

ACM-ICPC

ACM – ICPC是世界上最大的编程竞赛之一,每年举行一次。该竞赛是由IBM为学生团队组织的。这个竞赛主要涉及编程算法问题。从各个地区中选拨,最终进入世界级总决赛。目前支持两种语言:C/C++和Java。

值得一提的是,还有一些平台也不错,它们是 IEEEXtreme,hackers.org,Timus Online Judge,DWITE。

让MySQL表中有数据添加ID字段并让关键字ID自增长

让MySQL表中有数据添加ID字段并让关键字ID自增长

Sql代码

ALTER TABLE tablename DROP id;

ALTER TABLE tablename ADD id INT NOT NULL
PRIMARY KEY AUTO_INCREMENT FIRST

让MySQL自增长字段号从不连续变成连续的