在C#中生成唯一的字符串和数字

      当我们想要获得一个唯一的key的时候,通常会想到GUID。这个key非常的长,虽然我们在很多情况下这并不是个问题。但是当我们需要将这个36个字符的字符串放在URL中时,会使的URL非常的丑陋。

      想要缩短GUID的长度而不牺牲它的唯一性是不可能的,但是如果我们能够接受一个16位的字符串的话是可以做出这个牺牲的。

      我们可以将一个标准的GUID 21726045-e8f7-4b09-abd8-4bcc926e9e28  转换成短的字符串 3c4ebc5f5f2c4edc

      下面的方法会生成一个短的字符串,并且这个字符串是唯一的。重复1亿次都不会出现重复的,它也是依照GUID的唯一性来生成这个字符串的。

        private string GenerateStringID()
        {
            long i = 1;
            foreach (byte b in Guid.NewGuid().ToByteArray())
            {
                i *= ((int)b + 1);
            }
            return string.Format("{0:x}", i - DateTime.Now.Ticks);
        }

      如果你想生成一个数字序列而不是字符串,你将会获得一个19位长的序列。下面的方法会把GUID转换为Int64的数字序列。

        private long GenerateIntID()
        {
            byte[] buffer = Guid.NewGuid().ToByteArray();
            return BitConverter.ToInt64(buffer, 0);
        }

1)假设数据库是这个样子的:

 

2)运行以下控制台代码:

static void Main(string[] args)
        {
            //测试bigint的读取:
            using (SqlConnection con = new SqlConnection(@"server=.\sqlexpress;database=MyTest;integrated security=true"))
            {
                SqlCommand cmd = new SqlCommand("select top 1 number from tb_dbo", con);
                con.Open();
                IDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection | CommandBehavior.SingleRow);
                dr.Read();
                long n = Convert.ToInt64(dr["number"]);
                Console.WriteLine(n);
                dr.Close();
            }
        }

 

3)结果如下:

 

 

是否可以无损耗的压缩GUID为12位呢?

当我们想要获得一个唯一的key的时候,通常会想到GUID。这个key的长度是36位,如果将这个36为的字符串存储或是用url传递的时候就会感觉非常的难看。
就算去掉-分隔符也有32位,如 EAA82B2DA9EA4E5B95330BAF9944FB35,如果转为数字序列 如将guid转为int64数字序列,长度也会有19位。
byte[] buffer = Guid.NewGuid().ToByteArray();  
long long_guid=BitConverter.ToInt64(buffer, 0);
这样就会得到一个类似于  5472976187161141196 的19位长度的 数字序列。
如果我们将 5472976187161141196 分解为 54 72 97 61 87 161 141 196,应该可以用8个字符就可以显示,但会有一部分是不可显示的字符。
如果将这8个字符转为base64,发现只需要10-14个为就能显示完毕,将一些url用到的某些符号剔除,通常会产生12位的编码较多,10位的编码较少。
经过100万次的测试,没有发现会有重复的字符产生,不知道是否是完美的将guid 压缩为12位的方法呢?
如果你有更好的做法,可以共享出来。
附源代码
 public static string UUID()
        {
            
byte[] buffer = Guid.NewGuid().ToByteArray();  
            
long long_guid=BitConverter.ToInt64(buffer, 0);

            
string _Value = System.Math.Abs(long_guid).ToString();

            
byte[] buf=new byte[_Value.Length];
            
int p=0;
            
for (int i = 0; i < _Value.Length;)
            {
                
byte ph=System.Convert.ToByte(_Value[i]);

                
int fix=1;
                
if ((i+1)<_Value.Length)
                {
                    
byte pl=System.Convert.ToByte(_Value[i+1]);
                    buf[p]
=(byte)((ph<<4)+pl);
                    fix
=2;
                }
else{
                    buf[p]
=(byte)(ph);
                }

                
if ((i+3)<_Value.Length)
                {
                    
if (System.Convert.ToInt16(_Value.Substring(i,3))<256)
                    {
                        buf[p]
=System.Convert.ToByte(_Value.Substring(i,3));
                        fix
=3;
                    }
                }
                p
++;
                i
=i+fix;
            }
            
byte[] buf2=new byte[p];
            
for (int i=0;i<p;i++)
            {
                buf2[i]
=buf[i];
            }
            
string cRtn=System.Convert.ToBase64String(buf2);
            
if (cRtn==null)
            {
                cRtn
="";
            }
            cRtn
=cRtn.ToLower();
            cRtn
=cRtn.Replace("/","");
            cRtn
=cRtn.Replace("+","");
            cRtn
=cRtn.Replace("=","");
            
if (cRtn.Length==12
            {
                
return cRtn;
            }
else{
               
return UUID();
            }
        }

 

 

 

posted @ 2012-03-26 18:03 安安 阅读(41) 评论(0) 编辑

参考

 http://www.congci/    .com/item/mac,os,fenbianlv

去掉上面的空格再访问

 

系统盘 Extra / com.apple.Boot.plist 文件 右键 “显示简介” -- >“共享与权限”

添加当前用户读写权限


<key>Timeout</key>
<string>10</string>
的下面添加如下两行:
<key>Graphics Mode</key>
<string>1280*800*32@60</string>
然后保存,退出,
笔记本是14.1寸的液晶,所以分辨率是1280*800,色深32位,刷新率为60,可以根据需要更改为相应的值。

 

参照方法

由于是黑苹果,使用的变色龙启动器,直接修改启动器下的boot文件即可,所以跟下面的方法相同,但是文件不同。

第一种方法:终端修改:
1、打开终端,输入 sudo -s,取得root权限;
2、输入 vi /Library/Preferences/SystemConfiguration/com.apple.Boot.plist,打开该文件;
3、在<key>Timeout</key>
<string>10</string>
的下面添加如下两行:
<key>Graphics Mode</key>
<string>1680*1050*32@60</string>
然后保存,退出,
我是22寸的液晶,所以刷新率为60,你可以更改为需要的值。
4、重起。

posted @ 2012-03-18 21:55 安安 阅读(56) 评论(0) 编辑

默认使用的配置文件是在:
[我的文档]/IISExpress\config\

applicationhost.config 是核心的配置文件,它用于承载站点的定义、应用程序和应用程序池以及整个WEB服务器的配置。
由于是放在我的文档中的,所以修改它不需要管理员权限,意味着可以直接修改。
在修改后,下次启动应用程序就会起效。

在applicationhost.config内容中,<system.applicationHost> 用于定义网站和应用程序池。
默认情况下,其内容如下:
<applicationPools>
            <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
            <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
            <applicationPoolDefaults managedRuntimeLoader="v4.0">
                <processModel />
            </applicationPoolDefaults>
</applicationPools>
IIS Express 内建了五个应用程序池,分别对应.Net 2.0/4.0的集成/经典模式、以及一个非托管程序池。
默认的程序池版本有 <spplicationPoolDefaults> 节来配置。

<sites> 节用于配置网站。
网站的默认应用程序池和虚拟目录默认配置由 <applicationDefaults> 和 <virtualDirectoryDefaults> 节点配置。

①.每个 <site> 就是一个网站。

这和IIS中的网站是一样的概念。
serverAutoStart 设置了是否随着 IIS Express的启动而自动启动。
如果设置为true,那么每次 IIS Express 启动都会自动加载(如果没有指定网站的话),否则只有以指定特定网站的模式运行时才会加载。

使用IIS Express加载特定网站的语法是: IISExpress.exe /site:<站点名>

②.<site> 下的<bindings>设置了这个站点的绑定信息。

节点下的每个<binding>都是一个端口绑定信息。
典型的绑定配置如下:<binding protocol="http" bindingInformation="*:8080:localhost" />

protocol 指定了绑定的协议类型(IIS Express内建了 HTTP 和 HTTPS两种协议支持),
而“*:8080:localhost”则指定的绑定的具体信息,
它有三个部分组成:“绑定的IP:端口:主机名”。
默认情况下,绑定到任何本地IP、非保留端口、绑定到localhost。

③.<application> 这个节设置了网站的应用程序

每个网站都需要至少一个映射路径为“/”应用程序(它映射到根目录)。
除此之外,你可以继续添加并行的不同路径的 <application> ,这就类似于IIS中的网站里配置的应用程序。

例如,
在FishSite这个网站中,我需要添加一个单独的应用程序,映射到根目录下的fish目录,那么我就可以这样配置:
在<site>中,只有 path="/" 这个应用程序是必须的(不能缺少),其它都是可以任意添加的。

④.<virtualDirectory> 设置了目录的映射信息
在每个<application>节下,必须至少存在一个 path="/" 的 virtualDirectory,它代表了这个目录映射的位置。
除此之外,可以手动添加多个映射的路径不同的虚拟目录。

posted @ 2012-02-19 20:46 安安 阅读(33) 评论(0) 编辑

好处

1. ASP.NET Development Server 只能本机访问,IIS 7.5 Express可以通过修改配置文件允许远程访问

2. 文件比较小 12M,简练并且易于安装

3. 支持创建虚拟目录,支持运行多个 Web Application ,提供了完整的Web服务器功能—包括SSL, URL重写,多媒体支持和所有其他的IIS 7.x模块。

    http://weblogs.asp.net/scottgu/archive/2010/04/20/tip-trick-fix-common-seo-problems-using-the-url-rewrite-extension.aspx

4. 可以跟VS集成,在Visual Studio中不需要管理员权限即可启动和调试程序。

5. 它的可扩展模型和web.config配置结构和IIS 7.x是一样的。

6.它可以和IIS Web服务器还有ASP.NET开发服务器同时运行在同一台机器上(他们不会相互冲突)

7.它支持Windows XP及更高版本的操作系统—在所有操作系统平台上提供了完整的IIS 7.x功能集。

8.性能上可以满足至少几十人并发要求

9.可以命令行方式运行,便于打包部署测试程序。

 

1. 安装

   下载地址 http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=abc59783-89de-4adc-b770-0a720bb21deb&displaylang=zh-cn

    安装后程序路径

    C:\Program Files (x86)\IIS Express

    配置文件路径

    [我的文档]/IISExpress\config\

2. 跟程序一起打包发布

命令行介绍

 iisexpress [/config:config-file] [/site:site-name] [/systray:boolean]

 配置文件可直接基于默认的配置文件修改, 默认使用的配置文件是在:

 [我的文档]/IISExpress\config\applicationhost.config

 

配置文件随应用程序发布,然后分别创建两个批处理文件,
用以启动和停止IIS Express服务,非常方便,
批处理内容大概就像这样:
启动:start F:/Projects/IIS Express/iisexpress.exe /config:F:/Projects/XXX/applicationhost.config /systray:true /site:MTLOralDemo

停止:TASKKILL /F /IM iisexpress.exe /T

 

启动一个临时的网站
iisexpress /path:<网站目录> /port:<端口> /clr:<CLR版本,V2.0|V4.0>
iis express会复制一份配置文件到临时目录,并变更其中的站点信息后再启动,因此不会影响到本机已经配置的网站。

3. 跟VS集成

可以这样运行

修改新项目永久使用IIS Express运行,可以如下设置

在VS 2010中,选择菜单  工具 --> 选项 --> 项目和解决方案 --> Web项目 ,选中 将IIS Express用于新的基于文件的网站和项目

 

3.远程访问设置

  默认配置文件位于:[我的文档]\IISExpress\config\applicationhost.config。记事本打开找到:  

  找到配置文件中 sites/site/bindings

  增加自己要设置的节点,格式如下:

  <binding protocol="http" bindingInformation="*:[端口]:[计算机名或外部IP地址、绑定域名]" />

   例如:

<site name="程序站点名" id="2">
 <application path="/" applicationPool="Clr4IntegratedAppPool">
  <virtualDirectory path="/" physicalPath="程序路径" />
 </application>
 <bindings>
      <binding protocol="http" bindingInformation="*:8085:localhost" />
      增加<binding protocol="http" bindingInformation="*:8085:192.168.1.1" />
      增加<binding protocol="http" bindingInformation="*:80:demo.mysite.com" />
 </bindings>
</site>

增加了两个访问:

a. 基于IP局域网带端口8085(注意打开本地防火墙设置)局域网访问

b. 设置了http://demo.mysite.com/ 域名解析访问

 上面设置好了以后再用管理员身份打开cmd ,运行如下命令:
  netsh http add urlacl url=http://192.168.1.1:8085/ user=everyone
  netsh http add urlacl url=http://demo.mysite.com:80/ user=everyone

提示
已成功添加 URL 保留项
说明增加成功,可以启动IIS Express直接用 http://192.168.1.1:8085/ 局域网访问网站了,也可以用http://demo.mysite.com/ 域名解析方式访问(配置本地host或者修改域名真实解析)。

 

4.虚拟目录设置

类似于下面这样:
<site name="程序站点名" id="1280170558">
 <application path="/" applicationPool="Clr2IntegratedAppPool">
  <virtualDirectory path="/" physicalPath="C:/IISExpress/DemoApp/empty" />
 </application>
 <application path="/AppService" applicationPool="Clr2IntegratedAppPool">
  <virtualDirectory path="/" physicalPath="C:/IISExpress/DemoApp/AppService" />
 </application>
 <bindings>
  <binding protocol="http" bindingInformation="*:8088:192.168.79.166" />
 </bindings>
</site>

    我尝试过多个virtualDirectory节点,但发现Web Application不能正常工作,而且多个虚拟目录也不是使用独立的 Web.config,后来通过配置application 解决。
    如果站点有Spring之类的东西,运行时会出现错误,请将 applicationPool 配置成 Clr2ClassicAppPool。

 

5. 配置多个站点

    多个站点只要配置多个 site 节点就可以了,具体配置都差不多,但多个站点需要使用不同的端口。

    如果需要同时运行多个站点,打开cmd 中再增加几条修改相应的参数就行了,相当于同时运行多个 iis express 实例,具体见3。

 

6. 性能测试结果

   分别做了以下测试,测试结果性能满足要求:

   1. 写了个简单测试页面,使用Load Runner 进行200路并发压力测试,进行了2小时。

   2. 正式产品部署,我们的产品总共运行了9个 iis express进程,分别侦听在8080~8089端口,我们整个部门几十个人同时模拟用户访问站点并实际使用。

 

转改于

http://blog.csdn.net/jh_zzz/article/details/5821241

http://apps.hi.baidu.com/share/detail/32544301
posted @ 2012-02-19 19:38 安安 阅读(82) 评论(0) 编辑
方法一(推荐简单):
将系统语言 设置为 英文 ,就可以添加源,添加好源以后 安装好 appsync 软件,再把语言修改回来,就好了。
方法缺点:每次给 Cydia 添加源是,都要把语言设置成 英文,添加好了修改改回来。
下面的方法,一劳永逸
方法二:
1 电脑需要安装 iTools(或者其他可以管理 iPhone 文件的软件)
2 复制 “/User/Librery/” 下的 “Keyboard” 文件夹到 “/var/root/Librery/”
方法三:
1 因为需要修改系统文件,所以首先安装 iFile;
2 复制 “/User/Librery/” 下的 “Keyboard” 文件夹到 “/var/root/Librery/”
3 点 “/var/root/Librery/Keyboard” 文件夹右边的那个右箭头,所有权改为:
  所有者:Root 组:Wheel,并选择“应用到所有层级”
posted @ 2012-02-01 13:30 安安 阅读(101) 评论(0) 编辑

1. 超级用户

这台光猫的本质是一台迷你型的电脑,有自己的CPU,存储器之类,当然也有自己的系统,精简版的linux。
知道了这个接下来就好做了。

第一步把你的电脑用网线接到光猫的任意LAN口上。
点击开始菜单,在运行框中输入cmd
第二步,在打开的界面中(DOS中)输入
telnet 192.168.1.1 (win7用户请先开启telnet服务:开始菜单-》控制面板-》程序界面-》“打开或关闭Windows功能”-》选择上Telnet客户端)

会出现以下界面
Welcome Visiting Huawei Home Gateway
Copyright by Huawei Technologies Co., Ltd.

输入用户名/密码:root/admin
Login:root 回车

Password:admin 回车

登陆成功显示提示符
WAP〉shell 回车

输入shell 后回车
输入 grep telecomadmin /mnt/jffs2/hw_ctree.xml 回车

获得
<X_HW_WebUserInfoInstance InstanceID="2" UserName="telecomadmin" Password="telecomadmin1234565" UserLevel="0" Enable="1"/>
其中的username/pssword等号后的内容即为超级用户的帐号密码

如图

 

2. 破解连接数量限制(未测试)

输入 vi /mnt/jffs2/hw_ctree.xml 回车
修改其中TotalTerminalNumber=5 中的5 为你要的数字比如说100之类的
改好后 按下Esc键
然后输入:wq 保存退出

3. 路由桥接模式

DMZ主机设置,端口映射,DDNS等设置,可以利用桥接路由-路由器桥接到HG8240R光纤猫,协同完成。解除了电信的诸多限制。

具体下载(解压密码和excel密码均为:attagain.com):

http://download.csdn.net/detail/attagain/3937529
没有密码的版本下载:

/Files/anan/华为光纤猫HG8240R设置.zip

 

posted @ 2011-12-25 16:09 安安 阅读(1581) 评论(0) 编辑
摘要: 一.反编译Apk得到Java源代码首先要下载两个工具:dex2jar:将apk中的classes.dex转化成Jar文件下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zipJD-GUI是一个反编译工具,可以直接查看Jar包的源代码。下载地址:http://laichao.googlecode.com/files/jdgui.zip具体步骤:1. 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的; 2. 解压下载的dex2jar,将clas.阅读全文
posted @ 2011-08-08 16:42 安安 阅读(122) 评论(0) 编辑
摘要: 系统安装Microsoft_.NETFramework35_sp1.exe造成远程桌面不能连接问题的解决办法(可能是跟ati或者Nvidia显卡驱动冲突导致的)。打开注册表:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]添加一条“dword”,值为16进制的20"SessionImageSize"=dword:00000020Where 00000020 is hex for 32重启机器后,远程桌面又可以连接了。http://blogs.tech阅读全文
posted @ 2011-06-12 14:47 安安 阅读(65) 评论(0) 编辑
摘要: 第一步 创建数据库,根据 \Data Access\setup\DataAccessQuickStarts.sql第二步打开 Data Access\exercises\ex01\begin 目录下 项目文件DataEx1.sln 第三步查看应用程序在Visual Studio解决方案管理器中选择MainForm.cs文件,选择 View | Designer 菜单,应用程序包含一个DataGrid和几个Menu,我们将使用数据访问应用程序块来统计数据库中的Customer的数量,并加载数据到DataGrid中。第四步 实现Customer菜单项 1.选中CustomerManagment项目阅读全文
posted @ 2011-06-10 11:17 安安 阅读(67) 评论(0) 编辑
摘要: 当我们扑捉程序错误时,调试器是开发者们最得力的助手。然而,ASP.NET的跟踪,在调试时是一个很棒的不容忽视的辅助,它允许你的ASP.NET代码在执行期间输出消息,提供有用信息有效帮助你发现问题所在。调试器和跟踪这两个技术有一点区别。调试器是一种自然的交互技术它依赖于你有能力暂停程序执行并检查当前的状态。而跟踪是一种不干扰系统运行,简单的输出代码设定的跟踪信息(类似于经典的“printf”式调试),在执行结束时,你可以取得跟踪代码产生的输出并分析它。ASP.NET跟踪子系统通过控件,页面或者可以增加自身跟踪输出的组件显露出一个API,可以输出任何可用到的信息给你一些有意义的帮助。在ASP.NE阅读全文
posted @ 2011-05-11 09:50 安安 阅读(168) 评论(0) 编辑