Tiny

Tiny之Web工程构建

拟墨画扇 提交于 2020-12-08 07:47:12
友情提醒: 阅读此文需要java、Maven环境搭建技能,关于java开发环境及maven环境搭建请咨询谷哥和度娘 。 搭建TinyWeb工程环境 搭建一下TinyWeb的开发环境,是非常简单的 如果你没有下载过Tiny框架,请在命令行中输入下面的命令: mvn archetype:generate -DarchetypeGroupId=org.tinygroup -DarchetypeArtifactId=webappproject -DarchetypeVersion=0.0.13-SNAPSHOT -DgroupId=org.tinygroup -DartifactId=webhello -Dversion=1.0-SNAPSHOT 中间会让你确认一下输入是否正确,回答Y即可,运行完毕之后,就会在当前目录中生成一个webhello的目录,里面包含了tiny的web工程目录。 如果你已经在本地安装过tiny框架,那么请在命令行中简单输入下面的命令: mvn archetype:generate -DarchetypeCatalog=local 这时会显示一个菜单,如下: D:\studytiny>mvn archetype:generate -DarchetypeCatalog=local D:\studytiny>set MAVEN_OPTS= -Xms2560m

悠然乱弹:云里雾里说Tiny

人盡茶涼 提交于 2020-12-06 16:35:02
今天从杭州到重庆,登机时间晚了20分钟,又晚了20分钟,又晚了20分钟,尼玛,这和我们软件实现的进度有得一比,总是他妈的延迟、延迟再延迟。 终于登机了,可能是MH17的事情影响了我的心情,上了飞机先仔细观察了一下,嗯嗯,看到一个空姐,比较漂亮,心情好了一点;又看到一个空姐,更漂亮,心情更好了;又看到一个空姐,依然漂亮,心情舒畅多了。 往窗外看看,发现我窗外就正好是发动机,上面刷了一行字:“The power of flight”,于是我就想:The power of Tiny是啥呢?。飞机起飞了,在云里雾里穿行,我的思绪也云里雾里的乱想,想想云计算,想想软件架构,想想系统整合,想想UFO,总之乱78糟的想。再看看云,有远的,有近的,近的快速的闪过,远处的缓慢移动。而云层又分成好多层,上面好多层,下面好多层,中间也不少层。确实与在地面看云有完全不同的感觉。有的时候,在密密的云层中,有一个小的洞,从洞里可以看到后面的云层又快速闪过,别有一番景象,而我的思绪又在Tiny框架的不同层次之间来回穿行,一会儿清晰,一会模糊。 最近写得比较多,想得比较少。从杭州到重庆,大概两个小时的航程,是不错的可以来想一想的时间,于是闭着眼睛,一块一块的缕起来: Tiny平台的进展情况:仔细考虑了一下Tiny框架的进度,整体来说已经比较完善了,但是还有如下内容没有完成: 一个HTML UI展现框架

悠然乱弹:我的开源观

我的梦境 提交于 2020-11-27 04:28:56
前几天看到一朋友,在营销自己的开源产品, 有一点感触,也说说我的开源观点。 关于收入的问题, 如果期望开源能够快速给自己带来收入,这个可能绝大多数的可能是会失望的。一般来说,一个开源产品,从开始,到发展,到最后能有收入,能营收平衡,这个一个漫长及艰难的过程。如果靠这个买米买肉,估计要饿死的。 那开源不关心收入,为什么还要开源呢?我可想可能有如下可能: 1.获取精神上的满足 比如,你做了一个好东西,但是又卖不了钱,放在自己兜兜里,一点成就感也没有,拿出来开源,让大家使用使用,自己获得一下成就感,满不错的。 2.获取社会的认可 通过开源,获得相当的社会认可度,有可能东方不亮西方亮,获得更好的发展机会或工作机会,或者获得与别人合作的机会。 3.收集需求 一个人在那里做,总是有这样那样局限的,即使你是超级牛人, 通过给别人免费使用,别人给你提出这样那样的意见和建议,可以帮你快速丰富和完善产品。 4.用户测试 有时候,你做了个东东,自己也不知道到底好不好,现在有许多用户来使用,实际上也同时给你做了测试。 5.获取用户群 有时候,一个产品放在那里没有什么价值,但是随着用户群越来越大,可能就可以有盈利的潜质了。同时也是潜在用户的一种培育,免费使用的人多了,可能就有愿意掏钱获得更好的服务与产品或者定制开发的人了。 6.一种市场营销手段 本来产品做也还可以,通过开源,获得市场认可,提高知名度

33、最简单的mvc框架tiny,自动转型TinyMap

痴心易碎 提交于 2020-04-07 04:58:08
前面我说的实现一个自动转型功能的TinyMap,实现思路前面已经说过,我引用下 解决思路: 重写一个TinyMap类继承HashMap。我们实现getInt,getString等方法,调用这些方法可以对类型自动转换,当使用get方法时,其实是调用HashMap的get方法,放回object类型,代码如下: TinyMap tMap = new TinyMap(参); tMap.getInt(key); tMap.getString(key); tMap.get(key);//Ojbect 然后由前置控制器中将页面的参数转换为TinyMap类型(现在转换为HashMap),最后放入action参数中。由于action中参数为map接口,所有对原设计无影响,用户可同时使用HashMap和TinyMap的方法。 TinyMap.java package tiny; import java.util.Date; import java.util.HashMap; public class TinyMap extends HashMap<String, Object> { public TinyMap() { super(); } public TinyMap(HashMap<String, Object> map) { super(); this.putAll(map); } public

如何模仿人的学习模式来教计算机程序解数学题?

旧时模样 提交于 2020-03-01 20:26:42
周末,看关于专家系统方面的书,其中有关于规则方面的内容,忽然就想,能不能模仿人的学习方式来提升计算机程序的计算能力呢? 试想,一个小孩子,他一开始什么也不会,首先,你要告诉他什么是数字,然后告诉他什么是加、减;然后告诉他什么是乘、除,还要告诉他有乘、除要先计算乘除,然后又引入了括号说,有括号永远要先计算括号。如此,随着告诉他的技能越多,他的解题能力也就越强。 于是就想着试验一下。 第一步,教计算机学习什么是数字。 下面的正则表达式,就是告诉“孩子”,数字就是前面可能有“-”号,当然也可能没有,接下来连续的数字0-9,组成的数字,后面可能还会有小数点开始加一堆0-9的数字,当然没有也没有关系。如此,它就算懂得认数字了。 public final class MathNumber { private MathNumber() { } public static String numberPattern = "[-]?[0-9]+([.][0-9]*)?"; public static Pattern pattern = Pattern.compile(numberPattern); public static Matcher match(String string) { Matcher match = pattern.matcher(string); if (match.find())

在Linux下搭建Tiny开发环境

混江龙づ霸主 提交于 2020-01-08 10:20:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 有一朋友在Linux下编译Tiny时出错了,偶在Windows下编译是OK的,但是说明不了问题。因此就想着搭建一个Linux下的编译环境进行验证,实际搭建过程碰到了一些问题--主要是NTLM ISA代理服务器的问题。由于整个过程比较复杂,因此就写此文志之,有需要的朋友也正好用一下。 Step 1:搭建Linux环境 考虑到fedora各方面不错,本人选用了fedora,在vSphere中创建一个虚拟机,一会 就装完了,没有啥好说的。 Step 2:由于经常要从windows通过ssh连接或上传文件,因此设置自动启用ssh systemctl enable sshd.service Step3 : 安装JDK,并配置环境变量 Tiny框架需要jdk1.5及jdk1.6两个jdk,考虑到如果安装高版本的Web Server,因此也安装了jdk1.7 JDK有bin和rpm两种格式 bin格式的通过chmod +x xxxx.bin增加执行权限,然后./xxxx.bin来执行安装 rpm格式的,需要通过rpm命令进行安装,简单的就是rpm -i xxxx.rpm 环境变量的设置,如果是所有用户起作用,就配置在/etc/profile中,如果是只有当前用户起作用,就是.bash_profile,如果是自己玩玩的

聊聊视图层切面实现方案

我的未来我决定 提交于 2020-01-07 07:20:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前面发过一篇 《谈谈应用层切面设计》 , @HulkZ 说看了好几遍也没看懂,然后我又拉他到小黑屋面壁思过了好几次;也有人关心个性与扩展性如何得到平衡;也有人说,悠然就会扯淡,如何实现呢?那么今天继续来扯扯淡看看如何实现。 需求由来 在页面的某一个固定区域内,根据配置动态的增加新的功能。 新增功能元素可以增量添加,不影响原有功能,无时序问题。 支持模块化,自动加载配置。 可以自定义功能元素展现顺序。 满足各种功能模块的数据调用。 ##实现思路 为了实现上述需求我们需要在前端页面上设计一种扩展机制,就像在页面上埋下一个“桩子”,一个个功能在需要的时候就往里放,界面上就加载这些功能;当不需要的时候,从里面拿出来,当然需要做到各个功能模块是高内聚低耦合。 从平台的角度上来说就是可以通过配置的方式往某个扩展点不断的添加新内容。而这个扩展点里的内容是有由各个功能模块组合而成,在加载显示的时候根据配置显示的顺序而加载。各个功能模块上高内聚,页面风格各自保持一致。 扩展点的配置可以放到XML文件中,各个功能模块有自己的配置文件,在框架启动过程中自动整合加载相关的配置文件,从而实现自动装配,同时也实现了增量添加功能模块。 在扩展点的调用要做到输入参数的统一调度,可以把公用的参数提到接口上,同时也要兼顾一些功能点的额外需求

基于ANTLR语法树编写解释引擎最佳实践

你说的曾经没有我的故事 提交于 2019-12-23 02:31:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Tiny模板引擎的实现方式原来是采用的编译方式,最近发生了一些问题,因此我觉得有必要把编译方式调整为解释方式,为此就开始了此次实现活动。 编译方式存在的问题 当时采用编译方式,主要是考虑到编译方式在运行时不必再去遍历语法树,因此就采用了编译方式。但是在实际应用当中,出现了如下问题: 文件路径冲突的问题 由于采用的是编译方式,这个时候就存在在一个选择,即:Java源代码落地或不落地的选择。如果Java文件不落地,则在有问题的时候,如果想要进行代码调试(虽然这种场景并不多见),那么就没有源代码可供调试。如果Java代码落地,则会存在一个问题,那就是资源文件在磁盘文件中产生冲突的问题。 同样的问题对于class文件也存在,如果不落地,那么每次应用重启动的时候,都要重新编译这些文件以产生class文件;如果落地,则也会产生冲突的问题。 当然,Tiny模板引擎通过增加一个配置项,解决了这个冲突的问题,但是由于增加了一个配置项,从客观上增加了维护人员的工作量,也容易造成当维护人员不了解这里面的道道,忘记设置从而导致在一台服务器中部署多个Tiny应用时多个应用中的模板文件生成的java文件和class文件的冲突,从而导致出现问题。 PermSize内存占用问题 采用编译方式的时候,由于每个模板文件都要生成一个类

TinySpider实战之-Visual Paradigm教学相关文档下载

☆樱花仙子☆ 提交于 2019-12-19 19:16:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Visual Paradigm 是一个非常棒的UML绘图工具,需要对它了解的,可以直接看官网,在此不做更多介绍,最近要使用它来做一些设计,它有非常完备的在线 教学 ,写得非常不错。这个时候问题来了,这些教学非常多,而且如果所有人都访问外网的话及学习效率都比较低。通过观察,发现里面的所有文章都有PDF可以下载,而且里面的示例也可以下载,呵呵,这就好办了,做个程序把它抓下来不就解决了?于是把此问题交给 HulkZ 同学去干了, HulkZ 同学花了半天时间交工,我看了下,发现虽然局部有优化的地方,但是总体还是可以的,于是就写这篇文章做个说明。 注:HulkZ同学还没有大学毕业,正在大学4年级学习。 第一步:教学首页的处理 public class VisualParadigmMain { public static void main(String[] args) throws Exception { Spider spider = new SpiderImpl("UTF-8"); Watcher watcher = new WatcherImpl(); watcher.addProcessor(new VisualParadigmMainProcessor()); QuickNameFilter<HtmlNode

用TinySpider进行网页抓取实例

坚强是说给别人听的谎言 提交于 2019-12-19 18:53:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 非常感谢@李少龙 的提醒 本例中用到的maven坐标变化如下: <dependency> <groupId>org.tinygroup</groupId> <artifactId>org.tinygroup.spider</artifactId> <version>0.1.0-SNAPSHOT</version> </dependency> 在百度中搜索笑话,看到这么一个网站:http://www.jokeji.cn/,点进去看看,里面的内容比较简单,也比较有趣,呵呵,就它了,我们今天的示例就是如何利用TinySpider来进行网页抓取。 示例1:获取某个分类下的笑话列表 首先在笑话分类中看到个爆笑男女,呵呵,先拿它小试一下,看看是否有效果。 首先编写一个main方法,内容如下: public class JokejiTest { public static void main(String[] args) { Spider spider = new SpiderImpl("GBK"); Watcher watcher = new WatcherImpl(); watcher.addProcessor(new PrintJokejiProcessor()); QuickNameFilter<HtmlNode>