首页 文章 精选 留言 我的

精选列表

搜索[系统工具],共10000篇文章
优秀的个人博客,低调大师

开源自然语言处理工具包hanlp中CRF分词实现详解

CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题。 [gerative-discriminative.png] CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。 CRF解码 解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下: 首先任何字的标签不仅取决于它自己的参数,还取决于前一个字的标签。但是第一个字前面并没有字,何来标签?所以第一个字的处理稍有不同,假设第0个字的标签为X,遍历X计算第一个字的标签,取分数最大的那一个。 如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s’,s),其中s’为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4*4的矩阵描述,相当于HMM中的转移概率。 实现了评分函数后,从第二字开始即可运用维特比后向解码,为所有字打上BEMS标签。 实例 还是取经典的“商品和服务”为例,首先HanLP的CRFSegment分词器将其拆分为一张表: null表示分词器还没有对该字标注。 代码 上面说了这么多,其实我的实现非常简练: 标注结果 标注后将table打印出来: 最终处理 将BEMS该合并的合并,得到: [商品/null, 和/null, 服务/null] 然后将词语送到词典中查询一下,没查到的暂时当作nx,并记下位置(因为这是个新词,为了表示它的特殊性,最后词性设为null),再次使用维特比标注词性: [商品/n, 和/cc, 服务/vn] 新词识别 CRF对新词有很好的识别能力,比如: CRFSegment segment = new CRFSegment(); segment.enablePartOfSpeechTagging(true); System.out.println(segment.seg("你看过穆赫兰道吗")); 输出: CRF标注结果 你 S 看 S 过 S 穆 B 赫 M 兰 M 道 E 吗 S [你/rr, 看/v, 过/uguo, 穆赫兰道/null, 吗/y] null表示新词。

优秀的个人博客,低调大师

web3j通过命令行工具新建钱包、更新钱包密码及转账

生成一个新的以太坊钱包: $ web3j wallet create 更新现有钱包的密码: $ web3j wallet update <walletfile> 将以太币发送到另一个地址: $ web3j wallet send <walletfile> 0x<address>|<ensName> 当把以太币Ether发送到另一个地址时,在交易发生之前,你会被问到一系列问题。见下面的完整示例: 下面的例子演示如何使用web3j发送以太币Ether到另一个钱包。 $ ./web3j-<version>/bin/web3j wallet send <walletfile> 0x<address>|<ensName> _ _____ _ _ | | |____ (_) (_) __ _____| |__ / /_ _ ___ \ \ /\ / / _ \ '_ \ \ \ | | | / _ \ \ V V / __/ |_) |.___/ / | _ | || (_) | \_/\_/ \___|_.__/ \____/| |(_)|_| \___/ _/ | |__/ Please enter your existing wallet file password: Wallet for address 0x19e03255f667bdfd50a32722df860b1eeaf4d635 loaded Please confirm address of running Ethereum client you wish to send the transfer request to [http://localhost:8545/]: Connected successfully to client: Geth/v1.4.18-stable-c72f5459/darwin/go1.7.3 What amound would you like to transfer (please enter a numeric value): 0.000001 Please specify the unit (ether, wei, ...) [ether]: Please confim that you wish to transfer 0.000001 ether (1000000000000 wei) to address 0x9c98e381edc5fe1ac514935f3cc3edaa764cf004 Please type 'yes' to proceed: yes Commencing transfer (this may take a few minutes)...................................................................................................................$ Funds have been successfully transferred from 0x19e03255f667bdfd50a32722df860b1eeaf4d635 to 0x9c98e381edc5fe1ac514935f3cc3edaa764cf004 Transaction hash: 0xb00afc5c2bb92a76d03e17bd3a0175b80609e877cb124c02d19000d529390530 Mined block number: 1849039 原文《Java以太坊类库web3j官网中文翻译》中的: http://cw.hubwiz.com/card/c/web3j/1/8/2/ 另外推荐几个很受欢迎全网稀缺的互动教程: web3j,主要是针对java和android程序员围绕web3j库进行区块链以太坊开发的讲解。 python以太坊,主要是针对python围绕web3.py进行区块链以太坊应用开发的讲解。 php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。

优秀的个人博客,低调大师

易鲸捷首架刘明:Trafodion值得放入工具箱,因为有以下优点

Trafodion是Apache基金会的一个开源项目,提供了一个成熟的企业级SQL-on-HBase解决方案。Trafodion的主要设计思想是处理operational类型的工作负载,或者是传统的OLTP应用。此外,对于需要保证数据一致性、需要标准SQL开发接口,或者需要实时数据读写分析的应用,Trafodion也是一个十分合适的解决方案。 Trafodion的前世今生 Trafodion的渊源可以追溯到数据库技术的“史前时代”。 Trafodion的鼻祖是天腾 (Tandem) 公司的NonStop SQL。之后在1989年,天腾推出了NonStop SQL/MP,它是第一个MPP分布式数据库,实现海量并发SQL执行。在当时的历史条件下,NonStop SQL/MP开创性地提供了线性横向扩展能力(我们如今耳熟能详的scale out

优秀的个人博客,低调大师

开发工具总结(9)之开源项目的README文档的最全最规范写法

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/813b70d5b0de 转载请标明出处:https://www.jianshu.com/p/813b70d5b0de 本文出自 AWeiLoveAndroid的博客 【好消息】我的微信公众号正式开通了,关注一下吧! 关注一下我的公众号吧 看过很多开源库,发现有些库的文档写的一团糟,有的甚至就是一个标题,让你自己下载之后运行,自己摸索,看的很头疼。而那些使用量大的库的文档写的很标准,很详细,看的很舒服。 README文档写的好的话能减少很多使用成本,能帮助这个库让更多人了解,更多的人用,可以说好的文档就是一个门面。有好的 README 文档的项目不一定是一个好开源项目,但一个好开源项目一定有一个好的 README。 下面就简单的总结一下README文档规范写法。(这只是我个人根据github上几百个大型开源库总结出来的,如你有更好的意见,欢迎留言。) 一、README文档的组成部分 看过很多开源框架的README文档,综合一下,大概有以下几部分组成: (一)国际化 (二)项目工程介绍 (三)项目的使用效果图 (四)项目特点 (五)项目的基本结构(架构) (六)集成方式 (七)使用方法 (八)混淆 (九)关于作者/组织及交流方式等信息。 (十)贡献者/贡献组织 (十一)鸣谢 (十二)版权信息 二、下面就每个部分简单的分析一下: (一)国际化 github是面向全球的一个开源网站,所以不要局限于中文文档,建议写一个英文的README,让来自全球的人都能更方便的了解你的项目。推荐写法,在REAMDE开头写上国际化引用地址: 比如: 国际化 (二)项目工程介绍 项目介绍是必不可少的,它能让别人快速了解项目。项目介绍主要包括: 项目名称、logo(没有logo就不写) 这个开源项目是做什么的? 这个项目是什么语言编写的? 这个项目目前被多少人用到了,有多少好评等? 项目维护、依赖更新状态(如果有的话,这也可以用)等 项目可用版本及其他版本,以及每个版本的更新信息记录 Demo 或官网地址(如果有) 效果图如下所示: 英文版: 英文版项目介绍 中文版: 中文版项目介绍 上述案例里面那些图标,请参考这个网站 Shields.io,打开之后想用哪个直接复制就可以了,同时它也支持自定义样式。 (三) 项目的使用效果图 如果是一些自定义控件或者项目的演示效果的,基本都会放上演示效果图,可以是图片,也可以是gif图。 建议:静态的页面的放截图,交互很复杂的建议放gif图。 如果功能比较多,建议每个功能一张效果图。 示例如下: LoveHeartView使用示意图如下图所示: (四)项目特点 主要是介绍项目的特点,方便别人查看和了解该项目。 比如 360的RePlugin框架的特点就写的很详细: 360的RePlugin的项目特点 (五)项目的基本结构(架构) 这里主要介绍项目的各个组成部分,如果是框架,可以附带架构图解;如果是其他的,可以提供一些UML分析图,顺便分析一下源码也行的。 比如 360的RePlugin架构图解 如下所示: 360的RePlugin架构图解 关于RePlugin架构的相关说明 (六)集成方式 一般的项目传到jcenter上面或者AS插件传到jetbrains的话 一般会附带相关的集成方式的说明。(如果没有这些措施的话,这一步可以略过不看。) 比如 okhttp 就有详细的3种集成方式: 一个是下载Jar包;一个是引用Maven库;第三个是添加Gradle依赖: okhttp的集成方式 (七)使用方法 一般的README必不可少的,最重要的就是用法,主要包括:安装,运行,编译,部署,debug,该github上的这个库如何在自己的项目中使用,以及需要注意的问题,版本更新适配问题等等。 这里就拿 Glide 举例说明,Glide里面有一个详细的wiki使用文档的,首页的README里面也写了一个简单的基本用法,如下图所示: Glide的基本用法 (八)混淆 一般来说,开源库都会设置一些混淆规则的,部分项目由于项目类型特殊之处,所以就没有混淆这一项,具体的看开源项目来定。 例如LitePal这个开源库的混淆 如下图所示: LitePal混淆规则 (九)关于作者/组织及交流方式等信息。 这个就很灵活了,不是每一个必备,当然写出来方便大家联系作者,也是很好的。可以写一下作者或者组织的联系方式,微信,邮箱,博客,微博,甚至支付宝转账二维码等都是可以放上去的。 例如 blankj的AndroidUtilCode这个库为例,为了避免打广告嫌疑,我做了打码处理: (十)贡献者/贡献组织 比如 谷歌推出的 sample 里面就有贡献者/贡献组织信息,如下图所示: 谷歌推出的sample的贡献者/贡献组织信息 (十一)鸣谢 这个主要是引用了哪些开源技术,这里可以做一些鸣谢,表示对别人的尊重,其实也是一个引用声明,避免因为版权而引起不必要的纠纷。 例如:我写的这个库 https://github.com/AweiLoveAndroid/CommonDevKnowledge/blob/master/interview/summary.md 里面就写了鸣谢。 https://github.com/AweiLoveAndroid/CommonDevKnowledge里面的鸣谢 (十二)版权信息 版本很重要,开源许可证很重要,如果没有生命版权,可能会因为一些侵权行为而无法很好的维权,版权信息可以保护作者的权益(个人理解)。 世界上的开源许可证,大概有上百种。很少有人搞得清楚它们的区别。最流行的有六种:GPL、BSD、MIT、Mozilla、Apache、LGPL 乌克兰程序员Paul Bagwell,画了一张分析图,说明应该怎么选择。这是我见过的最简单的讲解,只用两分钟,你就能搞清楚这 六种许可证之间的最大区别。 六种开源许可证之间的区别 比如 Picasso 里面的版权信息,如下图所示: Picasso 里面的版权信息

优秀的个人博客,低调大师

开发工具总结(6)之Android Studio模板配置详解(提高开发效率必备技能)

版权声明:本文为博主原创文章(部分引用他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/1fe87050c1ff 转载请标明出处:https://www.jianshu.com/p/1fe87050c1ff 本文出自 AWeiLoveAndroid的博客 2017年最后一天了,首先祝贺大家元旦快乐,2018工作顺利,天天开心。 本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio 【前言】Android Studio模板相信大家应该多少都有接触过吧,如果用的少也没关系,花30分钟看看这篇博客就会用了,我会带领大家快速入门。使用了模板之后能大大的提高开发效率,建议大家收藏本文,忘记的时候再回来看看。 目录 一、工程目录模板二、Live Templates (活动模板)三、File and Code Templates(文件和代码模板),这里讲一下自定义注释模板四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。 一、工程目录模板 Android Studio 新建一个 project 时并没有将 Android 开发中常用的文件目录全部生成,比如默认只生成了一个 drawable文件夹,常用的 drawable-hdpi等文件夹需要我们自己去创建。再比如values目录下的dimens.xml,res目录下的anim文件夹都是没有的,需要我们手动去创建。这样一来,自己创建浪费时间,同时创建的目录名字错了,编译肯定会报错。所以为了效率和安全起见,我们需要把工程目录模板进行修改,达到创建 project 时就可以生成完整的目录结构,不再手动去创建的目的。 (一)新建module的时候自动生成dimens.xml. 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root --> res --> values,在values文件夹下创建 dimens.xml 文件夹,写入以下内容,保存: <?xml version="1.0" encoding="utf-8"?> <resources> </resources> (二)这里有3个需要变更的地方。 (1)新建module时,自动添加v4依赖,并且指定v4,v7包依赖版本。 (2)新建module时自动生成不同分辨率的drawable文件夹。 (3)指定dimens.xml的路径。 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule,然后用编辑器打开 recipe.xml.ftl文件,并加入以下配置,如下图红色框框所示 说明: (1)dependency 这个意思是配置依赖库的url,默认的只有一个v7包,我这里新增了一个v4包的依赖。 (2)v7或者v4后面的25.3.1是对应的版本号,比如你想用24的版本,你可以替换成你的sdk里面对应的版本号(不知道sdk版本号的可以查看 Android studio常用设置和快捷键)。 (3)mkdir 意思是创建目录 (4)解释一下以下这段代码的意思: <instantiate from="root/res/values/dimens.xml" to="${escapeXmlAttribute(resOut)}/values/dimens.xml" /> //意思是把 模板的root/res/values/demins.xml 这个路径里面的dimens.xml拷贝到创建的项目资源目录下面的values/dimens.xml (三)新建module的时候想让module的build.gradle里面的编译指定某一个版本。比如我想要的结果是这样的: android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 25 targetSdkVersion 25 ... } ... } 重点要设置的有4个:compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion,下面讲一下操作方法: 操作方式:进入 Android Studio 安装目录,依次进入 plugins --> android --> lib --> templates --> gradle-projects --> NewAndroidModule --> root,然后用编辑器打开build.gradle.ftl,修改配置如下图所示: 说明:先把这个文件备份,再去做修改。免费出问题了还可以还原回来。 4. 新建一个project看看效果如何: 二、Live Templates 活动模板(暂且翻译为 灵活的模板 比较好) (一)打开方法: 点击菜单File --> 点击Settings --> 选择Editor --> Code Style --> Live Templates,这里面配置了常用代码,比如log,System.out.println,for循环等 由于太多,下面只列举开发中经常用到的:(后面写注释“//修改了快捷键名称” 表示修改了快捷键名称,不再使用默认的快捷键,没修改的是默认的快捷键) (1)Android 安卓有关的 const 常量 fbc findViewById fore 创建foreach循环 //修改了快捷键名称 gone 设置View为gone //修改了快捷键名称 IntentView 用ACTION_VIEW创建一个Intent key 结果是 private static final String KEY_$value$ = "$value$"; newInstance 使用参数创建一个新的Fragment实例 co 生成构造方法 //修改了快捷键名称 cop 私有构造方法 //修改了快捷键名称 rgS 从资源文件getString(R.string.XXX) rouiT 生成runOnUIThread sbc 生成方格状注释代码块 Sfmt 格式化String String.format(XXX) starter 创建一个静态的start(...)方法来启动一个Activity toal 创建一个长时间的Toast //新增 toas 创建一个Toast //修改了快捷键名称 vi 设置View为visible //修改了快捷键名称 (2)AndroidComments 安卓组件 fix 添加 // FIXME //修改了快捷键名称 do 添加 // TODO //修改了快捷键名称 (3)AndroidLog 安卓打log有关的 logd Log.d(TAG, String) loge Log.e(TAG, String) logi Log.i(TAG, String) logm 打印方法名称及其参数,Log.d(TAG,XXX) logr 打印方法的结果 tag 根据当前的类名生成一个静态logtag //修改了快捷键名称,修改了内容,描述改为“根据当前类生成一个TAG” private static final String TAG = $className$.class.getSimpleName(); logw Log.w(TAG,String,Exception) logf Log.wtf(TAG, String, Exception) //修改了快捷键名称 (4)iterations 快速生成循环和迭代器代码块 for 示例:for (int i = 0; i < ; i++) {} //修改了快捷键名称 fora 示例:遍历数组 //修改了快捷键名称 for (int i = 0; i < Array.length; i++) { int i1 = Array[i]; } forc 示例:使用iterator遍历一个容器变量 //修改了快捷键名称 for (Iterator iterator = collection.iterator(); iterator.hasNext(); ) { Object next = iterator.next(); }//这个是遍历一个容器变量的,直接让容器返回一个iterator进行遍历 whe 示例:while循环遍历枚举内容 //修改了快捷键名称 while (枚举类.hasMoreElements()) { Object nextElement = 枚举类.nextElement(); } iter 示例:遍历选中状态下的set //修改了快捷键名称 for (int i : FOCUSED_STATE_SET) {...} whi 示例:while循环使用iterator进行遍历 //修改了快捷键名称 while (iterator.hasNext()) { Object next = iterator.next(); }//获取到了迭代器对象后,对迭代器进行遍历操作 forl 示例:遍历list对象里面的内容 //修改了快捷键名称 for (int i = 0; i < list.size(); i++) { Object o = list.get(i); } foraa 示例:倒叙遍历数组 //修改了快捷键名称 for (int i = Array.length - 1; i >= 0; i--) { int i1 = FOCUSED_STATE_SET[i]; } //以下这两个用的少,只是把快捷键改了一下,方便使用 fors 对StringTokenizer遍历 //修改了快捷键名称 forv 对Vector遍历 //修改了快捷键名称 (5)Other 其他的 geti 获取到当前的实例 示例: public static MainActivity getInstance() { return ; } ifn 生成if null代码块 示例: if (某变量 == null) {....} inn 生成if not null代码块 示例:if (某变量 != null) {....} inst 判断某变量是不是某个类的实例对象 示例: if ($EXPR$ instanceof $TYPE$) { $TYPE$ $VAR1$ = ($TYPE$)$EXPR$; $END$ } lazy 执行延迟初始化,就是对象直到用的时候才进行初始化操作 示例: if (savedInstanceState == null) { savedInstanceState = new Bundle(); } st 获取数组最后一个元素 示例: arr[arr.length - 1] mn 比较两个变量较小值 Math.min(var2,var3); mx 比较两个变量较大值 Math.max(var2,var3); main 生成一个main()函数的代码块 public static void main(String[] args){ 。。。。 } //修改了快捷键名称 toar 把collection的对象存储到一个数组里面 示例:something.toArray(new collection[something.size()]) (6)plain 关于修饰符 psf public static final psfi public static final int psfs public static final String St String thr throw new (7)surround 代码块被什么包裹。。 I 被迭代器包裹 默认的是: for (Object o :) { } (8)output(我改成了SystemOut) //修改了组的名称 sysr 示例: System.err.println("example") //修改了快捷键名称 sysf 示例: System.out.printf("example") //修改了快捷键名称 syso 示例: System.out.println("example") //修改了快捷键名称 sysom 打印当前类的当前方法名, 示例:System.out.println("MainActivity.onCreate"); //修改了快捷键名称 sysop 打印当前方法的所有参数列表及其值, 示例: System.out.println("savedInstanceState = [" + savedInstanceState + "]"); //修改了快捷键名称 sysov 打印一个变量值, 示例:System.out.println("arr = "+ arr); //修改了快捷键名称 (二)自定义活动模板 我自定义了几个常用功能,放在lzw组下面,如图所示: han: 自动生成一个类继承Handler swi 自定义switch/case选择语句 toli 把数组转成集合(自定义的,后面会讲解怎么自定义的) zs:注释模板 具体操作方式如下: (1)点击右边的“+” 加号,选择 Template Group,创建一个组,输入一个组名,点OK (2)找到刚创建的组,点击右边的“+” 加号,选择 Live Template,创建一个模板 (3)Abbreviation后面的输入框输入一个快捷键名称,Description后面的输入框输入描述 (4)点击下方的Define,勾选java前面的复选框 (5)Template text 输入自定义模板的代码内容 (6)点击右边的Edit variables,编辑指定的变量名 具体如下图所示: 三、File and Code Templates 文件和代码模板,这里讲一下自定义注释模板 (一) 类注释 从编程规范来讲:编写完成每个类都要有一个头部注释,标注类的功能描述,作者,联系方式和修改日期等。对自己的代码负责。 头部注释的添加有以下两种方式: (1)第一种方式,可以在AS中,Settings → Editor → File and Code Templates → Includes → File Header,输入: /** * 描述:添加类的描述 * @author yourName * @e-mail XXX@XX.com * @time ${DATE} */ 这样便可在每次新建类的时候自动加上该头注释,如下图所示: (2)第二种方式,在Settings → Editor → Live Templates中配置,如下图所示: 关于这里的 ,点击右边的Edit variables,属性配置成date() 这种方式是配置模板和对应的快捷键,比如我的配置完成后在类的开头输入 lzw 回车就会自动生成对应的注释模板: (二) 方法注释 每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释。 操作方式:在方法前一行输入 /** + 回车 或者设置 Fix doc comment(Settings → Keymap → Fix doc comment) 快捷键,AS便会帮你生成模板,我们只需要补全参数即可。 四、自定义UI模板,新建project或者module的时候,右键可以快速生成模板,比如点击新建Activity,可以选择EmptyActivity等。。 【说明】这个我也没做太多研究,以后有时间我研究一下,把它写到这篇博客里面来。有兴趣的的可以参考这篇文章 AndroidStudioTemplate。该文章对应的github地址是: AndroidStudioTemplate 另外:我看简书里面也有前辈写了相关文章,也可以去看看。 《android studio的自定义工程模板详解》 https://www.jianshu.com/p/c76facb61d69 《网易 Android 工程模板化实践》https://www.jianshu.com/p/4076b71f18a4 本文同步发表在github,欢迎观看,guithub地址:https://github.com/AweiLoveAndroid/The-pit-of-the-Android-Studio 到此为止,Android Studio的模板配置基本讲完了,有疑问的欢迎在下面留言。 【好消息】我的微信公众号正式开通了,关注一下吧! 关注一下我的公众号吧

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册