Soft_Job 板


LINE

要看图的可以去FB https://goo.gl/ll6Vpc,我设公开。以下正文。 =========================================================== 因缘际会下跟人组了队参加这次 NASA 办的 hackathon。 这是第六届,会在全球不同城市同步举行,而台湾则是第一次参加。 地球卫星观测资料的特点是影像涵盖范围跟时间跨度大, 适合监控长时间变化,或是从大区域中过滤出感兴趣的区域再派人去现地。 但大多数更新频率最多每日一次,所以不适合做即时监控。 每颗卫星的目的性都非常强,资料分析的工具一般在发射前就准备好了 (搞不好 paper 的草稿都写好了,只缺把资料补进去)。 NASA 举办这样的活动,大概是打算挖出这些公开资料的剩余价值。 每年都有一个主题。前五届都是天文相关的主题,这届则是地科相关。 所以很可惜我的背景知识能发挥的地方有限, 但相对其他组员我还是对卫星资料比较了解。 我们团队共五个人,技能组成范围蛮广的, 软/硬体、网页前/後端、资料分析、手机 app、UI/UX/设计。 这个 hackathon 在资料处理/分析上有相当的门槛在。 相较一般 hackathon 在当日才公布题目, NASA Hackathon 在宣布举办时就公布了五大方向, 在赛前一个礼拜前公布题目,共25道题,大家挑自己喜欢的做。 门槛一是在於卫星资料不论种类还是数量都相当多, 而且资料格式不是熟知的 JSON、XML、CSV 等等而是 HDF5 或 netCDF4, 无法用一般工具读。 二是就算能成功读取,资料也不容易理解。 事实上在决选时,评审最常问的问题就是 「你做的应用,跟 NASA 的资料有什麽关系?」 或是 「用了哪些 NASA 的资料?」 我猜参赛者应该也不是不想用,而是不知道该怎麽用。 题目公布前我们做了一次 brainstorming, 公布後我很快的把题目都看过一遍并写下 comment与可能的门槛。 我大致的想法是: 1. 防救灾的不要碰。因为台湾因为环境因素,这方面的投入蛮大的,成果不错, 也有startup 在做这方面了(例如究心科技)。 在一次 Hackathon 要找到之前被忽略的痛点其实不容易。 2. 生物方面的题目有趣,但如何利用卫星资料做出物种入侵、变迁的成果, 专业知识门槛实在太高。 经过这样限缩范围与反覆讨论,最後我们打算太阳能的能源管理以及太空骑士两者择一。 太空骑士是要做一个服务,让使用者像在搭乘人造卫星看地球。 如果只是这样那也没什麽意思, 但我们从另一个方向切入,希望盲人也能够理解卫星影像的内容, 为盲人做卫星资料「视觉化」,这就很有创意跟挑战了。 我们打算透过听觉跟触觉两种方式让盲人理解影像。 听觉的部分也许可以用 machine learning 或 AI 把影像转成文字, 再用 cognitive service 把文字转为语音。 不过影像转文字这段困难度不小,而且结果可能不靠谱, 所以我们借用 Be My Eyes 的想法, 打算做个 crowdsourcing 平台, 让大家在上面能够对每张卫星影像写下描述/录音/上tag/对描述给出评价 (把它当成字幕组就是了) 以补这部份的不足。 而且这些 labeled data 之後也可以拿来做 training。 触觉的部分打算做出类似 MIT Media Lab 里 Tangible Media Group 做出来的东西用来描绘卫星影像,让盲人可以直接触摸。 不过 crowdsourcing 的贡献者需要看到影像, 所以仍然得做一个题目描述中的 web service。 至此我们的工作确定分为 web service 後端、前端、 crowdsourcing 平台、触觉硬体四个部分。 我们也打算利用这次机会练兵,摸一下平常在工作没机会碰的工具。 我们一来已经有 AWS 的经验,再者也想玩一下 cognitive service, 所以这次试试 Microsoft Azure。但後来证明这是错误的策略。 Hackathon 时间非常有限,使用不熟悉的工具那是挖坑给自己跳。 我们要做 web service 是确定的, 所以在一个礼拜前我打算把一个空的网路服务先架起来,到时候再改。 Azure 跟 AWS 差不多,也提供很多不同的服务。 一开始我试着用 web app 开 Django project, web app 的好处是不用 host server,但试来试去都不成功, 连官方提供的 default 都有问题(还是 AWS 的 Elastic Beanstalk 比较靠谱)。 後来索性直接开 VM 自己架 nginx+uwsgi+django。 另一名夥伴直接用 visual studio deploy 到 Azure web app 就没问题 (是排挤mac user吗?)。 用 web app 的好处是它有提供 CI 的服务,只要把 code push 到 github, deploy 的 service 就会自动更新。所以我们决定把 code push 到这位夥伴的 github。 我主要负责後端,任务是前端送卫星名称跟时间,我就回传卫星位置。 这个工作分两个阶段,首先要捞到对应卫星跟时间的 two-line element (TLE)。 TLE 就是卫星的轨道资料,每日更新。其次是用轨道资料算任意时间的卫星位置。 这两个部分我都有找到现成套件可以做,真的好棒棒! 其实 hackathon 还没开始前我就已经在 Jupyter 上把这段串好了, 接下来只要把整段 code 放到後台逻辑里就好,能有什麽问题? 只能说雷总是埋在意想不到的地方。 2013年後官方提供 API 直接捞取 TLE。 但必须注册为会员且登入後才能拿,同时一分钟能送出的 request 上限是20次。 官方针对不同平台提供了不同方法去捞取 TLE。 Linux 平台可以用 curl 去捞, 但基本逻辑都是先登入拿到 cookie,再拿这个 cookie 去要 TLE。 试了没有问题,但在 code 里用 shell command 不符合我的美学, 於是我试着用 requests 套件模拟上述行为, 但总是有问题,cookie 也确定有送。 後来找到专门拉 TLE 的套件,可喜可贺。 结果呢,我在 Django 的环境里使用这个套件竟然有问题。 看了下 error message 竟然是 "there is no current event loop in thread xxx”。 奇怪,我只不过送个 http request,什麽时候开 thread 了? 看了一下 package 的 source code 才发现 原来它为了保证一分钟送出去的 requests 不超过20次, 竟然用 asynchronous 的方法去送。 asynchronous 不易维护,bug不好找。 除非有 performance 的issue 不然通常我会避免使用。 没办法,只好写个 python script 然後用 os.system() 去执行... 靠北喔,那这样我一开始就用 curl 不就得了?! 总之这个问题是解决了,结果算轨道又出现错误, 原因竟然是找不到 TLE 档, 但 error message 里那个说是错误的路径就是档案路径啊... 再看了下套件的 source code 发现它竟然把 file path 当成 url 送出去, 靠北那当然捞不到东西啊! 後来我也不想 debug,直接改 package source code(这是坏榜样,好孩子不要学)。 别再鸡婆帮我判断是 file 还是 url,老子给你什麽,给我开就是了! 本来 web service 我打算用 django 後端/前端来做, 但前端想用自己惯用的工具开发,因此希望我开 API 出来。 合理,而且这是比较好的作法,但我没做过 API 啊哈哈哈。 其实我在公司本来也需要做 API,只是有其他事所以一直耽搁了, 既然如此那就立刻学立刻做吧! 孤狗大神说有个叫 Django REST framework 的套件不错。 看了一下说明,它基本上就是提供一个 APIView 的 class, 只要改用 APIView 建後端逻辑,然後回传时用套件提供的 Response 这样就可以了。 一个从来没开过 API 的人, 从开始孤狗到成功建起 API 只花了40分钟, python 开发速度真的超快! 後端逻辑跟 API 在 localhost 都建好了,用 postman 送 request 也捞的到资料, 接下来只要 deploy 到 Azure 上,正式的 API service 就完成罗~ But,经验告诉我这关常会出问题,而很不幸地坏预感通常特别准。 deploy 失败的原因也很妙, 竟然是 Azure web app 没办法安装某个我需要的套件 Orz。 刚好家齐大大是 Microsoft 的技术顾问,赶快请他救援, 不过最後还是没有成功。 只好退回 Plan B -- 用我开的 VM 架 API。 在 VM 上那个套件可以成功安装,但我在 git pull 时似乎搞掉一个 config 档... 好像是我把 *.conf 放在 .gitignore 里但我不小心把 config 档杀掉了所以也救不回来 那时头很昏所以也不太确定究竟发生了什麽, 总之 Azure 上的 service 起不来了。 其实当初从开 VM、架 nginx、到 django web service 起来也只花了45分钟, 但现在怎麽找都找不到 bug 在哪。崩溃啊! 最後没办法,只好在 localhost 架 API, allowed host to all 行不行 ?! cors origin allow to all 行不行 ?! 被逼急了,别说是狗,就算是猪也照样翻墙给你看。 本来 web service 的规划是用 OpenLayers/CartoDB 或其他工具在前端套卫星影像, 这样的好处是只要按照以下的格式去要图, https://gibs.earthdata.nasa.gov/wmts/epsg{EPSG:Code}/best/{ProductName}/default/{Time}/{TileMatrixSet}/{ZoomLevel}/{TileRow}/{TileCol}.png
并把 ZoomLevel、TileRow、TileCol 留空如下例 https://gibs.earthdata.nasa.gov/wmts/epsg3857/best/MODIS_Terra_Aerosol/default/2014-04-09/GoogleMapsCompatible_Level6/{level}/{row}/{col}.png
如此便不需要指定完整 url, 这些工具可依照 user 的拖拉或缩放自动去捞对应的影像, 前端要做的工作就是把我给的卫星位置定为影像中心。 但後来前端想直接从 worldview 拉影像, 我们玩了一下发现 worldview 可以直接在影像上拉个框下载, 它其实是给一串网址,打开就是我们要的影像。 观察了一下 url,发现包含了各种必要资讯像是卫星、时间、影像四角座标、大小等等。 那,自己随意更改 url 的四角座标,能不能捞出影像? 发现竟然可以!太赞了!於是我跟前端立刻调整做法, 他一样送卫星跟时间的 request 过来, 我直接回传卫星在那个时间看到的影像四角座标(影像大小我自己先 hard code), 前端再拿这个资讯串成完整的 url 跟 NASA 去要影像。 後来实在太累就跑去主办单位准备的房间躺在懒骨头上睡觉, 而就在这段时间 crowdsourcing 平台竟然默默完成了! 是一个手机 app,点图就可以录下这张图的叙述并上传,太强了! 负责硬体的人也默默做了像下图这样的一个东西出来。 晚上看荷兰人一直在切竹筷,原来要做这个。 竹筷下面有放一个泡绵,压下去可以感觉到它的弹性。 每根竹筷的高度代表一个 pixel value,这样就可以用摸的感觉一张图。 看起来不太起眼,但摸起来感觉挺不错的。 事实上就是因为这个装置,活动结束後某个单位有来跟我们谈, 说可以给我们一些资金,希望我们可以让它的完成度更高一点。 隔天早上10点评审开始做初选,中午12点前必须结束工作。 初选每组只一分半介绍,很幸运我们有获得评审青睐进入决选。 进入决选的组别轮流上台 pitch,每组四分钟简报,两分钟 Q&A。 我们 Pitch 不太顺利, 影像其实有附上声音但负责舞台的厂商不知道设定方面有什麽状况, 总之声音没出来, 而且当时我跟前端其实还没有整个串起来。 但 pitch 结束後仍持续努力,总算是在活动结束前完成。 在前端看到卫星影像时,实在是太感动了,总算是有圆满结束(同时有燃烧殆尽)的感觉 感想: 1. 每次大会公布有食物补给结果去拿发现都被扫光了。 是谁跟我说 hackathon 会提供吃不完的食物的?给我出来面对! 2. 我总算知道这种活动为什麽叫 hackathon 了。 因为在时间压力下根本无法以正常方式 coding, 只能不断地 hacking 跟 work around, hackathon 这名字实在太贴切了 XD 3. 写 code 需要高度集中。当疲劳累积到一定程度时很容易出问题, 这种情况花再多时间 coding 都是做白工。效率至上。 4. Hackathon 看的主要不是完成度而是 concept。 5. 门面很重要,包括 pitching、简报、前端。 6. 我的夥伴实在太棒了,大家都好专业,是最棒的夥伴! 能跟他们一起工作是我的荣幸。 -- 学习,是不断地知识解构再重建的一种过程 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.147.21.165
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1493737024.A.97E.html
1F:推 landlord: 好棒! 05/02 23:11
2F:推 humanfly: 感谢大大无私分享 05/02 23:58
3F:推 manaup: 食物真的很重要! 05/03 00:01
4F:推 ian90911: 推分享 05/03 00:26
5F:推 dannypsnl: 推 05/03 00:30
6F:推 supertalker: 好强 05/03 01:18
7F:推 cocoyan: 推 05/03 01:25
8F:推 revivalworld: 推 很棒的分享 05/03 01:30
9F:推 cscjp6: 推 05/03 01:44
10F:推 VictorZ: 推~ 05/03 02:15
11F:推 frank11118: 好猛推 05/03 04:01
12F:推 xiang: 很棒的分享,谢谢 05/03 07:29
13F:推 ikill123: 很棒很详细的分享 推 05/03 07:41
14F:推 AppleVv: 很神 05/03 07:45
15F:推 maxqq: 4,5 真的是重点,找到自己的 mvp 并且表达出来 05/03 07:53
16F:推 weilun911: 推 分享 05/03 07:54
17F:推 ininmm: 很棒的心得 推推 05/03 08:17
18F:推 kiawe: 强 05/03 08:55
19F:推 freedls: 好强 !! 感谢分享 05/03 08:59
20F:推 ericsk: 推强者, deploy Python 的部份应该要用 Web App on Linux 05/03 09:13
21F:推 kewang: 大推! 05/03 10:16
22F:推 rock913343: 用心给推 05/03 12:35
23F:推 Telemio: 推 太酷了 05/03 14:42
24F:推 s06yji3: 超威呀 05/03 15:29
25F:推 doomleika: 05/03 15:43
26F:推 bakedgrass: 推 05/03 16:02
27F:推 shadow0326: 推推 05/03 20:40
28F:→ shadow0326: 不过curl可以做的东西 感觉应该很容易有非shell的解? 05/03 20:41
29F:推 ray39620: 赞! 05/03 21:24
30F:→ viper9709: 感谢分享 05/03 22:50
31F:推 eve1012: 太厉害惹 感觉都好像在现场一样 05/04 19:57
32F:推 allnun: 推推! 05/05 17:30
33F:推 sabiya: 每次Hackathon都要抢食物,很累,都忘了是程式比赛,还是 05/07 13:58
34F:→ sabiya: 抢食物大赛 05/07 13:59
35F:推 LucasChen: push 06/14 17:27
36F:推 jackflu: 很棒的分享 02/05 23:13







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl 或 站内搜寻

TOP