当前位置: 首页 > 编程日记 > 正文

Globalization Resources

http://blog.csdn.net/etmonitor/


.NET
系统学习----Globalization & Resources

l          前言

l          了解资源文件

l          创建资源文件

l          在程序中使用资源文件

l          资源文件的命名和部署

l          参考

前言:

在学习如何使用.NET资源文件以及如何开发World-Ready程序之前,我们先通过一个例子来看看为什么要使用资源文件,以及使用它的好处。

假设要在程序中根据当前的Culutre来设置FormTitleLogo

       private void Form1_Load(object sender, System.EventArgs e)   {

              CultureInfo ci = new CultureInfo(Thread.CurrentThread.CurrentUICulture.ToString());

              switch (ci.ToString().ToLower()) {

                     case "zh-cn":  // 中文版本

                            this.Text=FormTitle_ZH_CN;

                            imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_ZH_CN.jpg");

                            break;

                     case "en-us":  // 英文版本

                            this.Text=FormTitle_EN_US;

                            imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_EN_US.jpg");

                            break;

                     default:   // 默认版本

                            this.Text=FormTitle_Neutral;

                            imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_Neutral.jpg");

                            break;

              }

}

这段代码有两个问题:

首先,Logo文件是暴露给用户的,而且是以普通文件的格式存储的,这导致其他程序或是用户很容易修改这些文件;节省硬盘空间的用户还可能会选择删除它,这些都可能会导致应用程序出错。确保图片或任何其他文件和代码在一起的唯一的安全方式是将它作为资源文件嵌入在程序集中并加载。

其次,这是一个World-Ready程序,如果需要新加入一个新的Culture,你可能不得不更改你的源代码,加入新的case,然后重新编译来适应新的Culture的需要,这对一个World-Ready程序来说是不现实的。开发World-Ready程序很重要的一点就是要保证程序的逻辑界面和资源界面的隔离。任何时候加入一个新的Culture资源,我们都不应该重新编译源程序,相反,我们只需要把新的资源文件准备好,然后发布给用户并部署在合适的目录下就可以了。应用程序应该能够根据不同的Culture来自动寻找合适的资源。

本文的目的就是通过实例来帮助读者了解什么是Resources,以及如何使用Resources来消除上面所提到的两个问题。

全文分为四部分:

第一部分是一些和资源相关的概念。

第二部分是一个实例程序(ResourceGenerator),用来说明如何创建资源文件。

第三部分是另外一个实例程序(WorldAPP),用来说明如何在程序中使用资源文件

第四部分是关于资源文件的命名和部署。分别介绍.NET中资源文件的命名方式和如何在World-Ready程序中配置资源文件。

第一部分 概念

先来了解一些概念:

1.        什么是资源文件

顾名思义,资源文件当然包含的全是资源。不过,什么是资源?这里所谓的资源就是程序中可利用的任何数据,譬如:字符串、图片或任何二进制格式的数据。一个资源文件可以有多种语言文化版本,比如,一个Culture.resources 文件可以有英语版、简体中文版日文版等。ResourceManager可以自动根据Culture和资源文件名来确认调用哪个版本。只不过不同的资源版本需要在文件名中加入语言文化信息(.resource文件有一套严格的命名规范,参考第四部分:资源文件的命名和部署)。

2.        资源文件的类型

System.Resources名称空间支持三种类型的资源:

.txt文件,只能有字符串资源。因为不能被嵌入到Assembly中,所以很容易暴露,被其他程序或用户修改。最大缺点是仅支持字符串资源,不推荐使用。

.resx文件,由XML组成,可以加入任何资源,包括二进制格式的。同样不能被嵌入到Assembly中。在System.Resources 名称空间中有专用读写的类。VS.NET中创建的这种文件也是将其转成.resources 文件然后根据设置将其嵌入到Assembly中。

.resources文件,PE格式,可以加入任何资源。是唯一可以被嵌入到Assembly的文件,在System.Resources名称空间中有专用读写的类(ResourceManager)。

3.        调用资源文件的几种方法

ResourceManager可以根据不同的UICulture设置返回不同的本地资源,不同Culture的资源文件有一套严格的命名规则,只有按照这个规则命名,CRL才可以根据Culture找到这个本地资源。PS:因为这个很重要,所以才一再出现J参考第四部分:资源文件的命名和部署

.txt 文件:

不可以直接调用,得先将其转换成 .resources 文件才能使用。

.resx 文件:

可以用ResXResourceReader来读取,但是这种方法不直观也不安全,不推荐直接调用.resx文件。正确的方法是将其转换成.resources文件,然后用ResourceManager读取。注意,如果是在VS.NET中添加的.resx文件,那么它们自动被设为 Embedded Resource,然后被转成.resources文件后嵌入到Assembly中。

.resources 文件:

分成两种情况:

·         被嵌入或编译成卫星程序集(Satellite Assembly):

ResourceManager的各种constructor来获得在Assembly中的资源。

·         单独文件,没有被编译或嵌入到Assembly中:

可以用ResourceManager.CreateFileBasedResourceManager来获得资源集(ResourceSet),就是所有的资源。

特殊情况:

还有一种特殊情况,那就是当你直接嵌入一资源时,也就是说,不通过一个资源文件(.resources)而直接将一资源Object)嵌入到 Assembly 中。这可以通过AL.exeAssembly Linker)的参数/embed:<object>把资源嵌入在Assembly中。在这种情况下ResourceManager就没有用了,因为它只能获取.resources资源文件(在或不在Assembly中)。

调用这类直接嵌入在Assembly中的资源,我们就需要利用Reflection的一些特性来完成。在System.Reflection.Assembly类中有一些相关函数可以帮助我们拿到这些资源。通过Assembly.GetManifestResourceNames可以拿到所有的资源的名字,然后我们就可以通过Assembly.GetManifestResourceStream<object_name>)这个函数拿到对应的资源并以stream的方式返回,然后我们可以将这个stream转成在.NET中可用的对象。比如,如果嵌入资源是一图片,那么我们可以利用New BitmapStream)的constructor获得这个图片资源的Bitmap对象。

第二部分 创建资源文件

创建资源文件有两种方式,一种是使用.NET SDK自带的resgen工具来创建,另外一种是自己写code来创建。分别来介绍:

1.        Resgen

这个工具是.NET自带的,它可以把.txt.resX,转换为.resources文件。.resources文件是以一种以键-值方式对应存储的XML格式文件,每一个键<data>对应一个值<value>,这个<value>可以是任何的二进制格式。如果是格式为(键=值)对应得.txt文件,resgen会自动生成键-值对应的XML文件。但是resgen有一个局限性,它不能直接嵌入其他格式的文件,比如你就不能把.bmp以键-值得方式对应起来,因为你首先不能很容易得把.bmp以(键=值)对应的格式储存在.txt文件中。所以resgen主要是针对txt文件使用。

一个例子:company1.txt文件内容为:

Title = Company1

Address = Company1 Address

Phone = 12345678

----------------------------------------------------------------

Resgen company.txt <outputfilename>.resources

如果不指定<outputfilename>,默认会生成company1.resources

然后就可以通过ResourceManager来使用了。

还可以再进一步,通过AL.exeresources文件变为一个assembly(使用assembly有很多好处(比如可以加入版本信息和Culture信息等)详见(.NET系统学习----Assembly)。

Al /out:company1.dll /embed:company1.resources

通过设置ResourcesManager的不同的constructor就可以访问Assembly中包含的.resources文件(下面的例子会讲到)。

2.        通过编程使用IResourcsWrite来生成资源文件

上面的方法的一个最大的缺点是不能很方便的嵌入其他格式的资源,因为把其他格式的资源变为键-值对应得txt文件并不是一件很容易的事。所以我们介绍另一种方法,通过编程,使用.NET提供的IResourcesWrite类来实现把任何资源嵌入到resources文件中。

ResourceGenerator就是用这种方式实现的。

程序的主界面:

 

用到的主要方法就是:

private void OnGenerateResource(object sender, System.EventArgs e)

{

IResourceWriter rw = new ResourceWriter(“C:/test.resources”);

       switch (sType)

       {

              case "system.string":

              rw.AddResource(sKey,sValue);

              break;

              case "system.drawing.bitmap":

              Bitmap bmp = new Bitmap(sValue);

              rw.AddResource(sKey,bmp);

              break;

              case "system.drawing.image":

              Image img= new Bitmap(sValue);

              rw.AddResource(sKey,img);

              break;

}

}

根据资源的类型,如果不是string类型的,我们就把它分实例化为相应的stream,然后加入到resoruces中即可(string类型可以直接加入)。生成的就是.NET可以直接使用的.resources文件。但是这样生成的资源CLR并不能根据不同的Culture自动识别。要想CRL自动识别并加载正确的资源文件,首先必须把.resources转换为Assembly并根据严格的命名方式命名(参考第四部分:资源文件的命名和部署),并部署到正确的目录下,然后CLR就可以根据不同的Culture来加载正确的资源。

第三部分 在程序中使用资源文件

WorldApp.cs是一个World-Ready的程序,它的逻辑界面和资源界面是分开的,可以实现逻辑界面只Bulid一次,运行时根据当前的Culture调用相应的Satellite Assembly(卫星资源程序集)来实现本地化。添加一个新的Culture资源不需要重新Build源程序,只需要把相应的资源程序集部署到合适的目录就可以了。

下面说明WorldApp的实现方式:

程序主界面:

程序在启动的时候会根据当前的CurrentUICulutre去加载相应的资源文件。

读取资源文件的代码为:

       private void SetCulture( CultureInfo ci )

       {

              // Change current UI culture

              Thread.CurrentThread.CurrentUICulture = ci;

              // Load culture resources.

              String AssemblyPath = Application.StartupPath + "//Culture.dll";

              Assembly asm = Assembly.LoadFrom(AssemblyPath);

// ResoruceManager constructor will load different resources acording to the

// CurrentUICulture. which means, if CurrentUICulutre is "en-US", rm will load

// "Culture.en-US.resources" automaticly.

// When loaded, give the resource name only.

              ResourceManager rm = new ResourceManager("Culture", asm);             

              // Set title, culture info and logo.

              this.lblTitle.Text = rm.GetString("Title");

              this.lblCulture.Text = rm.GetString("Culture");

              this.lblLogo.Text = rm.GetString("LogoTitle");

              this.imgLogo.Image=(Bitmap)rm.GetObject("Logo");

}

如果当前的UICulture改变,可以通过显式调用SetCulture( CultureInfo ci )来加载相应的Culture资源。

现在如果我们有了一个新的Culture资源版本,我们只需要把它部署在对应的Culture目录下,WorldApp.exe就可以自动加载,WorldApp.exe程序本身并不用做任何更改(不需要编译)。

你可以通过上面制作的小工具ResoruceGenerator来生成对应不同Culture的资源,然后把生成的Assembly正确部署就可以了。WorldApp就又有了一个新的Culture版本。哈!!

第四部分 资源文件的命名和部署

这部分说明资源文件的部署方式和CLR是如何识别并加载不同的Culture资源的。

·         资源文件的命名方式

假设我们的应用程序名为WorldApp.exe,默认的资源文件为culture.resources,根据这个资源文件生成的Assemblyculutre.dll(这个是默认版本的资源文件)。然后我们有了一个en-US Culture版本的资源文件,则en-US的资源文件得名称必须为culture.en-US.resources,根据这个资源文件生成的en-US版本的Assembly必须命名为culture.resources.dll且必须加入Culture信息(把一个.resources生成一个Assemblyresgen /out:cluture.resources.dll /c:en-US /embedcluture.en-US.resources),生成的Assembly必须放在程序运行目录下的en-US目录下,这样CLR才能自动找到。同样,如果我们有了一个zh-CN版本的资源文件,则资源文件的名称必须为culture.zh-CN.resources,生成的Assembly必须为culture.resources.dll,并放在zh-CN目录下。

重要:因为生成的.resources文件本身并不包含Culture信息,它的Culture信息就体现在它的文件名上,所以.resources的命名必须加入Cluture信息(如果不加的话,生成的就是默认版本)。从.resources生成Assembly时,因为Assembly可以指定Culture信息(通过/c:<culture>来指定),所以Assembly的名称中不需要加入Culture信息,但是Assembly的名字必须是:默认版本名+<.resources>.dll,就是:culture.[resources].dll

·         资源文件的部署方式

应用程序正确的部署方式(目录结构)应该是:

<WorldApp>                              (应用程序主目录)

WorldApp.exe                            (主程序)

Culture.dll                          (包含culture.resources资源文件)

              <en-US>                     en-US资源目录)

              Culture.resources.dll   (包含culture.en-US.resources资源文件)

               <zh-CN>                     zh-CN资源目录)

              Culture.resources.dll   (包含culture.zh-CN.resources资源文件)

              <new-Culture>           net-Culture资源目录)

              Culture.resources.dll   (包含cluture.new-Culture.resources

                     <…>                           

有了上面的部署,App.exe在运行时,会首先根当前ThreadCurrentUICuluture到对应的目录去寻找资源文件,比如当前的CurrentUICulture=”en-US”,则en-US目录下的Culture.resources.dll Assembly中的culture.en-US.resources会被加载。如果CLR遍历整个目录还没有找到对应的资源文件,则默认的资源文件版本就被加载(MSDN中称为Hub and Spoke model方式 详见:ms-help://MS.MSDNQTR.2004APR.1033/cpguide/html/cpconPackagingDeployingResources.htm)。

·         CLR如何加载资源文件

重要:CLR在匹配资源文件的时候,不是按文件来匹配的,它是按照<data>字段一个key一个key的去匹配。举个例子:

默认版本的Culture资源文件中包含四个keyTitle, Culture, LogoTitle,Logo

中文版本的Culture资源文件中包含只有三个KeyTitle, Culture, Logo。(没有LogoTitle

如果当前的Culturezh-CN”,则zh-CN版本的Title, Culture, Logo都会被加载,但是因为zh-CN版本没有LogoTitle,所以CLR会自动加载和zh-CN文化最匹配的一个资源版本的LogoTitle。如果都没有,最后才会去加载默认版本的资源文件。

这样做有一个很大的好处:就是说并不是所有资源都必须要有对应Culture的版本,我们可以把共通的资源放在默认版本中,只把和特定Culture相关的资源隔离就可以了。

重要:关于Culture

Culture信息是由主标记(文化)和次标记(地域)两部分组成的。举个例子:

en-US     (英语-美国)

en-GB     (英语-英国)

en-AU     (英语-澳大利亚)

主标记是en,表示Culture都是英语文化,次标记(地域)区分了它们分别是哪个地区的英语。

说这个有什么用呢?

因为CLR在寻找资源的时候是以一种回退的方式来寻找的,就是说,他会首先去寻找最批的那个资源文件,如果没有,则会搜索文化层次结构,以查找最接近于请求的匹配资源文件,并把生成异常作为最后一种手段。比如CLR在寻找en-US资源的时候没有找到,CLR不会立即就去用默认版本匹配,而是会首先搜索文化层次结构,以查找最接近于en-US的资源(可能是en-GB或别的),如果找到,运行时就使用这个资源,如果还找不到,则会继续搜索下一层,最后才会用默认版本匹配(如果默认版本也没有,则会抛出一个异常)。

参考资料:

l          Applied Microsoft .NET Framework Programming ---- Jeffrey Richter

l          MSND Library

相关文章:

用 Python 可以实现侧脸转正脸?我也要试一下!

作者 | 李秋键责编 | Carol封图 | CSDN 下载自视觉中国近几年来GAN图像生成应用越来越广泛&#xff0c;其中主要得益于GAN 在博弈下不断提高建模能力&#xff0c;最终实现以假乱真的图像生成。GAN 由两个神经网络组成&#xff0c;一个生成器和一个判别器组成&#xff0c;其中生…

Hive SQL 监控系统 - Hive Falcon

1.概述 在开发工作当中&#xff0c;提交 Hadoop 任务&#xff0c;任务的运行详情&#xff0c;这是我们所关心的&#xff0c;当业务并不复杂的时候&#xff0c;我们可以使用 Hadoop 提供的命令工具去管理 YARN 中的任务。在编写 Hive SQL 的时候&#xff0c;需要在 Hive 终端&am…

System commands can run from cmd

gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注销命令 tsshutdn-------60秒倒计时关机命令 lusrmgr.msc----本机用户和组 services.msc---本地服务设置 oobe/msoobe /a----检查XP是否激活 notepad…

做 Java 工程师,挺!好!

很多想要入行编程圈的人问到我该学哪一种语言&#xff0c;我都毫不犹豫的说Java。首先我们先看个排行榜&#xff0c;来自权威开发语言排行榜TIOBE的数据&#xff08;截止到2020年4月&#xff09;&#xff0c;可以看到Java语言依然在语言排行榜霸占第一的位置&#xff01;看到这…

使用tmpfs缓存文件提高性能

[ZT]使用tmpfs缓存文件提高性能 - 夜隼 - 博客园使用tmpfs缓存文件提高性能tmpfs是一种虚拟内存文件系统&#xff0c;它最大的特点就是它的存储空间在VM&#xff08;virtual memory&#xff09;里面。Linux系统中VM主要由RM(Real Memory)和swap组成&#xff0c;因此tmpfs最大的…

【转】RelativeLayout和LinearLayout及FrameLayout性能分析

原文&#xff1a;http://blog.csdn.net/hejjunlin/article/details/51159419 工作一段时间后&#xff0c;经常会被领导说&#xff0c;你这个进入速度太慢了&#xff0c;竞品的进入速度很快&#xff0c;你搞下优化吧&#xff1f;每当这时&#xff0c;你会怎么办&#xff1f;功能…

SQL Tips

出自&#xff1a;http://blog.csdn.net/etmonitor/一.怎样删除一个表中某个字段重复的列呀,举个例子表[table1]id name1 aa2 bb3 cc1 aa2 bb3 cc我想最后的表是这样的id name1 aa2 bb3 cc回答:将记录存到临时表#t中&#xff0c;重复的记录只存一条&#xff0c;然后将临时…

98年“后浪”科学家,首次挑战图片翻转不变性假设,一作拿下CVPR最佳论文提名​...

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;刚刚结束的CVPR大会&#xff0c;总共收到6424篇论文中&#xff0c;仅有26篇获得最佳论文提名&#xff0c;占0.4%的比例。其中&#xff0c;康奈尔大学大四学生林之秋&#xff0c;以第一作者身份提交的“Visual Chiralit…

MySQL导入导出数据和结构

1. mysql导出数据和结构使用mysqldump命令1.1 导出全库连带数据mysqldump -u root -p app_test > app_test.sql1.2 导出指定的表&#xff0c;table1连带数据mysqldump -u root -p app_test table1 > app_test_table1.sql1.3 导出多张表&#xff0c;table1&#xff0c;tab…

图表君聊docker-仓库

图表君聊docker-仓库 今天我们来继续聊docker&#xff0c;上篇文章我们介绍了docker里的Container.今天来继续三大概念中的最后一个--仓库&#xff08;Repository)。 当我做好了一个Image&#xff0c;我该怎么和其他人分享呢&#xff1f;答案很简单&#xff0c;把他push到一个仓…

正则表达式经典教程

作者&#xff1a;ET Dreams http://blog.csdn.net/etmonitor/Regular Expressions (1) ---- What is Regular Expressions?正则表达式是常见常忘&#xff0c;所以还是记下来比较保险&#xff0c;于是就有了这篇笔记。希望对大家会有所帮助。J1&#xff0e;什么是正则表达式...…

发布了!2020年AI人才发展报告,最高补助1000万!

最近&#xff0c;程序员届有一个重大好消息&#xff0c;可能很多人还不知道&#xff0c;那就是&#xff1a;国内某些城市已经开始程序员人才补贴了&#xff01;对于人工智能公司的项目开发、人才引进、科技研发&#xff0c;最高按照国拨经费的30%给予配套支持&#xff0c;单个项…

C++资源之不完全导引(上)

发信人: NULLNULL (空空), 信区: VC标 题: C资源之不完全导引(转载)发信站: 武汉白云黄鹤站 (2005年05月05日01:42:54 星期四), 站内信件C资源之不完全导引&#xff08;完整版&#xff09;来源&#xff1a;www.csdn.net-----------------------------------------------------…

HDU 4467 分块

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4467 题意&#xff1a;给定n个点m条边的无向图&#xff0c;点被染色(黑0/白1)&#xff0c;边带边权。然后q个询问。询问分为两种&#xff1a; Change u:把点u的颜色反转(黑变白&#xff0c;白变黑)&#xff0c;…

ASP.NET重用代码技术 - 代码绑定技术

作者&#xff1a; 苏红超 导读 代码绑定是ASP.NET提供的一个重要的新技术。本文将会为您展示如何利用代码绑定技术来实现Web页面表示层和商业逻辑代码的分离&#xff0c;并建议您使用代码绑定技术实现代码的可重用。在接下来的另外一篇文章当中&#xff0c;我们会给出另外…

【ZooKeeper Notes 3】ZooKeeper Java API 使用样例

查看PDF版本 转载请注明&#xff1a;ni掌柜 nileadergmail.com ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务框架&#xff0c;包含一组简单的原语集合。通过这些原语言的组合使用&#xff0c;能够帮助我们解决更高层次的分布式问题&#xff0c;关于Zo…

一站式了解多模态、金融、事理知识图谱构建指南 | AI ProCon 2020

整理 | 许爱艳出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导读】7 月 3-4 日&#xff0c;由 CSDN 主办的第三届 AI 开发者大会&#xff08;AI ProCon 2020&#xff09;在线上举行。本次大会有超万人报名参与&#xff0c;参与人群覆盖 60 领域、5000…

CentOS7安装配置redis-3.0.0

一.安装必要包 yum install gcc 二.linux下安装 #下载 wget http://download.redis.io/releases/redis-3.0.0.tar.gz tar zxvf redis-3.0.0.tar.gz cd redis-3.0.0 #如果不加参数,linux下会报错 make MALLOClibc 安装好之后,启动文件 #启动redis src/redis-server &#关闭re…

ASP.NET重用代码技术 - 用户控件技术

作者&#xff1a; 苏红超 使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行。我们发现&#xff0c;利用代码绑定技术我们可以容易的将我们的代码和内容分离开来&#xff0c;利用它可以建立可重用的代码&#xff0c;只是这种技术本身也存在着一些局限性。在本文中&…

liunx 下dhcp中继及服务器配置

dhcp:动态主机配置协议 使用udp协议 端口为67&#xff08;服务&#xff09;&#xff0c;68&#xff08;客户&#xff09; 作用&#xff1a;动态分配地址等参数 工作模式 1. 手工 manual server—地址池 &#xff08;ip—mac&#xff09; 2222----1.1.1.1 dhcpclient ------地址…

PyCharm vs VSCode,是时候改变你的 IDE 了!

作者 | Sohaib Ahmad译者 | 鹿未来&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;也许是我有些落伍&#xff0c;或者也是因为JetBrains在Python IDE的市场上占有很大的份额&#xff0c;以至于直到最近我才发现&a…

(转)Linux 下 查看以及修改文件权限

场景&#xff1a;Linux环境下远程部署项目&#xff0c;发现因为文件权限问题&#xff0c;不能执行远端的可执行文件。问题还没解决&#xff0c;待议。。。 1 查看权限 在终端输入: ls -l xxx.xxx &#xff08;xxx.xxx是文件名&#xff09; 那么就会出现相类似的信息&#…

软件文档知多少?

作者&#xff1a;由于本人在无数网站看到此文 无法确定第一作者 请作者与本人联系如今&#xff0c;软件开发越来越复杂&#xff0c;软件功能也越来越丰富。而几乎所有成熟的商业软件&#xff0c;都是靠一个开发团队齐心协力的血汗结晶。“罗马不是一天建成的&#xff01;”&…

在 VMware ESXi 5.0 上安装万兆网卡驱动

2012年02月28日 | 标签: vmware esxi | 作者&#xff1a;vpsee 转载自&#xff1a;http://www.vpsee.com/2012/02/intall-network-card-driver-on-vmware-esxi-5-0/ 昨天刚发现新购的 Dell PowerEdge R710 服务器上配的 Intel Ethernet Server Adapter X520-T2 万兆网卡居然在…

漫谈 ClickHouse 在实时分析系统中的定位与作用

ClickHouse 是一款由俄罗斯Yandex公司开源的OLAP数据库&#xff0c;拥有着卓越的性能表现&#xff0c;在官方公布的基准测试中&#xff0c;ClickHouse的平均响应速度是Vertica的2.63倍、InfiniDB的17倍、MonetDB的27倍、Hive的126倍、MySQL的429倍以及Greenplum的10倍。自2016年…

Js+Dhtml:WEB程序员简易开发工具包(预先体验版)

作者&#xff1a;lshdic http://blog.csdn.net/lshdic/<HTML> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <META nameGemeratpr content网络程序员伴侣(Lshdic)2005_开拓版> <TITLE>LD5工具</TITLE> <st…

残差网络的前世今生与原理 | 赠书

本文内容节选自《深度学习之模型设计&#xff1a;核心算法与案例实践》&#xff0c;作者言有三。本书详解了数十年来深层卷积神经网络模型的主流设计思想&#xff0c;理论讲解细致&#xff0c;实战案例丰富&#xff0c;是熟练掌握深度学习模型使用的必备参考资料。想要了解关于…

python---简单数据库

2019独角兽企业重金招聘Python工程师标准>>> #simple database#people people {Alice:{phone:2341,addr:Foo drive 23},Beth:{phone:9102,addr:Bar street 42},Ceil:{phone:3158,addr:Baz avenue 90} }#describe labels {phone:phone number,addr:address }name …

Linux系统之路——如何在CentOS7.2安装MySQL

一、Mysql 各个版本区别&#xff1a;1、MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;但不提供官方技术支持。2、MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;可以试用30天。3、MySQL Cluster 集群版&#xff0c;开源免费。可将几个M…

Vml+Dhtml:制作一个应用渐变颜色效果不错的进度条

//原作:风云舞,载自: http://www.lshdic.com/bbs<HTML xmlns:v> <HEAD> <META http-equivContent-Type contenttext/html;charsetgb2312> <Meta nameGemeratpr content网络程序员伴侣(Lshdic)2004> <TITLE>效果不错的VML进度条</TITLE> &l…