Mryqu's Notes


  • 首页

  • 搜索
close

ICU4J介绍

时间: 2015-07-02   |   分类: Java     |   阅读: 201 字 ~1分钟
ICU (International Components for Unicode)是为软件应用提供Unicode和全球化支持的一套成熟、广泛使用的C/C++和Java类库集,可在所有平台的C/C++和Java软件上获得一致的结果。 ICU首先是由Taligent公司开发的,Taligent公司被合并为IBM公司全球化认证中心的Unicode研究组后,ICU由IBM和开源组织合作继续开发。开始ICU只有Java平台的版本,后来这个平台下的ICU类被吸纳入SUN公司开发的JDK1.1,并在JDK以后的版本中不断改进。 C++和C平台下的ICU是由JAVA平台下的ICU移植过来的,移植过的版本被称为ICU4C,来支持这C/C++两个平台下的国际化应用。ICU4J和ICU4C区别不大,但由于ICU4C是开源的,并且紧密跟进Unicode标准,ICU4C支持的Unicode标准总是最新的;同时,因为JAVA平台的ICU4J的发布需要和JDK绑定,ICU4C支持Unicode标准改变的速度要比ICU4J快的多。 ICU的功能主要有: 代码页转换:对文本数据进行Unicode、几乎任何其他字符集或编码的相互转换。ICU的转化表基于IBM过去几十年收集的字符集数据,在世界各地都是最完整的。 排序规则(Collation):根据特定语言、区域或国家的管理和标准比较字数串。ICU的排序规则基于Unicode排序规则算法加上来自公共区域性数据仓库(Commonlocale data repository)的区域特定比较规则。 格式化:根据所选区域设置的惯例,实现对数字、货币、时间、日期、和利率的格式化。包括将月和日名称转换成所选语言、选择适当缩写、正确对字段进行排序等。这些数据也取自公共区域性数据仓库。 时间计算: 在传统格里历基础上提供多种历法。提供一整套时区计算API。 Unicode支持:ICU紧密跟进Unicode标准,通过它可以很容易地访问Unicode标准制定的很多Unicode字符属性、Unicode规范化、大小写转换和其他基础操作。 正则表达式: ICU的正则表达式全面支持Unicode并且性能极具竞争力。 Bidi: 支持不同文字书写顺序混合文字(例如从左到右书写的英语,或者从右到左书写的阿拉伯文和希伯来文)的处理。 文本边界: 在一段文本内定位词、句或段落位置、或标识最适合显示文本的自动换行位置。 下面的示例是使用ICU4J检测文本编码: package com.yqu.icu4j; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import com.ibm.icu.text.CharsetDetector; import com.ibm.icu.text.CharsetMatch; public class EncodingDetector { public static void tryEncoding(String fileName) throws IOException { System.out.println("===Getting encoding of " + fileName); Path path = Paths.get(fileName); byte[] data = Files.readAllBytes(path); CharsetDetector detector = new CharsetDetector(); detector.setText(data); CharsetMatch match = detector.
阅读全文 »

Java解析YAML

时间: 2015-07-01   |   分类: Java     |   阅读: 386 字 ~2分钟
继前博文YAML介绍了YAML语法,本文将着重研究Java解析YAML。当前还在维护的YAML解析器/生成器有: SnakeYAML 完整的YAML 1.1解析器,尤其是SnakeYAML能够分析来自于规范的所有示例 支持Unicode,包括UTF-8/UTF-16的输入/输出 为序列化和反序列化本地的Java对象提供了高级API 支持YAML类型库中的所有类型 比较理性的错误信息 YamlBeans:支持YAML 1.0和1.1 FasterXML/jackson-dataformat-yaml:处于原型阶段 SnakeYAML和YamlBeans都在GoogleCode仓库时,SnakeYAML的使用人数和提交者均优于YamlBeans。目前大多数帖子还是推荐选用SnakeYAML,而SpringBoot读取YAML配置采用的就是SnakeYAML。为了测试SnakeYAML,我首先创建了一个HelloSnakeYAML项目。 conf.yaml spring: application: name: cruncher datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost/test server: port: 9000 Contact.java package com.yqu.yaml; import java.util.List; public class Contact { private String name; private int age; private List phoneNumbers; public Contact(String name, int age, List phoneNumbers) { this.name = name; this.age = age; this.phoneNumbers = phoneNumbers; } public String getName() { return name; } public void setName(String name) { this.
阅读全文 »

在线工具

时间: 2015-06-30   |   分类: Tool     |   阅读: 22 字 ~1分钟
smallpdf 坛子里提到一个PDF工具网站http://smallpdf.com/cn,有人试用了说不错。支持如下功能: PDF压缩:大幅压缩PDF文件大小 JPG转PDF:将图片转换成如您所需的PDF文件 PDF转JPG:将页面转换成图片,或从PDF文件提取图片 PDF转Word:将PDF转换成具有最佳质量的Word文件 PDF转Excel:将PDF格式的电子表格转成可编辑的Excel文件 PDF转PPT:将PDF格式的幻灯片转成Powerpoint演示文件 Word转PDF:WORD文件转PDF格式 Excel转PDF:Excel表格转PDF PPT转PDF:PPT演示文件转PDF文件 合并PDF:将数个PDF文件合并为一个文件 PDF分割:从所选页面创建新文件 PDF解密:针对受密码保护的文件进行解密 新浪微博.短网址 http://sina.lt/提供如下功能: 网址压缩 短网址还原 外链图库 LaTeX 编译器 JaxEdit

尝试Artifactory

时间: 2015-06-30   |   分类: Tool     |   阅读: 247 字 ~2分钟
Artifactory简介 首先,JFrogArtifactory是统一构件仓库管理器,全面支持任何语言或技术创建的软件包。Artifactory是一个适合企业的仓库管理器,支持安全、集群和高可用的Docker注册。与所有主流CI/CD和DevOps工具进行集成,Artifactory提供了端到端的自动化的解决方案用以追踪从开发阶段到生产环境阶段中的构件。 安装Artifactory 在https://www.jfrog.com/open-source/下载开源版的jFrogArtifactory,按照JFrog Artifactory用户指南即可轻松安装和使用。 发布构件 使用Gradle构建脚本生成器 gradle.properties artifactory_contextUrl=http://localhost:8081/artifactory artifactory_user=admin artifactory_password=password group = com.yqu version = 0.1.0-SNAPSHOT description = Hello artifactory build.gradle buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { //Check for the latest version here: // http://plugins.gradle.org/plugin/com.jfrog.artifactory classpath "org.jfrog.buildinfo:build-info-extractor-gradle:+" } } apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' apply plugin: 'maven-publish' apply plugin: "com.jfrog.artifactory" jar { baseName = 'HelloArtifactory' } artifacts { archives jar } publishing { publications { maven { from components.
阅读全文 »

[Gradle] buildScript块与allprojects块及根级别的repositories区别

时间: 2015-06-29   |   分类: Tool   Gradle     |   阅读: 49 字 ~1分钟
一直对为什么buildScript块里定义了repositories而allprojects段或根还定义repositories没有思考过,偶然有了念头想要探究一下。 build.gradle: buildscript { repositories { ... } dependencies { ... } } allprojects { repositories { ... } dependencies { ... } }repositories { ... } dependencies { ... } buildScript块主要是为了Gradle脚本自身的执行,获取脚本依赖插件。我在写的一篇博客《尝试Artifactory》中Gradle脚本需要com.jfrog.artifactory插件才能执行成功,而这个插件是从URL为https://plugins.gradle.org/m2/的Maven仓库获得。 根级别的repositories主要是为了当前项目提供所需依赖包,比如log4j、spring-core等依赖包可从mavenCentral仓库获得。 allprojects块的repositories用于多项目构建,为所有项目提供共同所需依赖包。而子项目可以配置自己的repositories以获取自己独需的依赖包。 参考 What’s the difference between buildscript and allprojects in build.gradle? Gradle buildscript dependencies Gradle: Project

[Spring Data] 调试H2数据库

时间: 2015-06-28   |   分类: Service+JavaEE   Spring     |   阅读: 50 字 ~1分钟
我将Spring的两个入门指南Building a RESTful Web Service和Accessing Data with JPA融到一起,测试成功。那接下来的一个问题就是怎么查看H2数据库内容并进行调试? 配置H2 Web控制台 为了解决这个问题,我首先增加了src/resources/application.properties配置文件,内容如下: spring.profiles.active=dev spring.h2.console.enabled=true 在H2 Web控制台上操作 启动Spring Boot应用,在浏览器中进入http://localhost:8080/h2_console/即可进入H2数据库的Web控制台了。 配置IDEA IntelliJ数据源 如果不使用H2 Web控制台的话,在IDEA IntelliJ集成开发环境中也可以通过配置H2数据源进行数据库操作。 解决数据库表不存在问题 上面的玩法有个问题,那就是没看到Accessing Data with JPA里面创建的CUSTOMER表,对不对?为了解决这个问题,在src/resources/application.properties配置文件增加如下内容: spring.profiles.active=dev spring.h2.console.enabled=true spring.datasource.url=jdbc:h2:~/test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= 搞定,收工! 参考 Using H2’s web console in Spring Boot Common application properties for Spring Boot H2 Console

制作JavaSE8的chm版本JavaDoc

时间: 2015-06-25   |   分类: Tool     |   阅读: 23 字 ~1分钟
Java8文档 在线版Java8文档: http://docs.oracle.com/javase/8/docs/ 下载版Java文档链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html#docs JavaSE6文档下载链接: http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-doc-download-355137.html JavaSE7文档下载链接: http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html JavaSE8文档下载链接: http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-2133158.html 工具 Github:subchen/javadoc.chm 制作过程 将javadoc.chm-master.zip的javadoc.chm-2.1.0.jar和lib目录解压缩到当前目录 将jdk-8u45-docs-all.zip的docs目录解压缩到当前目录 java -Xms256m -Xmx512m -cp javadoc.chm-2.1.0.jar;lib/commons-lang-2.6.jar;lib/commons-io-2.4.jar;lib/commons-collections-3.2.1.jar;lib/commons-logging-1.1.1.jar;lib/log4j-1.2.17.jar;lib/velocity-1.7.jar jerbrick.tools.chm.Application docs/api 执行docs/api/build.bat生成chm文件

了解Registrator

时间: 2015-06-18   |   分类: Tool   Docker     |   阅读: 70 字 ~1分钟
支持 DNS和基于HTTP发现机制的服务发现工具Consul让我们印象深刻。它提供了定制化的注册服务健康检查并标记不健康实例的功能远胜于其他类似的工具。更多时兴的工具与Consul的集成使其功能更加强大。在使用Docker的场景里,有了Registrator的帮助,只需要很小的工作量就可以自动化地向Consul注册Docker容器,使得管理基于容器技术的配置更加容易。 Registrator通过检查Docker容器是否上线,自动为Docker容器注册/注销服务。Registrator支持可插拔服务注册中心,当前包括Consul、etcd和SkyDNS 2。 用法 运行Consul容器 $ docker run -d --name=consul --net=host consul-server -bootstrap 运行Registrator容器 Registrator被设计为在每个主机运行一次。也可以在每个集群仅运行一个Registrator,但是通过确保Registrator运行在每个主机上可以获得更好的伸缩性和更简化的配置。假定使用某种程度的自动化,在所有地方都运行反而讽刺性地比某个地方运行更简单。 $ docker run -d \ --name=registrator \ --net=host \ --volume=/var/run/docker.sock:/tmp/docker.sock \ gliderlabs/registrator:latest \ consul://localhost:8500 –volume=/var/run/docker.sock:/tmp/docker.sock可以让Registrator访问DockerAPI; –net=host有助于Registrator获得主机级IP和主机名; consul://localhost:8500是服务注册中心URI。 运行其他服务的容器 $ docker run -d -P --name=redis redis Registrator通过Docker API可以监听Docker容器的启动/关闭,并自动注册/注销服务: $ curl $(boot2docker ip):8500/v1/catalog/services {"consul":[],"redis":[]} $ curl $(boot2docker ip):8500/v1/catalog/service/redis [{"Node":"boot2docker","Address":"10.0.2.15","ServiceID":"boot2docker:redis:6379","ServiceName":"redis","ServiceTags":null,"ServiceAddress":"","ServicePort":32768}] 参考 Github:gliderlabs/registrator Registrator Quickstart Docker Hub:gliderlabs/registrator Scalable Architecture DR CoN: Docker, Registrator, Consul, Consul Template and Nginx

了解Consul template

时间: 2015-06-17   |   分类: Tool   Consul     |   阅读: 21 字 ~1分钟
支持 DNS 和基于HTTP发现机制的服务发现工具Consul让我们印象深刻。它提供了定制化的注册服务健康检查并标记不健康实例的功能远胜于其他类似的工具。更多时兴的工具与Consul的集成使其功能更加强大。ConsulTemplate守护进程提供了一个便捷方式直接使用Consul的信息来填充配置文件。 consul-template 查询一个Consul实例并对文件系统任意数量模板进行更新。此外,consul-template 在更新过程结束后可选地执行任意多个命令。 consul-template 项目提供了一些例子,通过Consul信息生成负载均衡器HAProxy、缓存引擎Varnish和web服务器Apachehttpd的配置文件。 参考 Github:hashicorp/consul-template Scalable Architecture DR CoN: Docker, Registrator, Consul, Consul Template and Nginx

使用Consul的十二要素应用(Twelve-Factor App)

时间: 2015-06-16   |   分类: Tool   Consul     |   阅读: 102 字 ~1分钟
十二要素应用(The Twelve-Factor App)主张web应用应该从环境变量里获取其配置。这一实践很快被现代PaaS服务采用以用于允许简单的配置变更。 使用Consul,很容易将这一实践用于你自己的数据中心。如果你基础架构的某些方面部分使用PaaS,Consul是配置数据中心化的一个很好的方式。 在这篇文章中,我们将展示Consul和envconsul如何在不修改应用程序的情况下被用于设置配置值和在配置变更时触发自动重启。 为什么使用环境变量? 根据十二要素应用,web应用配置应该使用环境变量。跟配置文件或Java系统属性这样的机制比,环境变量有很多优点: 环境变量是一个与开发语言和操作系统无关的标准。 环境变量更难被意外提交到代码库。 环境变量跟易于在development、staging、QA这样不同的环境之间改变。 无论如何部署,环境变量易于设置和更新。 例如Heroku这样的完整PaaS解决方案公开一些有用的API以用于为应用自动设置/读取环境变量。 当手动部署应用时,以往这样的事会更复杂一些。而使用Consul,程序员就可以很容易地设置和读取配置,运营工程师就可以很容易地提供支持和维护。 Consul键值对和Envconsul Consul能够存储键值对数据。对于设置和获取键值对数据,Consul拥有简单的API和美丽且直观的web界面。对于存储配置数据来说,它是完美的。 很容易看到如何设置和读取配置数据,但是对于配置数据如何变成应用的环境变量还不是很清楚。envconsul是一个解决该类问题的轻量级解决方案。 使用envconsul,环境变量存储在ConsulKV中并具有某些(以"/“分割的)前缀。例如,为了配置服务"foo”,我们可能存储如下配置: $ curl -X PUT -d 'false' http://localhost:8500/v1/kv/foo/enabled true 这会在键foo/enabled中存储值false。 之后,使用envconsul, 我们可以将这些键转换为环境变量: $ envconsul foo env ENABLED=false envconsul是一个对UNIX非常友好的应用。他有两个必需的参数:一个用于查找数据的KV前缀和一个应用及其可选参数。在上例中,我们告诉envconsul配置位于前缀foo下,且我们想运行应用env,该应用仅仅是输出环境变量。 在示例结果中,我们可以清楚地看到ENABLED如我们在ConsulKV中所设置的false。 如果将env改成你自己的应用,那么环境变量将暴露给你的应用。例如,为了运行一个Rails服务器你可能做如下操作。注意在真实生产场景中,你可能不直接运行Rails内建服务器,但是它不失为一个好案例: $ envconsul foo bin/rails server ... 自动重载 使用PaaS,当你修改任何配置时你的应用将自动重启。我们可以以最小的代价通过Consul和Envconsul实现相同效果。 通过对envconsul添加-reload标志,一旦配置键发生增删改,envconsul将中断(SIGTERM)并重启你的应用: $ envconsul -reload foo bin/rails server ... 注:该功能已经在0.4.0版本移除。 Consul HTTP API支持对给定前缀KV中的变更进行长轮询。一旦KV中发生变更,Envconsul通过这种方式可以高效地进行检测。 改良流程 对应用配置使用Consul和envconsul可以将PaaS化应用配置易用性带入你自己的原生环境。 对于开发者而言,他们可以无需跟运营工程师沟通或重新部署应用就可以设置配置。 对于运营来说,Consul对整个基础架构的服务发现和配置提供了统一的解决方案。Consul自动复制数据并存储在磁盘上以方便备份,运营工程师也可以高枕无忧了。 我的实践 Envconsul获取的环境变量既可以直接给启动服务器的命令使用(例如上面启动Rails内建服务器的bin/rails命令);也可以通过python之类的脚本存成Java系统属性文件,通过chpst这样可以加载环境变量/系统属性文件的命令间接给Java命令使用。 envconsul \ -once \ -log-level info \ -consul localhost:8500 \ -upcase=false \ -prefix config/foo/jvm \ foo env /usr/local/tomcat/bin/catalina.
阅读全文 »
24 25 26 27 28 29 30 31 32

Programmer & Architect

662 日志
27 分类
1472 标签
RSS 订阅
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%