content

手动实现一个redux

笑着哭i 提交于 2019-12-27 14:05:56
分为以下几步: 1、修改数据通过dispatch来修改 2、抽离store,数据抽象出来一个 createStore,它可以产生 store,里面包含 getState 和 dispatch 函数 3、观察者模式监控数据 4、共享结构对象提高性能 5、合并方法,stateChanger 为 reducer,定义了 reducer 只能是纯函数,功能就是负责初始 state,和根据 state 和 action 计算具有共享结构的新的 state 在开发过程中如果有共享状态可以被随意的修改是很危险的, 第一步 定义一个dispatch函数专门负责数据的修改,数据的修改都要经过这个dispatch函数 let appState = { title: { text: ‘React.js 小书’, color: ‘red’, }, content: { text: ‘React.js 小书内容’, color: ‘blue’ } } function dispatch (action) { switch (action.type) { case ‘UPDATE_TITLE_TEXT’: appState.title.text = action.text break case ‘UPDATE_TITLE_COLOR’: appState.title.color = action.color

[c#] WebQQ群发限制的突破

折月煮酒 提交于 2019-12-27 10:03:22
任何事物都有双面性。 WebQQ作为一个跨平台的一站式QQ体验,继承了PC版QQ的很多优点,因此,也越来越受到营销行业人士的青睐。批量群发消息,省去很多重复性的工作。但是,众所周知的,由于群发所需的技术门槛极低,网上充斥着很大一部分的垃圾信息和骚扰广告,给很多QQ用户都带来了困扰,增加了其对群发消息的厌恶感。TX为了和谐聊天环境,采取了对WebQQ的诸多限制。本文试图从营销行业QQ群发的技术层面讨论一下,怎么样突破群发限制,并非鼓噪大家群发扰民! 1. 什么是WebQQ群发? WebQQ群发包括了对QQ好友和陌生批量性发送消息,以及QQ群群聊批量性发送消息到多个群。 2. WebQQ有哪些限制? 发送给好友的消息,发送端显示正常发送,好友却并没有收到; 字数有限制,无法发送TX内定的屏蔽字词; 发送图片数量以及不能重复发送的限制 3. WebQQ群发的C#实现 本文假定您已经完成了WebQQ的二次登录,我们要实现的是对QQ好友信息的发送,以及多线程批量发送,QQ群消息发送,QQ群内成员消息发送。 假设您已经获取了登录所带过来的Cookie,装在了一个全局变量QQGlobal.ACCountManager[this.Uin].CookieContainer里(其中QQGlobal是我设定的一个专门装载全局变量的公有类,AccountManager是一个字典Dictionary

学习——伪类+js实现css3 media queries跨界准确判断

可紊 提交于 2019-12-27 09:58:27
本文转自: http://www.zhangxinxu.com/wordpress/?p=2387 media queries可以让设备在不同尺寸下应用不同的css样式、布局等。以适应手持设备、普屏显示器、宽屏显示器,以及未来冰箱上的联网显示器,汽车上的数码设备等。然后,仅仅通过css做布局可能无法应对所有的交互请求。 举个简单的例子,我们打开浏览器可能处于非最大化状态,此时,如果作为普屏处理,加载的图片可能就是128*128的小尺寸图片。但是,当我们最大化以获得更好阅读体验的时候,需要使用更大尺寸的图片256*256, 使用media queries?拜托,css只能改变外在的尺寸,你难道要2倍尺寸拉伸?显然,更合理的做法是加载256*256尺寸的中等尺寸图片。以目前的技术而言,估计除了使用js修改图片src外,很难有其他更可用的方法了。 OK,现在问题来了,如何让js的修改与css布局改变同步呢? 二、css交互与js交互同步问题 如何让css样式、布局改变的时候,同时准确触发js的交互呢? 方法一、直接宽度/高度值匹配 何意?css3 media queries跨界触发一般都有一个宽度或高度值,或是color(很少使用)。例如,普屏图片宽度128*128,可能就是如下css: @media screen and (max-width: 1024px) { img {

[UWP]使用GetAlphaMask制作阴影

只谈情不闲聊 提交于 2019-12-27 07:42:25
1. 前言 最近常常接触到GetAlphaMask,所以想写这篇文章介绍下GetAlphaMask怎么使用。其实GetAlphaMask的使用场景十分有限,Github上能搜到的内容都是用来配合DropShadow的,所以这篇文章也以介绍DropShadow为主。 2. 合成阴影 先介绍一下合成阴影。Compositor.CreateDropShadow()可以创建一个DropShadow,将这个DropShadowDropShadow赋值到SpriteVisual的Shadow属性,然后使用ElementCompositionPreview.SetElementChildVisual 将这个SpriteVisual设置到某个UIElement的可视化层里,再将这个UIElement放到需要阴影的元素后面,这样基本的合成阴影就完成了。 具体代码如下: <Grid VerticalAlignment="Center" HorizontalAlignment="Center"> <Grid x:Name="BackgroundGrid"/> <Grid Background="Turquoise" x:Name="Host"> <TextBlock Text="I need shadow" Foreground="White" HorizontalAlignment="Center"

(Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能

三世轮回 提交于 2019-12-27 05:17:03
利用JavaScript(JS)实现一个九宫格拖拽功能 Demo实现了对任意方格进行拖拽,可以交换位置,其中Demo-1利用了勾股定理判断距离! Demo-1整体思路: 1.首先div实现自由移动,一定需要脱离标准文档流,所以我们给它使用绝对定位。 2.利用视觉欺骗,点击鼠标悬浮的其实是利用JS生成的一个Div,交换信息的两个Div并没有位置交换,只是把双方属性进行了交换。 3.利用了勾股定理去判断距离。 ##效果图如下: 网页源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>九宫格拖拽</title> </head> <style type="text/css"> #content{ width: 300px; height:300px; margin: 0 auto; background: #F47564; position: relative; } #content div{ width: 100px; height: 100px; float: left; line-height: 100px; text-align: center; font-size:40px; font-weight: 900; color: #fff; cursor: pointer; position:

Lucene教程

。_饼干妹妹 提交于 2019-12-27 03:33:52
一:简单的示例 1.1:生成索引     1.1.1:Field.Store和Field.Index     1.1.2:为数字生成索引     1.1.3:为索引加权     1.1.4:为日期生成索引  1.2:查询    1.2.1:介绍IndexReader 1.3:删除    1.3.1:还原删除的文档    1.3.2:清空回收站时面的数据  1.4:更新 前言:本教程用于 Lucene3.5 ,Maven地址为 <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId> <version>3.5.0</version> </dependency> 一:简单的示例 我就不介绍Lucene了,想来看这篇博客的人,都知道Lucene是什么。直接给出生成索引,和查询的示例 1.1:生成索引 生成索引的代码如下: /** * 创建索引 */ public void index(){ IndexWriter writer = null; try { //1、创建Derictory // Directory directory = new RAMDirectory();//这个方法是建立在内存中的索引 Directory directory = FSDirectory

增量式爬虫

前提是你 提交于 2019-12-26 22:31:39
一、增量式爬虫 概念:通过爬虫程序监测某网站数据更新的情况,以便可以爬取到该网站更新出的新数据。 如何进行增量式的爬取工作: 在发送请求之前判断这个URL是不是之前爬取过 在解析内容后判断这部分内容是不是之前爬取过 写入存储介质时判断内容是不是已经在介质中存在 分析: 不难发现,其实增量爬取的核心是 去重 , 至于去重的操作在哪个步骤起作用,只能说各有利弊。在我看来,前两种思路需要根据实际情况取一个(也可能都用)。第一种思路适合不断有新页面出现的网站,比如说小说的新章节,每天的最新新闻等等;第二种思路则适合页面内容会更新的网站。第三个思路是相当于是最后的一道防线。这样做可以最大程度上达到去重的目的。 去重方法 将爬取过程中产生的url进行存储,存储在redis的set中。当下次进行数据爬取时,首先对即将要发起的请求对应的url在存储的url的set中做判断,如果存在则不进行请求,否则才进行请求。 对爬取到的网页内容进行唯一标识的制定,然后将该唯一表示存储至redis的set中。当下次爬取到网页数据的时候,在进行持久化存储之前,首先可以先判断该数据的唯一标识在redis的set中是否存在,在决定是否进行持久化存储。 二.项目案例 1、 需求:爬取4567tv网站中所有的电影详情数据。-- url去重 将爬取过程中产生的url进行存储,存储在redis的set中。下次爬取时判断是否存在

scrapycrawl 爬取笔趣阁小说

六月ゝ 毕业季﹏ 提交于 2019-12-26 19:56:37
前言 第一次发到博客上..不太会排版见谅 最近在看一些爬虫教学的视频,有感而发,大学的时候看盗版小说网站觉得很能赚钱,心想自己也要搞个,正好想爬点小说能不能试试做个网站(网站搭建啥的都不会...) 站点拥有的全部小说不全,只能使用crawl爬全站 不过写完之后发现用scrapy爬的也没requests多线程爬的快多少,保存也不好一本保存,由于scrapy是异步爬取,不好保存本地为txt文件,只好存mongodb 捂脸 下面是主代码 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from biquge5200.items import Biquge5200Item class BqgSpider(CrawlSpider): name = 'bqg' allowed_domains = ['bqg5200.com'] start_urls = ['https://www.bqg5200.com/'] rules = ( Rule(LinkExtractor(allow=r'https://www.bqg5200.com/book/\d+/'), follow=True),

font拓展字体

这一生的挚爱 提交于 2019-12-26 04:47:10
最近接触了一个将字体拓展的方法,感觉很不错,所以积累一下。 最近接触的项目一直再用antd,它本身已经提供了很多图标,但是依然不够用,所以需要我们拓展出来一些。 当我们下载到本地之后,就会有几个文件,我们只需要将这几个文件引入到项目中,就可以使用了 .iconfont-mixin() { &:before { font-family:"anticon","anticon_user" !important; } } //上面的方法可以将anticon字体拓展出来,变成原来的anticon和anticon_user的并集,这一句很关键,可以覆盖less的所有字体文件 @font-face {font-family: "anticon_user"; src: url('iconfont.eot?t=1466754517'); /* IE9*/ src: url('iconfont.eot?t=1466754517#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('iconfont.woff?t=1466754517') format('woff'), /* chrome, firefox */ url('iconfont.ttf?t=1466754517') format('truetype'), /* chrome,

Android开发手记(19) 数据存储四 ContentProvider

南楼画角 提交于 2019-12-25 22:28:19
转载自:http://www.cnblogs.com/devinzhang/archive/2012/01/20/2327863.html Android为数据存储提供了五种方式: 1、SharedPreferences 2、文件存储 3、SQLite数据库 4、ContentProvider 5、网络存储 1.适用场景 1) ContentProvider为存储和读取数据提供了统一的接口 2) 使用ContentProvider,应用程序可以实现数据共享 3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等) 2.相关概念介绍 1)ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。 2)Uri类简介 Uri uri = Uri.parse("content://com.changcheng.provider