不顧澳洲乾旱缺水 中資度假村抽水外銷惹眾怒

摘錄自2020年01月17日中央通訊社澳洲報導

澳洲昆士蘭州南原區(Southern Downs Region)旱災肆虐又遭野火侵襲,用水嚴重受限,一家中資度假村卻還獲准每年抽取近1億公升地下水外銷,引發當地民眾強烈不滿。

澳洲廣播公司新聞網(ABC News)和「澳洲人報」(The Australian )報導,中國的中山皇爵盈富公司擁有的4星卓爾巴度假村(Cherrabah Resort),位在昆士蘭州(Queensland)華瑞克(Warwick)附近的肘谷(Elbow Valley),飯店周圍牧地乾旱情況嚴重。

鄰近城市斯坦索普(Stanthorpe)供水已吃緊,居民仰賴水車從75公里遠的水壩運水過來。南原區區議會也準備限制區內民眾每人每日最多用水80公升,並習慣洗澡不超過3分鐘及每3天才洗衣服。

然而,區議會去年耶誕節前卻通過卓爾巴度假村提出的計畫,允許在度假村內設置抽水和淨水設施,每年可從含水層抽取最多9600萬公升的地下水,並送往澳洲沿海城市黃金海岸(Gold Coast)進行商業裝瓶販售。

根據中山皇爵盈富的公司介紹,他們除了在澳洲昆土蘭州建設度假村,還在當地開採地下水資源,成功找到優質水源生產高端礦泉水銷往中國。住在距離卓爾巴度假村抽水地點約5公里的牧場主人暨地主歐狄亞(Andrew O’Dea)表示,他對於區議會的決定感到「相當失望」。

歐狄亞的家族在當地畜牧已有約140年歷史,但受到乾旱影響,第5代的他被迫放棄幾乎所有牧群,如今只剩7頭母牛和1頭公牛。

歐狄亞說:「這的確令人相當難以承受,且(同意計畫)的時間點非常糟糕,因為我們已經沒有地表水可用。過去我們一直都能仰賴泉水和溪水。」

南原區市長杜比(Tracy Dobie)則捍衛區議會決定,表示在嚴格條件下卓爾巴度假村才得以將地下水裝瓶販售,且區議會也計畫動用聯邦政府的乾旱補助金,來協助支付鄉間家戶飲用水供應。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

智慧口罩多功能 抵抗空污新利器

摘錄自2020年1月21日公視報導

空污對人體的危害越來越受到關注。現在有業者推出了一款智慧口罩,裡面有風扇的裝置,能即時偵測身邊懸浮微粒的指數,還可以跟手機連線,成為新一代對抗空污的利器。

荷蘭一家新創公司在今年的消費性電子大展上,就推出了最新的智慧口罩。這款智慧口罩配備了及時的懸浮微粒偵測系統,搭配LED警示光源,也內建再生材的高品質濾心,可重複清洗使用,使用時效長達兩年,更可以透過USB充電,讓配戴者有效避開空氣污染源。

艾戴爾說:「首先我們是針對氣體的污染感應,以及粉塵微粒的感應,同時也能跟手機連線。我們的目標就是有一天能透過足夠的資訊,建立有效的空污地圖。當你從A點走到B點,你不需要走最短或最快的路線,而是走最少污染的路線。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

研究報告:天然資源再利用率低 全球恐陷災難

摘錄自2020年1月21日中央社報導

研究人員今天(21日)警告,天然資源年消耗量首次攀升到1000億公噸,全世界原物料再利用比率卻見降低,恐導致「全球災難」發生。

總部位於荷蘭阿姆斯特丹的社會企業「循環經濟」(Circle Economy)援引最新的可用數據做出報告說,包括礦物、金屬、化石燃料與生物質在內,2017年1000億公噸原物料僅8.6%重複利用。

「循環經濟」執行長佛里德(Harald Friedl)說:「歷史上頭一次,每年有超過1000億公噸原物料進入全球經濟。」

聯合國預估,1970年以來全球原物料用量增加了2倍,如不採取行動,2050年還可能再成長一倍。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

拒絕環保厄運先知 川普稱氣候危機警告愚蠢

摘錄自2020年01月21日中央社報導

美國總統川普今(21日)在瑞士達佛斯(Davos)的年度世界經濟論壇(WEF)上把矛頭對準環保「長年厄運先知」,並表示對氣候危機的警告是「愚蠢的」。

川普在瑞士滑雪勝地第50屆世界經濟論壇發表主題演說,吹捧化石燃料、放鬆管制及蓬勃發展的美國經濟,跟瑞典環保少女童貝里(Greta Thunberg)等人提出的可怕警告,形成鮮明對比。

童貝里才在同場論壇上譴責,各國政府在扭轉氣候變遷上,「基本上什麼也沒做」。川普在幾小時後的演說中表示:「我們必須拒絕長年厄運先知,以及他們的末日預言。」

川普登上達佛斯講台前,瑞士總統剛在演說中呼籲全世界關心地球,但川普卻宣揚美國是「石油及天然氣第一大出口國」。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

使用 Scrapy 爬取去哪兒網景區信息

Scrapy 是一個使用 Python 語言開發,為了爬取網站數據,提取結構性數據而編寫的應用框架,它用途廣泛,比如:數據挖掘、監測和自動化測試。安裝使用終端命令 pip install Scrapy 即可。

Scrapy 比較吸引人的地方是:我們可以根據需求對其進行修改,它提供了多種類型的爬蟲基類,如:BaseSpider、sitemap 爬蟲等,新版本提供了對 web2.0 爬蟲的支持。

1 Scrapy 介紹

1.1 組成

  • Scrapy Engine(引擎):負責 Spider、ItemPipeline、Downloader、Scheduler 中間的通訊,信號、數據傳遞等。

  • Scheduler(調度器):負責接受引擎發送過來的 Request 請求,並按照一定的方式進行整理排列、入隊,當引擎需要時,交還給引擎。

  • Downloader(下載器):負責下載 Scrapy Engine(引擎) 發送的所有 Requests 請求,並將其獲取到的 Responses 交還給 Scrapy Engine(引擎),由引擎交給 Spider 來處理。

  • Spider(爬蟲):負責處理所有 Responses,從中解析提取數據,獲取 Item 字段需要的數據,並將需要跟進的 URL 提交給引擎,再次進入 Scheduler(調度器)。

  • Item Pipeline(管道):負責處理 Spider 中獲取到的 Item,並進行後期處理,如:詳細解析、過濾、存儲等。

  • Downloader Middlewares(下載中間件):一個可以自定義擴展下載功能的組件,如:設置代理、設置請求頭等。

  • Spider Middlewares(Spider 中間件):一個可以自定擴展和操作引擎和 Spider 中間通信的功能組件,如:自定義 request 請求、過濾 response 等。

總的來說就是:SpiderItem Pipeline 需要我們自己實現,Downloader MiddlewaresSpider Middlewares 我們可以根據需求自定義。

1.2 流程梳理

1)Spider 將需要發送請求的 URL 交給 Scrapy Engine 交給調度器;

2)Scrapy Engine 將請求 URL 轉給 Scheduler

3)Scheduler 對請求進行排序整理等處理后返回給 Scrapy Engine

4)Scrapy Engine 拿到請求后通過 Middlewares 發送給 Downloader

5)Downloader 向互聯網發送請求,在獲取到響應后,又經過 Middlewares 發送給 Scrapy Engine

6)Scrapy Engine 獲取到響應后,返回給 SpiderSpider 處理響應,並從中解析提取數據;

7)Spider 將解析的數據經 Scrapy Engine 交給 Item PipelineItem Pipeline 對數據進行後期處理;

8)提取 URL 重新經 Scrapy Engine 交給Scheduler 進行下一個循環,直到無 URL 請求結束。

1.3 Scrapy 去重機制

Scrapy 提供了對 request 的去重處理,去重類 RFPDupeFilterdupefilters.py 文件中,路徑為:Python安裝目錄\Lib\site-packages\scrapy ,該類裏面有個方法 request_seen 方法,源碼如下:

def request_seen(self, request):
    # 計算 request 的指紋
    fp = self.request_fingerprint(request)
    # 判斷指紋是否已經存在
    if fp in self.fingerprints:
        # 存在
        return True
    # 不存在,加入到指紋集合中
    self.fingerprints.add(fp)
    if self.file:
        self.file.write(fp + os.linesep)

它在 Scheduler 接受請求的時候被調用,進而調用 request_fingerprint 方法(為 request 生成一個指紋),源碼如下:

def request_fingerprint(request, include_headers=None):
    if include_headers:
        include_headers = tuple(to_bytes(h.lower())
                                 for h in sorted(include_headers))
    cache = _fingerprint_cache.setdefault(request, {})
    if include_headers not in cache:
        fp = hashlib.sha1()
        fp.update(to_bytes(request.method))
        fp.update(to_bytes(canonicalize_url(request.url)))
        fp.update(request.body or b'')
        if include_headers:
            for hdr in include_headers:
                if hdr in request.headers:
                    fp.update(hdr)
                    for v in request.headers.getlist(hdr):
                        fp.update(v)
        cache[include_headers] = fp.hexdigest()
    return cache[include_headers]

在上面代碼中我們可以看到

fp = hashlib.sha1()
...
cache[include_headers] = fp.hexdigest()

它為每一個傳遞過來的 URL 生成一個固定長度的唯一的哈希值。再看一下 __init__ 方法,源碼如下:

def __init__(self, path=None, debug=False):
    self.file = None
    self.fingerprints = set()
    self.logdupes = True
    self.debug = debug
    self.logger = logging.getLogger(__name__)
    if path:
        self.file = open(os.path.join(path, 'requests.seen'), 'a+')
        self.file.seek(0)
        self.fingerprints.update(x.rstrip() for x in self.file)

我們可以看到裏面有 self.fingerprints = set() 這段代碼,就是通過 set 集合的特點(set 不允許有重複值)進行去重。

去重通過 dont_filter 參數設置,如圖所示

dont_filterFalse 開啟去重,為 True 不去重。

2 實現過程

製作 Scrapy 爬蟲需如下四步:

  • 創建項目 :創建一個爬蟲項目
  • 明確目標 :明確你想要抓取的目標(編寫 items.py)
  • 製作爬蟲 :製作爬蟲開始爬取網頁(編寫 xxspider.py)
  • 存儲內容 :設計管道存儲爬取內容(編寫pipelines.py)

我們以爬取去哪兒網北京景區信息為例,如圖所示:

2.1 創建項目

在我們需要新建項目的目錄,使用終端命令 scrapy startproject 項目名 創建項目,我創建的目錄結構如圖所示:

  • spiders 存放爬蟲的文件
  • items.py 定義數據類型
  • middleware.py 存放中間件
  • piplines.py 存放數據的有關操作
  • settings.py 配置文件
  • scrapy.cfg 總的控制文件

2.2 定義 Item

Item 是保存爬取數據的容器,使用的方法和字典差不多。我們計劃提取的信息包括:area(區域)、sight(景點)、level(等級)、price(價格),在 items.py 定義信息,源碼如下:

import scrapy

class TicketspiderItem(scrapy.Item):
    area = scrapy.Field()
    sight = scrapy.Field()
    level = scrapy.Field()
    price = scrapy.Field()
    pass

2.3 爬蟲實現

在 spiders 目錄下使用終端命令 scrapy genspider 文件名 要爬取的網址 創建爬蟲文件,然後對其修改及編寫爬取的具體實現,源碼如下:

import scrapy
from ticketSpider.items import TicketspiderItem

class QunarSpider(scrapy.Spider):
    name = 'qunar'
    allowed_domains = ['piao.qunar.com']
    start_urls = ['https://piao.qunar.com/ticket/list.htm?keyword=%E5%8C%97%E4%BA%AC&region=&from=mpl_search_suggest']

    def parse(self, response):
        sight_items = response.css('#search-list .sight_item')
        for sight_item in sight_items:
            item = TicketspiderItem()
            item['area'] = sight_item.css('::attr(data-districts)').extract_first()
            item['sight'] = sight_item.css('::attr(data-sight-name)').extract_first()
            item['level'] = sight_item.css('.level::text').extract_first()
            item['price'] = sight_item.css('.sight_item_price em::text').extract_first()
            yield item
        # 翻頁
        next_url = response.css('.next::attr(href)').extract_first()
        if next_url:
            next_url = "https://piao.qunar.com" + next_url
            yield scrapy.Request(
                next_url,
                callback=self.parse
            )

簡單介紹一下:

  • name:爬蟲名
  • allowed_domains:允許爬取的域名
  • atart_urls:爬取網站初始請求的 url(可定義多個)
  • parse 方法:解析網頁的方法
  • response 參數:請求網頁后返回的內容

yield

在上面的代碼中我們看到有個 yield,簡單說一下,yield 是一個關鍵字,作用和 return 差不多,差別在於 yield 返回的是一個生成器(在 Python 中,一邊循環一邊計算的機制,稱為生成器),它的作用是:有利於減小服務器資源,在列表中所有數據存入內存,而生成器相當於一種方法而不是具體的信息,佔用內存小。

爬蟲偽裝

通常需要對爬蟲進行一些偽裝,關於爬蟲偽裝可通過【】做一下簡單了解,這裏我們使用一個最簡單的方法處理一下。

  • 使用終端命令 pip install scrapy-fake-useragent 安裝
  • 在 settings.py 文件中添加如下代碼:
DOWNLOADER_MIDDLEWARES = {
    # 關閉默認方法
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 
    # 開啟
    'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400, 
}

2.4 保存數據

我們將數據保存到本地的 csv 文件中,csv 具體操作可以參考:,下面看一下具體實現。

首先,在 pipelines.py 中編寫實現,源碼如下:

import csv

class TicketspiderPipeline(object):
    def __init__(self):
        self.f = open('ticker.csv', 'w', encoding='utf-8', newline='')
        self.fieldnames = ['area', 'sight', 'level', 'price']
        self.writer = csv.DictWriter(self.f, fieldnames=self.fieldnames)
        self.writer.writeheader()
    def process_item(self, item, spider):
        self.writer.writerow(item)
        return item

    def close(self, spider):
        self.f.close()

然後,將 settings.py 文件中如下代碼:

ITEM_PIPELINES = {
    'ticketSpider.pipelines.TicketspiderPipeline': 300,
}

放開即可。

2.5 運行

我們在 settings.py 的同級目錄下創建運行文件,名字自定義,放入如下代碼:

from scrapy.cmdline import execute
execute('scrapy crawl 爬蟲名'.split())

這個爬蟲名就是我們之前在爬蟲文件中的 name 屬性值,最後在 Pycharm 運行該文件即可。

參考:

完整代碼請關注文末公眾號,後台回復 qs 獲取。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

如何讀好一本書

這個年代,對中年人販賣焦慮是件普遍的事情,尤其是對程序員。35歲左右都是一個坎,不管是國內的華為、阿里,還是國外的facebook,這種焦慮和恐慌逼得程序員不得不時刻充電。學習的方式有很多,做項目、線下線上課程、看書、看博客、看源碼等等。

相比其他方法,看書(尤其是經典書籍)的好處在於,知識點比較系統全面,講解比較清楚,質量也有所保證。

這一兩年,也看了一些書,技術和非技術都有,可是回頭想想,記得多少,又有哪些用到了實處,似乎很少。於是,懷疑哪裡出了問題,是年紀大了記性不好?還是讀書的方法出了問題?

因此,為了更好的閱讀,我們就得先掌握科學、高效閱讀的方法,而就是指導我們科學閱讀的利器。

“how to read a book” is a metabook about how to read a book

本文地址:

主動閱讀

how to read a book反覆強調 主動閱讀:為了學習知識、增進理解而閱讀,而不是為了獲得諮詢。獲取信息、諮詢所需要的理解力恰好是讀者擁有的,而為了知識而進行的主動閱讀是需要讀者的努力,當然也只有這樣讀者才能成長。

閱讀是作者與讀者的交流,作者拋出問題,然後給出答案,而讀者需要去判斷作者給出的答案是否合理,這個過程就需要讀者的思考。

那麼,怎麼才算是主動閱讀呢,要做到主動閱讀,至少要回答以下四個問題:

  • 整體來說,這本書在討論什麼問題
  • 圍繞核心問題,作者有哪些主要的想法、論點
  • 作者所述是否合理,是部分合理,還是全部合理。當然,這一點的基礎是讀者能回答出上兩個問題
  • 這本書與讀者有何關係,有何啟發,如何運用

關於跳出舒適圈

主動閱讀強調的是需要努力才能掌握知識的閱讀,其實換一種流行的說法就是跳出舒適圈,需要每次都有所進步。

不過,是否跳出舒適圈並不是簡單的0或者1問題,跳出多遠呢?比如閱讀一本全新領域的書,基本上都看不懂,強迫自己看下去也很痛苦。

恰好前一段時間在簡書上看到一篇很有意思的文章: 。在這篇文章中,首先是給出下面這張圖:

從中可以看到,對於學習這件事情,自內而外分三個區

  • 舒適區,conform zone
  • 學習區,learning zone
  • 恐慌區,panic zone

閱讀的舒適區,大約就是為了獲取諮詢、信息而進行的閱讀。而主動閱讀就得跳出舒適區,需要小心意的是,別跳太遠,一下跳到恐慌區反而會有負作用。

那麼,跳多遠是合適的呢,這篇文章中參考了機器學習的一個實驗,指出15.87%是個理想值。就是說,閱讀的時候,應該有85%的內容是讀者能理解的,這樣學習起來既愉快,而且效率也最高。

當然,這個具體的數值因人而異,至少說,如果略讀一本書,大多數的概念都不了解,那麼可能這本書對現階段的你可能不是最好的選擇。

閱讀的四個層次

閱讀的層級,按對閱讀者的要求從低到高排序,分別是:

  • 基礎閱讀(elementary reading)
  • 檢視閱讀(inspectional reading)
  • 分析閱讀(analytical reading)
  • 主題閱讀(syntopical reading)

基礎閱讀的典型問題是,“這個句子在說什麼?”基礎閱讀的能力,應該是在基礎教育的時候就培養的,而且對於絕大多數人來說應該不存在問題。不幸的是,對於程序員–需要閱讀英文原版書籍、論文的程序員–來說,這有時候確實是個問題。雖然筆者也過了英語六級,但是在閱讀英文資料的時候還是可能因為詞彙、語法而卡殼。

檢視閱讀其實就是略讀、粗讀,在較短的時間內掌握一本書的重點、整體架構。典型問題就是:“這本書在談什麼?”或者:“這本書的架構如何?”或是:“這本書包含哪些部分?”

而分析閱讀是全盤的閱讀、完整的閱讀,或是說優質的閱讀。也就是我們常說的,要把一本書讀厚。分析閱讀需要反覆的咀嚼、消化,自然是非常耗時間的,因此我們進行分析閱讀的書籍應該是經過挑選的經典書籍。

最後的主題閱讀,其實就是帶着問題去閱讀。前面的檢視閱讀和分析閱讀都是指閱讀某一本書,而主題閱讀通常需要閱讀好幾本書,才能從不同角度去思考、解決一個問題。

下面依次簡單介紹檢視閱讀、分析閱讀、主題閱讀的基本方法、規則。

檢視閱讀

檢視閱讀既可以作為獨立的閱讀方式,又可以作為分析閱讀或者主題閱讀的前置步驟。

檢視閱讀的第一個階段是有系統的略讀或粗讀。

  1. 先看書名頁,然後如果有序就先看序
    看完序章之後,其實就對這本書的主題有了概念,可以為這本書進行分類了。
  2. 研究目錄頁,對這本書的基本架構做概括性的理解
  3. 如果書中附有索引,也要檢閱一下。
  4. 如果那是本包着書衣的新書,不妨讀一下出版者的介紹。
  5. 從你對一本書目錄很概略,甚至有點模糊的印象當中,開始挑幾個看來跟主題息息相關的篇章來看。如果這些篇章在開頭或結尾有摘要說明(很多會有),就要仔細地閱讀這些說明。
  6. 最重要的是,不要忽略最後的兩三頁,很少有作者能拒絕這樣的誘惑,而不在結尾幾頁將自己認為既新又重要的觀點重新整理一遍的。
    在how to read a book一書中,每章節的最後,作者都會進行總結、概括。

通過上述步驟,就可以從主體、架構上了解一本書,至少能夠判斷,這本書是否值得花時間更深入的閱讀

檢視閱讀的第二個階段是粗淺的閱讀,也就是說頭到尾先快速的讀完一遍,關注的重點在於理解的部分,不要因為暫時不能理解的部分而停頓,這樣閱讀一遍之後也是會很有收益的。

分析閱讀

分析閱讀的第一階段,或,找出一本書在談些什麼的四個規則:
第一個規則:依照書本的種類與主題作分類。

how to read a book對書籍分類是這樣的:首先按照是否是虛構,分成小說類和論說類。論說類的書籍是為了傳遞知識,也是探討的重點。

對於論說類,又分為實用性作品和理論性作品。理論性的作品是在教你這是什麼,實用性的作品在教你如何去做你想要做的事,或你認為應該做的事。

how to read a book本身就是一本實用性的書籍

第二個規則:用最簡短的句子說出整本書在談些什麼。

第二個規則,就是要能說出整本書的大意,整體上來把握一本書。這一部分,通過閱讀書目和序章基本上就能有答案

第三個規則:按照順序與關係,列出全書的重要部分。將全書的綱要擬出來之後,再將各個部分的綱要也一一列出。

一本好書,就像一棟好房子,每個部分都要很有秩序地排列起來。每個重要部分都要有一定的獨立性。

這有點類似金字塔原理中的MECE(Mutually Exclusive Collectively Exhaustive),架構良好的書籍也會按照符合邏輯的順序展示主題相關的每一個部分。

第四個規則:找出作者在問的問題,或作者想要解決的問題。

一本書的作者在開始寫作時,都是有一個問題或一連串的問題,而這本書的內容就是一個答案,或許多答案。在分析閱讀的第一個階段,讀者都明白作者將解答的是什麼樣的問題。

分析閱讀的第二個階段,或找出一本書到底在詳細說什麼的規則(詮釋一本書的內容):

第五規則:詮釋作者使用的關鍵字,與作者達成共識。

同一個詞彙,在不同的語境下有不同的語義,比如“事務”這個詞語,不同領域裏面的含義千差萬別。在特定的領域裏面,我們常常稱這種專門用語及特殊字彙為術語。為了搞清楚一本書在說些啥,首先得找出這些術語,然後分辨出術語在這本書當中最精確的意義。

如何找出術語呢,如果比較熟悉書籍所在領域,那麼自然就能找出這些專門的詞彙;反過來,只要看到不是平常慣見的詞彙,就會知道那些字一定是專門用語。

如何衡量是否有作者就某個術語的精確意義達成了共識呢?讀者可以用自己的話語來解釋這個術語。

第六個規則:從最重要的句子中抓出作者的重要主旨。

主旨,也是一種聲明。那是作者在表達他對某件事的判斷。主旨所聲明的是知識或觀點。這也是為什麼我們說表達這種聲明的句子是敘述句(declarative),而提出問題的句子是疑問句(interrogative)

如何判斷自己是否吸收了一本書的主旨呢?有以下方法

  • 能否用自己的語言重新表達?
  • 舉出一個自己所經歷過的主旨所形容的經驗,或與主旨有某種相關的經驗?
  • 就作者所闡述的特殊情況,說明其中通用於一般的道理?

第七個規則:找出作者的論述,重新架構這些論述的前因後果,以明白作者的主張。

第八規則:確定作者已經解決了哪些問題,還有哪些是未解決的。在未解決的問題中,確定哪些是作者認為自己無法解決的問題。

分析閱讀的第三階段:像是溝通知識一樣地評論一本書的規則

第九規則:除非你已經完成大綱架構,也能詮釋整本書了,否則不要輕易批評。(在你說出:“我讀懂了!”之前,不要說你同意、不同意或暫緩評論。)

第十規則:不要爭強好勝,非辯到底不可。

第十一規則:在說出評論之前,你要能證明自己區別得出真正的知識與個人觀點的不同。

主題閱讀

主題閱讀是閱讀的最高層級,即帶着某個特定問題去大量閱讀相關書籍中的相關章節。檢視閱讀和分析閱讀都是以書為中心,而主題閱讀是以特定問題為核心

在主題閱讀中有兩個階段。一個是準備階段,另一個是主題閱讀本身。

主題閱讀的準備階段是為了觀察、選擇研究範圍,一定程度上會用到檢視閱讀的規則

  • 針對你要研究的主題,設計一份試驗性的書目。你可以參考圖書館目錄、專家的建議與書中的書目索引。
  • 瀏覽這份書目上所有的書,確定哪些與你的主題相關,並就你的主題建立起清楚的概念。

主題閱讀的第二個階段:閱讀所有第一階段收集到的書籍

  • 瀏覽所有在第一階段被認定與你主題相關的書,找出最相關的章節。
  • 根據主題創造出一套中立的詞彙,帶引作者與你達成共識——無論作者是否實際用到這些詞彙,所有的作者,或至少絕大部分的作者都可以用這套詞彙來詮釋。
  • 建立一个中立的主旨,列出一連串的問題——無論作者是否明白談過這些問題,所有的作者,或者至少大多數的作者都要能解讀為針對這些問題提供了他們的回答。
  • 界定主要及次要的議題。然後將作者針對各個問題的不同意見整理陳列在各個議題之旁。你要記住,各個作者之間或之中,不見得一定存在着某個議題。有時候,你需要針對一些不是作者主要關心範圍的事情,把他的觀點解讀,才能建構出這種議題。
  • 分析這些討論。這得把問題和議題按順序排列,以求突顯主題。比較有共通性的議題,要放在比較沒有共通性的議題之前。各個議題之間的關係也要清楚地界定出來。

注意:理想上,要一直保持對話式的疏離與客觀。要做到這一點,每當你要解讀某個作家對一個議題的觀點時,必須從他自己的文章中引一段話來並列。

如何實踐閱讀

在how to read a book的最後一章 “閱讀與心智的成長”, 有兩個觀點,個人是深表認同的

  • 如果你所讀的書都在你的能力範圍之內,你就沒法提升自己的閱讀能力。你必須能操縱超越你能力的書,或所說的,閱讀超越你頭腦的書
  • 如果讀者閱讀了一本實用的書,並接受作者的觀點,認同他的建議是適當又有效的,那麼讀者一定要照着這樣的建議行事

第一點其實就是要從舒適區跳到學習區,主動閱讀。關於這一點,已經在本文第一章進行了討論。

第二點,就是學以致用。

我們常說,聽過很多道理,卻依然過不好這一生,也許道理已經懂了,但是沒有落到實處,自然不會有任何改變。對於閱讀更是如此,閱讀相比教學而言,更需要學習者的主動,而且閱讀本身比較慢,也很少存在很強烈的時間壓力和考核目標,如果讀者不主動去刻意使用,那麼大概率過一段時間就忘了。

實用性書籍閱讀

前面對書籍分為了虛構類、實用類、理論類。對於程序員的技術閱讀而言,大多時候都是實用類。閱讀的目標都是為了提高自己的能力,將知識應用到工作中。

在閱讀任何一種實用書時,一定要問自己兩個主要的問題。
第一:作者的目的是什麼?
第二:他建議用什麼方法達到這個目的?

比如筆者之前閱讀了《clean code》這本書,作者的目的就是讓我們認識到代碼整潔的重要性以及如何寫出整潔的代碼。而如何寫出整潔代碼呢,作者先從小到大,指出應該如何命名、寫好函數、寫好注意、寫好一個類;然後再給出一個完整的逐步改善的列子。

在how to read a book中,給出了主動閱讀一本書,至少要回答的四個問題,這裏回顧一下

  1. 整體來說,這本書在討論什麼問題
  2. 圍繞核心問題,作者有哪些主要的想法、論點
  3. 作者所述是否合理,是部分合理,還是全部合理
  4. 這本書與讀者有何關係,有何啟發,如何運用

這四點對於閱讀適用類書籍來說非常合適

第一點,實用性書籍討論的問題,其實就是作者作者寫這本書的目的,即希望讀者去做到的事情。

第二點,實用性書籍中的主要想法和論點,即使就是作者闡釋為什麼要這麼做、如何達到這個目的。

第三點,作者所述是否正確、合理,對於實用性的書籍,更多的是你是否認同作者的目的、以及達成目的的方法。

第四點,對於實用性書籍,如果你認同了作者的說法,那麼就得採取行動才行。

上面四點,最難的就是落實,學以致用,知行合一。

刻意練習

很多時候,我們看完一本書,或者看完一個在線課程,我們就認為掌握了知識。其實不然,掌握知識需要知識的內隱化,讓這部分知識成為習慣、潛意識。這個過程並沒有捷徑可走,需要不斷的練習,只不過一些知識、技能是每天都能用到的,而有一些則較少用到,對於後者,則需要專門安排時間來刻意練習

比如,當我們看完了how to read a book這本書,想要掌握分析閱讀的技能。那麼需要按照規則一步步執行,這個過程中可能就要求也不同的速度、注意力反覆閱讀一本書,也許會讓人覺得麻煩 — 為什麼不看一遍就搞定?對於一個熟練掌握分析閱讀能力的人來說,也許確實可以在一遍閱讀中同時遵守這些規則,但前提是已經熟練掌握了每一個規則。

就像學游泳一樣,對於新手,會花大量的時間來練習移臂、擺腿、換氣,一遍又一遍的重複這些枯燥的動作。但對於老手來說,似乎從來不會刻意注意這些動作,如果注意這些動作,反而還游不好。但是,為了要忘掉這些單一的動作,一開始就必須先分別學會每一個單一的動作,只有這樣,你才能將所有的動作連結起來。

如何刻意練習 實用性書籍閱讀這件事情呢?RIA拆書法是個可行的辦法:

RIA拆書法

RIA拆書法來自一書,不過本人沒有讀過這本書,對於RIA拆書法,感覺這篇文章 介紹得很清楚。

如圖所示,RIA分為四個階段

  • R: 找到有價值、感興趣的片段
  • I:用自己的語言重述知識
  • A1:描述自己的相關經驗
  • A2:思考自己怎麼應用,指定計劃

其中,I、A1、A2這三步要求讀者用不同顏色的便簽做記錄,貼在原書頁處。

其實,這幾點都是how to read a book中的規則的具體體現,比如I和A1,其實就是分析閱讀的第六個規則中衡量自己是否掌握了主旨的方法,而A2則是閱讀實用性書籍需要回答的第四個問題。

RIA的好處在於通過這幾個標籤強迫讀者停下來進行思考、記錄,將思考的結果和原問題保持在同一個地方,方便回顧;不同顏色的便簽也是很好的視覺刺激,方便記憶。

最後,RIA拆書法還要求:看完一本書後,把所有的A2便簽拿出來貼在牆上,提醒自己日後應用,落實行動。

所以RIA的正式貫徹了學習 — 思考 — 實踐這個流程,值得借鑒 參考。

自我實踐:讀好下一本書

上面的內容,其實都是我所學到的“如何閱讀一本(實用性)書籍”的知識,具體怎麼落實呢?打算用《金字塔原理》這本書來實踐,這本書聽聞已久,也簡單知道其內容,但還沒有仔細閱讀過。

怎麼閱讀呢,會按照以下步驟(checklist)

  • 思考清楚閱讀一本書的目的是什麼,以此決定是檢視閱讀、分析閱讀還是主題閱讀,甚至決定要不要閱讀這本書(閱讀書籍不一定是解決問題的最有效方法,或者當前自己的知識貯備還無法閱讀這麼一本書)。以下步驟假設均決定分析閱讀
  • 如果確定要分析閱讀,那麼應按照smart原則來設立讀這本書的目標。核心在於輸出是怎麼樣的,具體的閱讀計劃(每天讀多少,什麼時候讀完)
  • 利用檢視閱讀,找出這本書的主旨(作者要探討的問題)、主體架構、問題的簡要答案。檢視閱讀也會幫助去調整閱讀計劃。檢視閱讀注重以下幾部分
    • 書目、序章
    • 目錄,每章總結
    • 結語
  • 分析閱讀這本書,做好筆記。分析閱讀注意事項:
    • 使用8020法則,嘗試按照重要性挑戰閱讀速度、時間分配,不重要的章節速讀
    • 核心的部分採用RIA方法(複述、聯想、如何應用)
  • 分析閱讀完成之後,回答閱讀一本實用性書籍應該回答的四個問題。此時可參考輔助閱讀,看看其他讀者的總結和思考。
  • 加強記憶、內化,分為三步:
    • 筆記:在閱讀的過程中就應完成;
    • 博客、腦圖二選一,對筆記進行凝練,深入思考;
    • 分享、實踐二選一,理論知識一般適用於分享,而實用性知識盡量去實踐。
  • 如何實踐落實,總結RIA方法中所有A2,整理成一個checklist(电子版或者紙版),定期逐項check是否有做到

爭取年內搞定!

references

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

中國全面禁野生動物交易

摘錄自2020年1月27日自由時報中國報導

中國國家市場監督管理總局、農業農村部和國家林業和草原局26日發布聯合公告,針對中國各地飼養野生動物場所、農(集)貿易市場、超市、餐飲店、電商平台等場所,即日起暫時「嚴禁野生動物對外擴散與轉運販賣及任何形式的交易活動」,直到「二○一九新型冠狀病毒」(2019-nCoV)肺炎(簡稱武漢肺炎)的全國疫情解除。地方當局也將加強檢查,加以停業整頓、查封,將犯嫌移送公安機關。

中國科學院武漢病毒研究所與若干頂尖大學的十九位知名研究人員,早已呼籲中國政府取締被視為疫情爆發中心的武漢華南海鮮批發市場之類的野生動物市場,但鑽法律漏洞的野生動物非法交易仍盛行,增加疫情爆發的可能性。《華盛頓郵報》指出,中國未能從十七年前爆發的嚴重急性呼吸道症候群(SARS)學到教訓,即野生動物交易市場是動物傳人疾病的一大溫床。

 

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

環保減塑意識抬頭 越南推出蒲草吸管

摘錄自2020年1月30日公視報導

越南是海洋塑膠污染嚴重的國家,一位越南企業家陳明先用蒲草做吸管,不但可以一直使用,還能生物分解。

這種植物吸管製作過程很簡單,將蒲草採收之後清洗乾淨,裁切成20公分,內部用毛刷清理乾淨,日曬約二到三天,用香蕉葉包起即可,如果要使用久一點,便將蒲草吸管放到烤箱中烘乾,室溫下可放六個月,另外一種沒有烘乾的蒲草吸管,常溫下可使用一週,放在冰箱冷藏,保存期限約兩週。用完要丟掉也只是簡單地回歸大地,大大降低污染問題。

越南企業家陳明先表示:「從長遠來看,蒲草吸管不能解決環境汙染問題,也沒有需求上的產品特殊性,(因為蒲草長得不夠快)無法保護到環境,我製造這種蒲草吸管的概念是基於一項原則,就是採收不能多於它的生長。」

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

SQlALchemy session詳解

系列文章:

概念

session用於創建程序和數據庫之間的會話,所有對象的載入和保存都需通過session對象 。

通過sessionmaker調用創建一個工廠,並關聯Engine以確保每個session都可以使用該Engine連接資源:

from sqlalchemy.orm import sessionmaker

# 創建session
DbSession = sessionmaker(bind=engine)
session = DbSession()

操作

session的常見操作方法包括:

  1. flush:預提交,提交到數據庫文件,還未寫入數據庫文件中
  2. commit:提交了一個事務,把內存的數據直接寫入數據庫
  3. rollback:回滾
  4. close:關閉

在事務處理時,需注意一下兩點:

  1. 在事務處理過程發生異常時,進行rollback操作,否則會在下次操作時報錯:
Can’t reconnect until invalid transaction is rolled back 
  1. 一般情況下,在一個事務處理完成之後要關閉session,以確保數據操作的準確性。

建議封裝上下文方法:

from contextlib import contextmanager

@contextmanager
def session_maker(session=session):
    try:
        yield session
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

調用:

def update_user():
    with session_maker() as db_session:
        db_session.query(Users).filter_by(name='test2').update({'email': 'test2@qq.com'})

線程安全

session不是線程安全的,並且我們一般session對象都是全局的,那麼在多線程情況下,當多個線程共享一個session時,數據處理就會發生錯誤。

為了保證線程安全,需使用scoped_session方法:

db_session = scoped_session(sessionmaker(bind=engine))

內部原理

session對象包含了三個重要的部分:

  1. 標識映射(Identity Map)
  2. 對象的狀態 / 狀態跟蹤
  3. 事務

標識映射

標識映射是與ORM關聯的集合,通過標識映射保證了數據庫操作的準確性。

具體的實現原理是:維護一個Python字典(IdentityMap),關聯這個Session對象到數據庫ID的映射,當應用程序想要獲取一個session對象時,若該對象不存在,標識映射會加載該對象並緩存,若該對象已存在,則直接獲取。這樣的好處是:

  1. 已經被請求過的session對象緩存下來,不需要連接加載多次,造成額外的開銷;
  2. 避免了數據不一致

狀態跟蹤

一個Session對象從創建到銷毀,依次經歷四種狀態,分別是:

  1. Transient:剛new出來的對象,還不在會話中,也沒有保存到數據庫。
  2. Pending:transient的對象調用add后,就會變成pending狀態,這時會加入sqlalchemy的監管範圍,數據並未更新到數據庫。
  3. Persistent:該狀態表明數據庫里已經記錄了該對象,在兩種情況下對象處於該狀態:一是通過flush()方法刷新pending對象,二是從數據庫query()得到對象。
  4. Detached:在會話中的事務提交之後,所有的對象都將是Detached狀態。

所謂的狀態跟蹤,就是跟蹤以上四個狀態,保證數據的準確性並在合理的時機丟棄對象以保證合理開銷,那麼具體是怎麼實現的呢?

我們可以看到,只有在pending狀態時,對象的內存數據和數據庫中的數據不一致,在Persistent狀態時,內存數據和數據庫數據已經一致,那麼此後任意時刻丟棄該對象數據都是可以的,這時就需要找個合適的時機丟棄對象,過早或過晚都有其缺陷。於是,就讓垃圾回收器來做決定,在內存不夠的時候釋放對象,回收內存。

Session對象採用了弱引用機制,所謂弱引用,就是說,在保存了對象的引用的情況下,對象仍然可能被垃圾回收器回收。在某一時刻通過引用訪問對象時,對象可能存在也可能不存在,如果對象不存在,就重新從數據庫中加載對象。而如果不希望對象被回收,只需要另外保存一個對象的強引用即可 。

session對象包括三個屬性:

  1. new:剛加入會話的對象
  2. dirty:剛被修改的對象
  3. deleted:在會話中被刪除的對象

三個屬性共同的特點就是內存的數據和數據庫數據不一致,也就是對象處於pending狀態,這也就表明了session保存了所有對象處於pending狀態的強引用。

以上。

代碼可參照:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

巴西東南部暴雨成災 總統視察下令撥款救援

摘錄自2020年1月31日中央社報導

巴西東南部米納斯吉拉斯、聖埃斯皮里圖和里約熱內盧三州本月遭暴雨侵襲,巴西總統波索納洛今(30日)視察受災最嚴重的城市之一好景市,宣布聯邦政府將撥款巴西幣9億元賑災。

1889年建城的好景市層獲聯合國評為「環境模範市」,同時被譽為「花園城」,1980年代市內綠地範圍和居民人口比例一度高達32平方公尺比1,但現在卻到處都是不透水的柏油路面,暴雨襲擊不僅引發嚴重淹水,道路更慘遭摧毀,出現坑洞、隆起現象。

聖保羅大學(USP)氣象學家安布里茲(Tercio Ambrizzi)指出,今年夏天南大西洋海水變暖,使得南極上來的冷氣團在巴西東南部停留更長時間,加上熱帶低壓帶來強烈雨勢,特別是米納斯吉拉斯、聖埃斯皮里圖和里約熱內盧三州持續多雨,土壤和岩層沒有足夠時間吸收水分,也容易引發土石流。

24日迄今,包括好景市在內,米納斯吉拉斯州已有101個城市處於緊急狀態,另外五個城市宣布進入公共災難狀態,超過5萬人流離失所,55人死亡。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!