VisualSVN Server 服务器ankh SVN 客户端 (锁定-编辑-解锁)模式设置
作者:freethy 发布于:2013-5-3 23:21 Friday
Subversion 的运行配置区特性,Subversion的许多全局的配置参数都是放在运行配置区中,运行配置区实际上就是一个目录,在我的XP操作系统这个目录是 “C:/Documents and Settings/rock/Application Data/Subversion”,其中rock是我的用户名,在这个目录里config文件是客户端操作的一些属性,而servers则是服务器端的属 性,这一部分我们要使用config文件。
打开运行配置区的config文件,去掉“enable-auto-props = yes”前面的“#”和空格,然后找到“[auto-props]”小节,增加下面的属性并保存即可实现所有文件的自动添加需要锁定的属性:
“* = svn:needs-lock=x”
作了这个设置后,以后通过“svn add”和“svn import”添加的文件都会有“svn:needs-lock”属性,这样所有新加的文件都是进入了“锁定-编辑-解锁”模型。
利用BCDboot修复windows 7系统引导文件损坏
作者:freethy 发布于:2013-4-15 22:07 Monday
实验环境:windows 7 sp1
为了实验windows 7下的Bitlocker技术(驱动器加密),将C盘加密后,系统自己建立了一个额外的100M的隐藏分区。实验完成后,将此分区格式化,合并入C盘,至此问题出现,提示“bootmgr is missing”系统无法引导了。
后来发现,将C盘加密后产生的100M隐藏分区是用于存储系统引导文件的分区,格式化后,引导文件被删除了,自然无法引导。
用PE盘引导进入PE,利用BCDboot命令即可轻松的恢复引导文件。BCDboot 是一种用于快速设置系统分区或修复系统分区上的启动环境的工具。系统分区是通过从已安装的 Windows(R) 映像复制一小部分启动环境文件来设置的。BCDboot 还会在系统分区上创建引导配置数据 (BCD) 存储,该存储中包含一个新的引导项,可让您引导到已安装的 Windows 映像。
BCDboot 命令行选项
下列命令行选项可用于 BCDboot.exe。
BCDBOOT source [/l locale] [/s volume-letter] [/v] [/m [{OS Loader GUID}]]
选项 描述
source
指定作为源的 Windows 目录的位置,将从该目录中复制启动环境文件。
/l 可选。指定区域设置。默认值为美国英语。
/s 可选。指定系统分区的卷号。默认值是固件所标识的系统分区。
/v 可选。启用详细模式。
/m 可选。默认情况下,仅合并全局对象。
如果指定了 OS Loader GUID,则合并系统模板中给定的加载程序对象以生成可启动项。
在我所遇到的情况中,利用“bcdboot C:\Windows”即可使用 C: 卷上安装的操作系统映像中的文件来初始化系统分区。至此,系统恢复正常。
Mifare l卡特性简介
作者:freethy 发布于:2013-4-14 21:56 Sunday
Mifare l卡特性简介
M1卡为8K位的非接触式IC卡。
电气特性
l 容量为8K位EEPrOM
l 分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位
l 每个扇区有独立的一组密码及访问控制
l 每张卡有唯一序列号,为32位
l 具有防冲突机制,支持多卡操作
l 无电源,自带天线,内含加密控制逻辑和通讯逻辑电路
l 工作温度:-20℃~50℃
l 工作频率:13.56MHZ
l 通信速率:106KBPS
l 读写距离:10mm以内(与读写器有关)
l 数据保存期为10年,可改写10万次,读不限次
存储结构
M1卡分为16个扇区,每个扇区4块(块0~3),共64块,按块号编址为0~63。第0扇区的块0(即绝对地址0块)用于存放厂商代码,已经固化,不可更改。其他各扇区的块0、块1、块2为数据块,用于存贮数据;块3为控制块,存放密码A、存取控制、密码B,其结构如下:
A0A1A2A3A4A5 FF 07 80 69 B0B1B2B3B4B5
密码A(6字节) 存取控制(4字节) 密码B(6字节)
控制属性
每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取控制。在存取控制中每个块都有相应的三个控制位,定义如下:
块0: C10 C20 C30
块1: C11 C21 C31
块2: C12 C22 C32
块3: C13 C23 C33
三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制位在存取控制字节中的位置如下(字节9为备用字节,默认值为0x69):
|
bit 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字节6 |
C23_b |
C22_b |
C21_b |
C20_b |
C13_b |
C12_b |
C11_b |
C10_b |
字节7 |
C13 |
C12 |
C11 |
C10 |
C33_b |
C32_b |
C31_b |
C30_b |
字节8 |
C33 |
C32 |
C31 |
C30 |
C23 |
C22 |
C21 |
C20 |
(注: _b表示取反)
其中,黑色区控制块3,蓝色区控制块2,绿色区控制块1,红色区控制块0。
数据块(块0、块1、块2)的存取控制如下:
控制位(X=0..2) |
访 问 条 件 (对块0、1、2) |
|||||
C1X |
C2X |
C3X |
Read |
Write |
Increment |
Decrement transfer restore |
0 |
0 |
0 |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
KeyA|B |
Never |
Never |
Never |
1 |
0 |
0 |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
0 |
KeyA|B |
KeyB |
KeyB |
KeyA|B |
0 |
0 |
1 |
KeyA|B |
Never |
Never |
KeyA|B |
0 |
1 |
1 |
KeyB |
KeyB |
Never |
Never |
1 |
0 |
1 |
KeyB |
Never |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
Never |
Never |
(KeyA|B 表示密码A或密码B,Never表示任何条件下不能实现)
例如:当块0的存取控制位C10 C20 C30=100时,验证密码A或密码B正确后可读;验证密码B正确后可写;不能进行加值、减值操作。
控制块(块3)的存取控制与数据块(块0、1、2)不同,它的存取控制如下:
控制位 |
密码A |
存取控制 |
密码B |
|||||
C13 |
C23 |
C33 |
Read |
Write |
Read |
Write |
Read |
Write |
0 |
0 |
0 |
Never |
KeyA|B |
KeyA|B |
Never |
KeyA|B |
KeyA|B |
0 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
KeyA|B |
Never |
1 |
0 |
0 |
Never |
KeyB |
KeyA|B |
Never |
Never |
KeyB |
1 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
0 |
0 |
1 |
Never |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 |
1 |
1 |
Never |
KeyB |
KeyA|B |
KeyB |
Never |
KeyB |
1 |
0 |
1 |
Never |
Never |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
例如:当块3的存取控制位C13 C23 C33=100时,表示:
密码A: 不可读,验证KEYB正确后,可写(更改)。
存取控制:验证KEYA或KEYB正确后,可读不可写。
密码B: 不可读,验证KEYB正确后,可写。
工作原理
卡片的电气部分只由一个天线和 ASIC 组成。
天线:卡片的天线是只有几组绕线的线圈,很适于封装到 IS0 卡片中。
ASIC:卡片的 ASIC 由一个高速(106KB波特率)的 RF 接口,一个控制单元和一个8K位EEPROM组成。
读写器向 M1 卡发一组固定频率的电磁波,卡片内有一个 LC 串联谐振电路,其频率与讯写器发射的频率相同,在电磁波的激励下,LC 谐振电路产生共振,从而使电容内有了电荷,在这个电容的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内储存,当所积累的电荷达到 2V 时,此电容可做为电源为其它电路提供工作电压,将卡内数据发射出去或接取读写器的数据。
应用程序池 'DefaultAppPool' 的模板永久性缓存初始化失败,这是由下列错误所导致: 无法创建应用程序池的磁盘缓存子目录。数据可能包含额外的错误代码。
作者:freethy 发布于:2013-3-29 15:24 Friday
IIS运行权限的问题,处理方法更改IIS运 行时用的两个账户:IIS_WPG和NETWORK SERVICE对应用程序池用到的相关目录的NTFS权限,将IIS_WPG账户设置为读取与运行,列出文件夹目录,读取,而NETWORK SERVICE则需要完全控制权限,要配置的相关目录如下
%systemroot%\Help\IIShelp\common
%systemroot%\system32\inetsrv\asp compiled templates
%systemroot%\iis temporary compressed files
重启IIS admin服务
服务器不支持 MySql 数据库,100%解决问题。
作者:freethy 发布于:2013-3-22 18:01 Friday
出现问题:报错“服务器不支持 MySql 数据库”,
改函数function_exists('mysql_connect')返回 false
php.ini文件没有参数没有配置正确
解决方法:
(1) 打开php.ini文件,找到:
extension_dir = "./"
将其改为;
extension_dir = "X:\PHP\ext"(php扩展程序目录)
(2) 找到:Windows Extensions,去掉模块配置每行前面的;号即可
extension=php_mbstring.dll
extension=php_gd2.dll
extension=php_mysql.dll
(3) 找到:
disable_functions =
改为:
disable_functions =
passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status
(4)系统环境变量(rabbit8.cn大神原创)
添加系统环境变量,变量名:PHPRC 变量值:c:\php (php目录)
保存php.ini文件,并将其复制到C:\Windows\
注:如果在第一次配置过程中,php.ini参数出现错误,虽然直接修改C:\Windows\php.ini的参数,但是无法立马生效.那么还需要重启IIS来使用新的参数生效!
检索 COM 类工厂中 CLSID 为 {2206CDB2-19C1-11D1-89E0-00C04FD7A829} 的组件时失败,原因是出现以下错误: 80070005。
作者:freethy 发布于:2013-3-21 18:46 Thursday
Asp.Net连接access数据库出现如下错误,网站源码是从另一台服务器拷贝过来的,应该不存在代码写错误。
网上搜索了好一阵子,各种方法尝尽,最后发现原来C:\Program Files\Common Files文件夹权限不够导致,将IIS_WPG赋权
问题解决。
丁香花歌曲背后的故事
作者:freethy 发布于:2013-3-20 22:57 Wednesday
[该日志已设置加密,请点击标题输入密码访问]
查找一个字节数组在另一个字节数组中出现的位置
作者:freethy 发布于:2013-3-18 15:56 Monday
/// <summary>
/// 查找字节数组 data2在data1中出现的位置
/// </summary>
/// <param name="data1"></param>
/// <param name="data2"></param>
/// <returns></returns>
public int IndexOf(byte[] data1, byte[] data2)
{
for (int i = 0; i < data1.Length - data2.Length; i++)
{
//查找第一个索引
bool gin = true;
for (int j = 0; j < data2.Length; j += 1)
{
if (data1[i + j] != data2[j])
{
gin = false;
break;
}
}
if (gin)
{
return i;
}
}
return -1;
}
LM2596 5V与LM7805的比较有哪些利弊?
作者:freethy 发布于:2013-3-4 15:20 Monday
LM2596的效率高,IC的发热量小,输出噪音大些,价格高,外围电路复杂。 LM7805的稳压效果好些,效率低,IC的发热量较大,输出噪音小,价格低,外围电路简单。
使用webclient同时post普通表单字段和文件表单字段数据到指定的URL【转】
作者:freethy 发布于:2013-2-18 18:17 Monday
如大家要转载,请保留本人的版权:/*
*Description:在asp.NET代码中同时post普通表单字段和文件表单字段数据到指定的服务器URL。
*Auther:chongchong2008-天真的好蓝啊
*MSN:chongchong2008@msn.com
*QQ:154674958
*Blog:chongchong2008.cnblogs.com
*Dates:2012-02-28
*Copyright:ChongChong2008 YiChang HuBei China
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Net;
namespace HttpRequest
{
/// <summary>
/// description:http post请求客户端
/// author:chongchong2008
/// last-modified-date:2012-02-28
/// </summary>
public class HttpRequestClient
{
#region //字段
private ArrayList bytesArray;
private Encoding encoding = Encoding.UTF8;
private string boundary = String.Empty;
#endregion
#region //构造方法
public HttpRequestClient()
{
bytesArray = new ArrayList();
string flag = DateTime.Now.Ticks.ToString("x");
boundary = "---------------------------" + flag;
}
#endregion
#region //方法
/// <summary>
/// 合并请求数据
/// </summary>
/// <returns></returns>
private byte[] MergeContent()
{
int length = 0;
int readLength = 0;
string endBoundary = "--" + boundary + "--\r\n";
byte[] endBoundaryBytes = encoding.GetBytes(endBoundary);
bytesArray.Add(endBoundaryBytes);
foreach (byte[] b in bytesArray)
{
length += b.Length;
}
byte[] bytes = new byte[length];
foreach (byte[] b in bytesArray)
{
b.CopyTo(bytes, readLength);
readLength += b.Length;
}
return bytes;
}
/// <summary>
/// 上传
/// </summary>
/// <param name="requestUrl">请求url</param>
/// <param name="responseText">响应</param>
/// <returns></returns>
public bool Upload(String requestUrl, out String responseText)
{
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
byte[] responseBytes;
byte[] bytes = MergeContent();
try
{
responseBytes = webClient.UploadData(requestUrl, bytes);
responseText = System.Text.Encoding.UTF8.GetString(responseBytes);
return true;
}
catch (WebException ex)
{
Stream responseStream = ex.Response.GetResponseStream();
responseBytes = new byte[ex.Response.ContentLength];
responseStream.Read(responseBytes, 0, responseBytes.Length);
}
responseText = System.Text.Encoding.UTF8.GetString(responseBytes);
return false;
}
/// <summary>
/// 设置表单数据字段
/// </summary>
/// <param name="fieldName">字段名</param>
/// <param name="fieldValue">字段值</param>
/// <returns></returns>
public void SetFieldValue(String fieldName, String fieldValue)
{
string httpRow = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
string httpRowData = String.Format(httpRow, fieldName, fieldValue);
bytesArray.Add(encoding.GetBytes(httpRowData));
}
/// <summary>
/// 设置表单文件数据
/// </summary>
/// <param name="fieldName">字段名</param>
/// <param name="filename">字段值</param>
/// <param name="contentType">内容内型</param>
/// <param name="fileBytes">文件字节流</param>
/// <returns></returns>
public void SetFieldValue(String fieldName, String filename, String contentType, Byte[] fileBytes)
{
string end = "\r\n";
string httpRow = "--" + boundary + "\r\nContent-Disposition: form-data;
name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
string httpRowData = String.Format(httpRow, fieldName, filename, contentType);
byte[] headerBytes = encoding.GetBytes(httpRowData);
byte[] endBytes = encoding.GetBytes(end);
byte[] fileDataBytes = new byte[headerBytes.Length + fileBytes.Length + endBytes.Length];
headerBytes.CopyTo(fileDataBytes, 0);
fileBytes.CopyTo(fileDataBytes, headerBytes.Length);
endBytes.CopyTo(fileDataBytes, headerBytes.Length + fileBytes.Length);
bytesArray.Add(fileDataBytes);
}
#endregion
}
}
使用方法:
----------------------------------------------------------------------------------------------------------------
string url = "http://127.0.0.1/test/upload";//发送到的页面的地址
string image_path = "c:/test.jpg";
FileStream fs = new FileStream(image_path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] fileBytes = new byte[fs.Length];
fs.Read(fileBytes, 0, fileBytes.Length);
fs.Close();
fs.Dispose();
HttpRequestClient httpRequestClient = new HttpRequestClient();
httpRequestClient.SetFieldValue("id", "123");
httpRequestClient.SetFieldValue("user_name", "chongchong2008");
httpRequestClient.SetFieldValue("type_id", "1");
httpRequestClient.SetFieldValue("uploadfile", "test.jpg", "application/octet-stream", fileBytes);
string responseText;
bool uploaded = httpRequestClient.Upload(url, out responseText);
===========================================================================
referrer link: http://www.cnblogs.com/dotey/
============================================================================