首页 文章 精选 留言 我的

精选列表

搜索[Emacs化],共10000篇文章
优秀的个人博客,低调大师

PunkSPIDER:开源大型自动化扫描系统

PunkSPIDER是一款由PunkSCAN出品的大型WEB漏洞扫描器,我们利用它已经建立了一个稳定的扫描体系,每日可以实现无人值守式的运行。此外,其中运行了一个Apache Hadoop集群,每天能处理的扫描任务数以万计。 PunkSPIDER的特性 该扫描服务会在网上随机爬行,寻找可能存在漏洞的WEB应用,发起一些诸如SQL盲注、传统SQL注入,以及XSS等攻击。游客可以通过PunkSPIDER搜索一个URL或者一个关键词,得到相关网站的结果。同时,它采用了如Apache Hadoop等大数据级别的高端技术,但幸运的是这些都是开源的。 PunkSPIDER项目的设计思想是,站长可以通过搜索自己的网站来验证其是否做好了基本的安全措施,这个结果可能会激励用户优化自身的安全措施。当然,如果是那些不怀好意的人使用了PunkSPIDER,可能会让无辜的网站受到的威胁更大。这时候,站长可以选择通过修改robots.txt,或者优化防火墙和路由的IP规则,退出该扫描器的监控。 PunkSPIDER的优势 市面上的工具有不少都能够执行有限数量的扫描,但却不是很稳定,甚至会陷入崩溃和无限循环。而PunkSPIDER建立了一个非常稳定且可扩展的扫描框架体系,每天能够无人值守地自动运行,几乎能够将扫描任务无限地运行下去。 PunkSPIDER还有不少潜在特质,其中一个就是帮助需要安全检测的组织梳理自身的公开资产。毕竟,并不是每个组织都能让安全团队给自己定期进行常规检测的。使用了PunkSPIDER之后,组织只需要在搜索框简单地输入URL,就能知道自己是否有重要的漏洞需要修复。 此外,我们认为公众也应该去了解使用它。毕竟黑客可以访问的信息,公众自己更应该了解。同时,公众通过它还可以知道,是否自己信用卡信息和其他敏感数据已经处于不安全的境地。 这里给出PunkSPIDER项目的下载地址,猛戳这里。

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

Android App图片轮播效果的组件化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/voidreturn/article/details/75139689 简介 一个通用的图片轮播效果的通用组件,方便开发者快速集成。 初学者,其实应该实现一个自定义控件的,改天有空,在学习下吧,学习能力一般,以前也没写过java,这个组件都写了好久,惭愧啊。 背景 笔者参考http://blog.csdn.net/allen315410/article/details/39294343 学习了图片轮播效果的实现。在浏览代码的过程中,总觉得图片轮播的效果和Android Activity的耦合过高,如果一个开发者要集成该功能,会将整个功能代码和自己的App代码搅在一起,提高代码的复杂度。同时图片和图片文字描述存放在两个独立的ArrayList,这样的对应关系要由开发者手动维护,时刻关注对应关系正确性。 为什么需要组件:组件开发的目的,即让开发者用最少的代码,调用最少的接口,实现开发者的需求。 以上的描述是笔者对组件概念的最基本的认识,也是基于该原则,笔者基于http://blog.csdn.net/allen315410/article/details/39294343 进行了重构,实现了一个相对内聚的组件。 图片轮播的要素 如果一个开发者需要开发一个图片轮播的功能,开发者最少需要提供的元素有哪些: 轮播的图片元素 每个图片对应的文字描述 轮播图片在布局中的位置 图片描述在布局中的位置 图片轮播的时间间隔 理论上讲,开发者只需要提高以上几个元素即可,剩下的就有组件完成吧。基于以上思路,开发者大概只需要完成类似代码即可: public class MainActivity extends Activity { //提供一个ViewPagerItem类型数组,ViewPagerItem包括了图片信息和图片对应描述信息,采用一一对应的方式,方便维护 private ViewPagerItem[] viewPagerItem = new ViewPagerItem[] { new ViewPagerItem(R.drawable.a, "0图片描述信息0"), new ViewPagerItem(R.drawable.b, "1图片描述信息1"), new ViewPagerItem(R.drawable.c, "2图片描述信息2"), new ViewPagerItem(R.drawable.d, "3图片描述信息3"), new ViewPagerItem(R.drawable.e, "4图片描述信息4"), new ViewPagerItem(R.drawable.e, "5图片描述信息5"), }; private ViewPagerShow mViewPagerShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //提供一个layout布局容器,用来指定图片展示的位置 LinearLayout container = (LinearLayout) findViewById(R.id.dot_container); //new一个ViewPagerShow,提供相应参数 mViewPagerShow = new ViewPagerShow(viewPagerItem, this, (ViewPager)findViewById(R.id.vp), mHandler, (TextView)findViewById(R.id.title), container); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); } /** * 接收子线程传递过来的数据,调用ViewPagerShow提供的update方法,实现ui的更新 */ private Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { mViewPagerShow.update(); }; }; @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); } } 浏览以上代码,不难发现该功能的加入,对开发者原有的代码的侵入范围不是很大。 用尽量少的代码,完成功能需求,是软件开发人员不断的追求。 轮播组件的实现 下面附上图片轮播效果组件的代码实现: package com.example.image.view; import android.content.Context; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import static android.content.ContentValues.TAG; /** * Created by image on 2017/7/14. */ class ViewPagerItem { public int iMageId; public String iMageTitle; public ViewPagerItem(int iMageId, String iMageTitle) { this.iMageId = iMageId; this.iMageTitle = iMageTitle; } } class ViewPagerAdapter extends PagerAdapter { private List<ImageView> iMageViews; public ViewPagerAdapter(List<ImageView> iMageViews) { this.iMageViews = iMageViews; } @Override public int getCount() { return iMageViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup view, int position, Object object) { // TODO Auto-generated method stub view.removeView(iMageViews.get(position)); } @Override public Object instantiateItem(ViewGroup view, int position) { // TODO Auto-generated method stub view.addView(iMageViews.get(position)); return iMageViews.get(position); } } class cloneView extends View { public cloneView(Context context) { super(context); } public cloneView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public cloneView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public cloneView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public Object clone(){ Object o=null; try { o=super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return o; } } class ViewPagerShow { private ArrayList<View> dots; private ViewPagerItem[] viewPagerItem; private List<ImageView> iMagesList; private Context context; private ViewPagerAdapter mViewPagerAdapter; private ViewPager mViewPager; private ScheduledExecutorService scheduledExecutorService; private Handler mHandler; private int currentItem = 0; private TextView titleText; private LinearLayout container; private View dot_focus, dot_unfocus; private class ViewPageTask implements Runnable{ @Override public void run() { currentItem = (currentItem + 1) % viewPagerItem.length; mHandler.sendEmptyMessage(0); }; } public void dotUpdate() { container.removeAllViews(); View view; for (int i = 0; i < this.viewPagerItem.length; i++) { if (i == currentItem) { view = LayoutInflater.from(context).inflate(R.layout.dot_focus, null); container.addView(view); } else { view = LayoutInflater.from(context).inflate(R.layout.dot_unfocus, null); container.addView(view); } } } public ViewPagerShow(final ViewPagerItem[] viewPagerItem, Context context, ViewPager mViewPager, Handler mHandler, final TextView titleText, LinearLayout container) { this.viewPagerItem = viewPagerItem; this.context = context; this.mViewPager = mViewPager; this.mHandler = mHandler; this.titleText = titleText; this.container = container; this.dot_focus = dot_focus; this.dot_unfocus = dot_unfocus; /* show first pic title */ titleText.setText(viewPagerItem[0].iMageTitle); iMagesList = new ArrayList<ImageView>(); for (int i = 0; i < this.viewPagerItem.length; i++) { ImageView imageView = new ImageView(context); imageView.setBackgroundResource(viewPagerItem[i].iMageId); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.d(TAG, "onClick: onClick");; } }); iMagesList.add(imageView); } dotUpdate(); mViewPagerAdapter = new ViewPagerAdapter(iMagesList); mViewPager.setAdapter(mViewPagerAdapter); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { titleText.setText(viewPagerItem[position].iMageTitle); currentItem = position; dotUpdate(); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); scheduledExecutorService.scheduleWithFixedDelay(new ViewPageTask(), 5, 5, TimeUnit.SECONDS); } public void update() { mViewPager.setCurrentItem(currentItem); titleText.setText(viewPagerItem[currentItem].iMageTitle); dotUpdate(); } } 图片轮播的原理,基本都是参考http://blog.csdn.net/allen315410/article/details/39294343 该篇blog的介绍,这里做的主要的事情即把相关的接口进行一个整理,集中,剥离出一个通用的处理组件,方便开发者的集成。 目前该组件的实现还比较粗糙,待后续持续的更新,完善 文章写的很随意,时间精力关系很多细节没有讲到,最后附上github地址,供参考:https://github.com/imagec/ViewPager

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册