澳门美高梅手机网站Storm 安装配备

环境要求
JDK 1.6+
java -version
Python 2.6.6+
python -V

澳门美高梅手机网站 1

ZooKeeper3.4.5+
storm 0.9.4+

Alt text

单机模式
上传解压

  • Product
    Hunt链接
  • 官网链接 <–
    戳戳我
  • 下载页面
  • GitHub项目
$ tar xf apache-storm-0.9.4.tar.gz 
$ cd apache-storm-0.9.4

$ mkdir logs
$ bin/storm --help

2017开春,我花了大致三独星期天写了基于Electron的GitHub
Gist管理软件Lepton。开始才将它作为上Electron的勤学苦练项目,却不料她竟然火了同等拿。

 

正式发布后,Lepton每当GitHub的星数在同样圆满横冲上了1000,连续好几上刊登上了GitHub
daily trending的前十(JS和All
language)。在吸收众多有意思的Issue和PR之余,还深受Slack一个尖端工程师引荐加入Electron官网的feature
app之一。甚至还被有些海外媒体自然报道。(这里、这里、和这里)

下分别启动ZooKeeper、Nimbus、UI、supervisor、logviewer

澳门美高梅手机网站 2

$ ./bin/storm dev-zookeeper >> ./logs/zk.out 2>&1 &
$ ./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
$ ./bin/storm ui >> ./logs/ui.out 2>&1 &
$ ./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
$ ./bin/storm logviewer &

Alt text

 

网上有关在GitHub上制作高星项目之阅历分享不多,少数几乎首也是巨牛级别之,让丁学习起来无从下手。所以我怀念把这次有意思的阅历写下来和豪门大快朵颐。

得多等说话,通过jps观察

Lepton介绍

澳门美高梅手机网站 3

Alt text

Lepton凡平等悠悠超过平台(Mac/Windows/Linxu)的snippet管理软件,简单来说,“码笼”。

$ jps
6966 Jps
6684 logviewer
6680 dev_zookeeper
6681 nimbus
6682 core
6683 supervisor

功能

  • 查询/新建/修改/删除 Snippet
  • 地方搜索
  • 语言标签 + 个性化标签
  • 格式化Description(title + tag)
  • Markdown渲染
  • 宽裕文本编辑
  • 语法高亮
  • 云端同步 + 跨平台支撑(Win + macOS + Linux)
  • 品类开源

 

初衷

Lepton项目之初衷是制作一款保存snippet的“印象代码”。

用作一如既往称作码匠,平时要拿总的snippet保存在好管理之地方,就如平常将笔记保存于记忆笔记里平等。如果印象笔记能保存snippet就哼了!可惜印象笔记对代码块支持不好,需要在别的地方拿代码块高亮,然后再度糊回来,并经常出现格式混乱。

俺们为可以动用Google
Drive/Dropbox/其他云盘。缺点是,这种基于文件夹的田间管理不若竹签适合检索。还有一部分单机软件仍Snippets,
能实现地方代码保存,可惜不支持逾平台并(比如从Mac到Windows)。

至2017新春收,GitHub
Gist恐是最契合保存snippet的云端。它不仅支持中心的语法高亮、分享、隐私设置,还见面保留代码的所有历史版本,甚至还提供了REST
API支持。美受到欠缺之凡,Gist没有提供标签效应,而且网页端支出不周全,所有snippet按照时间顺序堆积在齐,难以有效管理。虽然发生少数叔着的客户端,比如GistBox,但是都闭源且开发停滞。所以,我当以Electron

  • Gist打往过平台的snippet manager将凡一个不错的切入点。

登录ui

技术调研

路上马前,我以Electron feature
app网页上查找其中的开源项目,希望得以借鉴经验,少踩坑。

幸运的是,我以GitHub社区找到了一个技能栈相似的色pupaFM。作者xwartz供了详尽的commit记录,阅读commit记录就是像看史故事一样有意思
。通过在本地重现pupaFM大概前60独commit,我大体了解了Redux+React+Electron搭建项目的中心方法,也又点亮Webpack技能点。

Lepton尽管当此基础及多建筑起来的。为了有利于其他开发者方便借鉴Lepton经验,我尽量保证commit记录的可读性,代码里呢供详实的comment,以污染承好开源精神。

http://node1:8080/

社区支撑

不要夸张地游说,Lepton路不是闭门造车,它以开发阶段从太阁程序员社区受到得到了非常特别之支持。2016年底时,社区被之成员1MHz适宣布了他一致基于Electron的作品Knotes,并当社区被享受了他的开发经历,我念后非常受启发。向1MHz请教后,他对Lepton的出提出了众尖锐的提议,尤其是UI库选择以及自动更新这点儿单地方;)

盖两周到后,Lepton框架和基本功能初具雏形,我由太阁程序员社区又约到了篇批内测用户,得到多妙不可言的反映。(尤其感谢meilinz、Aaronice、1MHz、hongbojing、blukpine)

自这次把项目经验总结成文,也是为着对太阁社区回馈:)

 

术实现

Lepton所选用的框架是Electron。Electron把Node.js和Chromium两者结合,开发者可以应用JavaScript进行跨平台的桌面APP开发。同时,项目还选用React

  • Redux来构建前端UI和管理App的状态,并以Webpack来作构建工具。

澳门美高梅手机网站 4

Alt text

下用讨论一些技艺实现达标之底细。

运作测试程序

代码高亮

Lepton采用Highlight.js来进行代码的语法高亮。由于Highlight.js作者深傲娇地无支持line
number,我正好利用这个时机上这技术。下面是终极效果图。

澳门美高梅手机网站 5

Alt text

$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology wordcount
$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test
代码分行

苟齐图,代码块放在了一个HTML
table中。首先用正则式/\r?\n/把代码分行,并同时计算每行对应之line
number。line number放在上面HTML
Table中的率先排,代码放在第二列。使用Table的便宜是,当某行代码太长导致一行放不生如被迫撤回时,它不见面进来line
number的列中。下面是无采用Table时可能会见遇上的题目。

澳门美高梅手机网站 6

Alt text

 

毫不复制line number

有时候,我们当网上复制代码时,会遇到误选line number,导致如下图备受line
number也并被复制的气象。

澳门美高梅手机网站 7

Alt text

Lepton的化解方案是采取data-pseudo-content来号行数,避免了line
number被误选复制的题目,效果妥妥的!

澳门美高梅手机网站 8

Alt text

脚奉上snippet。详细代码请圈这个gist。

  let lineNumber = 0
  const contentTable = adaptedHighlightedContent.split(/\r?\n/).map(lineContent => {
    return `<tr>
              <td class='line-number' data-pseudo-content=${++lineNumber}></td>
              <td>${lineContent}</td>
            </tr>`
  }).join('')

  // 最后输出:`<pre><code><table class='code-table'>${contentTable}</table></code></pre>`

净分布式

Markdown渲染

Lepton采用marked模块进行Markdown渲染(Markdown
转换为 HTML)。感兴趣的话,大家也足以亲召开相同暂缓markdown editor!

var marked = require('marked');
console.log(marked('I am using __markdown__.'));
// Outputs: <p>I am using <strong>markdown</strong>.</p>

澳门美高梅手机网站 9

Alt text

3只节点部署ZooKeeper集群 node1为nimbus

React + Redux state

发端时,我就把有些Dialog的show/hide作为React component的local
state来处理。当时自己觉着它同app的大局state无关,应该放在component中。后来,随着dialog数目的加码(search/create/edit/delete/logout),属于不同component的dialog出现了相覆盖、难以调和的光景。最后我不得不将它改回全局的redux
state。这是同样接触多少更。

3贵机器分别安装解压storm安装包,修改配置文件

签实现

GitHub Gist本身不支持标签。我平开始想尽是通过一个secret
gist来保存与旅标签。后来发现此方式有些问题。

  1. 频率不强,每次标签变化还设管持有标签记录还勾副这个secret
    gist,而且出错后好遗失记录,最后弃用。
  2. 开发者不应有当并未获取用户同意的景象下,私自动用secret
    gist来储存数据。任何有关gist的改都应用户来开决定。

现阶段方式是由此description部分的特殊字符#tags来保存于定义的竹签。优点是签分散到每个gist中,每次只需要创新该gist对承诺部分底标签即可,可以共到云端。而且它们可读性强,即使用户发雷同天抛弃Lepton退回原生的网页端,也能随意读懂description的信。

澳门美高梅手机网站 10

Alt text

澳门美高梅手机网站 11

Alt text

$ vim conf/storm.yaml

storm.zookeeper.servers:
    - "node1"
    - "node2"
    - "node3"

storm.local.dir: "/tmp/storm"

nimbus.host: "node1"

supervisor.slots.ports:
    - 6700
    - 6701
    - 6702
    - 6703

UI设计

 

图标

澳门美高梅手机网站 12

Alt text

用作程序员,能把图标制作到这个水平我是杀中意的了…

Lepton意是轻子,是凭借无插手大相互作用的自旋为ћ/2
的费米子,其中电子Electron是极其出名的轻子。项目由名Lepton,是本着Electron框架的问候。(这无异名目繁多的门类好用物理粒子起名,比如Electron、Atom、Photon等)

初始时,曾想就此β衰变图(β衰变会发出两栽轻子)来作为Lepton图标,可惜总打不好。后来退而求其次,总能够画个周图案表现来粒子感吧(其实用圆形代表轻子是生无正确的),最后在描绘轮眼的启迪下,有了本底统筹。

图标的制作方法简单、成本低、时间不够,但效果是。具体而言,先用系统自带工具画一个逗号,然后去下首先单网站将图纸转换成svg,然后再去次个网站把svg文件转换成Material风格的图标。即使来回折腾几普呢就算是半时之作业。

脚奉上网站链接:

  • http://pngtosvg.com/
  • https://android-material-icon-generator.bitdroid.de/

以storm目录中创造logs目录

界面设计

Lepton的界面几乎从不计划,我那个克制地不失去填补加不必要之要素。

事先举行的色(比如这个,和这个),由于规划过度,到新兴都有些驾驭不了。这次吸取经验,
能就此Bootstrap原色就因此原色,能不加加button就非加加button,能为此黑白就无须花。这样下来,不仅节省了日,界面反而给人许好看。有时开玩笑,说灵感来自清水混凝土。

$ mkdir logs

CodeMirror

CodeMirror是同等磨蹭第三正的text
editor,提供了过多老大强的修功能。(比如代码块的collapse/expand、语法高亮)

澳门美高梅手机网站 13

Alt text

来自GitHub社区的wujysh在把CodeMirror集成到Lepton达做了很完美的工作!正是因来他的贡献,Lepton原本蹩脚的text
editor进化为了现在的代码编辑利器。

再者他于对活的施用及布局上吗提出了累累理想之观;)

启动ZooKeeper集群

本地搜索

Lepton最初就用elasticlunr.js来贯彻当地搜索。遗憾之是,它时单支持英文的整词搜索,比较鸡肋。后来我改用了fusejs,华丽丽地支持partial
search和国语,搜索效果瞬间充满血复活。

澳门美高梅手机网站 14

Alt text

不满的凡,Lepton连无支持针对代码有的摸索,具体技术上之原故可以参考这Issue。目前支撑搜索的局部是:description、文件称、tags

 

自动更新

Electron自带了一个autoUpdater模块,可以自动检测server上之初本子,并活动在后台下载。

Lepton并从未一直运用自带的autoUpdater,而是以electron-builder合龙的创新模块。每次release时候,electron-builder会把包裹文件以及富含版本信息的meta
data文件上传到GitHub的release页面。当Lepton开辟时,它见面自动检测release页面上的最新版本信息,若发现发新本子,便会唤醒用户下载。

瞩目,当公布到Mac App Store时候,必须使关这些auto updater的效应。

node1上启动Nimbus

品种推广

$ ./bin/storm nimbus >> ./logs/nimbus.out 2>&1 &
$ tail -f logs/nimbus.log
$ ./bin/storm ui >> ./logs/ui.out 2>&1 &
$ tail -f logs/ui.log

说明文档

其它一个GitHub项目还该发生雷同卖完善的印证文档,以福利人家了解此项目。我个人的习惯是,即使项目做不结,也会见把开不收的原委与时之快以认证文档上勾画清楚,做到有始有终。

及时是自家形容说明文档的有的例:例子1、例子2、例子3。

Lepton的初成功得益于较完好的文档,不少用户还针对文档内容提出了改进的建议。这里奉上曾经总结了之形容说明文档的资源。

节点node2和node3启动supervisor,按照部署,每启动一个supervisor就发出矣4个slots

首亮相

品种同样开始在了V2EX社区落得揭示,获得了杀对的上报,非常感激。在各位热心用户的申报下,Lepton自早期只有支持查看gist的略客户端,逐步前行成集
Tag + Search + CRUD
一套的APP。现在可以很不浮夸之说,Lepton当前底洋洋用户体验而优惠基于网页客户端的GistBox。

Lepton首收获的关爱帮助其连接好几龙入GitHub的daily
trending,这也它吸引了多万国开发者的关切。(这是本身后来才发现的,一开始还充分怪这些国际友人从哪里听说Lepton

$ ./bin/storm supervisor >> ./logs/supervisor.out 2>&1 &
$ tail -f logs/supervisor.log

开源合作

Lepton当GitHub上沾众多开发者的奉献,下面一并致谢:

  • wujysh
  • meilinz
  • lcgforever
  • Calinou
  • rogersachan

 

继承考虑

必然,这是一个颇有意思之经验,不仅仅是积了很多艺(在出Lepton经过遭到,我自己虽使Lepton笔录了大气之gist),还当活及发矣再多之思维。

品类支付前少周,我具备注意力都汇集到集成GitHub
API、完成核心的CRUD功能上,我所关注之是HOW。当上第四两全至第五两全,产品基本力量(Tag

  • Search +
    CRUD)逐步健全,受到关注更多,我再也多考虑是路是呀(WHAT)。我是如把GitHub自带的Gist网页端复制到桌面吗?还是经过Lepton于建一个snippet生态?我们应有什么选平衡机能为?

自己的定论是,Lepton万一变成能够保存代码的印象笔记,姑且理解啊“记忆代码”。它的顶峰目的是为开源本身来回馈开源社区;它的直招是扶程序员有效应用收集的蝇头智慧(读作dai
ma),在抱StackOverflow大腿之衍,也克赢得自己特别腿。所以,我在新效能的挑三拣四上盖下面“三独有利”作为衡量标准:

  1. 是否有利于用户收集代码 (比如引入CodeMirror)
  2. 是否方便用户便捷获取代码 (比如引入Local Search、copy/share
    button)
  3. 是否便民用户澳门美高梅手机网站专心分析代码 (比如 Immersive mode)

又于社区的扶助及和谐时允许范围外展开。

最后,Lepton顿时段更告知我们,打造一个GitHub上总星球项目,过程实际上远非那神秘,重点在于清晰的型对象及甘于分享的神气。

或多或少竟然的凡,有人想到了拿Lepton作为同款支持markdown的轻量级“印象笔记”来行使。

登录ui

致谢

  • 平等年前与了太阁程序员社区,从里面的免费讲座及类别实战中学至很多!这里强力推荐一下!
  • 1MHz
    给了重重技术支持,欢迎大家呢错过参观一下他的Electron作品Knotes。
  • xwartz
    的PupaFM翔的commit记录对本人念Electron帮助特别挺,希望大家去呢受这类型点单赞。
http://node1:8080/

运作测试程序

$ bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.4.jar storm.starter.WordCountTopology test

 

环境变量配置

export STORM_HOME=/usr/storm
export PATH=$PATH:$STORM_HOME/bin

 

观关闭一个supervisor后,nimbus的双重调度
复启航一个新的supervisor后,观察,并rebalance

发表评论

电子邮件地址不会被公开。 必填项已用*标注