首页
在线工具
搜索
1
使用Metrics指标度量工具监控Java应用程序性能(Gauges, Counters, Histograms, Meters和 Timers实例)
2
如何将Virtualbox和VMware虚拟机相互转换
3
Jumpserver的MFA配置
4
Markdown正确使用姿势
5
Kuboard与KubeSphere的区别:Kubernetes管理平台对比
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
Search
标签搜索
Angular
Docker
Phabricator
SpringBoot
Java
Chrome
SpringSecurity
SpringCloud
DDD
Git
Mac
K8S
Kubernetes
ESLint
SSH
高并发
Eclipse
Javascript
Vim
Centos
Jonathan
累计撰写
86
篇文章
累计收到
0
条评论
首页
栏目
杂谈与随笔
工具与效率
源码阅读
技术管理
运维
数据库
前端开发
后端开发
页面
搜索到
86
篇与
的结果
2017-01-04
Phabricator系列之国际化-中文
Phabricator系列之国际化-中文 Phabricator现在有新的方式进行国际化(主要是中文化)了. (2015-07-06) 前一段时间, 团队用的Phabricator开始滚动往前更新, 确定下来是每周和官方网站同步一次. 之前也是为了解决一个问题, 在任务(Maniphest)分配的时候选择成员的时候, 少了一个成员, 只能用(Edit Task)重新指派人. 后来无意间发现一个清除缓存的命令, 一执行就修复好了. ./bin/cache purge 当前本文的重点在于中文化, 参考了现在最新的wiki, 发现现在的中文化比以前方便许多, 不用再每次同步都要还原几个文件再辛苦执行arc liberate 第一步, 我们新建一个PhutilCNChineseLocale.php, 里面放一个PhutilCNChineseLocale继承一个类叫做PhutilLocale, 实现getLocaleCode和getLocaleName这两个方法 分别在这两个方法里面返回zh_CN和中文 (简体中文) 第二步, 新建PhabricatorCNChineseTranslation.php, 继承PhutilTranslation类, 实现getLocaleCode和getTranslations这两个方法 getLocaleCode中返回zh_CN, getTranslations中返回一个数组, 这个数组还是用我们之前生成的数据 ./bin/i18n extract ./src/applications/ 执行完成之后会生成我们所需要的数组, 把这个数据放到getTranslations里面. (这个数据还是超大的, 我这里大概1.6M的样子, 因为Phabricator几十个应用都有了) 如果只用到某些应用的话, 也可以只生成部分 ./bin/i18n extract ./src/applications/maniphest/ 第三步, 一点一点把getTranslations里面的数组翻译过来, 把值为null的都翻译成中文就可以. 第四步, 我们进入个人设置页面, 把Translation这一项, 选择下拉框里面的中文(简体中文), 保存设置就能看到中文结果了. 最后完成的时候, 就是这样一个目录结构 ├── phabricator-zh_CN │ ├── PhabricatorCNChineseTranslation.php │ ├── PhutilCNChineseLocale.php 这里给出我们项目中的一个结构, 直接将这个clone到本地phabricator/src/extensions目录下面就可以了 https://github.com/wanthings/phabricator-zh_CN.git 本文都内容都是参考官方wiki写的, 以下都是参考文章 Adding New Classes Internationalization
2017年01月04日
2016-12-16
Angular.js中指令compile与link原理剖析
AngularJS中的Compile与Link 在AngularJS中,当我们设置了link选项时,实际上是创建了一个postLink()链接函数,以便compile()函数可以定义这个链接函数。 编译(compile)和链接(link)的职责 编译(compile) 函数负责对模板DOM进行转换。 链接(link) 函数负责将作用域(Scope)和DOM进行链接。 Compile与Link的区别 Compile函数 对指令的模板进行转换。 Link函数 在模型(Model)和视图(View)之间建立关联,并包括在元素上注册事件监听。 作用域(Scope)在链接阶段才会被绑定到元素上,因此在compile阶段操作scope会报错。 对于同一个指令的多个实例,compile只会执行一次;而link对于指令的每个实例都会执行一次。 在一般情况下,我们只需要编写link函数即可。 如果你自定义了compile函数,那么自定义的link函数将会无效,因为compile函数应该返回一个link函数供后续处理。 示例代码 // require 'SomeController' link: function(scope, element, attrs, SomeController) { // 在这里操作DOM,可以访问required指定的控制器 }
2016年12月16日
2016-12-13
随笔-第一次接触DDD与微服务
随笔-第一次接触DDD与微服务 首先,感谢公司提供这次学习DDD(领域驱动设计)的机会。 经过上次雷老师的讲解,这两个月来,我对微服务架构有了整体的了解,并持续关注了雷老师的项目。结合这次培训和个人理解,我总结了以下几点: 微服务架构的核心要素 微服务架构主要包括: 基础设施(原中间件):Redis(缓存管理)、Kafka(消息队列)、Consul/Eureka(服务注册)、Elasticsearch(搜索引擎)等。 DDD(领域驱动设计):重点在于领域建模和界限上下文的划分。 数据库:微服务架构下的数据管理策略,包括分库分表、分布式事务等。 Docker:环境容器化,让环境像代码一样可定义、可声明,提升部署效率。 其中,对我来说最陌生但最重要的部分是基础设施,这次培训重点讲解了如何将基础设施与DDD整合,并提供了基本的DEMO示例。 领域驱动设计(DDD)理解 传统软件设计通常围绕数据库进行架构,而DDD则是围绕领域和界限上下文进行业务扩展。 领域及子域 以我们公司所处的服装行业为例,面料平台就是一个领域,而它可以进一步拆分为多个子域: 交易中心(核心域) 运营中心 商家管理 扫描仪 不同子域之间存在层级关系,例如:交易中心与商家管理之间是上下级关系。 界限上下文 以交易平台为例,它的界限上下文包括: 面料管理(面料列表、搜索、详情) 面料对比(加入对比、对比分析、取消对比) 用户管理(个人用户) 实体、值对象、聚合 实体:具有唯一标识,例如“用户”。 值对象:数据不可变、无唯一标识,例如“用户地址”。 聚合:封装了实体、值对象和仓储,并通过服务暴露出去。 工厂模式 工厂用于创建和管理复杂对象,确保领域对象的一致性。 DDD 与微服务的整合 在微服务架构中,Spring Cloud 通过封装 Redis、Kafka、Consul 等基础设施,使其能够以注解和配置的方式无缝集成项目。这些组件如同武器,而DDD是一个武林高手,关键在于如何合理运用。 此外,Spring Boot 通过注解取代 XML 配置,实现“约定优于配置”,简化开发流程,符合当前行业趋势。 微服务架构落地的关键问题 1. 服务化后的管理 JAR 包如何管理?是每个包一个 Docker 镜像,还是一个界限上下文一个镜像? 端口、日志等规范化管理。 2. Docker 仓库管理 如何高效存储和管理微服务镜像,减少重复构建和拉取。 3. 安全性 可以采用 OAuth + Shiro 结合 Zuul 路由 来控制权限。 4. CI/CD(持续集成 & 持续部署) 如何使用 Jenkins 实现自动化部署,减少人工干预,提高效率。 5. 版本号管理 采用 Maven + Git 进行版本控制,避免人工打版本号。 JAR 包管理策略,避免版本混乱。 6. 单体架构向微服务迁移的思考 为什么要迁移?微服务是否适合当前企业需求? 迁移前的技术债偿还、新架构设计原则、团队变革等准备工作。 迁移过程中需要遵循的设计规范。 分布式事务一致性:虽然雷老师建议使用 TSDB 而非传统事务,但目前对其原理仍有疑问,需要进一步研究。 中间件选型:如何选择合适的消息队列、数据库、缓存方案等。 如何让其他职能团队平滑切入?(UI、产品、运维、测试、前端等) 结语 微服务架构的落地涉及众多技术和管理挑战,这次培训让我对DDD有了更深入的理解,同时也意识到微服务架构实施过程中仍有许多待解决的问题,需要进一步探索和实践。 雷老师的github地址:https://github.com/linux-china
2016年12月13日
2016-11-02
Angular2学习笔记
Angular2学习笔记 模板语法 模板是包在反引号 (`) 中的一个多行字符串。反引号 (`) ——注意,不是单引号 (') ——有很多好用的特性,比如允许多行字符串和模板字面量。 装饰器 @Component 装饰器,这个装饰器类(和我们随后将会学到的 @Directive 和 @Pipe 一样)是 InjectableMetadata 的子类型。实际上,这个 InjectableMetadata 装饰器是把一个类标识为依赖注入器实例化的目标。 TypeScript接口 接口只是 TypeScript 的一个设计期概念。JavaScript 没有接口。在生成 JavaScript 代码时,TypeScript 的接口就消失了。在运行期,没有接口类型信息可供 Angular 查找。 HTML Attribute 与 DOM Property Attribute 是由 HTML 定义的。Property 是由 DOM(Document Object Model) 定义的。 就算名字相同,HTML Attribute 和 DOM Property 也不是同一样东西。 组件交互 组件定义了一个 deleteRequest 属性,它是一个 EventEmitter 实例。(译注:deleteRequest 属性是导出 Output 属性,是组件与父级组件交互的主要方式之一。参见 输入和输出属性 和 父组件监听子组件的事件。我们需要用 @Output() 来装饰它,或者把它添加到组件元数据的 outputs 数组中,它才能在父级组件可见。) NgFor 与 trackBy 现在,把 NgForTrackBy 指令设置为那个追踪函数: <div *ngFor="let hero of heroes; trackBy:trackByHeroes">({{hero.id}}) {{hero.fullName}}</div> 追踪函数不会排除所有 DOM 更改。如果用来判断是否同一个英雄的属性变化了,Angular 就可能不得不更新 DOM 元素。但是如果这个属性没有变化——而且大多数时候它们不会变化——Angular 就能留下这些 DOM 元素。列表界面就会更加平滑,提供更好的响应。 安全导航操作符 Angular 的安全导航操作符 (?.) 是一种流畅而便利的方式,用来保护出现在属性路径中 null 和 undefined 值。这意味着,当 currentHero 为空时,保护视图渲染器,让它免于失败。 其他重要概念 数据绑定 Angular 支持多种数据绑定形式: 插值表达式:{{value}} 属性绑定:[property]="value" 事件绑定:(event)="handler()" 双向绑定:[(ngModel)]="property" 指令 Angular 有三种类型的指令: 组件:带有模板的指令 结构型指令:改变 DOM 布局的指令(如 *ngIf、*ngFor) 属性型指令:改变元素、组件或其他指令的外观和行为的指令(如 ngClass、ngStyle) 服务与依赖注入 Angular 服务是一个广义的概念,它包括应用所需的任何值、函数或特性。通常是一个具有明确用途的类。服务通过依赖注入系统被注入到需要它们的组件中。 模块 Angular 应用是模块化的,它拥有自己的模块系统,称作 NgModule。每个 Angular 应用都至少有一个 NgModule 类,也就是根模块,它习惯上命名为 AppModule,并位于一个名叫 app.module.ts 的文件中。
2016年11月02日
2016-10-13
如何将Virtualbox和VMware虚拟机相互转换
如何将Virtualbox和VMware虚拟机相互转换 迁移到其他的虚拟机程序可行会吓倒一批人。如果你已经按照自己的喜好设置好了虚拟机,那么就不需要再从头安装——你可以迁移现有的虚拟机。 VirtualBox 和 VMware 使用不同的虚拟机格式,不过他们都支持标准的开放式虚拟化格式。将已经存在的虚拟机转换为 OVF/OVA 格式就可以导入其他的虚拟机程序。 不幸的是,这并不总是奏效。因为 VirtualBox 和 VMware 看起来使用些许不同的 OVA/OVF 实现方式,因此也不完全兼容。如果这不奏效,你可能需要重新安装虚拟机的客户机操作系统了。 VirtualBox 转换到 VMware 在迁移 Virtualbox(以下简称 Vbox —— 译者注) 虚拟机到 VMware 之前,确保在 Vbox 中虚拟机“已关闭”——而不是挂起。如果是挂起状态,启动虚拟机然后关掉它。 点击 Vbox 管理菜单,选择导出虚拟电脑。 选择要导出的虚拟机并选择文件保存位置。 Vbox 会创建一个开放式虚拟化格式包(OVA 文件)使得 VMware 可以导入。根据虚拟机磁盘文件的大小,此过程需稍等一段时间。 要将此 OVA 文件导入 VMware,点击打开虚拟机选项并找到你的 OVA 文件。 VirtualBox 和 VMware 不是完美兼容,所以你可能会看到一个警告信息,告诉你文件“不能通过OVF规格一致性验证”——不过如果你点击重试,可能会导入并成功运行虚拟机。 过程结束之后,你可以在在 VMware 中启动虚拟机,在虚拟机控制面板中卸载 Vbox 增强功能(VirtualBox Guest Additions),在虚拟机菜单中安装 VMware 工具。 VMware 转换到 VirtualBox 在将 VMware 虚拟机迁移到 Vbox 之前,确保在 VMware 的状态为“关闭电源” —— 非挂起。如果是挂起,启动虚拟机然后关机。 接下来,找到 OVFTool 所在目录。如果你用的是 VMware Player,目录在类似 C:\Program Files (x86)\VMware\VMware Player\OVFTool。按住 Shift 键,右击选择在此处打开命令行窗口。 按照下列语法运行 ovftool: ovftool source.vmx export.ovf 例如,如果我们转换位于 C:\Users\NAME\Documents\Virtual Machines\Windows 7 x64\Windows 7 x64.vmx 的虚拟机,并且创建 OVF 位于 C:\Users\NAME\export.ovf,我们需要执行下列命令: ovftool “C:\Users\NAME\Documents\Virtual Machines\Windows 7 x64\Windows 7 x64.vmx” C:\Users\NAME\export.ovf 如果提示“打开此盘失败”错误,很可能是虚拟机仍在运行或者没有正确关机——启动虚拟机并执行关机操作。 过程结束之后,可以使用管理菜单中的导入虚拟电脑选项,将 .ovf 文件导入 Vbox。 导入完成之后,你可以启动虚拟机,卸载 VMware 工具,并安装 Virtualbox 客户机增强工具。 文章来至
2016年10月13日
1
...
12
13
14
...
18