IRC笔记

这应该是上个学期空虚寂寞冷的产物。

IRC,即 Internet Relay Chat [互联网中继聊天] 是一种用于群聊的网络协议。这和大约十年前的网页版在线聊天室有一些类似。
IRC服务器上有不同的频道,这一点和不同的板块比较类似。为了与用户名相区分,一般来说,当你在引用频道名称的时候,需要在前面加上井号,例如:#help。
要使用IRC协议与他人对话,首先需要一个IRC客户端,例如mIRC,或者BitchX,诸如此类。这些IRC客户端的操作模式和命令行操作较为相似。
接下来,你需要在客户端中输入你的昵称,并选择一个IRC服务器。例如:chat.freenode.net。

随后你就能看到聊天界面了。在IRC客户端,输入文本并回车即可提交自己想要说的内容。这些内容可以被与你处于同一频道的用户看到。除此之外,你也可以输入命令来完成某些操作,这些命令都是以反斜杠 / 开头的。 Continue reading “IRC笔记”

Keil C51 笔记

我只是做了一个汇总。转载请注明出处。
不时更新中。
内容比较杂,如果下面的内容有什么问题,请告诉我。谢谢!

参考资料:
http://blog.csdn.net/zhbsniper/article/details/7176136
http://blog.csdn.net/husion01/article/details/8443289

Keil C 使用经过扩展的 ANSI C 作为编写语言,不支持结构体内的函数和函数内联,函数体内所有的变量定义都应放在其它代码的前面,且 for 循环初始条件中作为计数器的变量是不能像C++那样即用即定义的。
1.51单片机的存储器配置为:
1.1.内存 256B,地址为0x00 – 0xFF。其中
1.1.1.低128B(data/idata)可直接/间接寻址,包括寄存器也使用这部分的内存。
1.1.2.高128B(idata)只可间接寻址(Intel 8052)。
1.2.特殊功能寄存器(sfr),128B,其内存地址使用的是 0x80 – 0xFF,只可直接寻址。也就是说,SFR与内存的高128B的地址是一样的,但存储并不是重叠的。它们依靠不同的寻址方式来区分。
1.3.外存(xdata),64KB,地址为 0x0000 – 0xFFFF。使用16位的 DPTR 间接寻址。
1.4.代码区(code),64KB,地址为 0x0000 – 0xFFFF。
因此,Keil C 中的指针有三种,分别对应不同的存储区域:

char xdata *px;       /* ptr to xdata */
char idata *pi;       /* ptr to idata */
char code  *pc;       /* ptr to code  */

2.可以使用 bit 数据类型来定义布尔型变量。但无法定义 bit 数组或指针。
3.可以使用 #define 指令来定义简单的数值常量,这样可以保证程序效率最高。如果使用 const 修饰符定义常量数组或结构体,则在编译时会根据变量前的其他修饰符(如 idata、xdata、pdata)占用相应的内存区域,这是十分浪费的。一般定义常量的方法是将常量放在程序段。例如

code const char data[16] = {1, 2, 3, ...};

由于程序段一般是只读的,因此更加常用的声明方法是

code char data[16] = {1, 2, 3, ...};

在默认情况下,Keil会将程序中使用到的字符串常量放在程序段。 Continue reading “Keil C51 笔记”

在安装64位 Office 的系统中使用 Visual Studio.NET 连接 Microsoft Access 2010 数据库时的问题

由于Visual Studio是32位的,因此在创建数据连接时,需要32位的数据提供程序。而在64位Office中的数据提供程序是64位的,因此会造成体系结构不匹配的问题,例如会提示
“未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序”。

在安装有64位Office的系统中使用 Visual Studio 配置 Access 数据源时发生错误。

 

解决方案:

从以下地址下载32位的(注意是32位的) Microsoft Access 2010 数据库引擎可再发行程序包并安装。

http://www.microsoft.com/zh-cn/download/details.aspx?id=13255

与语言标识相关的两个基本函数

今天回趟家,顺便看看以前的代码……

Imports System.Text
 
''' <summary> 
''' 与语言相关的实用工具。 
''' </summary> 
Public Class Locale 
    ''' <summary> 
    ''' 将指定的语言标识格式化为标准格式。 
    ''' </summary> 
    ''' <param name="languageTag">待格式化的符合 BCP47 或 UTS#35 要求的语言标识。</param> 
    ''' <returns>符合 BCP47(RFC5646) 建议(如大小写建议)的语言标识。如果 <paramref name="languageTag" /> 为 <c>null</c>,则返回空字符串。</returns> 
    Public Shared Function FormatTag(ByVal languageTag As String) As String
        'An implementation can reproduce this format without accessing the registry as follows. 
        'All subtags, including extension and private use subtags, 
        'use lowercase letters with two exceptions:  
        'two-letter and four-letter subtags that neither  
        'appear at the start of the tag nor occur after singletons. 
        'Such two-letter subtags are all uppercase (as in the tags "en-CA-x-ca" or "sgn-BE-FR")  
        'and four-letter subtags are titlecase (as in the tag "az-Latn-x-latn").  
        Dim builder As New StringBuilder(languageTag) 
        Dim startIndex As Integer       '段开始的位置 
        Dim afterSingleton As Boolean   '标记是否之前出现了单个字符的段(可能表示私有用途) 
        With builder 
            For I = 0 To .Length - 1 
                If .Chars(I) = "_"c Then
                    '将 Unicode 允许的下划线分隔转化为横杠 
                    .Chars(I) = "-"c 
                End If
                If .Chars(I) = "-"c Then
                    '分隔符 
                    '小结 
                    Dim segmentLength = I - startIndex      '段长 
                    If segmentLength = 1 Then afterSingleton = True
                    If Not afterSingleton AndAlso startIndex > 0 Then
                        '不是第一段 
                        If segmentLength = 2 Then
                            '大写(区域) 
                            .Chars(I - 1) = Char.ToUpperInvariant(.Chars(I - 1)) 
                            .Chars(I - 2) = Char.ToUpperInvariant(.Chars(I - 2)) 
                        ElseIf segmentLength = 4 Then
                            '首字母大写(脚本) 
                            .Chars(startIndex) = Char.ToUpperInvariant(.Chars(startIndex)) 
                        End If
                    End If
                    startIndex = I + 1 
                Else
                    '小写 
                    .Chars(I) = Char.ToLowerInvariant(.Chars(I)) 
                End If
            Next
            Return .ToString 
        End With
    End Function
    
    ''' <summary> 
    ''' 将指定的语言标记进行回退(fallback)。 
    ''' </summary> 
    ''' <param name="languageTag">待回退的、符合 BCP47(RFC5646) 要求(除大小写外)语言标记。</param> 
    ''' <returns>符合 BCP47(RFC4647) 建议的回退后的语言标记。如果指定的语言标记为空、<c>null</c>,或已无法回退,则返回空字符串。</returns> 
    Public Shared Function Fallback(ByVal languageTag As String) As String
        'In the lookup scheme, the language range is progressively truncated 
        'from the end until a matching language tag is located.  Single letter 
        'or digit subtags (including both the letter 'x', which introduces 
        'private-use sequences, and the subtags that introduce extensions) are 
        'removed at the same time as their closest trailing subtag. 
        If languageTag = Nothing Then
            Return ""
        Else
            Dim LastSeparator = languageTag.LastIndexOf("-"c) 
            If LastSeparator = -1 Then
                '未找到 
                Return ""
            Else
                '存在横杠,至少 languageTag = "-" 
                Dim RV = languageTag.Substring(0, LastSeparator) 
                If RV.Length >= 2 AndAlso RV(RV.Length - 2) = "-"c Then
                    '末端存在单个字符,继续回退 
                    Return Fallback(RV) 
                ElseIf RV.Length = 1 Then
                    '单个字符,直接回退 
                    Return ""
                Else
                    Return RV 
                End If
            End If
        End If
    End Function
    
    Private Sub New() 
    
    End Sub
End Class

WPF 中的 DoEvents

在看 MSDN 的时候发现了一段比较实用的代码,能在 WPF 下能执行与System.Windows.Forms.Application.DoEvents方法类似的功能。以下对 MSDN 中的代码进行了微调,微调主要集中在DispatcherPriority.SystemIdle 附近。

Imports System.Security.Permissions  
Imports System.Windows.Threading  

''' <summary>  
''' 处理当前在工作项队列的所有帧。  
''' </summary>  
<SecurityPermissionAttribute(SecurityAction.Demand,   
Flags:=SecurityPermissionFlag.UnmanagedCode)>  
Public Sub DoEvents()  
    Dim frame As New DispatcherFrame()  
    Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.SystemIdle, Sub(f As 
        DispatcherFrame) f.Continue = False, frame)  
    Dispatcher.PushFrame(frame)  
End Sub
Content is available under CC BY-SA 3.0 unless otherwise noted.