青青子衿
对酒当歌,人生几何? 譬如朝露,去日苦多。 慨当以慷,忧思难忘。 何以解忧,唯有杜康。 青青子衿,悠悠我心。 但为君故,沉吟至今。 呦呦鹿鸣,食野之苹。 我有嘉宾,鼓瑟吹笙。 明明如月,何时可掇。 忧从中来,不可断绝。 越陌度阡,枉用相存。 契阔谈宴,心念旧恩。 月明星稀,乌鹊南飞。 绕树三匝,何枝可依? 山不厌高,海不厌深。 周公吐哺,天下归心。
2017年12月26日星期二
2014年10月8日星期三
编程随想的博客: CNNIC证书的危害及各种清除方法
---------------------
NO ZUO NO DIE
2013年7月18日星期四
ORACLE 开始时间 & 结束时间
From Evernote: |
ORACLE 开始时间 & 结束时间Clipped from: http://blog.csdn.net/long_ge_cool/article/details/8601157 |
select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')-1),'yyyy-mm-dd hh24') from dual;
select to_date(to_char(sysdate,'yyyy-mm-dd')||(to_char(sysdate,'hh24')),'yyyy-mm-dd hh24') from dual;
select to_char(to_date(to_char(add_months(sysdate,-1),'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;
select to_char(to_date(to_char(sysdate,'yyyy-mm'),'yyyy-mm'),'yyyy-mm-dd hh24:mi:ss') from dual;
select trunc(sysdate,'d')+1 from dual;
select trunc(sysdate,'d')+7 from dual;
--本月
select trunc(sysdate,'mm') from dual;
select last_day(trunc(sysdate)) from dual;
--本季
select trunc(sysdate,'Q') from dual;
select add_months(trunc(sysdate,'Q'),3)-1 from dual;
--本年
select trunc(sysdate,'yyyy') from dual;
select add_months(trunc(sysdate,'yyyy'),12)-1 from dual;
2013年6月25日星期二
eclipse扩展点介绍
From Evernote: |
eclipse扩展点介绍Clipped from: http://chenqisdfx.iteye.com/blog/1154338 |
Platform runtime
org.eclipse.core.contenttype.contentTypes
org.eclipse.core.runtime.adapters
org.eclipse.core.runtime.applications
org.eclipse.core.runtime.contentTypes
org.eclipse.core.runtime.preferences
org.eclipse.core.runtime.products
org.eclipse.equinox.preferences.preferences
Workspace
org.eclipse.core.resources.builders
org.eclipse.core.resources.fileModificationValidator
org.eclipse.core.resources.markers
org.eclipse.core.resources.moveDeleteHook
org.eclipse.core.resources.natures
org.eclipse.core.resources.refreshProviders
org.eclipse.core.resources.teamHook
org.eclipse.core.filesystem.filesystems
Platform text
org.eclipse.core.filebuffers.annotationModelCreation
org.eclipse.core.filebuffers.documentCreation
org.eclipse.core.filebuffers.documentSetup
org.eclipse.ui.editors.annotationTypes
org.eclipse.ui.editors.documentProviders
org.eclipse.ui.editors.markerAnnotationSpecification
org.eclipse.ui.editors.markerUpdaters
org.eclipse.ui.editors.templates
org.eclipse.ui.workbench.texteditor.quickDiffReferenceProvider
org.eclipse.ui.workbench.texteditor.spellingEngine
Workbench
org.eclipse.ui.acceleratorConfigurations
org.eclipse.ui.acceleratorScopes
org.eclipse.ui.acceleratorSets
org.eclipse.ui.actionDefinitions
org.eclipse.ui.actionSetPartAssociations
org.eclipse.ui.actionSets
org.eclipse.ui.activities
org.eclipse.ui.activitySupport
org.eclipse.ui.bindings
org.eclipse.ui.browser.browsers
org.eclipse.ui.browserSupport
org.eclipse.ui.commands
org.eclipse.ui.commandImages
org.eclipse.ui.contexts
org.eclipse.ui.decorators
org.eclipse.ui.dropActions
org.eclipse.ui.editorActions
org.eclipse.ui.editors
org.eclipse.ui.elementFactories
org.eclipse.ui.encodings
org.eclipse.ui.exportWizards
org.eclipse.ui.fontDefinitions
org.eclipse.ui.handlers
org.eclipse.ui.helpSupport
org.eclipse.ui.ide.filesystemSupport
org.eclipse.ui.ide.markerHelp
org.eclipse.ui.ide.markerImageProviders
org.eclipse.ui.ide.markerResolution
org.eclipse.ui.ide.markerSupport
org.eclipse.ui.navigator.linkHelper
org.eclipse.ui.navigator.navigatorContent
org.eclipse.ui.navigator.viewer
org.eclipse.ui.ide.projectNatureImages
org.eclipse.ui.ide.resourceFilters
org.eclipse.ui.importWizards
org.eclipse.ui.intro
org.eclipse.ui.keywords
org.eclipse.ui.menus
org.eclipse.ui.newWizards
org.eclipse.ui.perspectiveExtensions
org.eclipse.ui.perspectives
org.eclipse.ui.popupMenus
org.eclipse.ui.preferencePages
org.eclipse.ui.preferenceTransfer
org.eclipse.ui.presentationFactories
org.eclipse.ui.propertyPages
org.eclipse.ui.startup
org.eclipse.ui.systemSummarySections
org.eclipse.ui.themes
org.eclipse.ui.viewActions
org.eclipse.ui.views
org.eclipse.ui.views.properties.tabbed.propertyContributor.html
org.eclipse.ui.views.properties.tabbed.propertySections.html
org.eclipse.ui.views.properties.tabbed.propertyTabs.html
org.eclipse.ui.workingSets
Team
org.eclipse.team.core.fileTypes
org.eclipse.team.core.ignore
org.eclipse.team.core.projectSets
org.eclipse.team.core.repository
org.eclipse.team.ui.configurationWizards
org.eclipse.team.ui.synchronizeParticipants
org.eclipse.team.ui.synchronizeWizards
Debug
org.eclipse.debug.core.breakpoints
org.eclipse.debug.core.launchConfigurationComparators
org.eclipse.debug.core.launchConfigurationTypes
org.eclipse.debug.core.launchDelegates
org.eclipse.debug.core.launchers
org.eclipse.debug.core.launchModes
org.eclipse.debug.core.logicalStructureTypes
org.eclipse.debug.core.processFactories
org.eclipse.debug.core.sourceContainerTypes
org.eclipse.debug.core.sourceLocators
org.eclipse.debug.core.sourcePathComputers
org.eclipse.debug.core.statusHandlers
org.eclipse.debug.core.watchExpressionDelegates
org.eclipse.debug.ui.breakpointOrganizers
org.eclipse.debug.ui.consoleColorProviders
org.eclipse.debug.ui.consoleLineTrackers
org.eclipse.debug.ui.contextViewBindings
org.eclipse.debug.ui.debugModelContextBindings
org.eclipse.debug.ui.debugModelPresentations
org.eclipse.debug.ui.launchConfigurationTabGroups
org.eclipse.debug.ui.launchConfigurationTypeImages
org.eclipse.debug.ui.launchGroups
org.eclipse.debug.ui.launchShortcuts
org.eclipse.debug.ui.memoryRenderings
org.eclipse.debug.ui.sourceContainerPresentations
org.eclipse.debug.ui.stringVariablePresentations
org.eclipse.debug.ui.variableValueEditors
Console
org.eclipse.ui.console.consoleFactories
org.eclipse.ui.console.consolePageParticipants
org.eclipse.ui.console.consolePatternMatchListeners
User Assistance
org.eclipse.help.contentExtension
org.eclipse.help.contentProducer
org.eclipse.help.contexts
org.eclipse.help.index
org.eclipse.help.toc
org.eclipse.help.base.activitySupport
org.eclipse.help.base.browser
org.eclipse.help.base.luceneAnalyzer
org.eclipse.help.base.luceneSearchParticipants
org.eclipse.help.ui.searchEngine
org.eclipse.ui.cheatsheets.cheatSheetContent
org.eclipse.ui.cheatsheets.cheatSheetItemExtension
org.eclipse.ui.intro.config
org.eclipse.ui.intro.configExtension
Language Toolkit
org.eclipse.ltk.core.refactoring.refactoringContributions
org.eclipse.ltk.core.refactoring.copyParticipants
org.eclipse.ltk.core.refactoring.createParticipants
org.eclipse.ltk.core.refactoring.deleteParticipants
org.eclipse.ltk.core.refactoring.moveParticipants
org.eclipse.ltk.core.refactoring.renameParticipants
org.eclipse.ltk.ui.refactoring.changePreviewViewers
org.eclipse.ltk.ui.refactoring.statusContextViewers
Other
org.eclipse.ant.core.antProperties
org.eclipse.ant.core.antTasks
org.eclipse.ant.core.antTypes
org.eclipse.ant.core.extraClasspathEntries
org.eclipse.compare.contentMergeViewers
org.eclipse.compare.contentViewers
org.eclipse.compare.streamMergers
org.eclipse.compare.structureCreators
org.eclipse.compare.structureMergeViewers
org.eclipse.core.expressions.propertyTesters
org.eclipse.core.variables.dynamicVariables
org.eclipse.core.variables.valueVariables
org.eclipse.search.searchPages
org.eclipse.search.searchResultSorters
org.eclipse.search.searchResultViewPages
org.eclipse.search.textSearchEngine
org.eclipse.search.textSearchQueryProvider
org.eclipse.ui.externaltools.configurationDuplicationMaps
org.eclipse.update.core.featureTypes
org.eclipse.update.core.installHandlers
org.eclipse.update.core.siteTypes
Eclipse平台SDK支持的扩展点
扩展点 | 描述 | 起始版本 | 备注 |
org.eclipse.ant.core.antTasks | 将Ant的任务与你的插件中的类关联起来,以扩展Ant在Eclipse中运行时的能力。 | 3 | |
org.eclipse.ant.core.antTypes | 将Ant的数据类型与你插件中的类关联起来。 | 3 | |
org.eclipse.ant.core.extraClasspathEntries | 提供额外的类型库(JAR 文件)给Ant使用。 | 3 | |
org.eclipse.compare.contentMergeViewers | 为一种或多种文件类型提供一个比较/合并查看器生成器。 | 2 | |
org.eclipse.compare.contentViewers | 为一种或多种文件类型提供一个查看器生成器。 | 2 | |
org.eclipse.compare.structureCreators | 提供一个类来为一种或多种文件类型创建树型结构。 | 2 | |
org.eclipse.compare.structureMergeViewers | 为一种或多种结构化文件类型提供一个查看器生成器。 | 2 | |
org.eclipse.core.resources.builders | 注册一个使用符号ID和可读名字的增量构建器。 | 1 | |
org.eclipse.core.resources.fileModificationValidator | 为团队Provider提供一个用于处理保存验证和编辑验证操作的类。 | 2.0 | 3 |
org.eclipse.core.resources.markers | 以可选的父类和属性来注册一个自定义标记,包含了一些已定义的父类。 | 1 | |
org.eclipse.core.resources.moveDeleteHook | 提供一个用于资源移动和删除操作的类。只允许一个hook。 | 2.0 | 3 |
org.eclipse.core.resources.natures | 安装一个能够在用户项目中使用的自定义nature。 | 1 | |
org.eclipse.core.resources.teamHook | 为团队Provider注册一个用于处理和链接创建校验类似的特定事件的类。 | 2.1 | 3 |
org.eclipse.core.runtime.applications | 定义一个可以在Eclipse命令行中用-application选项调用的顶层程序。 | 1 | |
org.eclipse.core.runtime.urlHandlers | 在平台的搜索路径中增加URL处理器。 | 3 | |
org.eclipse.debug.core.breakpoints | 定义自定义断点。 | 2 | |
org.eclipse.debug.core.launchConfigurationComparators | 声明专用Java比较器以比较属性。 | 2 | |
org.eclipse.debug.core.launchConfigurationTypes | 指定用于运行和调试各种程序的类。 | 2 | |
org.eclipse.debug.core.launchers | 2.0版作废:改用launchConfigurationTypes扩展点。 | 无 | 无 |
org.eclipse.debug.core.sourceLocators | 指定类来帮助调试器定位源代码。 | 2 | |
org.eclipse.debug.core.statusHandlers | 为调试器状态码注册错误处理程序。 | 2 | |
org.eclipse.debug.ui.consoleColorProviders | 提供代码来处理控制台输出的颜色。 | 2.1 | 2 |
org.eclipse.debug.ui.consoleLineTrackers | 提供代码来监听写入控制台的行。 | 2.1 | 2 |
org.eclipse.debug.ui.debugActionGroups | 对几个action进行分组以使其可以同时可视或不可视。 | 2 | |
org.eclipse.debug.ui.debugModelPresentations | 定义类来为指定的调试模型渲染和显示标签、图标及编辑器。 | 2 | |
org.eclipse.debug.ui.launchConfigurationTab-Groups | 提供用来定义运行配置类型(运行和调试都有)的一组标签页 | 2 | |
org.eclipse.debug.ui.launchConfigurationType-Images | 把图片和特定的运行配置类型关联起来。 | 2 | |
org.eclipse.debug.ui.launchGroups | 定义同时显示的一组运行配置。 | 2.1 | 2 |
org.eclipse.debug.ui.launchShortcuts | 在一种或多种透视图中增加运行和(或)调试菜单的快捷方式。 | 2 | |
org.eclipse.help.appserver.server | 内部:为帮助和其他插件增加一个程序服务器。 | 1 | |
org.eclipse.help.browser | 注册HTML浏览器。 | 2 | |
org.eclipse.help.contexts | 为一个插件定义在线式(F1)帮助。 | 3 | |
org.eclipse.help.luceneAnalyzer | 注册用来对帮助建立索引和搜索的自然语言文本分析器。 | 3 | |
org.eclipse.help.support | 定义一个帮助系统以替换系统原配的版本。除特定程序外,不推荐使用。 | 3 | |
org.eclipse.help.toc | 为此插件提供一个或多个帮助文档表。 | 3 | |
org.eclipse.help.webapp | 内部:注册帮助系统的Web程序插件。 | 2.1 | 3 |
org.eclipse.jdt.core.classpathContainerInitializer | 声明Laly方式加载的自定义Classpath容器。 | 2.0 | 2 |
org.eclipse.jdt.core.classpathVariableInitializer | 声明Laly方式加载的自定义Classpath变量以便在Java构建路径中使用。 | 2.0 | 3 |
org.eclipse.jdt.core.codeFormatter | 定义新的代码格式化程序。 | 2.0 | 3 |
org.eclipse.jdt.debug.ui.vmInstallTypePage | 为自定义VM类型提供JRE运行配置页。 | 2 | |
org.eclipse.jdt.junit.testRunListeners | 注册代码来以获得测试执行的通知。 | 2.1 | 3 |
org.eclipse.jdt.launching.classpathProviders | 注册自定义源码和Classpath提供程序。 | 2.1 | 2 |
org.eclipse.jdt.launching.runtimeClasspathEntryResolvers | 提供类以便按照给定的classpath和(或)容器来搜索类和源文件。 | 2 | |
org.eclipse.jdt.launching.vmConnectors | 提供自定义方式来连接JVM以调试和运行。 | 2 | |
org.eclipse.jdt.launching.vmInstallTypes | 提供Java虚拟机安装的新类型。 | 2 | |
org.eclipse.jdt.ui.classpathContainerPage | 增加向导页来创建或编辑classpath容器入口。 | 4 | |
org.eclipse.jdt.ui.javadocCompletionProcessor | 定义javadoc自动完成处理器(例如,给出xdocklet标记的建议)。 | 2 | |
org.eclipse.jdt.ui.javaEditorTextHover | 定义在java编辑器中热操作的新类型。 | 2 | |
org.eclipse.jdt.ui.javaElementFilters | 为显示java元素的视图增加可定制过滤器(如包浏览器)。 | 2 | |
org.eclipse.pde.ui.newExtension | 实验性:定义向导以在PDE的插件清单编辑器中创建新扩展。 | 2 | |
org.eclipse.pde.ui.projectGenerators | 实验性:定义向导以创建PDE插件项目的初始内容。 | 2 | |
org.eclipse.pde.ui.templates | 实验性:定义用来为新插件生成代码的模板。 | 2 | |
org.eclipse.search.searchPages | 为[查找]对话框增加标签页。 | 2 | |
org.eclipse.search.searchResultSorters | 在查找视图中提供自定义排序选项。 | 2 | |
org.eclipse.team.core.fileTypes | 声明文件基于其扩展名的类型只能为文本或二进制。 | 3 | |
org.eclipse.team.core.ignore | 为版本控制忽略列表增加了模式。 | 3 | |
org.eclipse.team.core.projectSets | 提供用于读写项目集的处理程序(团队共享项目的集合)。 | 2 | |
org.eclipse.team.core.repository | 定义新的团队Provider。 | 2.0 | 2 |
org.eclipse.team.ui.configurationWizards | 提供向导来负责关联项目和团队Provider。 | 2 | |
org.eclipse.ui.acceleratorConfigurations | 2.1版作废:改用commands扩展。定义加速器配置以供用户在[首选项]页中选择。 | 2.0 | 2 |
org.eclipse.ui.acceleratorScopes | 2.1版作废:改用commands扩展。定义限定加速器集活动范围的作用域。 | 2.0 | 2 |
org.eclipse.ui.acceleratorSets | 2.1版作废:改用commands扩展。为工作区actions定义键盘快捷键的集合。 | 2.0 | 4 |
org.eclipse.ui.actionDefinitions | 2.1版作废:改用commands扩展。定义actions。 | 2.0 | 2 |
org.eclipse.ui.actionSetPartAssociations | 将action集与工作台部件关联,当工作台部件活动时令其可见。 | 4 | |
org.eclipse.ui.actionSets | 定义action集(菜单或工具栏项目)在用户自定义视图中的显示。 | 2 | |
org.eclipse.ui.capabilities | 2.1版未实现:注册新项目性能。 | 无 | 无 |
org.eclipse.ui.commands | 定义命令、命令目录以及默认快捷键。 | 2.1 | 4 |
org.eclipse.ui.decorators | 增加根据视图状态来修改图标或项目标签的修饰程序。 | 2.0 | 2 |
org.eclipse.ui.documentProviders | 为给定的扩展名或输入类型注册文档provider类。在打开编辑器时使用。 | 2 | |
org.eclipse.ui.dropActions | 定义一个处理程序以使此插件的对象能够拖放到其他插件的视图中。 | 2 | |
org.eclipse.ui.editorActions | 为其他插件注册的菜单和工具栏增加actions。 | 2 | |
org.eclipse.ui.editors | 给工作台增加新的编辑器。 | 2 | |
org.eclipse.ui.elementFactories | 定义元素生成器,以便在关闭Eclipse时重建存盘了的对象。 | 2 | |
org.eclipse.ui.exportWizards | 创建显示在[导出]对话框中的向导。 | 2 | |
org.eclipse.ui.fontDefinitions | 注册给工作台使用的新字体。 | 2.1 | 2 |
org.eclipse.ui.importWizards | 创建显示在[导入]对话框中的向导。 | 2 | |
org.eclipse.ui.markerHelp | 提供一种方法来获取标记的帮助信息。 | 2.0 | 3 |
org.eclipse.ui.markerImageProviders | 为新的标记类型提供图像。 | 2.1 | 2 |
org.eclipse.ui.markerResolution | 增加类来对以特定标记类型标记的问题给出快速修正建议。 | 2.0 | 3 |
org.eclipse.ui.markerUpdaters | 定义标记的更新策略,以便在保存其资源时按照其位置和文字来更新其属性。 | 1.0 | 2 |
org.eclipse.ui.newWizards | 为[新建]对话框增加向导,可以新建目录以放置程序。 | 2 | |
org.eclipse.ui.perspectiveExtensions | 扩展其他插件定义的透视图。允许你添加菜单、工具栏项目、快捷键、视图等等。 | 4 | |
org.eclipse.ui.perspectives | 定义新透视图。 | 2 | |
org.eclipse.ui.popupMenus | 为其他插件定义的对象、视图或编辑器的弹出菜单增加项目。 | 2 | |
org.eclipse.ui.preferencePages | 在[首选项]对话框中增加页面。 | 2 | |
org.eclipse.ui.projectNatureImages | 定义依据项目性质来修饰其图像的小图标。 | 2 | |
org.eclipse.ui.propertyPages | 为一种给定类型的工作空间对象增加属性页。 | 2 | |
org.eclipse.ui.resourceFilters | 为显示资源的视图(如[导航]视图)增加预定义过滤器。 | 3 | |
org.eclipse.ui.startup | 标记当Eclipse加载时要启动的插件。 | 2.0 | 3 |
org.eclipse.ui.viewActions | 在一个视图的菜单或工具栏中增加项目。 | 2 | |
org.eclipse.ui.views | 为工作台定义额外的视图。 | 2 | |
org.eclipse.ui.workingSets | 定义工作集向导页。 | 2.0 | 2 |
org.eclipse.update.core.featureTypes | 创建一种新的特性类型来切换包装和验证架构。 | 1 | |
org.eclipse.update.core.installHandlers | 定义一个全局安装处理程序,可以被正在更新的特性引用。 | 1 | |
org.eclipse.update.core.siteTypes | 定义一个定制的更新站点布局。 | 1 | |
org.eclipse.update.ui.searchCategory | 内部:在[更新管理器]中增加新的搜索目录。 | 2 |
2013年6月9日星期日
无我的四相
From Evernote: |
无我的四相Clipped from: http://magazine.fjnet.com/hykw/fxwz/wz4/WZ4_30.htm |
无我的四相
圣严法师
在《金刚经》中有提及四种相,即是无我相、无人相、无众生相以及无寿者相,实际上这四相都是讨论同样的事物,就是"我"。这里所提到的我,就是指那些属于我或虽不属于我,而却期望得到和不要得到的东西。除了那些我们已经拥有而不希望失去,以及拥有却想除去的,还有那些我们没有却想得到或害怕得到的东西之外,没有什么是可以被称为"我"的。然而大多数的时间,我们并没有觉察到我们希望除去或得到一些什么东西,我们只意识到自我的存在。首先我们知道自己的身体以及它的需要,由于我们的身体需要某些物品,才感觉到"我"对这些物品的需要。身体使我们注意到我的存在。其次,心念的活动给我们存在的感觉。除了身体和心念以外,就没有"我"的感觉了。事实上,是我们的心使我们经验到我的存在,身体如果离开了心,便不知道那是我。那么,什么是心呢?那是不断或连续流动的念头。
人可以通过宗教的行持,达到某种程度的经验,他会了解到那个平常经验的"我",实际上只是一个虚幻的东西,主观或永恒的我原本是不存在的;它的存在只是因为身体的感觉、身体的需要,以及那不断流动的念头。这即是《金刚经》中所提到的"无我相"。
再说"无人相"。人的存在只是通过"我"的感觉反映到其他人及物的存在。基于自己的感觉,使我们经验到自己与他人的相对待。因此站在《金刚经》的立场:假如进入无我,自然也就无人了;如果我自己本身并不在那儿,同样的,他人也不存在了。这只是因为我们与他人及事物之间发生了种种的关系,我们才感觉到自己的存在。
我们知道目前这个世界上一共有五十亿的人口,但是,与我们每一个人自己相识的,是非常少的。我们所能深刻经验到确实存在的他人,仅是那些在利害得失之上与我们发生关系的人。其他数十亿生活在这个行星上的人口,我们几乎不知道他们的存在;不论他们是否存在,至少并没有真正影响到我们什么。所以,他人只存在于他们与我们之间的关系上。当我不存在时,其他的人也就不存在了。
第三种的"无众生相"。包括所有那些或许没有必要与我们有关系,却仍然和我们共同生活在地球上的一切众生。那些修行已到达很高境界,而且已经能够解除他们本身的问题和困境的人,自然会对所有的众生产生很大的悲愍心。他们从已经解脱自己的问题,而去负担起众生的问题,于是众生的问题就成了他们自己的问题。这仍是有我的层次。
若从《金刚经》的立场说,如果主观的"我"不存在,客观的"众生"自然也不存在。佛陀说度尽众生,而实际上并无众生可度;众生已经被度了,度众生者并没有感觉到他已度了众生。所以,无众生相也是无我相的异名。
第四种是"无寿者相"。这是从时间来看"我"的存在。它牵连到前面所提及的我相、人相和众生相。假如没有我相,则一个人寿命之长短将不重要了;但所有的众生都执著于寿命,他们希望活得长久,并避免夭折。因此他们寻求自己生命的安全感,他们期望现在和将来都有安全感,于是尝试用各种可能的方法来保护自己的生命;纵然已知生命有生必有死,却仍执著不放。然而那些已经无我相的人,不管他们明天死或一万年以后才死,对于他们都是没有差别的。当一个人已经体验到无我的境界,这些问题就已经解决了。
总而言之,有关无我相的"我",归之于个人的不存在;无人相的"人",则指那些与我们相对待或有关联的不存在;无众生相则不止牵涉到"我"及你的不存在,而是包括了宇宙所有众生的不存在;最后,第四种无寿者相说明时间的过程,从期望长寿而至不担心寿命之长短。以上四相的前三者是空间的无我,第四是时间的无我。
2013年6月1日星期六
下载verycd资源的方法。
From Evernote: |
下载verycd资源的方法。Clipped from: http://www.jb51.net/softjc/63826.html |
例如,我要下载:http://www.verycd.com/topics/2913058/ 套图,
会提示"未提供版权证明,无法下载"
那么我们只需要在verycd后加上.gdajie
http://www.verycd.gdajie.com/topics/2913058/
那么就可以下载了。
2013年5月23日星期四
2013年5月10日星期五
java泛型通配符-协变与逆变
From Evernote: |
java泛型通配符-协变与逆变Clipped from: http://arron-li.iteye.com/blog/673783 |
周末研究了下java泛型,关于泛型通配符的协变与逆变问题,题目如下:
- 题目要求:创建一个泛型类Generic1<T>,它只有一个方法,将接受一个T类型的参数。创建第二个泛型类Generic2<T>,它也只有一个方法,将返回类型T的参数。编写一个泛型方法,它具有一个调用第一个泛型类的方法的逆变参数。编写第二个泛型方法,它具有一个调用第二个泛型类的方法的协变参数。
- 实例代码如下:
- package generics.exercises;
- import java.util.ArrayList;
- import java.util.List;
- import typeinfo.pets.Dog;
- public class ContraVarianceAndCovariant {
- static class Generic1Sup<T> {
- }
- static class Generic1<T> extends Generic1Sup<T> {
- void setT(T t) {
- }
- }
- static class Generic1Sub<T> extends Generic1<T> {
- }
- static class Generic2Sup<T> {
- }
- static class Generic2<T> extends Generic2Sup<T> {
- T getT(T t) {
- return t;
- }
- }
- static class Generic2Sub<T> extends Generic2<T> {
- }
- static <T> void writeWithWildcard(List<? super T> list, T item) {
- list.add(item);
- }
- static <T> T readCovariant(List<? extends T> list) {
- return list.get(0);
- }
- static List<Generic1<Dog>> dogs = new ArrayList<Generic1<Dog>>();
- static List<Generic1Sup<Dog>> dogsSup = new ArrayList<Generic1Sup<Dog>>();
- static List<Generic1Sub<Dog>> dogsSub = new ArrayList<Generic1Sub<Dog>>();
- static List<Generic2<Dog>> dogs2 = new ArrayList<Generic2<Dog>>();
- static List<Generic2Sup<Dog>> dogs2Sup = new ArrayList<Generic2Sup<Dog>>();
- static List<Generic2Sub<Dog>> dogs2Sub = new ArrayList<Generic2Sub<Dog>>();
- static void f1() {
- writeWithWildcard(dogs, new Generic1<Dog>());
- writeWithWildcard(dogsSup, new Generic1<Dog>());
- // ! writeWithWildcard(dogsSub, new Generic1<Dog>());
- Generic1<Dog> generic1 = dogs.get(0);
- generic1.setT(new Dog("dog1"));
- System.out.println(generic1);
- }
- static void f2() {
- Generic2<Dog> generic2 = readCovariant(dogs2);
- generic2 = (Generic2<Dog>) readCovariant(dogs2Sup);
- generic2 = readCovariant(dogs2Sub);
- generic2.getT(new Dog("dog2"));
- System.out.println(generic2);
- }
- static class CovariantReader<T> {
- T readCovariant(List<? extends T> list) {
- return list.get(0);
- }
- }
- static void f3() {
- CovariantReader<Generic2<Dog>> fruitReader = new CovariantReader<Generic2<Dog>>();
- Generic2<Dog> generic2 = fruitReader.readCovariant(dogs2);
- // ! generic2 = fruitReader.readCovariant(dogs2Sup);
- generic2 = fruitReader.readCovariant(dogs2Sub);
- generic2.getT(new Dog("dog2"));
- }
- }
感兴趣的读者可以研究下,为题目提供更好的解决方案。
2013年5月7日星期二
java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]
From Evernote: |
java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]Clipped from: http://blackgu.blogbus.com/logs/69596661.html |
java并发编程中CountDownLatch和CyclicBarrier的使用 - [java]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://blackgu.blogbus.com/logs/69596661.html
在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决?
如果是一个线程等待一个线程,则可以通过await()和notify()来实现;
如果是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。
下面来详细描述下CountDownLatch的应用场景:
例如:百米赛跑:8名运动员同时起跑,由于速度的快慢,肯定有会出现先到终点和晚到终点的情况,而终点有个统计成绩的仪器,当所有选手到达终点时,它会统计所有人的成绩并进行排序,然后把结果发送到汇报成绩的系统。
其实这就是一个CountDownLatch的应用场景:一个线程或多个线程等待其他线程运行达到某一目标后进行自己的下一步工作,而被等待的"其他线程"达到这个目标后继续自己下面的任务。
这个场景中:
1. 被等待的"其他线程"------>8名运动员
2. 等待"其他线程"的这个线程------>终点统计成绩的仪器
那么,如何来通过CountDownLatch来实现上述场景的线程控制和调度呢?
jdk中CountDownLatch类有一个常用的构造方法:CountDownLatch(int count);
两个常用的方法:await()和countdown()
其中count是一个计数器中的初始化数字,比如初始化的数字是2,当一个线程里调用了countdown(),则这个计数器就减一,当线程调用了await(),则这个线程就等待这个计数器变为0,当这个计数器变为0时,这个线程继续自己下面的工作。下面是上述CountDownLatch场景的实现:
Work类(运动员):
import java.util.concurrent.CountDownLatch;
public class Work implements Runnable {
private int id;
private CountDownLatch beginSignal;
private CountDownLatch endSignal;
public Work(int id, CountDownLatch begin, CountDownLatch end) {
this.id = id;
this.beginSignal = begin;
this.endSignal = end;
}
@Override
public void run() {
try {
beginSignal.await();
System.out.println("起跑...");
System.out.println("work" + id + "到达终点");
endSignal.countDown();
System.out.println("work" + id + "继续干其他事情");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Main类(终点统计仪器):
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) {
CountDownLatch begSignal = new CountDownLatch(1);
CountDownLatch endSignal = new CountDownLatch(8);
for (int i = 0; i < 8; i++) {
new Thread(new Work(i, begSignal, endSignal)).start();
}
try {
begSignal.countDown(); //统一起跑
endSignal.await(); //等待运动员到达终点
System.out.println("结果发送到汇报成绩的系统");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
下面详细描述下CyclicBarrier的应用场景:
有四个游戏玩家玩游戏,游戏有三个关卡,每个关卡必须要所有玩家都到达后才能允许通关。
其实这个场景里的玩家中如果有玩家A先到了关卡1,他必须等待其他所有玩家都到达关卡1时才能通过,也就是说线程之间需要互相等待,这和CountDownLatch的应用场景有区别,CountDownLatch里的线程是到了运行的目标后继续干自己的其他事情,而这里的线程需要等待其他线程后才能继续完成下面的工作。
jdk中CyclicBarrier类有两个常用的构造方法:
1. CyclicBarrier(int parties)
这里的parties也是一个计数器,例如,初始化时parties里的计数是3,于是拥有该CyclicBarrier对象的线程当parties的计数为3时就唤醒,注:这里parties里的计数在运行时当调用CyclicBarrier:await()时,计数就加1,一直加到初始的值
2. CyclicBarrier(int parties, Runnable barrierAction)
这里的parties与上一个构造方法的解释是一样的,这里需要解释的是第二个入参(Runnable barrierAction),这个参数是一个实现Runnable接口的类的对象,也就是说当parties加到初始值时就出发barrierAction的内容。
下面来实现上述的应用场景:
Player类(玩家类)
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Player implements Runnable {
private CyclicBarrier cyclicBarrier;
private int id;
public Player(int id, CyclicBarrier cyclicBarrier) {
this.cyclicBarrier = cyclicBarrier;
this.id = id;
}
@Override
public void run() {
try {
System.out.println("玩家" + id + "正在玩第一关...");
cyclicBarrier.await();
System.out.println("玩家" + id + "进入第二关...");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}
GameBarrier类(关卡类,这里控制玩家必须全部到达第一关结束的关口才能进入第二关)
import java.util.concurrent.CyclicBarrier;
public class GameBarrier {
public static void main(String[] args) {
CyclicBarrier cyclicBarrier = new CyclicBarrier(4, new Runnable() {
@Override
public void run() {
System.out.println("所有玩家进入第二关!");
}
});
for (int i = 0; i < 4; i++) {
new Thread(new Player(i, cyclicBarrier)).start();
}
}
}
Java CountDownLatch应用
From Evernote: |
Java CountDownLatch应用Clipped from: http://zapldy.iteye.com/blog/746458 |
Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。
你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。
CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。
举个例子,有三个工人在为老板干活,这个老板有一个习惯,就是当三个工人把一天的活都干完了的时候,他就来检查所有工人所干的活。记住这个条件:三个工人先全部干完活,老板才检查。所以在这里用Java代码设计两个类,Worker代表工人,Boss代表老板,具体的代码实现如下:
- package org.zapldy.concurrent;
- import java.util.Random;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.TimeUnit;
- public class Worker implements Runnable{
- private CountDownLatch downLatch;
- private String name;
- public Worker(CountDownLatch downLatch, String name){
- this.downLatch = downLatch;
- this.name = name;
- }
- public void run() {
- this.doWork();
- try{
- TimeUnit.SECONDS.sleep(new Random().nextInt(10));
- }catch(InterruptedException ie){
- }
- System.out.println(this.name + "活干完了!");
- this.downLatch.countDown();
- }
- private void doWork(){
- System.out.println(this.name + "正在干活!");
- }
- }
- package org.zapldy.concurrent;
- import java.util.concurrent.CountDownLatch;
- public class Boss implements Runnable {
- private CountDownLatch downLatch;
- public Boss(CountDownLatch downLatch){
- this.downLatch = downLatch;
- }
- public void run() {
- System.out.println("老板正在等所有的工人干完活......");
- try {
- this.downLatch.await();
- } catch (InterruptedException e) {
- }
- System.out.println("工人活都干完了,老板开始检查了!");
- }
- }
- package org.zapldy.concurrent;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class CountDownLatchDemo {
- public static void main(String[] args) {
- ExecutorService executor = Executors.newCachedThreadPool();
- CountDownLatch latch = new CountDownLatch(3);
- Worker w1 = new Worker(latch,"张三");
- Worker w2 = new Worker(latch,"李四");
- Worker w3 = new Worker(latch,"王二");
- Boss boss = new Boss(latch);
- executor.execute(w3);
- executor.execute(w2);
- executor.execute(w1);
- executor.execute(boss);
- executor.shutdown();
- }
- }
当你运行CountDownLatchDemo这个对象的时候,你会发现是等所有的工人都干完了活,老板才来检查,下面是我本地机器上运行的一次结果,可以肯定的每次运行的结果可能与下面不一样,但老板检查永远是在后面的。
好了,就写到这里,睡觉去了!