首页 文章 精选 留言 我的

精选列表

搜索[推荐引擎],共10014篇文章
优秀的个人博客,低调大师

推荐一款优雅的日历控件

原文链接:https://mp.weixin.qq.com/s/SmxDiWIidHS2hwVvFcz_hw 项目需要用到日历控件,这是我们的效果图。 去github上搜了一哈,搜到大神写的CalendarView,各种炫酷效果,我这种的也只需要自定义效果就可以了,话不多说,直接开撸! 这里附上github的链接地址:https://github.com/huanghaibin-dev/CalendarView, 里面的api文档说明还是很齐全的,这里就直接记录我的开发历程。 gradle 关联 implementation 'com.haibin:calendarview:3.4.0' 使用 刚开始布局中使用的话注意是 <com.haibin.calendarview.CalendarView /> 有包名路径的,如果直接是 <CalendarView /> 使用的是系统自带的日历控件。 <com.haibin.calendarview.CalendarView android:layout_width="match_parent" android:layout_height="wrap_content" /> 可以直接预览效果,一些属性配置项: app:month_view_show_mode="mode_fix" 配置月视图的显示模式 app:current_month_text_color="#212121" 当前页月份的月字体颜色 app:other_month_text_color="#cccccc" 当前页其余月份的月字体颜色 等等一系列的属性配置,文档里都是有的。当然要实现自己的效果,那些属性是不够的,需要我们自定义MonthView 去实现(项目地址里也有demo可下载参考)。 自定义 MonthView 自定义MyMonthView 类继承自 MonthView,xml布局里添加属性 app:month_view="com.calendar.MyMonthView",这里的路径是自己实际项目中的monthView的路径,需要我们自己去绘制日历。 //取消日历字体加粗 mCurMonthTextPaint.setFakeBoldText(false); mOtherMonthTextPaint.setFakeBoldText(false); 这里插个题外的知识点tip: setFakeBoldText(true) 的加粗效果比 android:textStyle="bold" 属性的加粗效果要弱点,就是不会太粗,又比细稍微粗一点的效果~ 了解一下 在onDrawText里进行绘制,正常样式的日历可正常显示时间的 @Override protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) { float baselineY = mTextBaseLine + y; int cx = x + mItemWidth / 2; int cy = y + mItemHeight / 2; canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint); } 这里要分类下我们需要几种类型的样式: 1、不可完成的 2、可以完成的 3、今日已完成的 4、历史已完成的 模拟数据,通过scheme 标记区分各样式 Calendar calendar1 = getSchemeCalendar(2018, 8, 11, "1"); Calendar calendar2 = getSchemeCalendar(2018, 8, 12, "2"); Calendar calendar3 = getSchemeCalendar(2018, 8, 13, "3"); Calendar calendar4 = getSchemeCalendar(2018, 8, 6, "4"); map.put(calendar1.toString(), calendar1); map.put(calendar2.toString(), calendar2); map.put(calendar3.toString(), calendar3); map.put(calendar4.toString(), calendar4); calendarView.setSchemeDate(map); private Calendar getSchemeCalendar(int year, int month, int day, String text) { Calendar calendar = new Calendar(); calendar.setYear(year); calendar.setMonth(month); calendar.setDay(day); calendar.setScheme(text); return calendar; } 初始化两个paint,有两张图片资源的用Bitmap去绘制 paint1.setColor(ContextCompat.getColor(context, R.color.green)); paint1.setTextSize(DensityUtil.spToPx(context, 13)); paint1.setStyle(Paint.Style.STROKE); paint1.setAntiAlias(true); paint1.setTextAlign(Paint.Align.CENTER); paint2.setColor(ContextCompat.getColor(context, R.color.white)); paint2.setTextSize(DensityUtil.spToPx(context, 13)); paint2.setAntiAlias(true); paint2.setTextAlign(Paint.Align.CENTER); dayBgBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.day_bg); daySuccessBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.day_success); 主要的方法 onDrawText ,根据不同scheme 绘制各view @Override protected void onDrawText(Canvas canvas, Calendar calendar, int x, int y, boolean hasScheme, boolean isSelected) { //这里的x、y 是每日的起点坐标 float baselineY = mTextBaseLine + y; int cx = x + mItemWidth / 2; int cy = y + mItemHeight / 2; if ("1".equals(calendar.getScheme())) { // 不可完成的,绘制圆 paint1.setStrokeWidth(0); canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, paint1); paint1.setStrokeWidth(DensityUtil.dpToPx(context, 1)); canvas.drawCircle(cx, cy + 3, mItemWidth / 4 - 9, paint1); } else if ("2".equals(calendar.getScheme())) { //可以完成的,绘制背景图 canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, paint2); canvas.drawBitmap(dayBgBitmap, x + mItemWidth / 4 - 5, y + mItemHeight / 4 + 8, paint2); } else if ("3".equals(calendar.getScheme())) { //今日已完成的,绘制圆+打勾图片 paint1.setStrokeWidth(0); canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, paint1); paint1.setStrokeWidth(DensityUtil.dpToPx(context, 1)); canvas.drawCircle(cx, cy + 3, mItemWidth / 4 - 9, paint1); canvas.drawBitmap(daySuccessBitmap, x + mItemWidth * 3 / 4 - 18, y + mItemHeight * 3 / 4 - 24, paint1); } else if ("4".equals(calendar.getScheme())) { //历史已完成的,绘制打勾图片 paint1.setStrokeWidth(0); canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, paint1); canvas.drawBitmap(daySuccessBitmap, x + mItemWidth * 3 / 4 - 18, y + mItemHeight * 3 / 4 - 40, paint1); } else { //正常日期的显示 canvas.drawText(String.valueOf(calendar.getDay()), cx, baselineY, calendar.isCurrentMonth() ? mCurMonthTextPaint : mOtherMonthTextPaint); } } 至此,视图绘制完成。 接下来完成基本的api调用。 api 调用 初始化赋值当前的年月,日历切换时,时间对应改变。 //初始化当前年月 tvMonth.setText(calendarView.getCurYear() + "年" + calendarView.getCurMonth() + "月"); //月份切换改变事件 calendarView.setOnMonthChangeListener(new CalendarView.OnMonthChangeListener() { @Override public void onMonthChange(int year, int month) { tvMonth.setText(year + "年" + month + "月"); } }); 布局里有个时间选择器,用于选择年月的,这里采用的是 Android-PickerView 时间选择器。 //时间选择器选择年月,对应的日历切换到指定日期 picker.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TimePickerView pvTime = new TimePickerBuilder(MainActivity.this, new OnTimeSelectListener() { @Override public void onTimeSelect(Date date, View v) { java.util.Calendar c = java.util.Calendar.getInstance(); c.setTime(date); int year = c.get(java.util.Calendar.YEAR); int month = c.get(java.util.Calendar.MONTH); //滚动到指定日期 calendarView.scrollToCalendar(year, month + 1, 1); } }).setType(type).build(); pvTime.show(); } }); 日期的选择监听事件 calendarView.setOnDateSelectedListener(new CalendarView.OnDateSelectedListener() { @Override public void onDateSelected(Calendar calendar, boolean isClick) { } }); 效果完成图,当然不同项目里的效果图是不一样的,只要会canvas的基本绘制都是可以达到各自想要的效果的。 详细代码见 github地址:https://github.com/taixiang/calendar 欢迎关注我的博客:https://blog.manjiexiang.cn/ 更多精彩欢迎关注微信号:春风十里不如认识你 有个「佛系码农圈」,欢迎大家加入畅聊,开心就好! 过期了,可加我微信 tx467220125 拉你入群。

优秀的个人博客,低调大师

推荐一款团队协作软件---confluence

最近发现一款非常好的团队协作软件--confluence,它可以做技术博客,发送文章,下面评论,点赞.也可以作为公司内部的团队协作软件,在线编辑word,execel,ppt等。这个功能与腾讯的在线编辑word,execel类似。但是它的功能更强大。 环境准备 ◦CentOS 6.5 ◦java jdk 1.8 ◦mysql-server 5.6 ◦confluence 5.6.6 当然也有windows版本(可以自己玩),企业的话最好还是放在服务器当中稳定 下载confiluence及其破解包 confluence有很多版本,我们可以直接通过如下连接进行查看confluence下载地址 image.png 通过上图,我们可以看出confluence对于windows和linux平台每一个版本有多种安装包, 在此我们选择的是bin方式。除此之外,我们也可以看到目前confluence最新版本是6.0.1。 下载confluence5.6.6 curl -o atlassian-confluence-5.6.6-x64.binconfluence破解包 创建数据库 在安装confluence之前,我已经安装好了mysql5.6的数据库,并且创建了数据库和用户,语句如下 mysql> CREATE DATABASE confluence CHARACTER SET utf8 COLLATE utf8_bin; mysql> GRANT ALL PRIVILEGES ON confluence.* TO 'confluence'@'localhost' IDENTIFIED BY '123.com'; mysql> GRANT ALL PRIVILEGES ON confluence.* TO 'confluence'@'10.16.10.44' IDENTIFIED BY '123.com'; mysql> FLUSH PRIVILEGES; 安装confluence chmod +x atlassian-confluence-5.6.6-x64.bin ./atlassian-confluence-5.6.6-x64.bin image 通过上图,我们可以很明显的看出confluence安装到了/opt/atlassian/confluence和/var/atlassian/application-data/confluence目录下,并且confluence监听的端口是8090 下面访问地址 192.168.4.38:8090 image.png 破解confluence 关闭confluence service confluence stop 删除jar文件 cd /opt/atlassian/confluence/confluence/WEB-INF/lib/ ll | grep atlassian-extras | wc -l 6 rm -fr atlassian-extra* 解压破解包,把里面的atlassian-extras-3.2.jar、Confluence-5.6.6-language-pack-zh_CN.jar、mysql-connector-java-5.1.39-bin.jar三个jar文件复制到/opt/atlassian/confluence/confluence/WEB-INF/lib目录下 cd /work/confluence5.6.6-crack/jar/ cp ./* /opt/atlassian/confluence/confluence/WEB-INF/lib/ service confluence start # 并启动服务 其中atlassian-extras-3.2.jar文件是和license相关的,Confluence-5.6.6-language-pack-zh_CN.jar是confluence中文语言包,而mysql-connector-java-5.1.39-bin.jar是confluence连接mysql数据库相关的jar包。 运行破解jar包 java -jar confluence_keygen.jar 把上述复制的Server ID粘贴进去,然后点击 gen image 开始安装confluence image image image image image image image 相关资源路径: 利用Confluence搭建企业Wiki Windows下安装Confluence并破解汉化 刚开始用,后续再更新.感觉可以做自己的个人博客非常适合,也可以点赞查看,作为团队协作工具也是非常好的一个软件。

优秀的个人博客,低调大师

推荐Python数据框Pandas视频教程

若要独立用 Python 处理数据科学问题,Pandas 是绕不过去的。 新番 今天,花了一上午的时间,跟着这个 Youtube 系列教程,学习了 Pandas 中级技巧。 视频来自于 Data School。发布者是 Kevin Markham 。 在这个系列视频教程里, Kevin 将自己的 PYCON 2018 workshop 分成了10个部分全部精剪后释出。一步步带你领略 Pandas 的魅力。 我用了2个多小时,完成了他10个视频的全部内容。 收获颇丰。 利用教程中提到的美国交通警务数据来自于斯坦福开放警务项目(THE STANFORD OPEN POLICING PROJECT)。 这是数据大概的样子: 一步步按照 Kevin 的指令练习,你可以完成这些内容: 分析男女司机的交通违规都包括哪些类别?每一类占比如何? 那些被搜查车辆的男女司机,各是由于什么原因? 哪个时段,警察发现违规的数量最多? 不同违规行为里,司机年龄是如何分布的? 这些分析结果,只是这个教程的一小部分而已。 更妙的是,上述这些图形,几乎都是利用两三条 Pandas 语句,就可以做出。有的只需要一条就可以。 怎么样?有没有想学习的冲动? 教程与 ipynb 文件,都可以从这个github repo下载。 安装好 Anaconda 3之后,你就可以打开一个 Jupyter Notebook,跟着视频一起做了。 老友 说说我是怎么找到这么好的视频教程的。 其实一点儿也不稀奇。

优秀的个人博客,低调大师

推荐几本WinCE 6程序开发的书

因为学校期中考试和课程设计的原因,winCE6的项目开发耽误了一个多月的时间,现在学校没什么事情了,公司这边杂事也差不多办完了,可以专心的搞开发了,同时这也成了我的毕业设计,我不得不上心喽。 今天在卓越上搜索wince6的开发书籍,找了几本看上去不错的,贴在这里跟大家分享下:1.《Windows Embedded CE6.0程序设计实战》 -http://www.amazon.cn/Windows-Embedded-CE6-0%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%AE%9E%E6%88%98-%E5%A7%9C%E6%B3%A2/dp/B001VNCV34/ref=sr_1_12?s=books&ie=UTF8&qid=1295249406&sr=1-12 -《Windows Embedded CE6.0程序设计实战》系统介绍了嵌人式系统程序设计方法。全书共18章,分别介绍以下内容:Window Embedded CE 6.0程序设计的基础知识(第1~7章);Windows Embedded CE 6.0程序设计的实例(第8~14章);基于windows Embedded CE 6.0的高级程序设计(第15~18章)。 -《Windows Embedded CE6.0程序设计实战》特色:内容详实,涵盖了Windows Embedded CE 6.0程序设计的基础知识和程序设计技巧。介绍了Visual Studio 2005集成开发环境的使用方法,及使用Visual C#2005和Visual Basic 2005构建WindowsEmbedded CE 6.0下游戏程序的过程。 介绍了使用Platform Builder for CE 6.0进行Windows Embedded CE 6.0内核定制的过程,且所有程序代码都运行在这一自定义的模拟器上。 配套光盘 包含TWindows Embedded CE 6.0版“连连看”、“俄罗斯方块”等多种游戏程序实例。同时,所有的程序实例在书中均有详细的代码解释,使读者能够触类旁通,利于启发和培养读者的创造力。2.《Windows CE设备驱动及BSP开发指南》 -http://www.amazon.cn/Windows-CE%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E5%8F%8ABSP%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97-%E5%91%A8%E5%BB%BA%E8%AE%BE/dp/B002C75PC2/ref=sr_1_4?s=books&ie=UTF8&qid=1295249406&sr=1-4 -《Windows CE设备驱动及BSP开发指南》是《WindowsCE项目开发实践丛书》之一。《Windows CE设备驱动及BSP开发指南》围绕着一个BSP的实例开发为中心进行讲解,对WindowsCE设备驱动程序的开发、调试、移植、BootLoader开发、OAL开发、BSP相关配置文件的设置等做了深人地剖析。此外,还在此实例BsP基础上介绍了开发家庭智能化系统的流程。 《Windows CE设备驱动及BSP开发指南》可作为高等院校电子、电气、控制、计算机等专业本科生、研究生学习WindowsCE设备驱动及BSP开发的参考书或自学教材,也可供从事嵌人式领域的科研和工程技术人员参考使用,还可作为嵌入式培训班的教材。 -《Windows CE设备驱动及BSP开发指南》由18章组成,分三大部分。第一部分是第1~11章,主要介绍Windows CE下设备驱动程序的开发过程,涉及设备驱动程序开发的基本概念,相关设备驱动实例讲解,设备驱动程序调试、移植等内容;第二部分是第12~17章,主要介绍如何开发一个BSP,涉及BSP基本概念,Boot Loader开发,OAL开发,相关文件配置等;第三部分是在第一、二部分的基础上进行举例说明,主要介绍一个家庭智能化系统的项目开发。3.《Windows CE6.0开发者参考 》(原书第4版) -http://www.amazon.cn/Windows-CE6-0%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%82%E8%80%83-%E5%8E%9F%E4%B9%A6%E7%AC%AC4%E7%89%88-%E6%9F%8F%E6%9E%97-Boling-D/dp/B001W0ZXCM/ref=sr_1_1?s=books&ie=UTF8&qid=1295249406&sr=1-1 -《Windows CE6.0开发者参考(原书第4版)》包含“Windows编程基础”、“Windows CE编程”、“高级Windows CE”三部分内容,帮助你全面了解Windows CE操作系统。同时包含大量Windows CE示例程序,所有的例子都是直接用API编写的,教会你如何编写Windows CE程序。Windows CE API的知识可以使我们更高效地使用MFC。 《Windows CE6.0开发者参考(原书第4版)》是为所有在Windows CE下开发应用程序的人编写的,能为他们提供有价值的信息,使他们更加轻而易举地完成自己的任务。 -开发嵌入式和移动设备的权威指南: 《Windows CE6.0开发者参考(原书第4版)》是获得新颖、实用的开发小尺寸应用程序的参考,它已经针对Windows Embedded CE6.0内核进行了更新。《Windows CE6.0开发者参考(原书第4版)》由嵌入式应用程序开发的权威人士编写,专注于操作系统核心概念和Win32API。提供了广泛的代码示例和项目示例。帮助你在新一代设备上熟练地开发创新的应用程序。 主要内容: 针对嵌入式设备的独特需求设计复杂的应用程序。 管理虚拟内存、堆和栈以减小程序的内存占用。 创建多线程进程和处理事件。 使用存储管理器来管理不同的文件系统和卷。 使用数据库API存储简单的分组数据。 读写注册表数据,枚举主键和键值。 调度用户、计时器和系统事件,以及气泡通知。 连接到有线和无线网络,PC以及其他设备。4.《Windows CE嵌入式高级编程及其实例详解(用C++实现) 》 -http://www.amazon.cn/Windows-CE%E5%B5%8C%E5%85%A5%E5%BC%8F%E9%AB%98%E7%BA%A7%E7%BC%96%E7%A8%8B%E5%8F%8A%E5%85%B6%E5%AE%9E%E4%BE%8B%E8%AF%A6%E8%A7%A3-%E7%94%A8C-%E5%AE%9E%E7%8E%B0-%E6%B1%AA%E5%85%B5/dp/B001EJNW3I/ref=sr_1_2?s=books&ie=UTF8&qid=1295249406&sr=1-2 -《Windows CE嵌入式高级编程及其实例详解(用C++实现)》讲述随着个人掌上电脑PocketPC、智能手机MobilePhone及工业控制器等各种嵌入式产品的飞速发展,MicrosoftWindowsCE嵌入式操作系统也随着不断发展壮大,市场占有率越来越高。《Windows CE嵌入式高级编程及其实例详解(用C++实现)》基于VisualC++2005深入浅出地介绍了WindowsCE开发的相关知识以及开发过程中的重点和难点问题。全书共分15章,分别为WindowsCE以及开发环境概述、图形编程、对话框控件、进程、线程、文件、多媒体编程、WindowsCE基础数据库编程、SQLCE3.0数据库编程、串口编程、网络编程概述、UDP编程、TCP编程、DLL编程以及COM编程。《Windows CE嵌入式高级编程及其实例详解(用C++实现)》中的很多技术和参考示例是作者多年技术研发工作的经验总结和提炼升华,具备很强的借鉴和指导意义。读者在具备一定的C++知识的基础上,通过《Windows CE嵌入式高级编程及其实例详解(用C++实现)》的学习,可以快速提高WindowsCE的编程能力和实际开发水平。《WindowsCE嵌入式高级编程及其实例详解》示例基于WindowsMobile6平台进行讲述演示,这些示例也可极其方便地应用到WindowsCE4.2、WindowsCE5.0、WindowsCE6.0等WindowsCE标准平台。 -通过《Windows CE嵌入式高级编程及其实例详解(用C++实现)》,您将会学到WindowsCE编程的基础知识和实战技术。 实用开发技术:《Windows CE嵌入式高级编程及其实例详解(用C++实现)》中讲述的实例能够辅助开发人员设计出界面美观、功能强大、性能稳定的WindowsCE应用程序,同时书中的相关代码模块对于工程技术人员具有极高的参考价值,为读者日后设计开发项目提供借鉴和参考。

优秀的个人博客,低调大师

OpenCV相关网站推荐(Informative websites related to OpenCV)

原文来自: http://answers.opencv.org/question/69691/informative-websites-related-to-opencv/ i think it will be useful if we add links of informative websites related to OpenCV here. Lets create a list together. 计划花费1个星期左右时间,将其中标红的而且能够开打的网站进行初步研究,写出调查结果。 C ++ http://codecapsule.com/category/compu... OpenCV simplified for beginners by the use of examples http://www.learnopencv.com/ http://web.archive.org/web/2015031423... MoreThanTechnical notes on different topics of computer vision by Jürgen Brauer http://www.bogotobogo.com http://www.shervinemami.info/openCV.html https://github.com/MasteringOpenCV/code Some good patterns to be followed in C++ API https://gilscvblog.wordpress.com/ http://harismoonamkunnu.blogspot.in/ http://study.marearts.com/p/contents-... http://www.jayrambhia.com http://computer-vision-talks.com/tags... http://aishack.in/tutorials/ http://eric-yuan.me/ http://ramsrigoutham.com/ http://www.nithinrajs.in/category/ima... http://nghiaho.com/ (Where boredom, free time, and curiosity meet together) Using OpenCV's Test Framework (With CMake) http://opencv-srf.blogspot.com.tr/p/o... http://bytefish.de/tag/opencv/ http://felix.abecassis.me/category/op... PYTHON Nullege is a search engine for Python source code. Abid Rahman K's blog , maybe same content at opencv-python-tutroals http://www.pyimagesearch.com/ http://www.got-blogger.com/opencvpython/ http://opencvpython.blogspot.dk/ http://hanzratech.in/categories/opencv/ http://scikit-learn.org/stable/auto_e... JAVA http://opencv-java-tutorials.readthed... https://github.com/atduskgreg/opencv-... ANDROID https://github.com/DeLaSalleUniversit... YOUTUBE https://www.youtube.com/channel/UClOg... : A complete course of Computer Vision. COMPUTER VISION http://www.computervisionblog.com Awesome Computer Vision Andrej Karpathy Reproducible Research in Computational Science https://msopentech.com/blog/tag/opencv/ http://vision.ucsd.edu/~pdollar/resea... http://arxiv.org/list/cs.CV/recent https://github.com/kjw0612/awesome-de... ( thank to @berak) https://www.reddit.com/r/computervision/ http://web.media.mit.edu/~roys/ http://www.cs.berkeley.edu/~rbg/ http://www.haralick.org/ http://davidstutz.de/tag/computer-vis... VLFeat -- Vision Lab Features Library cvlibs.net Other Related & Non-English Resources http://opencv.jp/ http://acodigo.blogspot.com.es/p/tuto... http://www.aprendiendoando.com/opencv http://turing.iimas.unam.mx/~ivanvlad... http://visionlabs.cl/blog/?cat=5 http://disparity.wikidot.com/ http://www.tutorialspoint.com/compute... http://hanzratech.in/categories/opencv/ https://github.com/isocpp/CppCoreGuid... http://rodrigob.github.io/ http://www.codeproject.com/search.asp... Open Source Landmarking Library Learning, Recognition, and Surveillance Something More for Research - Hemprasad Badgujar Academic Web Pages Computer Vision Group at RWTH Aachen University IPOL Journal · Image Processing On Line-Very useful journal with access to sourcecode & paper. Berkeley University Computer Vision page University of Central Florida Computer Vision Foundation open access Computer Vision Group Middlebury Stereo Vision - Stereo Based Larry S. Davis William Robson Schwartz Zhang Ming's github repo contains academic papers about Computer Vision http://www.cvpapers.com/ Active Vision Laboratory - University of Oxford Torr Vision Group Philipp Krähenbühl James Hays DATABASE Center for Machine Learning and Intelligent Systems Unfiltered faces for gender and age classification Motion and Change Detection - Video Database The Stanford Mobile Visual Search Dataset ... 实现了非常棒的人脸变化的结果,但是不开源。相关资料(他引用的技术)值得进一步研究 同时,他提到使用了grabcut实现这样的效果。我们下一步将在android平台上实现这些技术。 这个网站就是比较杂了,属于专门做教程的网站,应该说我也是从它上面获得了很多教益。和所有做这个方面工作的人一样,大家都将未来的主要方向转向了大数据、机器识别这个方面。 《Mastering OpenCV with Practical Computer Vision Projects》这本书里面是有相关资料的,如果下一步做人脸识别是应该来做相关参考的。 之前看过它的相关资料,应该说很久不更新了。 Some C++ good practices from the OpenCV source code 这篇文章是非常少见的分析OpenCV自己代码的文章,非常有价值。 只有一些比较旧的资料了,而且我一直不觉得使用高级语言来写OpenCV程序是一个好主意。 基于人脸实现了emotion、age、gender,应该说还是很实用,之前做了比较多的特征点方面的研究。 之前好像介绍过,这里实现的这个CloudCV也是下一步需要继续研究的东西,当然可能还有其它的实现方法。 非常值得注意的是,这个网站提供了很不错的学习资料。 最后,这几个例子的价值是非常高的。 这个网站之前也是学习过的,应该说是比较注重理论的。 这个网站中实现了比较完整的barcode的例子,应该说是做了比较系统的基础工作的。 提供了一些比较老的文章,但是他提供的东西基本是OpenCV官方认可的了。 这个网站光是提供的这个例子就值得好好研究。 来自为知笔记(Wiz) 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

优秀的个人博客,低调大师

Google推荐的图片加载库Glide介绍

http://blog.csdn.net/jianghejie123/article/details/44725649 英文原文Introduction to Glide, Image Loader Library for Android, recommended by Google 译文首发http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0327/2650.html 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。 它的成功让我非常感兴趣。我花了一整晚的时间把玩,决定分享一些自己的经验。在开始之前我想说,Glide和Picasso有90%的相似度,准确的说,就是Picasso的克隆版本。但是在细节上还是有不少区别的。 导入库 Picasso和Glide都在jcenter上。在项目中添加依赖非常简单: Picasso [js] view plain copy dependencies{ compile'com.squareup.picasso:picasso:2.5.1' } Glide [js] view plain copy dependencies{ compile'com.github.bumptech.glide:glide:3.5.2' compile'com.android.support:support-v4:22.0.0' } Glide需要依赖Support Library v4,别忘了。其实Support Library v4已经是应用程序的标配了,这不是什么问题。 基础 就如我所说的Glide和Picasso非常相似,Glide加载图片的方法和Picasso如出一辙。 Picasso [js] view plain copy Picasso.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg") .into(ivImg); Glide [js] view plain copy Glide.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg") .into(ivImg); 虽然两者看起来一样,但是Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。 同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。 默认Bitmap格式是RGB_565 下面是加载图片时和Picasso的比较(1920x1080 像素的图片加载到768x432的ImageView中) 可以看到Glide加载的图片质量要差于Picasso(ps:我看不出来哈),为什么?这是因为Glide默认的Bitmap格式是RGB_565,比ARGB_8888格式的内存开销要小一半。下面是Picasso在ARGB8888下与Glide在RGB565下的内存开销图(应用自身占用了8m,因此以8为基准线比较): 如果你对默认的RGB_565效果还比较满意,可以不做任何事,但是如果你觉得难以接受,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888: [js] view plain copy publicclassGlideConfigurationimplementsGlideModule{ @Override publicvoidapplyOptions(Contextcontext,GlideBuilderbuilder){ //Applyoptionstothebuilderhere. builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888); } @Override publicvoidregisterComponents(Contextcontext,Glideglide){ //registerModelLoadershere. } } 同时在AndroidManifest.xml中将GlideModule定义为meta-data [js] view plain copy <meta-dataandroid:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration" android:value="GlideModule"/> 这样看起来就会好很多。 我们再来看看内存开销图,这次貌似Glide花费了两倍于上次的内存,但是Picasso的内存开销仍然远大于Glide。 原因在于Picasso是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。当然,Picasso也可以指定加载的图片大小的: [js] view plain copy Picasso.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .resize(768,432) .into(ivImgPicasso); 但是问题在于你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),你也可以这样: [js] view plain copy Picasso.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .fit() .centerCrop() .into(ivImgPicasso); 现在Picasso的内存开销就和Glide差不多了。 虽然内存开销差距不到,但是在这个问题上Glide完胜Picasso。因为Glide可以自动计算出任意情况下的ImageView大小。 Image质量的细节 这是将ImageView还原到真实大小时的比较。 你可以看到,Glide加载的图片没有Picasso那么平滑,我还没有找到一个可以直观改变图片大小调整算法的方法。 但是这并不算什么坏事,因为很难察觉。 磁盘缓存 Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。 上面提到的平滑度的问题依然存在,而且如果加载的是RGB565图片,那么缓存中的图片也是RGB565。 我尝试将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来。 具体说来就是:假如在第一个页面有一个200x200的ImageView,在第二个页面有一个100x100的ImageView,这两个ImageView本来是要显示同一张图片,却需要下载两次。 不过,你可以改变这种行为,让Glide既缓存全尺寸又缓存其他尺寸: [js] view plain copy Glide.with(this) .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg") .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide); 下次在任何ImageView中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。 Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,即便你添加了这段代码来让其立即显示: [js] view plain copy //Picasso .noFade(); Picasso和Glide各有所长,你根据自己的需求选择合适的。 对我而言,我更喜欢Glide,因为它远比Picasso快,虽然需要更大的空间来缓存。 特性 你可以做到几乎和Picasso一样多的事情,代码也几乎一样。 Image Resizing [js] view plain copy //Picasso .resize(300,200); //Glide .override(300,200); Center Cropping [js] view plain copy //Picasso .centerCrop(); //Glide .centerCrop(); Transforming [js] view plain copy //Picasso .transform(newCircleTransform()) //Glide .transform(newCircleTransform(context)) 设置占位图或者加载错误图: [js] view plain copy //Picasso .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) //Glide .placeholder(R.drawable.placeholder) .error(R.drawable.imagenotfound) 几乎和Picasso一样,从Picasso转换到Glide对你来说就是小菜一碟。 有什么Glide可以做而Picasso做不到 Glide可以加载GIF动态图,而Picasso不能。 同时因为Glide和Activity/Fragment的生命周期是一致的,因此gif的动画也会自动的随着Activity/Fragment的状态暂停、重放。Glide 的缓存在gif这里也是一样,调整大小然后缓存。 但是从我的一次测试结果来看Glide 动画会消费太多的内存,因此谨慎使用。 除了gif动画之外,Glide还可以将任何的本地视频解码成一张静态图片。 还有一个特性是你可以配置图片显示的动画,而Picasso只有一种动画:fading in。 最后一个是可以使用thumbnail()产生一个你所加载图片的thumbnail。 其实还有一些特性,不过不是非常重要,比如将图像转换成字节数组等。 配置 有许多可以配置的选项,比如大小,缓存的磁盘位置,最大缓存空间,位图格式等等。可以在这个页面查看这些配置Configuration。 库的大小 Picasso (v2.5.1)的大小约118kb,而Glide (v3.5.2)的大小约430kb。 Anyway 312KB difference might not be that significant. 不过312kb的差距并不是很重要。 Picasso和Glide的方法个数分别是840和2678个。 必须指出,对于DEX文件65535个方法的限制来说,2678是一个相当大的数字了。建议在使用Glide的时候开启ProGuard。 总结 Glide和Picasso都是非常完美的库。Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏。不过Picasso的图片质量更高。你更喜欢哪个呢? 虽然我使用了很长时间的Picasso,但是我得承认现在我更喜欢Glide。我的建议是使用Glide,但是将Bitmap格式换成 ARGB_8888、让Glide缓存同时缓存全尺寸和改变尺寸两种。 相关资源 -Glide 3.0: a media management library for Android -Glide Wiki -Android Picasso vs Glide -Android: Image loading libraries Picasso vs Glide 本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/4479868.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

1.4 Ecosystem官网剖析(博主推荐)

一切来源于官网 http://kafka.apache.org/documentation/ 1.4 Ecosystem 生态系统 There are a plethora of tools that integrate with Kafka outside the main distribution. Theecosystem pagelists many of these, including stream processing systems, Hadoop integration, monitoring, and deployment tools. 还有很多与kafka集成的外部的工具。更多信息点击这里,包含了stream处理系统,hadoop的集成,监控和部署工具。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6767437.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

微服务系列-Spring Cloud优质项目推荐

Spring Cloud 微服务架构集大成者,云计算最佳业务实践。 image.png Spring Cloud Spring Cloud Config Spring 配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及Subversion。 Spring Cloud Bus Spring 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。 Eureka Netflix 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。 Eureka Server会提供服务注册服务,各个服务节点启动后,会在Eureka Server中进行注册,这样Eureka Server中就有了所有服务节点的信息,并且Eureka有监控页面,可以在页面中直观的看到所有注册的服务的情况。 Eureka有心跳机制,当某个节点服务在规定时间内没有发送心跳信号时,Eureka会从服务注册表中把这个服务节点移除。Eureka还提供了客户端缓存的机制,即使所有的Eureka Server都挂掉,客户端仍可以利用缓存中的信息调用服务节点的服务。 Eureka一般配合Ribbon进行使用,Ribbon提供了客户端负载均衡的功能,Ribbon利用从Eureka中读取到的服务信息,在调用服务节点提供的服务时,会合理的进行负载。 Eureka通过心跳检测、健康检查、客户端缓存等机制,保证了系统具有高可用和灵活性。 Hystrix Netflix 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。 使用Hystrix实现自动降级与依赖隔离-微服务 Zuul Netflix Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。 Netflix Zuul与Nginx 性能对比 Archaius Netflix 配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。 archaius是Netflix公司开源项目之一,基于java的配置管理类库,主要用于多配置存储的动态获取。主要功能是对apache common configuration类库的扩展。在云平台开发中可以将其用作分布式配置管理依赖构件。 《Netflix Archaius 分布式配置管理依赖构件》 Consul HashiCorp 封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。 Spring Cloud for Cloud Foundry Pivotal 通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。 Spring Cloud Sleuth Spring 日志收集工具包,封装了Dapper和log-based追踪以及Zipkin和HTrace操作,为SpringCloud应用实现了一种分布式追踪解决方案。 Spring Cloud Data Flow Pivotal 大数据操作工具,作为Spring XD的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。 Spring Cloud Security Spring 基于spring security的安全工具包,为你的应用程序添加安全控制。 Spring Cloud Zookeeper Spring 操作Zookeeper的工具包,用于使用zookeeper方式的服务发现和配置管理。 Spring Cloud Stream Spring 数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。 Spring Cloud CLI Spring 基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。 Ribbon Netflix 提供云端负载均衡,有多种负载均衡策略可供选择,可配合服务发现和断路器使用。 Ribbon 是 Netflix 发布的云中间层服务开源项目,其主要功能是提供客户侧软件负载均衡算法,将 Netflix 的中间层服务连接在一起。 特性: Multiple and pluggable load balancing rules Integration with service discovery Built-in failure resiliency Cloud enabled Clients integrated with load balancers Archaius configuration driven client factory Turbine Netflix Turbine是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况。 Feign OpenFeign Feign是一种声明式、模板化的HTTP客户端。 通过Feign, 我们能把HTTP远程调用对开发者完全透明,得到与调用本地方法一致的编码体验。这一点与阿里Dubbo中暴露远程服务的方式类似,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是个HTTP客户端。如果是在用Spring Cloud Netflix搭建微服务,那么Feign无疑是最佳选择。 Spring Cloud Task Spring 提供云端计划任务管理、任务调度。 Spring Cloud Connectors Spring 便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。 Spring Cloud Cluster Spring 提供Leadership选举,如:Zookeeper, Redis, Hazelcast, Consul等常见状态模式的抽象和实现。 Spring Cloud Starters Pivotal Spring Boot式的启动项目,为Spring Cloud提供开箱即用的依赖管理。 个人介绍: 高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能互联网架构。 本文首发在 高广超的简书博客 转载请注明! image.png

优秀的个人博客,低调大师

热点推荐:2016年热门技术方向预测

关于2016年对技术的预测众说纷纭,我有一些在MongoDB公司的朋友和我说了他们的预测。关于Kafka和Container Orchestration的预测看来非常正确。我还想补充的一点是,微服务仍将很重要,以及Apache Spark将会如同星星之火燎原。我觉得Scala、Go、Python将急剧上升,Java将保持稳定。很多很酷的新项目和技术会以大数据,云和 devops的工作形式出现。让我们一起拭目以待吧。 数据开始在会议上展露头角:CDO(开发总监)成为财富500强的必备头衔 CIO关注于用基础设施来处理数据。CDO的任务是让组织将数据当作资本:使得数据可被访问、管理和支配,并找到提取数据值和减少违规风险之间的平衡。 日益增长的Kafka:数据流连接数据库到强大的现代业务app Kafka将成为企业数据基础架构的重要结合点,促进建立智能化、分布式的系统。随着IoT、全球性部署、以及微服务的增长,在数据被存储在数据库 之前捕捉和控制数据,变得越来越重要。Kafka和其他的流系统,如Spark和Storm将补充数据库作为企业堆栈的关键部分,用以管理跨应用程序和数 据中心的数据。 容器之争已经结束:Container Orchestration之争的烽烟却已燃起 Docker 显然已经赢得了容器之争的胜利,每个人现在都以此为标准。当前战斗已经转移到了Container Orchestration,并且数据中心的控制正处于紧要关头。有赢家,也有输家,还有一些意外。有趣的是,胜利者将是现任供应商——Red Hat和VMW——他们指明了如何从Docker和Google(Kubernetes)获取开源码,构建到自己的商业产品中,并销售给现有的买家。 应用性能瓶颈从存储转移到CPU和网络 在十多年来,性能瓶颈压倒性地取决于存储层。在此期间,CPU和网络的发展速度保持平稳,并没有太大的性能问题,因为存储层才是短板。随着存储中的 关键创新——英特尔的3D XPoint,一种NAND闪存的新形式,可以增加密度、耐久性和性能,还具备了NVME SSD的绕过文件系统的更佳更快的接口——企业架构师现在需要集中精力去优化位于CPU和网络层的应用程序。结果就是,应用程序的代码将需要被优化,以及 部署架构——和内存计算,还有保持全球范围内用户附近的数据副本一样——将成为关键。 作者:小峰 来源:51CTO

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册