2015年8月26日 星期三
2015年8月14日 星期五
想學 PLC 卻苦於沒有 PLC 可以練習
站長 1x 年前在學校學 PLC 時,只有古老的程式書寫器可用,對於 PLC 的執行也只能憑猜測跟想像,當時站長的老師還很臭屁說市面上的唯一中文書是他寫的。如今發展牛步的工控界終於有了 PLC 模擬軟體可用,但是介紹的資料很少,如此好用的東西不推廣豈不可惜?
1. 安裝軟體
1.1 安裝 GX Developer
(1) 到工控人家園下載 GX developer v8.5 英文版(2) 執行 \GX Developer-8.50C-E\EnvMEL\setup.exe 安裝軟體(3) 從 Mitsubishi 官方網站下載升級檔 SW8D5C-GPPW-E(4) 安裝升級檔 \sw8d5c-gppw-e_107m\EnvMEL\setup.exe1.2 安裝 GX Simulator
(1) 到工控人家園下載 Gx simulator v7.16 英文版(2) 執行 \GX_SimulatorV7.16-E\EN\EnvMEL\setup.exe 安裝軟體(3) 從 Mitsubishi 官方網站下載升級檔 SW7D5C-LLT-E (注意!沒有安裝升級檔 Windows7 64bit 將無法使用)(4) 安裝升級檔 \sw7d5c-llt-e_27d\EnvMEL\setup.exe
2. 教學範例
下圖參考自 PLC 可程式順序控制電路 1-2-18 頁:您會不會覺得它的時序圖有些怪怪的?因為大部分的 PLC 的執行方式如下:因此,上圖中 block 2 的執行結果對 block 1 的影響(Y10)應該會遞延至下一次掃瞄,現在我們就用 GX Simulator 來驗證這件事。首先我們在 GX Developer 內排好階梯圖:執行 GX Simulator:確認 GX Simulator 在執行狀態:執行 Timing Chart Display:回到 GX Developer,變更 X0 進行測試(注意 X0 的變化):回到 Timing Chart Display,停止 Monitor,接著觀察時序,如同之前我們猜測的結果,Y10 的變化遞延到了下一次掃瞄接著我們重新安排 block 1 與 block 2 的順序,看看結果有什麼不一樣:這次我們得到了跟書本上一樣的時序。如何?是不是很有趣呢?希望這篇文章對您有幫助 :)
2015年8月7日 星期五
2015年8月6日 星期四
2015年8月5日 星期三
深入认识Tigase XMPP Server(上)
深入认识Tigase XMPP Server(上)
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
本文的目的是深入认识Tigase XMPP Server的特性。
1、Tigase HTTP API
实现XMPP和HTTP之间的桥梁,可通过REST调用实现对Tigase安装的管理和维护,可通过脚本API在运行时进行扩展。
使用HTTP API组件,可以:
1)下载Tigase XMPP服务器运行时的统计,它包含了1000种不同的性能度量。可以做到轻松、快速的监控和早期预警等功能。
2)通过REST API管理Tigase XMPP服务器,实现Tigase服务器与第三方维护、管理系统的集成。
3)灵活的脚本框架,可以在运行时添加管理任务,可以在扩展管理和维护功能时无需重启服务。
4)灵活的HTTP API框架,可以添加更多的服务并托管到XMPP引擎上。
2、Tigase XMPP Server
1)下载Tigase XMPP服务器运行时的统计,它包含了1000种不同的性能度量。可以做到轻松、快速的监控和早期预警等功能。
2)通过REST API管理Tigase XMPP服务器,实现Tigase服务器与第三方维护、管理系统的集成。
3)灵活的脚本框架,可以在运行时添加管理任务,可以在扩展管理和维护功能时无需重启服务。
4)灵活的HTTP API框架,可以添加更多的服务并托管到XMPP引擎上。
2、Tigase XMPP Server
全球大约有1亿的设备连接到Tigase服务器上,全球大约有1100台服务器部署运行着Tigase服务器。
业界有很多优秀的开源XMPP服务器,比如eJabberd、Openfire、Jabberd2、Prosody,还有一些优秀的商业XMPP服务器,比如lsode、Jabber XCP等。在XMPP.ORG网站上可以看到完整的列表。
Tigase XMPP服务器是相当独特的,它完全支持最新的规范(如RFC6120-XMPP CORE、RFC6121-XMPP IM和其它扩展)。
1)高度优化的。主二进制文件小于1MB,可运行于10MB内存的设备上。
2)高度模块化。每个部件或组件都可以通过配置加载或替代。
3)非常灵活。集成到系统中很方便,支持开箱即用的集群,无需寻找附加软件或扩展库。
4)为低、中、高档服务器而设计。还在Amazon的EC2云上广泛测试过。
5)良好的测试。有专门的工具来运行自动化测试,还可以手动运行兼容性测试,以及大量的负载测试。所有的测试结果都是公开的,所有测试使用的工具和配置细节都是公开的。
6)支持脚本。支持Groovy、Python、Ruby、Scala等脚本语言编写扩展。
7)易于监控。可以通过HTTP、SNMP、JMX、XMPP等方式监控服务器。
8)支持SSL。Tigase从设计上就保证了安全,保护用户的隐私。API不允许从一用户访问另一用户的数据,在服务器端实现了强隔离。
3、Tigase ACS
1)高度优化的。主二进制文件小于1MB,可运行于10MB内存的设备上。
2)高度模块化。每个部件或组件都可以通过配置加载或替代。
3)非常灵活。集成到系统中很方便,支持开箱即用的集群,无需寻找附加软件或扩展库。
4)为低、中、高档服务器而设计。还在Amazon的EC2云上广泛测试过。
5)良好的测试。有专门的工具来运行自动化测试,还可以手动运行兼容性测试,以及大量的负载测试。所有的测试结果都是公开的,所有测试使用的工具和配置细节都是公开的。
6)支持脚本。支持Groovy、Python、Ruby、Scala等脚本语言编写扩展。
7)易于监控。可以通过HTTP、SNMP、JMX、XMPP等方式监控服务器。
8)支持SSL。Tigase从设计上就保证了安全,保护用户的隐私。API不允许从一用户访问另一用户的数据,在服务器端实现了强隔离。
3、Tigase ACS
Tigase单个安装(One Installation)可以支撑1400万在线用户;单个安装美妙可以处理50万条消息;单个安装可以实现40台服务器集群。即Tigase ACS。
Tigase ACS是Tigase XMPP服务器的商业级的集群实现。它专注于某些目标,如联系人列表超过10个,以及大规模XMPP系统工作在集群模式:
1)在安装时解决网络流量的问题
2)允许扩展到上百万的在线用户或设备
3)允许把负载分配到多种机器上
4)实现系统的高可用,预防服务的中断
5)支持超大群聊
6)提供消息推送服务
1)在安装时解决网络流量的问题
2)允许扩展到上百万的在线用户或设备
3)允许把负载分配到多种机器上
4)实现系统的高可用,预防服务的中断
5)支持超大群聊
6)提供消息推送服务
使用ACS可以达到:
1)降低集群节点间的网络流量10倍以上
2)减少CPU利用率至少5倍
3)在高负载情况下也能提供可靠服务
4)支持大量的连接
在设计上可处理500万以上的在线用户。我们测试过产品状态,支持150万在线用户。
5)支持多服务器
设计上可以在50台以上服务器上有效工作。测试过10个集群节点,产品系统运行在40台机器的情况。
6)部署极其简单
只需修改一点配置,数据库层不变。
4、Tigase发布订阅(PubSub)
1)降低集群节点间的网络流量10倍以上
2)减少CPU利用率至少5倍
3)在高负载情况下也能提供可靠服务
4)支持大量的连接
在设计上可处理500万以上的在线用户。我们测试过产品状态,支持150万在线用户。
5)支持多服务器
设计上可以在50台以上服务器上有效工作。测试过10个集群节点,产品系统运行在40台机器的情况。
6)部署极其简单
只需修改一点配置,数据库层不变。
4、Tigase发布订阅(PubSub)
Tigase支持完整的发布/订阅(PubSub)扩展规范。可以把消息推送到上百万的频道中,每个频道可以有上百万的订阅用户。集群模式下提供了近乎线性的可扩展性和负载分配。
发布订阅扩展允许你创建频道供用户订阅,你可以把内容推送到频道并发布。然后全部内容或者只是更新的内容会被发送给所有的订阅者。这种基于角色的系统,与群聊类似,但订阅者不必在线,离线也能把消息推送给用户(只要用户一上线就能收到)。
发布订阅功能可以做什么?
1)可以根据兴趣分组内容,如体育、科学、天气、新闻等,并把内容推送给感兴趣的人。
2)可以用于灾害预警,居民可以根据地理位置进行分组。
3)可以提供基于位置的服务。
4)业务流程可以使用此方式来发送警告。
1)可以根据兴趣分组内容,如体育、科学、天气、新闻等,并把内容推送给感兴趣的人。
2)可以用于灾害预警,居民可以根据地理位置进行分组。
3)可以提供基于位置的服务。
4)业务流程可以使用此方式来发送警告。
Tigase的发布订阅可以提供:
1)交付近乎实时的通知给订阅频道的用户
2)基于角色的订阅系统,决定哪些用户只能接收/读取内容,哪些用户可以发布内容到频道,以及频道级管理员、全局管理员。
3)自定义内容和通知元数据可以很好地匹配各种需求。
4)灵活的基于用户的交付系统,可以决定是否只把通知交付给在线订阅的用户;是否把通知交付给所有订阅的用户;还可以指定通知的过期时间,以及其他很多选项。
5)支持数百万的发布订阅频道交付通知给订阅者。
6)发布订阅频道支持上百万的订阅者。
5、消息归档(Message Archiving)
1)交付近乎实时的通知给订阅频道的用户
2)基于角色的订阅系统,决定哪些用户只能接收/读取内容,哪些用户可以发布内容到频道,以及频道级管理员、全局管理员。
3)自定义内容和通知元数据可以很好地匹配各种需求。
4)灵活的基于用户的交付系统,可以决定是否只把通知交付给在线订阅的用户;是否把通知交付给所有订阅的用户;还可以指定通知的过期时间,以及其他很多选项。
5)支持数百万的发布订阅频道交付通知给订阅者。
6)发布订阅频道支持上百万的订阅者。
5、消息归档(Message Archiving)
Tigase提供了对消息归档的完整支持(XEP-0136扩展),支持数据库分片(开箱即用),还能作为外部组建部署到多种服务器上。
用户往往希望保存聊天记录以便以后检索,基本上目前大多数聊天客户端都在本地保存了聊天记录,但是,用户往往不止一个设备,用户希望聊天记录在每个设备上都能查到。那么这些聊天记录如何在各种设备的客户端之间进行同步呢?
最佳的解决方法就是把聊天记录存储在服务器端,并运行用户的所有设备都能访问聊天历史记录。消息归档组件允许把用户的聊天历史记录存储到服务器的单个库中,并能按需搜索。Tigase服务器提供了对消息归档扩展的完整支持。对终端用户而言,他的工作完全透明,自动存储消息。
消息归档提供了聊天文档的大量特征:
1)可以在任意时间打开/关闭聊天记录
2)支持OTR(Off-The-Record,即聊后即焚)聊天
3)自动把群聊分到不同线程以便逻辑区分不同的对话
4)根据不同的条件,可以灵活地检索聊天历史记录
5)管理员可强制查看所有用户的聊天记录,而不管用户的设置
6)支持开箱即用的数据库分配,允许数据和负载进行分配
6、JaXMPP库
1)可以在任意时间打开/关闭聊天记录
2)支持OTR(Off-The-Record,即聊后即焚)聊天
3)自动把群聊分到不同线程以便逻辑区分不同的对话
4)根据不同的条件,可以灵活地检索聊天历史记录
5)管理员可强制查看所有用户的聊天记录,而不管用户的设置
6)支持开箱即用的数据库分配,允许数据和负载进行分配
6、JaXMPP库
提供Android移动设备、GWT Web客户端、独立的Java应用程序等库,完全支持XMPP/Jabber规范及其所有主要的扩展。
JaXMPP代表Java XMPP,但它不仅是Java库,它还兼容GWT,因此可以用于开发Web客户端,它还兼容Android Java,因此可以用于开发带XMPP支持的Android移动应用,以及常规的Java应用程序。
此客户端库的功能完整,而且代码开源并免费。
JaXMPP库网站:
https://projects.tigase.org/projects/jaxmpp2
JaXMPP库文档:
https://projects.tigase.org/projects/jaxmpp2/wiki
JaXMPP库网站:
https://projects.tigase.org/projects/jaxmpp2
JaXMPP库文档:
https://projects.tigase.org/projects/jaxmpp2/wiki
7、Web客户端
全功能的Web客户端,支持基本的聊天、MUC、发布/订阅和许多扩展管理接口,通过CORS,经BOSH或WebSocket连接到任意XMPP服务器实现跨站点支持。
CORS:Cross-Origin Resource Sharing,跨域资源共享
功能非常全,支持:
1)完整的XMPP规范
2)Web优化(更快的重连和聊天状态恢复)
3)消息归档支持(从服务器查看历史聊天记录)
4)良好的MUC群聊协议(访问Web浏览器时可以群聊)
5)发布订阅(直接从Web浏览器发布消息到发布订阅节点)
1)完整的XMPP规范
2)Web优化(更快的重连和聊天状态恢复)
3)消息归档支持(从服务器查看历史聊天记录)
4)良好的MUC群聊协议(访问Web浏览器时可以群聊)
5)发布订阅(直接从Web浏览器发布消息到发布订阅节点)
挑战XMPP(一)XEP
挑战XMPP(一)XEP
Published by 江南的悲伤 on 一月 18, 2015
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
中文名
可扩展通讯和表示协议
外文名
Extensible Messaging and Presence Protocol
中文名
可扩展通讯和表示协议
外文名
Extensible Messaging and Presence Protocol
Libraries
下面是xmpp协议在各个语言和平台上现有的库,目前在移动端,安卓和ios最主流也是支持最强大的框架分别是asmack和xmppframework。
下面是xmpp协议在各个语言和平台上现有的库,目前在移动端,安卓和ios最主流也是支持最强大的框架分别是asmack和xmppframework。
Name | Language(s) | License | Details | Latest Release |
---|---|---|---|---|
agsXMPP SDK | C# / .NET / Mono | GPL / commercial | ag-software.net | |
AnyEvent::XMPP | Perl | Artistic | ta-sa.org | 2012-06-14 |
as3xmpp | Flash / ActionScript | GPLv2 | code.google.com | 2909-08-25 |
asmack | Java (Android) | Apache2 | github.com | 2013-05-29 |
AXMPP | Ada | BSD | forge.ada-ru.org | 2011-03-07 |
Babbler | Java | MIT | babbler-xmpp.blogspot.de | |
Babylon | Ruby | MIT | github.com | 2009-03-31 |
Blather | Ruby | MIT | adhearsion.com | 2013-08-26 |
cl-xmpp | Lisp | MIT | common-lisp.net | 2008-07-12 |
Coversant SoapBox SDK Studio | C# / .NET / Mono / C++ | Commercial | coversant.com | unknown |
dojox.xmpp | JavaScript | Website | ||
Echomine Feridian | Java | Website | ||
Eiffel | PHP | Website | ||
emite | Java | github.com | ||
exmpp | Erlang | exmpp.org | ||
frabjous | JavaScript | github.com | ||
gloox | C++ | camaya.net | ||
goexmpp | Go | code.google.com | ||
headstock | Python | Website | ||
hsxmpp | Haskell | חנוך.se | ||
hxmpp | haXe | hxmpp.disktree.net | ||
iksemel | C | code.google.com | ||
IP*Works Internet Toolkit | ActiveX, C++, C#, .NET, Mono, Delphi, Java | Website | ||
Iris | C++ | Website | ||
jabber-net | C# / .NET / Mono | code.google.com | ||
jabber.py | Python | Website | ||
JabberLib | Tcl | coccinella.im | ||
Jabber Stream Objects (JSO) | Java | Website | ||
JAXL | PHP | code.google.com | ||
jQuery-XMPP-plugin | JavaScript | github.com | ||
Jreen | C++/Qt | qutim.org | ||
JSJaC | JavaScript | jwchat.org | ||
libstrophe | C | strophe.im | ||
Lightr | PHP | code.google.com | ||
Loudmouth | C | Website | ||
Loudmouth | Ruby | Website | ||
MatriX | C# / .NET / Mono | Commercial | ag-software.net | 2014-01-22 |
Net::XMPP | Perl | Website | ||
node-xmpp | JavaScript | github.com | ||
oajabber | C++ | Website | ||
Pontarius XMPP | Haskell | BSD | github.com | |
pyxmpp | Python | Website | ||
QXmpp | C++ | code.google.com | ||
seesmic-as3-xmpp | Flash / ActionScript | code.google.com | ||
SleekXMPP | Python | github.com | ||
Smack | Java | igniterealtime.org | ||
stanza.io | JavaScript | github.com | ||
strophe.js | JavaScript | Website | ||
StropheCappuccino | Objective-J | github.com | ||
Swiften | C++ | swift.im | ||
Tinder | Java | igniterealtime.org | ||
txmpp | C++ | github.com | ||
Twisted Words | Python | Website | ||
Verse | Lua | Website | ||
XIFF | Flash / ActionScript | igniterealtime.org | ||
xmpp-psn | Python | code.google.com | ||
jaxmpp2 | Java / Android / Google Web Toolkit | Website | ||
xmpp4js | JavaScript | Website | ||
XMPP4R | Ruby | Website | ||
xmpp4r-simple | Ruby | code.google.com | ||
xmppframework | Objective C | github.com | ||
xmpphp | PHP | code.google.com | ||
xmppy | Python | Website | ||
XMPP-FTW | JavaScript | github.com | ||
Z-XMPP | JavaScript | ivan.vucica.net |
重新學習GAE/J 第二天
GWT的模組名稱就像 com.gb.Guestbook
src下com.gb叫做套件,裡面有gwt.xml檔案
另外是EntryPoint的概念,就像模組下的功能頁
GWT中的html稱為主頁,負責載入模組編譯出來的js
書中將以留言板進行示範
資料永久性的問題因為要跟資料庫結合,容後再學
留言板的模組為Guestbook,套件為com.gb
EntryPoint為AddPost
這次建立新專案不勾選產生範例程式
專案右鍵新增模組,名稱就用剛剛規範的
自動生成guestbook.gwt.xml及com.gb.client
在xml的module加一個EntryPoint AddPost (這好像會經由下面步驟自己產生)
另外實作EntryPoint,一樣,右鍵新增
此時可以用視覺元件工具來設計 GWT Designer
EntryPoint右鍵open with
如果切換有問題,先回source頁籤,onModuleLoad加入
src下com.gb叫做套件,裡面有gwt.xml檔案
另外是EntryPoint的概念,就像模組下的功能頁
GWT中的html稱為主頁,負責載入模組編譯出來的js
書中將以留言板進行示範
資料永久性的問題因為要跟資料庫結合,容後再學
留言板的模組為Guestbook,套件為com.gb
EntryPoint為AddPost
這次建立新專案不勾選產生範例程式
專案右鍵新增模組,名稱就用剛剛規範的
自動生成guestbook.gwt.xml及com.gb.client
在xml的module加一個EntryPoint AddPost (這好像會經由下面步驟自己產生)
另外實作EntryPoint,一樣,右鍵新增
此時可以用視覺元件工具來設計 GWT Designer
EntryPoint右鍵open with
如果切換有問題,先回source頁籤,onModuleLoad加入
RootPanel rootPanel = RootPanel.get();
還是有問題,再拜谷歌,這裏有解
http://stackoverflow.com/questions/24208710/gwt-designer-eclipse
照著做果然解決了,不過做完後eclipse要重開
接下來就拖拉元件
GWT Designer是自動layout的
畫完後就使用gwt compile,讓他變成js
之後要做一個html當js的容器
這裏所有新增的檔案都要用gwt裡面的選項產生
在html的模板裡面填好js的連結即可,須填全路徑
然後就可以執行了,上傳測試也行
接下來5-8章正式進入gwt的核心部分,包括視覺元件及相關事件、UiBinder、RPC(用來實作AJAX)及資料儲存
先來看資料儲存
有另外一本書叫做雲端技術整合開發,他第十章以後也是講GAE,先來看看
還是有問題,再拜谷歌,這裏有解
http://stackoverflow.com/questions/24208710/gwt-designer-eclipse
照著做果然解決了,不過做完後eclipse要重開
接下來就拖拉元件
GWT Designer是自動layout的
畫完後就使用gwt compile,讓他變成js
之後要做一個html當js的容器
這裏所有新增的檔案都要用gwt裡面的選項產生
在html的模板裡面填好js的連結即可,須填全路徑
然後就可以執行了,上傳測試也行
接下來5-8章正式進入gwt的核心部分,包括視覺元件及相關事件、UiBinder、RPC(用來實作AJAX)及資料儲存
先來看資料儲存
有另外一本書叫做雲端技術整合開發,他第十章以後也是講GAE,先來看看
2015年8月4日 星期二
重新學習GAE/J
好吧,Eclipse已經有了Vaadin的環境,現在正式來搞GAE/J
從這邊開始
https://developers.google.com/eclipse/docs/getting_started
就全部勾選安裝吧!
需要一點時間,喝茶去!
裝完重新打開又要安裝Android SDK,繼續吧!
又要安裝Build工具,繼續吧!
以上的步驟真多,其實,最快的方式是直接打開書附光碟的環境。
在安裝的同時,來看看GAE的申請吧!
書上說,先到這邊申請
https://appengine.google.com/
原來我之前申請過,只要登入google之後,就會直接跳到我的
GAE管理介面,
現在來申請一個新的站台,
這邊可以看到所有的專案
https://console.developers.google.com/project
今天是150804,就用這個當專案名,
google會自動幫我產生專案ID,
根據書上,這個ID需要記下來,用來填入
appengine-web.xml中的application標籤
這時都下載完了,來新增一個GAE專案,
填入專案名跟package名,我是直接打com.加上專案名
並且勾選自動產生範例程式碼
所以在專案管理員產生了我的專案,下面有src, test, war三個資料夾
網頁相關的檔案會放在這裡,也就是經過GWT編譯過的東西
跟著書上做,開啟run as或是debug as,自動編譯,開啟連結一直鬼打牆要我安裝
plugin
GWT Development Mode will no longer be available for Chrome sometime in 2014, so we improved alternate ways of debugging. There are improvements to Super Dev Mode, asserts, console logging, and error messages.
原來要開啟super dev模式,再來一次,done,但是classic dev模式好像不管用
接下來對src裡面的檔案分析
log是日誌檔,META-INF裡面的跟JDO有關,server包裡面是伺服器類別,client裡面是前端類別,
GAE並不限制只能跑GWT產生的東西,傳統Servlet跟JSP都可以跑,來試試
Servlet
需要繼承HttpServlet,改寫doGet及doPost,建立網址與類別對應
展開專案src,在模組定義檔新增一個class,在Name填入Servlet名稱,superclass用選的,旁邊的Browse點下去,過濾器用httpservlet,有3個結果,挑最上面那個
自動產生一個類別,改寫get和do方法
將游標放到類別的程式碼中(兩個大括弧中間),這時候右鍵有選單可以用,Source -> Override啥的,進去就可以看到一堆方法,來改吧!
點完doget就會自動加入方法的碼,書中說要把super那一行刪除(windows快速鍵Ctrl+D,mac就用command+d),填入自己的碼
用resp.getWriter傳回給一個新定義的PrintWriter,然後用print方法輸出資料
接下來建立對應,在war裡面找到web.xml,其中的web-app標籤就是要加東西的地方,
要新增新的servlet與mapping,可以複製預設的加以修改
不外就是修改servlet-name, servlet-class, url-pattern
這種對應方式好像MVC框架都會這樣做
接下來試試JSP
因為網頁資料全部都用print的話,在class裡面寫會很累,所以,把Java code放到html裡面就是JSP
書上本來說要把jdk裝起來,還有把jsp改成utf-8編碼,不過我的環境都已經是了。
在war裡面新增一個jsp檔案,在body裡面放一個form及相關的java code,這個改動的影響是即時的,所以不需要重新編譯(因為編譯只是生成javascript,用jsp應該是及時編譯)
接下來先跳到12章,部署的部分,通常整個專案完成後才需要真正部署到雲上,開發時多在本地編譯與測試
回到剛剛的web.xml,除了servlet的mapping外,也可以設定security-constraint與filer,建立安全限制與過濾機制,
另外可以新增一個dos.xml,建立blacklistentries,用以阻擋特定IP的流量
至於真正跟部署有關的是appengine-web.xml,把前面申請的專案ID填入
application這個標籤,version是指部署時上傳的專案版本,此值可任意設定,以進行多版本管理,static-files是指要設定為靜態的檔案類型,如圖檔等,這些內容會放在cache等地方,以加快速度,**代表該目錄所有子資料夾,另外啟用ssl的標籤是ssl-enabled,啟用session是session-enabled。
設定好需要的標籤後,專案右鍵Google -> Deploy to App Engine,接著授權eclipse登入,點擊部署,等待GWT慢慢的編譯吧!
上傳成功,管理介面也有,首頁也打得開,但是有一點怪怪,點擊按鈕出錯,jsp, servlet跑不出來
下班,明天再處理
今天來處理上傳不能執行的問題,拜谷歌大神後,不太好找,可能是環境太特殊,最後看管理介面,感覺是版本的問題,因為出現
java.lang.UnsupportedClassVersionError: org/apache/jsp/NewFile_jsp : Unsupported major.minor version 52.0
谷歌說,52.0是JDK8之後的版本,於是把JDK7裝起來修改設定,開一個新專案,重新上傳,這樣就正常了,另外發現如果自行加jsp檔案也會不能跑,果然google限制比較多。
從這邊開始
https://developers.google.com/eclipse/docs/getting_started
就全部勾選安裝吧!
需要一點時間,喝茶去!
裝完重新打開又要安裝Android SDK,繼續吧!
又要安裝Build工具,繼續吧!
以上的步驟真多,其實,最快的方式是直接打開書附光碟的環境。
在安裝的同時,來看看GAE的申請吧!
書上說,先到這邊申請
https://appengine.google.com/
原來我之前申請過,只要登入google之後,就會直接跳到我的
GAE管理介面,
現在來申請一個新的站台,
這邊可以看到所有的專案
https://console.developers.google.com/project
今天是150804,就用這個當專案名,
google會自動幫我產生專案ID,
根據書上,這個ID需要記下來,用來填入
appengine-web.xml中的application標籤
這時都下載完了,來新增一個GAE專案,
填入專案名跟package名,我是直接打com.加上專案名
並且勾選自動產生範例程式碼
所以在專案管理員產生了我的專案,下面有src, test, war三個資料夾
網頁相關的檔案會放在這裡,也就是經過GWT編譯過的東西
跟著書上做,開啟run as或是debug as,自動編譯,開啟連結一直鬼打牆要我安裝
plugin
GWT Development Mode will no longer be available for Chrome sometime in 2014, so we improved alternate ways of debugging. There are improvements to Super Dev Mode, asserts, console logging, and error messages.
原來要開啟super dev模式,再來一次,done,但是classic dev模式好像不管用
接下來對src裡面的檔案分析
log是日誌檔,META-INF裡面的跟JDO有關,server包裡面是伺服器類別,client裡面是前端類別,
GAE並不限制只能跑GWT產生的東西,傳統Servlet跟JSP都可以跑,來試試
Servlet
需要繼承HttpServlet,改寫doGet及doPost,建立網址與類別對應
展開專案src,在模組定義檔新增一個class,在Name填入Servlet名稱,superclass用選的,旁邊的Browse點下去,過濾器用httpservlet,有3個結果,挑最上面那個
自動產生一個類別,改寫get和do方法
將游標放到類別的程式碼中(兩個大括弧中間),這時候右鍵有選單可以用,Source -> Override啥的,進去就可以看到一堆方法,來改吧!
點完doget就會自動加入方法的碼,書中說要把super那一行刪除(windows快速鍵Ctrl+D,mac就用command+d),填入自己的碼
用resp.getWriter傳回給一個新定義的PrintWriter,然後用print方法輸出資料
接下來建立對應,在war裡面找到web.xml,其中的web-app標籤就是要加東西的地方,
要新增新的servlet與mapping,可以複製預設的加以修改
不外就是修改servlet-name, servlet-class, url-pattern
這種對應方式好像MVC框架都會這樣做
接下來試試JSP
因為網頁資料全部都用print的話,在class裡面寫會很累,所以,把Java code放到html裡面就是JSP
書上本來說要把jdk裝起來,還有把jsp改成utf-8編碼,不過我的環境都已經是了。
在war裡面新增一個jsp檔案,在body裡面放一個form及相關的java code,這個改動的影響是即時的,所以不需要重新編譯(因為編譯只是生成javascript,用jsp應該是及時編譯)
接下來先跳到12章,部署的部分,通常整個專案完成後才需要真正部署到雲上,開發時多在本地編譯與測試
回到剛剛的web.xml,除了servlet的mapping外,也可以設定security-constraint與filer,建立安全限制與過濾機制,
另外可以新增一個dos.xml,建立blacklistentries,用以阻擋特定IP的流量
至於真正跟部署有關的是appengine-web.xml,把前面申請的專案ID填入
application這個標籤,version是指部署時上傳的專案版本,此值可任意設定,以進行多版本管理,static-files是指要設定為靜態的檔案類型,如圖檔等,這些內容會放在cache等地方,以加快速度,**代表該目錄所有子資料夾,另外啟用ssl的標籤是ssl-enabled,啟用session是session-enabled。
設定好需要的標籤後,專案右鍵Google -> Deploy to App Engine,接著授權eclipse登入,點擊部署,等待GWT慢慢的編譯吧!
上傳成功,管理介面也有,首頁也打得開,但是有一點怪怪,點擊按鈕出錯,jsp, servlet跑不出來
下班,明天再處理
今天來處理上傳不能執行的問題,拜谷歌大神後,不太好找,可能是環境太特殊,最後看管理介面,感覺是版本的問題,因為出現
java.lang.UnsupportedClassVersionError: org/apache/jsp/NewFile_jsp : Unsupported major.minor version 52.0
谷歌說,52.0是JDK8之後的版本,於是把JDK7裝起來修改設定,開一個新專案,重新上傳,這樣就正常了,另外發現如果自行加jsp檔案也會不能跑,果然google限制比較多。
vaadin學習
vaadin應該是應該是基於GWT上的一個開發框架,
由芬蘭某公司所維護,
如果不使用特殊插件,在Apache-2.0的授權下,
均可免費使用,
我目前用的開發環境是Ecplise 4.4 JavaEE,
安裝插件比較不會出問題,
大陸人有翻譯他的電子書,Vaadin之书,
可從官網下載或線上觀看,
https://vaadin.com/book/zh/-/page/index.html,
他可以使用Tomcat作為Java伺服器,
除錯工具可以使用Firefox+Firebug的組合,
目前我是使用Google Chrome,
由芬蘭某公司所維護,
如果不使用特殊插件,在Apache-2.0的授權下,
均可免費使用,
我目前用的開發環境是Ecplise 4.4 JavaEE,
安裝插件比較不會出問題,
大陸人有翻譯他的電子書,Vaadin之书,
可從官網下載或線上觀看,
https://vaadin.com/book/zh/-/page/index.html,
他可以使用Tomcat作為Java伺服器,
除錯工具可以使用Firefox+Firebug的組合,
目前我是使用Google Chrome,
Vaadin 带有很多 JAR 库文件, 有些库文件是可选的, 有些是可以相互替代的, 具体情况取决于你开
发的是服务器端还是客户端应用程序, 取决于你是否使用了 add-on 组件, 也取决于你使用 CSS 还
是 Sass 的 theme.
Vaadin Plugin for Eclipse 依赖于 Apache IvyDE plugin, 因此在安装 Vaadin plugin之前需要手动
安装 Apache IvyDE plugin
安装 Apache IvyDE plugin
http://www.apache.org/dist/ant/ivyde/updatesite
Apache IvyDE Resolve Visualizer 是可选的, 如果选择安装它, 会导致其他一些被依赖 的插件也被安装进来.
添加 Vaadin plugin 更新站点
http://vaadin.com/eclipse.
(這裏如果最新的Eclipse會一直安裝失敗,直到我使用4.4版的就OK)
另外為了要使用行動裝置,想安裝Vaadin TouchKit
https://vaadin.com/add-ons/touchkit
The easiest way to build Java applications for iOS, Android and Windows Phone. Add support for smartphones and tablets in days instead of months with the tools you are already using.
This add-on is available under two licenses: AGPL and CVAL. If your project is compatible with AGPL, you can use the add-on for free; otherwise you must acquire a sufficient number of CVAL licenses before the 30-day trial period ends. For more info, click the license links in the summary above.
依據不同授權,可能需要付費購買,如CVAL,費用是以開發者來計算,每人590美金
我使用的安裝方式是根據電子書第20章第3.1節的方式,以 Ivy 依赖项方式安装,
将以下声明加入到 ivy.xml 文件的 dependencies 小节中
<dependency org="com.vaadin.addon"
name="vaadin-touchkit-agpl"
rev="latest.release" conf="default->default" />
其中latest.release依據目前最新的版本號,可直接到官網查詢,官網也直接給出上面的聲明,
官網有一個Parking的範例,電子書裡面有導入的步驟,但是其中一個我一直卡關,
因此在這邊給出我的處理方式,
1. 选择菜单项 File → Import
2. 选择 Maven → Check out Maven Project from SCM, 然后单击 Next 按钮.
3. 在 Eclipse 中需要使用源代码管理工具 EGit 来访问 Git 源代码库, 如果你没有安装过, 那 么需要安装它. 如果 Git 没有出现在你的 Eclipse 源代码管理工具列表中, 请点击 m2e marketplace, 选择 EGit, 然后点击 Finish.安装完毕后需要重启 Eclipse, 并重新执行前 面说的 import 步骤.
(需要先把EGit裝好)
4. 在 SCM URL 项目中, 选择 git, 并输入源代码库的 URL https://github.com/vaadin/parking-demo.
5. 点击 Finish 按钮.
6. 编译 widget set, 方法是点击 Eclipse 工具条上的 Compile Widgetset 按钮, 或者使用
Maven 运行 vaadin:compile 目标.
(在這裏我卡關了,一直出現無法編譯的錯誤,根據我的判斷,
可能導入的範例應該是Maven的,要用他的編譯方式,
參考官網的視頻第56秒左右,Vaadin TouchKit 2.0 demo,https://www.youtube.com/watch?v=8RyLkTs9tIU
最後改用另一種方式,於專案右鍵選單中,Run As -> Maven install,就會開始編譯,
之後就可以跑起來了)
2015年8月2日 星期日
change the font size of package explorer eclipse 4.4 or 4.3
On Juno and up you can adjust that font by CSS.
Lookup the files in
eclipse\plugins\org.eclipse.platform_4.2.x.y\css for your current style sheet (probably e4_default_win7.css ), and then just add the following rule:
| |||||
|
FYI:
From Eclipse Luna(4.4)
Looks like the css files are no longer in old folder:
they are moved to the new folder:
eclipse/plugins/org.eclipse.ui.themes_x.x.x.vxxxxx/css
And you must select a theme to apply it, in the menu
[Windows]==>[Prefrence]==>[General]==>[Appearance] |
訂閱:
文章 (Atom)