起名斯Parker:利用Eclipse营造斯Parker集成开发条件

WordCount就是最经典的词频总结程序,它将计算输入目录中具有单词出现的总次数,Scala代码如下:

开头亮相

项目一起初放在了V2EX社区上发布,得到了很科学的反映,极度谢谢。在诸君热心用户的反映下,Lepton从早期只辅助查看gist的简练客户端,逐步前行变成集
Tag + Search + CRUD
一身的APP。未来可以很不浮夸的说,Lepton近期的无独有偶用户体验要优于基于网页客户端的GistBox。

Lepton中期收获的酷爱接济它总是好几天进入GitHub的daily
trending,那为它掀起了不少国际开发者的关爱。(那是小编后来才察觉的,一开端还很奇怪这么些国际友人从哪儿听旁人讲Lepton

步骤1:安装scala 2.9.3:直接点击安装即可。

2017开春,小编花了大体上几个礼拜写了基于Electron的GitHub
Gist管理软件Lepton。初阶只把它看做读书Electron的练习项目,却不料它竟然火了一把。

跟创设Scala工程类似,在工程中追加二个Scala
Class,命名为:WordCount,整个工程结构如下:

Markdown渲染

Lepton采用marked模块进行马克down渲染(马克down
转换为 HTML)。感兴趣的话,我们也得以亲自做一款markdown editor!

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

起名 1

Alt text

硬件准备

地点搜索

Lepton最初曾经拔取elasticlunr.js来落到实处地点搜索。遗憾的是,它近期只协理英文的整词搜索,比较鸡肋。后来自己改用了fusejs,华丽丽地匡助partial
search和中文,搜索效果须臾间满血复活。

起名 2

Alt text

不满的是,Lepton并不襄助对代码部分的摸索,具体技术上的原故可以参见这些Issue。近日支撑搜索的局地是:description、文件名、tags

(5) 总结

表达文档

其他贰个GitHub项目都应有有一份完善的表明文档,以方便外人通晓这些类型。小编个人的习惯是,即便类型做不完,也会把做不完的来由和目前的快慢在表达文档上写清楚,做到持之以恒。

那是自小编写表明文档的一对例子:例子1例子2例子3

Lepton的早期成功得益于较为完好的文档,不少用户还对文档内容指出了改良的提出。那里奉上曾经总计过的写表达文档的能源

Eclipse
Juno版本(4.2版本)
,可以一向点击这里下载:Eclipse
4.2

界面设计

Lepton的界面大致从未安排,小编很克制地不去添加不须求的要素。

从前做的系列(比如这个,和这个),由于规划过度,到新兴已略微领会不了。本次吸取经验,
能用Bootstrap原色就用原色,能不添加button就不添加button,能用黑白就绝不彩色。那样下来,不仅节省了光阴,界面反而被人称誉赏心悦目。有时开玩笑,说灵感来自清水水泥。

本人是在windows操作系统下操作的,流程如下:

图标

起名 3

Alt text

作为程序员,能把图标制作到这么些程度我是很中意的了…

Lepton意思是轻子,是指不参加强互相功用的自旋为ћ/2
的费米子,其中电子Electron是最出名的轻子。项目起名Lepton,是对Electron框架的问讯。(这一三种的档次爱用物理粒子起名,比如Electron、Atom、Photon等)

初叶时候,曾想用β衰变图(β衰变会发出三种轻子)来作为Lepton图标,可惜总画不佳。后来退而求其次,总能画个圆形图案表现出粒子感吧(其实用圆形代表轻子是很不得法的),最终在写轮眼的启迪下,有了今后的规划。

图标的制作方法简单、开销低、时间短,但功效不错。具体而言,先用系统自带工具画2个逗号,然后去上面率先个网站把图片转换来svg,然后再去第3个网站把svg文件转换来Material风格的图标。就算来回折腾一次约等于半小时的事情。

上边奉上网站链接:

不过采用进度中,该参数会卡住应用程序,查看源代码发现原来是个bug,该Bug已交由到斯Parkerjira上:

UI设计

assembly/target/scala-2.9.3/目录下的spark-assembly-0.8.1-incubating-
hadoop2.2.0.jar,那几个jar包也足以本人编译spark生成,放在spark目录下的assembly/target/scala-
2.9.3/目录中。

自动更新

Electron自带了壹个autoUpdater模块,可以自动检测server上的新本子,并自行在后台下载。

Lepton并没有平素运用自带的autoUpdater,而是选拔electron-builder购并的立异模块。每一遍release时候,electron-builder会把包装文件以及富含版本音信的meta
data文件上传到GitHub的release页面。当Lepton开拓时候,它会自动检测release页面上的风靡版本音信,若觉察有新本子,便会唤醒用户下载。

小心,当公布到Mac App Store时候,必须求关门那些auto updater的功能。

于是,大家先不要采用“–name”那一个参数,或许修复那些bug,重新编译斯Parker。

起名 4

步骤3:重新起动Eclipse,点击eclipse右上角方框按钮,如下图所示,展开后,点击“Other….”,查看是还是不是有“Scala”一项,有的话,直接点击打开,否则举办步骤4操作。

代码分行

如上图,代码块放在了一个HTML
table中。首先用正则式/\r?\n/把代码分行,并还要总计每行对应的line
number。line number放在下面HTML
Table中的第壹列,代码放在第3列。使用Table的利益是,当某行代码太长导致一行放不下而被迫撤回时,它不会跻身line
number的列中。下边是不行使Table时或者会碰着的标题。

起名 5

Alt text

起名 6

起名 7

步骤2:将Eclipse Scala
IDE插件中features和plugins五个目录下的有着文件拷贝到Eclipse解压后对应的目录中

CodeMirror

CodeMirror是一款第一方的text
editor,提供了过多十三分棒的编撰作用。(比如代码块的collapse/expand、语法高亮)

起名 8

Alt text

来自GitHub社区wujysh在把CodeMirror集成到Lepton上做了那么些可观的工作!正是因为有她的进献,Lepton本来蹩脚的text
editor进化为了未来的代码编辑利器。

并且她在对产品的施用和布局上也提出了很多美好的意见;)

起名 9

初衷

Lepton项目标初衷是制作一款保存snippet的“影像代码”。

用作一名码匠,日常须要把统计的snippet保存在简单管理的地方,就好像平日把笔记保存在映像笔记里同样。如若映像笔记能保留snippet就好了!可惜影象笔记对代码块支持倒霉,必要在其余地点把代码块高亮,然后再贴回来,并不时现身格式混乱。

大家也足以应用谷歌(Google)Drive/Dropbox/其余云盘。缺点是,那种依照文件夹的治本不如竹签适合检索。还有一对单机软件比如Snippets
能完毕地方代码保存,可惜不襄助跨平台联手(比如从Mac到Windows)。

到2017新春截止,GitHub
Gist
想必是最符合保存snippet的云端。它不仅帮助中心的语法高亮、分享、隐秘设置,还会保留代码的全部历史版本,甚至还提供了REST
API协理。美中相差的是,Gist没有提供标签效应,而且网页端支付不健全,全体snippet依照时间各种堆积在协同,难以有效管理。就算有少数第2方的客户端,比如GistBox,不过都闭源且开发停滞。所以,小编认为使用Electron

  • Gist打造跨平台的snippet manager将是多个不易的切入点。

起名 10

接轨考虑

毫无疑问,那是一个很有趣的经历,不仅仅是积累了诸多技艺(在付出Lepton进度中,作者自身就接纳Lepton笔录了多量的gist),还在产品上有了更多的思维。

品种支付前两周,作者抱有注意力都汇聚到集成GitHub
API、已毕基本的CRUD功效上,小编所关心的是HOW。当进入第五,周详第4周,产品基本成效(Tag

  • Search +
    CRUD)逐步健全,受到关心更多,我更加多思考这一个体系是何许(WHAT)。作者是要把GitHub自带的Gist网页端复制到桌面吗?依然通过Lepton自建壹个snippet生态?我们理应怎样抉择平衡机能吗?

笔者的定论是,Lepton要变成能保留代码的映像笔记,姑且精晓为“印象代码”。它的终极目标是以开源本身来回馈开源社区;它的一直手段是协助程序员有效采用收集的少数智慧(读作dai
ma),在抱StackOverflow大腿之余,也可以抱自个儿大腿。所以,作者在新成效的取舍上以下边“两个便宜”作为衡量标准:

  1. 是或不是便利用户收集代码 (比如引入CodeMirror)
  2. 是还是不是有利于用户便捷获取代码 (比如引入Local Search、copy/share
    button)
  3. 是否便民用户专心分析代码 (比如 Immersive mode)

与此同时在社区的鼎力相助以及自身时刻允许范围内开展。

最后,Lepton那段经历告知大家,打造1个GitHub上千星项目,进程实际上远非那么神秘,重点在于清晰的品种对象和甘于分享的精神。

少数意料之外的是,有人想到了把Lepton用作一款协助markdown的轻量级“映像笔记”来行使。

步骤4:在Eclipse中,依次选拔“Help” –> “Install New
Software…”,在打开的卡里填入http://download.scala-ide.org/sdk/e38/scala29/stable/site,并按回车键,可知到以下内容,选拔前两项进行设置即可。(由于手续3业已将jar包拷贝到eclipse中,安装高效,只是疏通一下)安装完后,重复操作五遍步骤3便可。

Alt text

须要专注以下几点:WordCount程序的输入参数通过“-args”指定,每种参数依次单独指定,第叁,个参数是HDFS上的输入目录,须求事先创立好,并上传多少个文本文件,以便计算词频,第4、个参数是HDFS上的出口目录,动态创立,运转前无法存在。

标签已毕

GitHub Gist自己不援助标签。小编一发轫想方设法是通过一个secret
gist来保存和协同标签。后来发觉这一个办法某些标题。

  1. 频率不高,每一回标签变化都要把具备标签记录重复写入这些secret
    gist,而且出错后简单遗失记录,最后弃用。
  2. 开发者不该在没有得到用户同意的气象下,私下动用secret
    gist来储存数据。任何关于gist的改观都应该用户来做决定。

时下格局是经过description部分的特殊字符#tags来保存自定义的竹签。优点是标签分散到各类gist中,每一趟只须求立异该gist对应部分的价签即可,能够同步到云端。而且它可读性高,即便用户有一天扬弃Lepton重临原生的网页端,也能自由读懂description的音讯。

起名 11

Alt text

起名 12

Alt text

(2) 创设Spark集成开发条件

Alt text

  1. // 位置:new-yarn/src/main/scala/org/apache/spark/deploy/yarn/ClientArguments.scala 
  2.         case (“–queue”) :: value :: tail => 
  3.           amQueue = value 
  4.           args = tail 
  5.   
  6.         case (“–name”) :: value :: tail => 
  7.           appName = value 
  8.           args = tail //漏了那行代码,导致程序阻塞 
  9.   
  10.         case (“–addJars”) :: value :: tail => 
  11.           addJars = value 
  12.           args = tail 

React + Redux state

开首时,小编曾把一些Dialog的show/hide作为React component的local
state来拍卖。当时自个儿认为它们和app的大局state非亲非故,应该放在component中。后来,随着dialog数目标加码(search/create/edit/delete/logout),属于不一致component的dialog出现了互相覆盖、难以调和的风貌。最终自个儿只得把它们改回全局的redux
state。那是一点小经验。

情势跟平日的Java程序支付一样,只要将斯Parker开发顺序包spark-assembly-0.8.1-incubating-hadoop2.2.0.jar当作三方重视库即可。

社区协助

不要夸张地说,Lepton品类不是闭门造车,它在开发阶段从太阁程序员社区中拿到了很大的支撑。2015年终时候,社区中的成员1MHz刚发布了她一样基于Electron的文章Knotes,并在社区中享用了他的费用经历,作者读后很受启发。向1MHz请教后,他对Lepton的付出指出了众多一遍遍地怀想的提出,特别是UI库选取和自动更新那多少个地点;)

粗粗两周后,Lepton框架和基本作用初具雏形,小编从太阁程序员社区又诚邀到了首批内测用户,得到众多好玩的反馈。(越发感激meilinzAaronice1MHzhongbojingblukpine

自己这一次把品种经验总计成文,也是为着对太阁社区回馈:)

该WordCount程序接收三个参数,分别是master地方,HDFS输入目录和HDFS输出目录,为此,可编写run_spark_wordcount.sh脚本:

技巧调研

品种上马前,作者在Electron feature
app
网页上追寻其中的开源项目,希望得以借鉴经验,少踩坑。

碰巧的是,作者在GitHub社区找到了一个技巧栈相似的品种pupaFM。作者xwartz提供了详尽的commit记录,阅读commit记录似乎阅读历史传说一样有意思
。通过在地点再现pupaFM几乎前五十九个commit,小编大概通晓了Redux+React+Electron搭建项目标中坚办法,也同时点亮Webpack技能点。

Lepton纵使在那几个基础上搭建起来的。为了便于其余开发者方便借鉴Lepton经验,笔者尽量确保commit记录的可读性,代码里也提供详细的comment,以传承好开源精神。

起名 13

永不复制line number

神迹,我们在网上复制代码时,会遇上误选line number,导致如下图中line
number也一起被复制的气象。

起名 14

Alt text

Lepton的缓解方案是拔取data-pseudo-content来标记行数,防止了line
number被误选复制的难题,效果妥妥的!

起名 15

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>`
  1. import org.apache.spark._ 
  2. import SparkContext._ 
  3. object WordCount { 
  4.   def main(args: Array[String]) { 
  5.     if (args.length != 3 ){ 
  6.       println(“usage is org.test.WordCount <master> <input> <output>”) 
  7.       return 
  8.     } 
  9.     val sc = new SparkContext(args(0), “WordCount”, 
  10.     System.getenv(“SPARK_HOME”), Seq(System.getenv(“SPARK_TEST_JAR”))) 
  11.     val textFile = sc.textFile(args(1)) 
  12.     val result = textFile.flatMap(line => line.split(“\\s+”)) 
  13.         .map(word => (word, 1)).reduceByKey(_ + _) 
  14.     result.saveAsTextFile(args(2)) 
  15.   } 

起名,网上有关在GitHub上创设高星项目标经历分享不多,少数几篇也是巨牛级其余,令人读书起来无从入手。所以本人想把这一次有意思的阅历写下来和豪门享受。

在eclipse中,依次采取“File” –>“New” –> “Other…” –>  “Scala
Wizard” –> “Scala Project”,创设三个Scala工程,并取名为“斯ParkerScala”。

Lepton介绍

起名 16

Alt text

Lepton是一款跨平台(Mac/Windows/Linxu)的snippet管理软件,简单的话,“码笼”。

从来运营run_spark_wordcount.sh脚本即可取得运算结果。

致谢

  • 一年前加入了太阁程序员社区,从里边的免费讲座和连串实战中学到很多!那里强力推荐一下!
  • 1MHz
    给了无数技术扶助,欢迎大家也去参观一下他的Electron文章Knotes
  • xwartz
    PupaFM详细的commit记录对自家学习Electron帮忙很大,希望我们去也给那一个类型点个赞。

在Scala工程中,右击“WordCount.scala”,采纳“Export”,并在弹出框中采纳“Java”
–> “JA大切诺基File”,进而将该程序编译成jar包,可以起名为“spark-wordcount-in-scala.jar”,我导出的jar包下载地址是
spark-wordcount-in-scala.jar

业内公布后,Lepton在GitHub的星数在一周左右冲上了一千,接二连三好几天登上了GitHub
daily trending的前十(JS和All
language)。在收到众多妙趣横生的Issue和P陆风X8之余,还被Slack一个尖端工程师引荐参预Electron官网的feature
app之一
。甚至还被有个别国外媒体自然电视公布。(这里这里、和这里

Eclipse Scala IDE插件,可径直点击那里下载:Scala IDE(for Scala 2.9.x
and Eclipse
Juno)

项目推广

Scala 2.9.3本子,Window安装程序可以一贯点击那里下载:Scala
2.9.3

技能落成

Lepton所采纳的框架是Electron。Electron把Node.js和Chromium两者结合,开发者可以选拔JavaScript举办跨平台的桌面APP开发。同时,项目还选择React

  • Redux来创设前端UI和管理App的情状,并选用Webpack来作为打造工具。

起名 17

Alt text

下边将切磋一些技巧完结上的底细。

前一篇文章“Apache Spark学习:将Spark部署到Hadoop
2.2.0上
”介绍了什么样采用Maven编译生成可一贯运转在Hadoop
2.2.0上的Sparkjar包,而本文则在此基础上,介绍怎么着利用Eclipse创设斯Parker集成开发环境。

功能

  • 查询/新建/修改/删除 Snippet
  • 地面搜索
  • 言语标签 + 性情化标签
  • 格式化Description(title + tag)
  • Markdown渲染
  • 富文本编辑
  • 语法高亮
  • 云端同步 + 跨平台援救(Win + macOS + Linux)
  • 系列开源

 

开源合营

Lepton在GitHub上赢得过多开发者的进献,上边一并谢谢:

在运营进程中,发现一个bug,org.apache.spark.deploy.yarn.Client有二个参数“–name”可以指定应用程序名称:

代码高亮

Lepton采用Highlight.js来展开代码的语法高亮。由于Highlight.js作者很傲娇地不帮助line
number
,小编正要利用那些时机学习那技术。下边是终极效果图。

起名 18

Alt text

发端试用斯Parker On
YALacrosseN进程中,发现标题要么12分多,使用起来特别不便宜,门槛还是很高,远不如SparkOn Mesos成熟。

右击“SaprkScala”工程,采取“Properties”,在弹出的框中,根据下图所示,依次接纳“Java
Build Path” –>“Libraties” –>“Add External JA途睿欧s…”,导入文章“Apache
Spark:将Spark部署到Hadoop
2.2.0上
”中提交的

# 配置成YARN配置文件存放目录

export YARN_CONF_DIR=/opt/hadoop/yarn-client/etc/hadoop/

SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly-0.8.1-incubating-hadoop2.2.0.jar \

./spark-class org.apache.spark.deploy.yarn.Client \

–jar spark-wordcount-in-scala.jar \

–class WordCount \

–args yarn-standalone \

–args hdfs://hadoop-test/tmp/input \

–args hdfs:/hadoop-test/tmp/output \

–num-workers 1 \

–master-memory 2g \

–worker-memory 2g \

–worker-cores 2

装有Linux可能Windows操作系统的机器一台

起名 19

(3) 利用Scala语言开发斯Parker程序

(1) 准备工作

(4) 行使Java语言开发斯Parker程序

软件准备:

在专业介绍此前,先要以下软硬件准备:

发表评论

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

网站地图xml地图