精华内容
下载资源
问答
  • 如何创建email邮箱账号呢?下面我们来看看创建邮箱账号的方法以及发送邮件的使用技巧吧! 、注册电子邮箱账号 如果你想发邮件给其他人,那么前提就要有个账号帮你收发邮件。 第步:在浏览器输入你想要选择的邮箱...

    在互联网时代,与客户沟通已经不再局限于电话了,发电子邮件也成为一种新的潮流。那如何注册电子邮件呢?如何创建email邮箱账号呢?下面我们来看看创建邮箱账号的方法以及发送邮件的使用技巧吧!
    一、注册电子邮箱账号
    如果你想发邮件给其他人,那么前提就要有个账号帮你收发邮件。
    第一步:在浏览器输入你想要选择的邮箱类别,如TOM邮箱,QQ邮箱等。
    在这里插入图片描述
    第二步:按照提示进行操作就行。不同类型的邮箱需填写信息不太一致。
    在这里插入图片描述
    二、发送邮件小技巧

    1. 添加联系人
      注册成功后就可以发邮件给他人了,先登录自己的邮箱账号,然后添加联系人,目的就是不需要每次发送邮件时重复输入对方地址,减少麻烦。
      在这里插入图片描述
    2. 写信的内容
      在新建联系人列表里找到自己要发送地址,点击写信就可以转到写信界面了。此外大家在写信的过程中,一定用简洁,可使用简洁概括所有内容。
      在这里插入图片描述
    3. 主题和签名
      主题要像作文题目一样,要起到概括作用。为了让收件人清楚知道你是谁,可以设置签名。在邮箱设置中,选择个人签名,然后添加你的名字,电话,位置等信息。
      在这里插入图片描述
      上文给大家介绍了如何创建email账号,以及发送邮件需掌握的相关知识,希望能够给到大家一些帮助。大家在编辑电子邮件的过程中,一定要做到一丝不苟,以避免内容出现错误后引起不必要的误会哦。
    展开全文
  • 2.然后在创建谷歌账号时选择***改用我的当前电子邮件*** 3.然后谷歌就会给你的qq邮箱发送一个验证码,把验证码填进去。 4.接下来就可以顺利地 选择国家——中国,输入电话号码,得到一个G开头的验证码,填进去。 ...

    如何在中国大陆地区注册谷歌账号
    谷歌账号注册时"此电话号码无法用于进行验证"解决办法?

    (亲测有效,一定可以注册成功)

    1.下载谷歌浏览器后将语言改成英文
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    2.然后在创建谷歌账号时选择***改用我的当前电子邮件***
    在这里插入图片描述
    3.然后谷歌就会给你的qq邮箱发送一个验证码,把验证码填进去。
    在这里插入图片描述

    4.接下来就可以顺利地 选择国家——中国,输入电话号码,得到一个G开头的验证码,填进去。

    在这里插入图片描述

    在这里插入图片描述_![在这里插入图片描述](https://img-blog.csdnimg.cn/20200705171716883.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTMwMTQ1,size_16,color_FFFFFF,t_70在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    5.然后就创建成功了,然后就可以登陆谷歌网页查看自己要看的内容了。
    在这里插入图片描述在这里插入图片描述
    完结,求关注点赞,谢谢。

    展开全文
  • 一个分析项目,用于捕获有关用户登录/失败等方面的指标。 单击aws移动项目中的集成按钮,下载并解压缩云配置zip文件,在其中找到aws-exports.js ,然后在src/目录中替换此文件。 我使用来构建和运行该项目。 # ...
  • 介绍如何使用 Redis 去构建一个论坛 V2EX 主要功能 用户账号 创建帖子、回复帖子、为帖子投票 为帖子分类,查看属于特定分类的帖子 将多个分类(category)归类至某个标签(tab),查看属于特定标签的帖子 每日热议...

    论坛构建

    介绍如何使用 Redis 去构建一个论坛

    V2EX

    在这里插入图片描述

    主要功能

    用户账号 创建帖子、回复帖子、为帖子投票
    为帖子分类,查看属于特定分类的帖子
    将多个分类(category)归类至某个标签(tab),查看属于特定标签的帖子
    每日热议帖子排行榜
    基于算法的帖子推荐

    创建用户账号

    用户账号示例

    在这里插入图片描述

    账号注册

    注册 V2EX 账号要求输入用户名、密码和电子邮件地址,并且用户名和电子邮件地址必须是未被使用的,这和微博的账号注册要求一样。

    因此,我们可以重用之前的UniqueSet 类来保证用户名和电子邮件地址的唯一性,并重用之前的 User 类来创建论坛账号。
    在这里插入图片描述

    创建帖子

    帖子示例

    在这里插入图片描述
    一个帖子的构成部分:
    分类
    标题
    用户的投票数量
    作者
    发布时间
    点击量
    内容
    TAG

    创建帖子

    程序会为用户创建的每个帖子分配一个唯一的帖子 ID ,然后将帖子 ID 、发布时间、点击量、标题、作者的 ID、内容、分类、TAG 等信息储存到格式为 bbs::topic:: 的散列键里面。

    HMSET bbs::topic::131853 id 131853
     time 1410165226
     click_counter 0
     title “WordPress 4.0 \“Benny\” 正式版发布……”
     author_id 48771
     content “WordPress 4.0 简体中文版现已开放下载,……”
     category “WordPress”
     tags JSON([“WordPress”, “简体”, “benny”])
    

    其中 tags 属性为 JSON 列表。

    查看帖子

    V2EX 使用了两种方式来展示帖子,一种是按照分 类(category)来展示,另一种是按标签(tag)来展示,接下来我们将逐一实现这两种展示帖子的方式。

    根据分类展示帖子

    WordPress 分类,以及该分类属下的帖子

    在这里插入图片描述
    分类页面会根据帖子最后一次被回复的时间来排序帖子。

    储存分类帖子

    为了储存同一分类的帖子,并按照帖子最后一次被回复的 时间有序地排列帖子,程序会 为每个分类创建一个键名为 bbs::category::的有序集合,其中有序集合的元素 为帖子的 ID ,而元素的分值 则是帖子最后一次被回复的 UNIX 时间戳。

    例子,将最后一次回复 时间为 1410165226 ,ID 为 131853 的帖子归到 WordPress 分类里面:
    ZADD bbs::category::WordPress 1410165226 131853

    因为同一分类的帖子会被有序地储存起来,所以程序只要 对有序集合调用 ZREVRANGE 命令,就可以按照回复时间从新到旧的顺序,取出属于同一分类的多个帖子。

    我们可以将这些针对分类的操作抽象为 Category 类。

    Category 类 API

    在这里插入图片描述

    Category 类使用示例
    >>> wordpress_category = Category(client, “WordPress”)
    >>> wordpress_category.include_topic(131853)
    >>> wordpress_category.is_included(131853)
    True
    >>> wordpress_category.count_topic()
    148
    

    按照标签展示帖子

    标签功能

    在这里插入图片描述

    标签功能的实现

    实现标签功能需要两个步骤:

    1. 记录标签和分类之间的关系。 举个例子,程序要记住,“程序员”、“Linux”、“node.js”这些分类都属于“技术”标签。

    2. 记录标签属下的帖子,当用户点击某个标签时,展示该标签属下的各个帖子。
      举个例子,帖子 132312 属于“程序员”分类,而该分类又属于“技术”标签,所以程序应该在用户点击 “技术”页面时,展示出帖子 132312 。

    标签功能的实现

    为了记录标签和分类之间的关系,程序会使用一个 键名为 bbs::tab::::member 的集合来储存所有属于 name 标签的分类,集合中的每个元素都是一个分 类名。

    比如 bbs::tab::技术::member 这个集合就包含了 “程序员”、“Linux”、“node.js” 等分类的名字,通过这个集合,程序可以知道哪些分 类属于“技术”标签。

    另一方面,为了记录标签属下的帖子,程序会使用一个 键名为 bbs::tab::::topic_list 的有序集合来储存属于 name 标签的所有帖子,其中有序集合的元素 为帖子的 ID ,元素的分值为帖子最后一次被回复时的 UNIX 时间戳。

    比如帖子 132312 属于“程序员”分类,而该分类又属于“技术”标签,所以程序会在创建该帖子时,执行以下命令,将该帖子添加到“技术”标签的帖子列表里面:
    ZADD bbs::tab::技术::topic_list 1410165226 132312

    Tab 类 API

    在这里插入图片描述

    Tab 类使用示例
    >>> tech_tab = Tab(client, “技术”)
    >>> tech_tab.add_member(“程序员”)
    >>> tech_tab.add_member(“node.js”)
    >>> tech_tab.add_member(“Linux”)
    >>> tech_tab.is_member(“程序员”)
    True
    >>> tech_tab.include_topic(“程序员”, 132312)
    

    回复帖子

    回复示例

    在这里插入图片描述
    用户可以对帖子进行回复。

    每条回复会至少会包含作者、回复时间和回复内容这些信息。

    并且每个帖子都需要一个列表来储存所有回复。

    这和我们之前为了实现微博评论而创建的 Comment 类 和 CommentList 类的需求基本相同,所以只要对这两个类进行一些简单的修改,就可以重用它们了。

    为帖子投票

    投票示例

    在这里插入图片描述
    在之前介绍集合的时候,我们就说过怎样使用集合来实现投票功能,并在课后练习中实现了可以投支持票和反对票的UpDownVote 类。

    只要对 UpDownVote 类稍作修改,就可以直接重用这个类的代码了。

    每日热议帖子排行

    每日热议帖子排行榜示例

    在这里插入图片描述
    每日热议帖子排行榜展示了每天回复数量最多的帖子, 这个排行榜每天更新一次。

    为了实现这个排行榜,程序需要使用一个 键名为 bbs::reply_day_rank 的有序集合,其中有序集合的元素 为帖子的 ID ,而元素的分值则是帖子在当前被回复的数量。

    每当 ID 为 N 的帖子新增一条回复时,程序就执行以下命令来增加帖子在排行榜中的回复数量:ZINCRBY bbs::reply_day_rank N 1

    并且程序会为 bbs:reply_day_rank 设置生存时间,让它在一天之后自动过期,并自动创建新榜单。 这可以通过修改并重用之前介绍过的 DayRank 类来实现。

    ReplyDayRank 类 API

    在这里插入图片描述

    >>> rank = ReplyDayRank(client)
    >>> rank.incr_reply_count(10086) # ID 为 10086 的帖子获得了新回复,为它的计数值增一
    >>> rank.incr_reply_count(12345) # ID 为 12345 的帖子获得了新回复,为它的计数值增一
     >>> rank.incr_reply_count(99999) # ID 为 99999 的帖子获得了新回复,为它的计数值增一
     >>> rank.get_top(10) # 返回今日回复排名前十的帖子
    

    帖子推荐系统

    帖子推荐示例

    在这里插入图片描述
    R2 标签是根据算法来推荐帖子的。

    算法对帖子进行评分时,考虑的因素可能有:用户的贡献值、发 布时间、用户的投票数、用户的回复数量,等等。

    实现推荐系统的方法:

    1. 选择一个推荐算法,用于计算帖子的评分。
    2. 计算各个帖子的评分,并以有序的方式展示它们。
    帖子推荐系统的实现

    为了实现帖子系统,我们选择了 Reddit 使用的推荐算法( reddit_algorithm.py),这个算法进行评分时考 虑的是帖子的发布时间、获得的支持票数量以及反 对票数量,这个算法用于计算评分的函数为:hot(ups, downs, date)

    算法的具体解释可以在这篇博客里面找到: http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_reddit.html

    推荐标签包含的帖子仍然使用有序集合来 储存,其中有序集合的元素 为帖子的 ID ,而元素的分值则是算法为帖子计算出的评分。

    当用户创建一个帖子的时候,或者有用户对帖子进行投票之后,我们就调用 how 函数来更新帖子的评分。

    我们将帖子推荐系统的相关操作抽象为 TopicRecommand 类。

    TopicRecommand 类 API

    在这里插入图片描述

    >>> recommand = TopicRecommand(client)
    >>> recommand.update_rank(10086, 10, 3, 1410173496)
    >>> recommand.paging(1, 10)
    

    复习

    各项功能以及它们的实现方式

    在这里插入图片描述

    unique_set.py
    # encoding: utf-8
    
    class UniqueSet:
    
        def __init__(self, client, key):    
            self.client = client
            self.key = key
    
        def add(self, element):
            self.client.sadd(self.key, element)
    
        def is_include(self, element):
            return self.client.sismember(self.key, element)
    
    id_generator.py
    # coding: utf-8
    
    class IdGenerator:
    
        """
        使用字符串键实现的自增唯一 ID 生成器。
        """
    
        def __init__(self, client, key):
            """
            设置储存 ID 生成器当前值的键。
            """
            self.client = client
            self.key = key
    
        def init(self, n):
            """
            初始化生成器的值,需要在系统正式运行之前调用,用于保留少于等于 n 的 ID 号码。
            """
            # 如果键 key 已经有值,那么说明 gen() 已经执行过
            # 为了防止产生重复的 ID ,程序不能执行这个 init() 操作
            if self.client.get(self.key) is not None:
                raise Exception
            self.client.set(self.key, n)
    
        def gen(self):
            """
            生成一个新的唯一 ID 。
            """
            new_id = self.client.incr(self.key)
            return int(new_id)
    
    user.py
    # encoding: utf-8
    
    from id_generator import IdGenerator
    
    def make_user_key(uid):
        return 'bbs::user::' + str(uid)
    
    def make_email_to_uid_key():
        return 'bbs::email_to_uid'
    
    class User:
    
        """
        用户相关操作。
        """
    
        def __init__(self, client):
            self.client = client
    
        def create(self, name, email, password):
            """
            创建一个新的用户,创建前需要确保输入的用户名和邮箱未被使用。
            """
            # 储存用户信息
            new_id = IdGenerator(client, "bbs::user_id").gen()
            key = make_user_key(new_id)
            self.client.hmset(key, {
                                    'id': new_id,
                                    'name': name,
                                    'email': email,
                                    'password': password
                                    })
            # 关联用户 email 与 ID
            self.client.hset(make_email_to_uid_key(), email, new_id)
            # 返回用户 ID 作为函数的值
            return new_id
    
        def get_by_id(self, uid):
            """
            根据给定的用户 id ,获取用户的详细信息。
            """
            key = make_user_key(uid)
            return self.client.hgetall(key)
    
        def try_login(self, email, password):
            """
            尝试使用指定的邮箱和密码进行登录,成功时返回用户信息,失败时返回 None 。
            """
            # 根据输入的邮箱,获取用户 ID
            uid = self.client.hget(make_email_to_uid_key(), email)
            # 如果找不到与邮箱对应的用户 ID ,那么说明这个邮箱未注册过账号
            if uid is None:
                return None
    
            # 根据用户 ID ,获取用户信息,并进行密码对比
            # 邮箱不用对比,因为用户信息就是根据邮箱来查找的
            user_info = self.get_by_id(uid)
            if user_info['password'] == password:
                return user_info
    
    topic.py
    # encoding: utf-8
    
    import json
    
    from time import time
    from id_generator import IdGenerator
    
    ID_GENERATOR_KEY = 'bbs::topic_ids'
    
    def make_topic_key(topic_id):
        return 'bbs::topic::' + str(topic_id)
    
    class Topic:
        
        """
        帖子相关操作。
        """
    
        def __init__(self, client):
            self.client = client
    
        def create(self, title, author_id, content, category, *tags):
            """
            创建一个新帖子。
            """
            topic_id = IdGenerator(client, ID_GENERATOR_KEY).gen()
            topic_hash = make_topic_key(topic_id)
            info = {
                    'id': topic_id,
                    'time': time(),
                    'click_counter': 0,
                    'title': title,
                    'author_id': author_id,
                    'content': content,
                    'category': category,
                    'tags': json.dumps(tags)
                    }
            self.client.hmset(topic_hash, info)
            return topic_id
    
        def get_by_id(self, topic_id):
            """
            根据给定的帖子 id ,查找并返回帖子的详细信息。
            """
            topic_hash = make_topic_key(topic_id)
            return self.client.hgetall(topic_hash)
    
    category.py
    # encoding: utf-8
    
    from time import time as current_time
    
    def make_category_key(name):
        return 'bbs::category::' + name
    
    class Category:
    
        """
        创建一个分类列表来记录所有属于某个分类的文章。
        """
    
        def __init__(self, client, name):
            self.client = client
            self.category_zset = make_category_key(name)
    
        def include_topic(self, topic_id):
            """
            将指定的文章添加到当前分类里面。
            """
            # 文章按照添加的时间来排序。
            self.client.zadd(self.category_zset, topic_id, current_time())
    
        def is_included(self, topic_id):
            """
            检查指定的文章是否为当前分类的文章。
            """
            # 当 topic_id 作为元素存在于 ZSET 时,它的分值不为 None
            return self.client.zscore(self.category_zset, topic_id) is not None
    
        def count_topic(self):
            """
            返回分类目前包含的文章数量。
            """
            return self.client.zcard(self.category_zset)
    
        def paging(self, n, count):
            """
            按时间从新到旧的顺序,以 count 篇文章为一页,返回当前分类第 n 页上的文章。
            """
            start_index = (n-1)*count
            end_index = n*count-1
            return self.client.zrevrange(self.category_zset, start_index, end_index)
    
    tab.py
    # encoding: utf-8
    
    from category import Category
    
    from time import time as current_time
    
    def make_tab_member_key(name):
        return 'bbs::tab::' + name + '::member'
    
    def make_tab_list_key(name):
        return 'bbs::tab::' + name + 'topic_list'
    
    # 使用 Tab 来记录所有分类属下文章的另一种做法是,直接对各个分类的文章列表进行并集计算:
    # 这种实现可以避免每个 Tab 单独维护一个文章列表,缺点是并集计算比较耗时,
    # 所以为了高效起见,这里还是使用单独维护一个文章列表的做法。
    class Tab:
    
        """
        一个标签可以包含任意多个分类,并按照发布时间先后,记录被包含分类属下的文章。
        """
    
        def __init__(self, client, name):
            self.client = client
            # 储存标签属下分类的集合
            self.tab_member_set = make_tab_member_key(name)
            # 储存标属下分配的文章的有序集合
            self.tab_topic_list = make_tab_list_key(name)
    
        def add_member(self, category_name):
            """
            将指定分类添加到当前标签中。
            """
            self.client.sadd(self.tab_member_set, category_name)
    
        def is_member(self, category_name):
            """
            检查指定分类是否属于当前标签。
            """
            return self.client.sismember(self.tab_member_set, category_name)
    
        def get_all_member(self):
            """
            返回标签包含的所有分类。
            """
            return self.client.smembers(self.tab_member_set)
    
        def count_member(self):
            """
            返回标签包含的分类数量。
            """
            return self.client.scard(self.tab_member_set)
    
        def include_topic(self, category_name, topic_id):
            """
            将属于 category 分类的文章添加到当前标签的时间线里面。
            """
            # 先检查文章是否属于 category 分类
            # 然后检查 category 分类是否属于当前标签
            # 只有两个条件都通过时,才将文章添加到当前时间线
            category = Category(self.client, category_name)
            if self.is_member(category_name) and category.is_included(topic_id):
                self.client.zadd(self.tab_topic_list, topic_id, current_time())
                
    
        def paging(self, n, count):
            """
            按时间从新到旧的顺序,以 count 篇文章为一页,返回当前标签第 n 页上的文章。
            """
            start_index = (n-1)*count
            end_index = n*count-1
            return self.client.zrevrange(self.tab_topic_list, start_index, end_index)
    
        def count_topic(self):
            """
            返回标签目前包含的文章数量。
            """
            return self.client.zcard(self.tab_topic_list)
    
    comment.py
    # encoding: utf-8
    
    from time import time
    from id_generator import IdGenerator
    
    ID_GENERATOR_KEY = 'bbs::comment_ids'
    
    def make_comment_key(comment_id):
        return 'bbs::comment::' + str(comment_id)
    
    class Comment:
    
        """
        帖子评论相关操作。
        """
    
        def __init__(self, client):
            self.client = client
    
        def create(self, author_id, content):
            """
            创建一个新的评论。
            """
            comment_id = IdGenerator(client, ID_GENERATOR_KEY).gen()
            comment_hash = make_comment_key(comment_id)
            info = {
                    'id': comment_id,
                    'author_id': author_id,
                    'content': content,
                    'time': time()
                   } 
            self.client.hmset(comment_hash, info)
            return comment_id
    
        def get_by_id(self, comment_id):
            """
            根据评论 id ,查找并返回评论的详细信息。
            """
            comment_hash = make_comment_key(comment_id)
            return self.client.hgetall(comment_hash)
    
    comment_list.py
    # encoding: utf-8
    
    def make_comment_list_key(topic_id):
        return 'bbs::topic::' + str(topic_id) + '::comments'
    
    class CommentList:
    
        """
        创建一个列表来记录某一帖子下的所有评论(的 ID)。
        """
    
        def __init__(self, client, topic_id):
            """
            设置被评论的帖子的 ID 。
            """
            self.client = client
            self.topic_id = topic_id
            self.comment_list = make_comment_list_key(topic_id)
    
        def push(self, comment_id):
            """
            将评论推入到评论列表里面。
            """
            self.client.lpush(self.comment_list, comment_id)
    
        def count(self):
            """
            返回帖子目前已有的评论数量。
            """
            return self.client.llen(self.comment_list)
    
        def paging(self, number, count):
            """
            以分页形式返回帖子的评论。
            """
            start_index = (number-1)*count
            end_index = number*count-1
            return self.client.lrange(self.comment_list, start_index, end_index)
    
    topic_vote.py
    # encoding: utf-8
    
    from redis import WatchError
    
    def make_vote_up_key(topic_id):
        return 'bbs::topic::' + str(topic_id) + '::vote_up'
    
    def make_vote_down_key(topic_id):
        return 'bbs::topic::' + str(topic_id) + '::vote_down'
    
    class TopicVote:
    
        """
        对帖子进行投票,可以投支持票也可以投反对票。
        """
    
        def __init__(self, client, topic_id):
            """
            设置要被投票的帖子。
            """
            self.client = client
            self.vote_up_set = make_vote_up_key(topic_id)
            self.vote_down_set = make_vote_down_key(topic_id)
    
        def is_voted(self, user_id):
            """
            检查用户是否已经对这个帖子投过票。
            """
            return self.client.sismember(self.vote_up_set, user_id) or \
                   self.client.sismember(self.vote_down_set, user_id)
    
        def vote_up(self, user_id):
            """
            用户对这个帖子投支持票。
            """
            if not self.is_voted(user_id):
                self.client.sadd(self.vote_up_set, user_id)
    
        def vote_down(self, user_id):
            """
            用户对这个帖子投反对票。
            """
            if not self.is_voted(user_id):
                self.client.sadd(self.vote_down_set, user_id)
    
        def undo(self, user_id):
            """
            撤销用户的投票。
            """
            self.client.srem(self.vote_up_set, user_id)
            self.client.srem(self.vote_down_set, user_id)
    
        def vote_up_count(self):
            """
            返回帖子目前获得的支持票数量。
            """
            return self.client.scard(self.vote_up_set)
    
        def vote_down_count(self):
            """
            返回帖子目前获得的反对票数量。
            """
            return self.client.scard(self.vote_down_set)
    
    reply_day_rank.py
    # encoding: utf-8
    
    from datetime import datetime, timedelta
    
    def today_remaind_seconds():
        """
        返回当天剩余的秒数。
        """
        now = datetime.now()
        tomorrow = now + timedelta(days=1) - timedelta(hours=now.hour, minutes=now.minute,seconds=now.second)
        return (tomorrow-now).seconds
    
    DAY_RANK_KEY = 'bbs::reply_day_rank'
    
    class ReplyDayRank:
    
        """
        按照帖子获得的回复数量,对帖子进行排行。
        排行榜每天更新一次。
        """
    
        def __init__(self, client):
            self.key = DAY_RANK_KEY
            self.client = client
    
        def incr_reply_count(self, topic_id):
            """
            对指定帖子在当天的回复数量增一,每次帖子有新回复出现时调用。
            """
            # 为计数器增一
            self.client.zincrby(self.key, topic_id, 1)
            # 如果键未设置生存时间或过期时间,那么将它的生存时间设置为当天剩下的秒数
            if self.client.ttl(self.key) is None:
                self.client.expire(self.key, today_remaind_seconds())
    
        def get_top(self, n, show_score=False):
            """
            返回当天回复数量排在前 n 位的帖子。
            """
            return self.client.zrevrange(self.key, 0, n-1, withscores=show_score)
    
    reddit_algorithm.py
    # Reddit 所使用的排序算法
    # 详细信息请参考: http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_reddit.html
    
    from datetime import datetime, timedelta
    from math import log
    
    epoch = datetime(1970, 1, 1)
    
    def epoch_seconds(date):
        """Returns the number of seconds from the epoch to date."""
        td = date - epoch
        return td.days * 86400 + td.seconds + (float(td.microseconds) / 1000000)
    
    def score(ups, downs):
        return ups - downs
    
    def hot(ups, downs, date):
        """The hot formula. Should match the equivalent function in postgres."""
        s = score(ups, downs)
        order = log(max(abs(s), 1), 10)
        sign = 1 if s > 0 else -1 if s < 0 else 0
        seconds = epoch_seconds(date) - 1134028003
        return round(order + sign * seconds / 45000, 7)
    
    topic_recommand.py
    # encoding: utf-8
    
    import reddit_algorithm
    
    from datetime import datetime
    
    def make_recommand_list_key():
        return 'bbs::recommand::list'
    
    class TopicRecommand:
    
        """
        根据帖子获得的投票数量以及帖子的发布时间,对帖子进行评分,
        并根据评分对帖子进行排序。
        """
    
        def __init__(self, client):
            self.client = client
            self.recommand_list = make_recommand_list_key()
    
        def update_rank(self, topic_id, up_vote, down_vote, post_time):
            """
            根据文章的投票数和发布时间,更新文章在推荐列表中的排位。
            """
            # 因为算法只接受 datetime 格式的发布时间,而我们记录的文章发布时间是 UNIX 时间戳
            # 所以这里需要将 UNIX 时间戳转换为 Python 的 datetime 时间
            post_time_in_datetime_format = datetime.fromtimestamp(post_time)
            # 使用推荐算法计算出帖子的分值
            score = reddit_algorithm.hot(up_vote, down_vote, post_time_in_datetime_format)
            # 为帖子设置新的分值,并更新帖子在推荐列表中的排位
            self.client.zadd(self.recommand_list, topic_id, score)
    
        def paging(self, n, count):
            """
            按时间从新到旧的顺序,以 count 篇文章为一页,返回推荐列表第 n 页上的文章。
            """
            start_index = (n-1)*count
            end_index = n*count-1
            return self.client.zrevrange(self.recommand_list, start_index, end_index)
    
    topic_click_counter.py
    # encoding: utf-8
    
    def make_topic_key(topic_id):
        return 'bbs::topic::' + str(topic_id)
    
    class TopicClickCounter:
    
        """
        帖子的点击计数器。
        """
    
        def __init__(self, client, topic_id):
            """
            设置要记录点击数量的帖子。
            """
            self.client = client
            self.topic_id = topic_id
            self.topic_hash = make_topic_key(topic_id)
    
        def incr(self, increment=1):
            """
            对计数器执行自增操作。
            """
            return self.client.hincrby(self.topic_hash, 'click_counter', increment)
    
        def get(self):
            """
            获取帖子当前的点击数量。
            """
            return self.client.hget(self.topic_hash, 'click_counter')
    
    展开全文
  • 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • 5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • 入门学习Linux常用必会60命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...
  • Office 365共享邮箱对于客户通过电子邮箱提出的问题,共享邮箱是一个很好的处理方式,组织中的多人可以分担监控邮箱和回复的责任,使得客户的问题更快地得到答复,而相关电子邮件都存储在一个邮箱中。 1.1如何创建...

     

    一、共享邮箱

    Office 365共享邮箱对于客户通过电子邮箱提出的问题,共享邮箱是一个很好的处理方式,组织中的多人可以分担监控邮箱和回复的责任,使得客户的问题更快地得到答复,而相关电子邮件都存储在一个邮箱中。

    1.1如何创建共享邮箱

    1.使用管理员账号登陆Office 365.

    2.进入“Office 365管理中心”->组->共享邮箱

    3.添加邮箱->输入信息->添加

    4.创建成功后,选择”查看详细信息“,进入共享邮箱编辑页面。

    5.在共享邮箱编辑页面上,可以编辑邮箱名称,添加共享邮箱成员

    6.已存在的共享邮箱只能编辑名称,不能修改电子邮箱地址,但能给共享邮箱添加别名。

    7.在编辑成员页面,点击添加成员,显示所有成员,勾选成员,即可添加,保存。

       如成员个数较多,可直接搜索成员,添加,保存。

     

    1.2如何打开共享邮箱

    添加共享邮箱,使其在Outlook Web App中显示在主邮箱下面;

    在完成添加后,每次打开Outlook Web App时,共享邮箱及其文件夹将显示在左侧导航栏中。

    1.在Outlook Web App中登陆账户

    2.在左侧导航栏中右键单击收件箱->添加公用文件夹至收藏夹

     3.在“添加公用文件夹”对话框中,输入共享邮箱的名称或电子邮件地址,选择“搜索目录”,然后单击“添加”

     

    1.3如何从共享邮箱发送电子邮件

    1.单击收件箱上方的“新建”

    2.单击“•••”->选择“显示发件人”,选项显示接收电子邮件的人员将看到它来自共享邮箱,而不是来自自己的电子邮箱账户

     如果“发件人”项显示的是用户邮箱而不是共享邮箱,选中邮箱地址->删除->键入共享邮箱地址即可。

    3.添加收件人、标题和内容后,单击“发送”。

     

    二、共享日历

    共享日历的优点是对该邮箱具有访问权限的用户都对共享日历具有完全访问权限,可以在共享日历中创建、编辑和删除事件。

    共享日历可执行的操作:

    •让团队知道自己正在休假或外出;

    •创建工作组会议;

    •编辑其他人创建的日历事件

    •取消其他人创建的会议

     

    2.1如何打开共享日历

    1.使用Outlook Web App登陆邮箱

    2.选择“日历”

     3.右键单击“其他日历”->打开日历

    4.在“从目录”中,搜索要打开的共享日历->打开

     

    2.2共享私人日历

    1.使用账户登陆Out Web App->日历

    2.单击日历视图上方的“共享”

    3.输入共享对象的邮箱地址

    4.添加完邮件地址后,定义共享对象对该共享日历的查看权限。

    5.点击“共享”,将共享邀请以邮件形式发送给共享对象。

    转载于:https://www.cnblogs.com/JianHuang/p/8310722.html

    展开全文
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • 5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • java源码包

    2015-12-01 16:29:37
    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
  • linux 系统管理员.pdf 书籍

    热门讨论 2012-02-13 11:02:45
    8.2.4 手工创建一个用户 240 8.3 更改用户属性 241 8.4 删除用户 241 8.5 临时禁用用户 242 第9章 备份 243 9.1 备份的重要性 243 9.2 选择备份媒体 243 9.3 选择备份工具 244 9.4 简单备份 244 9.4.1 如何利用tar...
  • 3 |" ]' a: f6 V# D$ W运行活动目录安装向导将Windows 2000 Server升级为域控制器以创建一个新域,或者向现有的域添加其他域控制器。2 E5 K. u' s+ W: ?7 g7 L # u) H2 p, | f 1.安装域里的第一台域控制器 4 w9 {' z...
  • Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...
  • Android 上百实例源码分析以及开源分析 集合打包4

    千次下载 热门讨论 2012-07-10 21:54:03
    为了编译jChat,你要使用Eclipse创建一个新的Android项目,然后添加外部JAR和移动的jChat目录选择到libs目录JadeLeapAndroid.jar库。jChat使用了的MapView访问谷歌地图数据。 本项目有25个目标文件。项目里面有代码...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言....................................................................................数据量,而一个完整的发行版本大概都是 1Gbit 左右的数据量...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    创建一个按钮,并在上面显示图标。 jpeglib_demo.zip jpeglib_src.zip 利用Delphi的代码在VC中显示JPG图片,不使用动态连接库。 Mail_Report.zip 一个邮件报告程序。 SrcFirstProg.zip 解释了最基本的MFC程序...
  • 狗会因为人随手丢出的一个东西而追逐,可能是一个骨头、一块肉、一个眼神,甚至是一个石头,警示一定要看清自己在追逐的东西。 目录 封面 -14 封底 474 扉页 -13 版权 -12 序 -11 前言 -9 目录 -4 第1部分 集群...
  • 文本分类是指标记句子或文档,例如电子邮件垃圾邮件分类和情感分析。 下面是一些很好的初学者文本分类数据集。 路透社Newswire主题分类(路透社-21578)。1987年路透社出现的系列新闻文件,按类别编制索引。另见...
  • 文本分类是指标记句子或文档,例如电子邮件垃圾邮件分类和情感分析。 下面是一些很好的初学者文本分类数据集。 路透社Newswire主题分类(路透社-21578)。1987年路透社出现的系列新闻文件,按类别编制索引。另见...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

如何创建一个电子邮件账号