- 浏览: 2485748 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询

关于Jakarta 摘抄维基百科:
引用
Jakarta是Apache组织下的一套Java解决方案的开源软件的名称,它包括了很多子项目。Tomcat、Ant、Struts等等現在是Apache下的开源项目,也曾是Jakarta的关联项目。
Jakarta的名称是想把与Jakarta关系非常深的爪哇岛关联起来。编程语言Java的命名源自这个岛的名字(印尼語:Jawa、英語:Java),而城市雅加达(Jakarta)正是这个岛上的第一大城市,也是印度尼西亚的首府。
Jakarta的名称是想把与Jakarta关系非常深的爪哇岛关联起来。编程语言Java的命名源自这个岛的名字(印尼語:Jawa、英語:Java),而城市雅加达(Jakarta)正是这个岛上的第一大城市,也是印度尼西亚的首府。
Jakarta工具包可谓java开发中的必备神器, 熟悉里面各种工具类的用法, 可以让我们少重复发明一些轮子.它里面的一些commons包也成了很多开源项目的必备依赖. 比如spring, hibernate之流.
这本书讲到了Jakarta中几个比较重要的包的用法, 由于Jakarta中很多工具类的JavaDoc写的非常棒, 因此, 里面大部分工具类我们通过阅读其JavaDoc都应用的得心应手. 而这本书给我的最大体会, 就是发现了Jakarta中更多的宝贝, 而且熟悉了更多的用法. 缺点就是此书有点老了, 而Jakarta发展的太快, 书里面的很多内容在实际的工具包中都对不上号了
Commons Lang
ToStringBuilder, HashCodeBuilder, EqualsBuilder, CompareToBuilder这些东西做过java的几乎人人都知道了吧
介绍几个很少用的:
ArrayUtils.toString()
将数组用大括号括起来, 用逗号分隔输出.如果碰到null元素, 将输出unkown字符串. 如果是collection要输出, 可以先toArray()
ArrayUtils.contains()
检查数组中是否包含指定的元素, indexOf(), lastIndexOf()可以指定元素所在数组的下标
ArrayUtils.toMap()
将一个二维数组转换成一个map对象.
FastDateFormat
可以线程安全的实现对日期进行格式化.
DateUtils.round()
可以将日期时间舍入到最近的日期, 比如DateUtils.round(new Date(), Calendar.Month);将对当前日期中月后面的内容舍弃.DateUtils.SEMI_MONTH, 将日期舍入到一个月的中间和开头.
DateUtils.truncate()
则类似Math.floor()对指定域(如Calendar.MONTH)之后的内容进行截取处理.
Validate
用来对方法参数进行验证, 当遇到无效的参数时, 将抛出IllegalArgumentException异常
StopWatch
用来度量某段代码的执行耗时, 和现实中的秒表有一样的功能, 你可以启动, 停止, 展厅, 恢复计时, 重置以及拆分它. 其中split()/unsplit()方法类似于秒表中的分圈计时.
文本处理
StringUtils.abbreviate()
用于将指定的字符串进行缩减处理, 而且还可以从指定的位置开始缩减.
比如StringUtils.abbreviate("this is a test", 10) 得到的是"this is..."字符串
StringUtils.substringBetween()
返回被两个指定参数包围起来的字符串内容. 比如将<html>标签包围的内容返回, StringUtils.substringBetween(htmlString, "<html>", "</html>");
StirngUitls.strip()
可以将字符串中首尾含有指定的内容清除之
比如
StirngUtils.strip("-------****------ABCDE!-------*******-----------", "-*")得到的是"ABCDE!"
StringUtils.chomp()
取出字符串末尾的回车换行符, 当然可以指定删除最后的那个字符
String stars = StringUtils.repeat("*", 40); String center = StringUtils.center("TEST", 40, "*"); String heading = StringUtils.join(new Object(){stars, center, stars}, "\n");
得到如下字符串
引用
*****************************
************TEST************
*****************************
************TEST************
*****************************
StringUtils.countMatches()
返回一段文本在另一段字符串中出现的次数.
StringUtils.deference()
输出两个字符串之间的差别, indexOfDeference()指出两个字符串之间开始出现差别的位置, getLevenshteinDistance(), 指出从一个字符串转换到另一个字符串需要执行的插入, 删除和替换的次数.
JavaBean
PropertyUtils.getSimpleProperty()
通过属性名返回bean属性值
getNestedProperty()
返回嵌套属性值, 比如getNestedProperty(book, "name.firstName");
getIndexedProperty()
从数组或List型Bean属性中返回指定的下标元素, 比如getIndexedProperty(book, "chapters[1]");
getMappedProperty()
从指定map类型的bean属性中返回值, 比如getMappedProperty(apartment, "rooms(dining)");
getProperty()
可以返回任何属性, 比如 getProperty(country, "regions[0].cities(richmond).population");
BeanComparator
用来根据bean属性来排列和比较bean
比如:
Collections.sort(countryList, new BeanComparator("bean"))// 根据国家名称对国家列表进行排序
PropertyUtils.describe()
可创建一个包含bean实例中所有可读属性的map对象
BeanMap
可以将一个bean封装成一个通过Map接口来对bean属性进行访问.
DynaBean
用来在运行时动态创建一个bean.
DynaProperty[] props = new DynaProperty[] { new DynaProperty("name", String.class), }; BasicDynaClass clazz = new BasicDynaClass("book", BasicDynaClass.class, props); DynaBean bean = clazz.newInstance(); bean.set("name", "macro");
BeanUtils
以字符串的形式读取和设置bean属性.
函数对象
用来提供更高级的代码重用性和更简洁的设计, 它用来将功能逻辑从面向特性数据结构的算法中抽象并提取出来.
我们最常用的就是Comparator和Iterator.
ReverseComparator
用来将Comparator的功能反转, 比如顺序改成倒序
ComparatorChain
会把连接中的每一个Comparator进行比较, 如果当前Comparator返回值为0, 则调用下一个, 直到连接中没有其他的Comparator.
NullComparator
对null元素进行排序, 还可以控制null出现在排序的开始还是结尾, 一般NullComparator用来对其他的Comparator进行装饰.
当数组和Collection含有预定顺序关系时, 可使用FixedOrderComparator进行排序, 这种顺序关系包括一周里面星期几的顺序, 太阳系中行星的顺序, 光谱中的颜色顺序.
String[] medalOrder = new String[] {"tin", "bronze", "siliver", "gold"}; Comparator medalComparator = new FixedOrderComparator(medalOrder); Comparator beanComparator = new BeanComparator("medal", medalComparator); beanComparator.compare(medal1, medal2);
Predicates
使用Predicate用来评估某个判别式或者条件, Predicate是一种可判别其他对象并返回true或false的对象. 整个Commons Collection都用它来进行筛选, 选择以及验证工作.可以将其理解为对if条件的一种封装, 该接口的唯一方法evaluate()返回true和false.
UniquePredicate
当对象首次被evaluate时返回true, 该predicate内部维护了一个evaluate对象的HashSet对象, 如果对象已经存在其中, 将返回false. 用来从collection中不重复的获取对象.
Predicate可以用于任何场合, 比如验证用户输入, 筛选collection内容或者用于替换负责的逻辑条件
Transformer
用来将一个对象为参数, 返回一个经过转换处理后的新的对象
ChainedTransformer
用来将多个Transformer连接起来.
SwitchTransformer
实施一个依赖于某Predicate的Transformer. 他能对一个switch进行建模, 并接受三个参数, 一个Predicate数组, 一个Transformer数组, 一个默认的Transformer.两个数组是一一对应的关系, 如果Predicate都不满足则执行默认的Transformer.
Closure
用来将对某个对象的一段代码进行封装. 比如对某件商品进行打折处理, 可以将打折处理过程封装成一个Closure.
ChainedClosure
用来将多个Closure进行链接, 与Transformer不同在于, 每个Transformer处理完之后的结果传给下一个Transformer, 而Closure链传递的是同一个对象. 好像轿车通过工厂的流水线一样.
IfClosure
提供一个Predicate和两个Closure, 如果Predicate判定为true, 执行第一个Closure, 否则执行第二个.
WhileClosure
用来模拟循环处理, 它需要传递一个Predicate和一个Closure, 如果条件为true, 那么不断执行Closure, 知道条件为false为止.
ForClosure用来执行指定次数的Closure.
Collection
LoopIterator
用来重复的便利Collection, 该遍历将永不停止, 因为其HasNext()返回值永远是true, 当用while进行遍历的时候,不要忘记添加退出条件.
对于需要不停的判断一系列取值或者反复执行一组命令时, 使用LoopingIterator就非常合适. 同时它还实现了ResettableIterator接口, 在执行的过程中, 通过执行reset()方法可以跳回到Collection的起始位置.
从只有三项的List中循环取出5项
LoopingIterator itor = new LoopingIterator(list); for(int i = 0; i < 5; i++) { String element = (String)itor.next(); }
ArrayListIterator
用来遍历ArrayList中指定的部分内容.通过nextIndex()可以获取某个元素的下标.
FilterIterator
包含了一个Predicate, 如果Predicate为true则该元素将包含在迭代器中. 从来达到遍历某个Collection中合乎特定条件的元素, 或者删除不符合条件的元素.它实际上对指定Iterator的一个装饰而已.
Collections.filter()
方法用来将不符合条件的元素从Collection中移除, 因此具有破坏性.如果不想破坏原有的Collection, 可以使用CollectionUtils.select()和
CollectionsUtils.selectRejected()
创建一个含有所有符合或者不符合条件元素的新的Collection.
UniqueFilterIterator
可以在遍历Collection时跳过重复元素.
Bag
容器用来对同一个对象存储多次, 并跟踪对象有多少份拷贝.比如某个Bag包含20份A对象的拷贝, 50份B对象的拷贝. Bag有两种, 使用HashMap的HashBag, 具有更高的性能, 还有一种是TreeBag, 它需要维护对象元素加入的顺序.将以加入的顺序返回它们.
Buffer
分为两种:UnboundedFifoBuffer 无大小限制, BoundFifoBuffer 有大小限制.该容器类似JDK中的Queue, queue中的offer和peek功能与add和remove方法具有相同的功能, 唯一的区别是想Queue中添加数据遇到问题时会抛异常.
还有一种具有优先级的Buffer:PriorityBuffer, 对象会根据Comparator生成的优先级来决定是否被移除. 移除对象的逻辑类似于医院的急诊室工作流程.病情严重的病人将得到优先治疗的权利.这个与PriorityQueue.
BlockingBuffer为阻塞式Buffer.如果系统需要在某段数据就绪时进行处理的话, 就应该使用这种Buffer. 或者系统中有多个进行同时侦听流水线主键缓冲区时, 该数据结构也很管用.JDK5中也有与之对应的BlockingQueue.
MultiMap
用于给指定的键维护一组值. 当需要一个对象关联多个对象的时候, 使用MultiMap是个好主意.
BidMap
是这样一种Map实现:当键值都唯一的时候, 可以根据值来查对应的键
DualHashBidMap 把键和值存在两个HashMap中, 其中一个存key-value, 一个存value-key
CaseInsensitiveMap
key为大小写不敏感String类型的map
PredicateMap
增加了验证功能的map, 在put一个entry的时候, 如果验证显示为false的话, 将抛出IllegalArgumentException异常.
CollectionUtils.transform()
该方法接收两个参数, 用来通过Transformer, 将制定的Collection进行转换, 得到一个新的经过转换后的Collection
LRUMap
一种固定尺寸的Map, 当达到最大容量时会借助最近最少使用算法社区相应的项.
LazyMap
当根据某个键检索某个值的时候, 将通过指定Transformer, 创建该值.
Transformer t = new Transformer() { public Object transform(Object arg0) { return StringUtils.reverse((String) arg0); } }; Map names = new HashMap(); Map lazyMap = LazyMap.decorate(names, t); Object value = lazyMap.get("MacroChen"); System.out.println(value);
LazyMap的另一个应用场景是通过给定的值从数据库中检索相应的记录.用LazyMap将LRUMap进行包装是一个不错的注意.
CollectionUtils.countMatches(), cardinality()
用来统计某个对象出现的次数, countMatches()根据Predicate从指定的Collection中返回满足条件的元素数目. 而后者从collection中返回指定对象的数目.
CollectionUtils.union(), intersection(), disjunction(), subtract()
分别对两个集合进行并集, 交集, 联集和差集.
PropertiesConfiguration
对Properties的适度增强, 能直接将对应的value转换成相应的类型, 比如以逗号分割的字符串转换成List, 数字字面值转换成数字值.而不是字符串.
Commons Logging
能在运行时, 通过检测, 能调用相应的日志框架. 比如jdk自带的日志框架和Log4J等.
比如默认情况下, 下面的代码:
public class LoggingTest { static Log log = LogFactory.getLog("mylog.LogginTest"); public static void main(String[] args) { log.info(log); } }
将返回
引用
信息: org.apache.commons.logging.impl.Jdk14Logger@83cc67
当LogFactory.getInstance()被调用的时候, CommonLogging将通过检测一些系统属性和类路径中库的情况来定位和管理合适的日志框架.
所以如果将log4j加入到类路径之后输出将变成这样:
引用
log4j:WARN Please initialize the log4j system properly.
如果配置了log4j.properties, 那么输出结果可能变成:
引用
DEBUG (LoggingTest.java:14) org.apache.commons.logging.impl.Log4JLogger@758fc9
要显示的将logging设置为使用log4j来做日志输出, 可以通过下面的设置满足要求
System.setProperty("org.apache.commons.logging.Log", "org.apache.commcons.logging.impl.Log4JLogger");
Commons IO
CopyUtils
用来将某个InputStream, Reader, byte[]的内容copy到OutputStream或者Writer.
IOUtils.toString()
用来将信息从Reader或者InputStream中copy到字符串中.
IOUtils.closeQuietly()
用来只有的关闭某个InputStream, OutputStream, Reader或Writer, 而不用担心null或者IOException, 这个一般放在finally中执行.
FileUtils.byteCountToDisplaySize()
以KB, MB, GB的形式显示某个文件大小, 该工具类有三个静态变量, ONE_KB, ONE_GB, ONE_MB, 不用大家应该也知道了.另外他不会对文件大小进行四舍五入操作, 比如一个2.9MB的文件, 得到是2MB, 也就是说余数被统统舍弃了.
FileUtils.copyFile(), copyFileToDirectory(), writeStringToFile()
分别是拷贝文件, 拷贝文件到指定的文件夹, 拷贝字符串内容到文件.
FileUtils.deleteDirectory(), cleanDirectory(), sizeOfDirectory()
递归删除目录和清空目录下的所有文件, 获取指定目录下所有内容的总大小.
FileUtils.touch()
类似unix下的touch命令, 如果文件不存在将创建一个新的文件.如果文件存在, 则更新文件的时间戳为当前时间.
IOFileFilter
关于文件的过滤, 包括FileFilter, FilenameFilter, PrefixFileFilter, SuffixFileFilter, DirectoryFileFilter, 以及AndFileFilter等逻辑过滤器.
CountingInputStream和CountingOutputStream
用来跟踪进入某个Stream的byte数量.它可以视为是各种Stream的一种装饰器类
TeeOutputStream
用来将相同的数据发送到两个OutputStream.
评论
2 楼
cectsky
2011-04-08
commons
,我是这本书的审校,commons还有更多的好玩的东东,而且现在不叫jakarta commons 了而是commons了,并且成了apache的顶层项目。
BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
请问,现在有得卖吗??
nisen 写道

BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
请问,现在有得卖吗??
1 楼
nisen
2009-12-08

BeanUtils,Lang,Collections,logging 应该是commons中最核心的组件。我这里有一个分类
Core:BeanUtils,Lang,Collections,logging
Db:DbUtils,DBCP,Pool
IO: IO,
XML vs Bean:betwixt,Digester,JXPath,Jelly
模版:EL, JEXL
通用:Codec,Id
Web:FileUpload,httpClient
文件系统:VFS
其他的可以暂时不考虑,当然有一些已经过时的,比如Attributes,跟jdk1.5中的注解差不多,不在使用了,比如Lang中的枚举
发表评论
-
<异类>读书笔记
2013-03-06 07:54 0成功者能够获得更多的机会,从而能变得更为成功。税收愈减免,富人 ... -
《python学习手册》学习笔记
2013-03-11 22:25 3497python格式化传参数非常赞,用数字标明位置,值得java学 ... -
<万历十五年>读书笔记
2013-03-11 22:27 1660在网上下了一个电子书, 但是貌似跟万历十五年没啥关系, 都是讨 ... -
《鸟哥的linux私房菜》读书笔记(部分)
2013-03-11 22:27 2085x86是一种微机系统硬件架构,另一种是苹果的mac的架构 l ... -
《你的灯亮了吗》读书笔记
2013-03-06 07:20 1566这是一本原本写给程序员的书 本书的四个问题: 搞清问题的来源 ... -
《小狗钱钱》读书笔记
2013-03-06 07:17 1495一本非常不错的理财学习入门书, 以童话的形式, 儿童的思维方式 ... -
《我的奋斗》读书笔记
2012-04-14 22:03 2106文字写的很幽默, 故事也基本都是一些平常人的故事,看到了一个特 ... -
《Java Performance》书评
2012-01-15 18:32 2983原文: http://java.dzone.com/rev ... -
《程序员应该知道的97件事》读书笔记
2012-01-15 18:36 2407一本关于写代码的文 ... -
《影响力》读书笔记
2011-11-05 14:47 1854从书名上很可能以为 ... -
《浪潮之巅》读书笔记
2011-11-05 14:44 1391作为一个中国人通过分析硅谷高科技公司的一系列传奇, 总结出这 ... -
《黑客与画家》读书笔记
2011-11-05 13:37 1836以前看过《rework》, 觉得是每一个小型创业公司的创业宝 ... -
《乔布斯传》读书笔记
2011-10-18 08:53 2875在ipad上看完了这本书, 写的还不错, 里面没有无聊的八 ... -
《细说Java》读书笔记
2011-10-05 15:01 2024国人写的, 感觉是一 ... -
《敏捷估计与规划》读书笔记
2011-10-05 12:08 3199这本书断断续续看了很长时间, 内容非常不错, 基本涵盖了sc ... -
《怪诞心理学》读书笔记
2011-10-05 09:44 1840既然是怪诞, 那么整本书涉及的内容并不是我们平常司空见怪的一 ... -
《番茄工作法图解》读书笔记
2011-09-28 09:02 2410番茄工作法是时间管 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2121"工欲善其事必先利其器", 在平时的开发 ... -
《敏捷迭代开发管理者指南》读书笔记
2011-09-24 13:09 2242这是一本关于迭代开发 ... -
《解析极限编程》读书笔记
2011-09-24 13:03 1813不知道是kent beck的语 ...
相关推荐
### Jakarta Commons CookBook 学习笔记 #### 一、Commons Lang: EqualsBuilder and HashCodeBuilder **1.1 概述** `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于...
在阅读《Jakarta Commons Cookbook》时,你可以学习如何有效地利用这些组件来提升你的Java项目。例如,了解如何使用` FileUtils.copyFile()`方法复制文件,或通过` StringUtils.join()`将数组元素连接成字符串。此外...
# 基于C语言的SmartPlugModbus固件项目 ## 项目简介 该项目是一个基于C语言的固件项目,旨在实现一个支持Modbus RTU通信协议的智能设备固件。该固件被设计为与SmartPlugModbus设备配合使用,用于控制和管理多个电源插座,提供过流、欠流、过压、欠压和过热保护,同时监控插座状态和电压、电流等参数。 ## 项目的主要特性和功能 1. Modbus RTU通信协议支持固件实现了Modbus RTU通信协议,允许通过Modbus协议与设备进行通信,包括读取和写入设备参数、状态和控制命令。 2. 多插座控制固件支持控制多个电源插座,包括开启、关闭、查询状态等。 3. 保护功能设备提供过流、欠流、过压、欠压和过热保护,防止设备损坏和安全事故。 4. 参数配置通过Modbus协议,用户可以配置设备的保护参数,如电流、电压限制等。
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于嵌入式系统的StackAttack游戏项目 ## 项目简介 StackAttack是一个基于嵌入式系统的游戏项目,设计用于SPI TFT彩色液晶显示面板上运行。游戏的核心玩法是操控一个名为“Claw”(爪子)的游戏角色,在由格子组成的地图上移动并抓取箱子。玩家通过操纵杆控制游戏角色,成功抓取并移动箱子到目标位置后得分。游戏地图由二维数组表示,每个格子代表一个位置。当玩家成功将所有箱子移动到目标行时,游戏结束。 ## 项目的主要特性和功能 1. 游戏角色控制玩家通过操纵杆控制Claw(爪子)角色移动。 2. 地图和箱子管理游戏地图由二维数组表示,每个格子代表一个位置。箱子在游戏地图上的位置由数组中的值表示。 3. 游戏逻辑包括角色的移动、箱子的抓取和移动、得分计算等。 4. 图形显示使用SPITFTILI9341图形库控制SPI TFT显示屏,实现游戏的图形输出。 5. 暂停功能游戏支持暂停功能,方便玩家随时暂停游戏。
内容概要:本文档提供了基于STM32、OpenCV和卷积神经网络的车牌识别系统的完整代码示例。系统通过摄像头捕捉视频流,利用OpenCV进行图像处理(如灰度化、二值化、轮廓检测等)以定位车牌区域,并使用预训练的ONNX模型对车牌字符进行识别。之后,系统将识别到的车牌号与预先存储在CSV文件中的居民车牌数据库进行匹配,以判断车辆是否为小区居民所有,从而实现对外来车辆的收费管理。; 适合人群:对嵌入式系统开发、计算机视觉和深度学习感兴趣的开发者,尤其是有一定C++编程基础和技术背景的研究人员或工程师。; 使用场景及目标:①适用于社区、停车场等场所的车辆管理;②帮助开发者理解车牌识别的基本流程,包括图像预处理、车牌定位、字符识别以及与数据库的交互;③提供一个可扩展的基础框架,便于后续优化和功能增加。; 阅读建议:读者应确保具备基本的OpenCV库使用经验和C++编程能力。在学习过程中,建议同时参考相关文献资料,深入理解每个步骤背后的原理,并尝试调整参数或替换模型以提高识别精度。此外,还需准备相应的硬件设备(如摄像头)和软件环境(如安装OpenCV库),以便实际运行代码并观察效果。
efwfw
内容概要:本文详细介绍了利用西门子S7-200 PLC和MCGS组态软件构建智能交通灯控制系统的方法。首先阐述了系统的硬件配置,包括PLC的选择、IO分配、光电开关的应用等。接着深入探讨了梯形图编程的核心逻辑,如定时器嵌套、车流判断、紧急模式处理等。同时,还讲解了MCGS组态界面的设计要点,如动态指示灯、车流统计曲线、急停按钮等功能的实现。此外,文中分享了一些调试经验和优化技巧,如信号隔离、通信参数设置、夜间模式优化等。 适合人群:对PLC编程和工业自动化感兴趣的工程技术人员、高校相关专业学生。 使用场景及目标:适用于城市交通管理部门进行智能交通灯系统的规划与实施,旨在提高交通效率,减少拥堵。通过学习本文,读者能够掌握PLC编程的基本方法和MCGS组态软件的使用技巧。 其他说明:文中提供了详细的接线图、梯形图代码片段和组态界面截图,便于读者理解和实践。同时,作者还分享了许多实际操作中的注意事项和经验教训,有助于初学者少走弯路。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
摘 要 面对信息时代的机遇与挑战,利用高科技手段来提高企业的管理水平无疑是一条行之有效的途径。利用计算机管理可以最大限度的发挥准确、快捷、高效等作用, 在越来越激烈的珠宝行业中,计算机管理技术对珠宝首饰公司的服务管理提供强有力的支持。因此,利用全新的计算机网络和珠宝首饰管理系统,已成为提高珠宝首饰公司的管理效率,改进服务水准的重要手段之一。本系统应用Visual Basic 6.0 中文版开发前台,用Microsoft Access 作后台服务器,采用客户机/服务器(C/S)管理思想来对珠宝首饰进销存管理。 关键词:管理水平, 管理效率,服务水准,珠宝首饰管理系统,客户机/服务器,管理思想
稀疏分解方法在信号去噪中的应用研究_内含源码数据论文.zip
本书由吉姆·诺埃尔和大卫·多蒂奇编辑,旨在探讨领导力发展领域的最新趋势和实践。书中不仅提供了领导力发展领域的历史回顾,还挑战了组织对领导力发展的战略视角,详细介绍了如何培养全球领导者,并提供了关于领导力发展方法、策略和系统、高潜力人才发展、高层管理参与、有效学习方法以及领导力指标等方面的深入案例研究和理论分析。此外,书中还探讨了创新的领导力发展方法,并对未来的发展趋势进行了展望。
一种基于 QR 二维码的彩色二维码编码译码设计及其软件实现.zip
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文详细介绍了使用COMSOL Multiphysics的弱形式接口对三维光子晶体进行数值模拟的方法和技巧。文章通过具体的代码示例,解释了如何构建光子晶体的介电常数分布、设置弱形式PDE、处理电磁场切向连续性、应用Floquet周期边界条件以及特征值求解等关键步骤。特别强调了弱形式接口相比传统物理场接口的优势,如灵活性和对复杂边界的处理能力。文中还分享了一些实用的经验和注意事项,如布洛赫边界条件的实现、特征值求解器参数的优化配置以及网格划分的技巧。 适合人群:具备一定电磁学和数值模拟基础的研究人员或工程师,尤其是对光子晶体仿真感兴趣的读者。 使用场景及目标:①理解并掌握COMSOL弱形式接口在光子晶体仿真中的应用;②学习如何通过弱形式设置处理复杂的电磁场问题;③提高对光子晶体能带结构和带隙特性的认识;④掌握特征值求解和网格划分的最佳实践。 阅读建议:由于本文涉及较多的具体代码和物理概念,建议读者在阅读过程中结合COMSOL软件进行实际操作,同时查阅相关电磁理论书籍以加深理解。此外,对于文中提到的一些具体参数设置和技巧,可以通过尝试不同的配置来巩固所学知识。
内容概要:PT5000汽轮机滑动轴承系统模拟试验台是一个类似于电厂汽轮机发电机的缩小模型,旨在帮助用户获取汽轮机转子动态行为和滑动轴承油膜现象的实际经验,并研究振动控制方法。该试验台模拟两级涡轮机(低压和中压),每级转子两侧各有8个叶片,共计16个叶片。通过电机驱动而非涡轮发电机,可以进行启停机测试,识别共振现象。试验台还支持多种实验,如不平衡/现场动平衡、轴不对中实验、摩擦实验、油膜故障试验、轴颈轴承实验以及根据油压和温度进行的转子动力学试验。试验台配备了多种传感器和控制系统,包括电涡流传感器、温度传感器、压力传感器等,用于监测和记录实验数据。 适合人群:从事汽轮机设计、制造、维护的技术人员,以及相关专业的高校师生和研究人员。 使用场景及目标:①研究汽轮机转子的动态行为和滑动轴承的油膜现象;②进行振动控制方法的研究;③模拟再现油膜涡动转和油膜震荡,研究其控制条件;④进行不平衡、不对中、摩擦等常见故障的模拟和分析;⑤通过调整油压、温度和预加载力,研究轴的行为变化。 其他说明:该试验台不仅适用于教学和科研,还可用于工业领域的培训和技术验证。试验台具有丰富的配置和可选配件,可以根据具体需求进行定制。试验台的机械和电气参数详细列出,确保用户能够全面了解设备性能。
电影类型知识图谱构建,包含相关数据集
# 基于C++的Minimal BASIC解释器 ## 项目简介 本项目是一个C++实现的Minimal BASIC解释器。该解释器能够解释并执行一些基本的BASIC语言命令,如赋值、打印、输入、条件跳转等。用户可以通过命令行交互地输入命令,或者编写一个按行数升序依次运行的大程序。 ## 项目的主要特性和功能 1. 解释执行能够解释并执行简单的BASIC语言命令。 2. 变量定义与赋值支持定义变量并为其赋值。 3. 打印输出支持将表达式的值打印到控制台。 4. 输入支持从用户获取输入值并赋值给变量。 5. 条件跳转支持基于条件的跳转语句。 6. 注释支持注释语句,使程序更加易读。 ## 安装使用步骤 1. 准备环境确保你的开发环境已经安装了C++编译器,如GCC。 3. 编译使用CMake工具编译源代码。 4. 运行编译成功后,运行可执行文件,即可与解释器交互。 ## 注意事项