Windows10のHyper-Vでubuntu18.04の拡張セッションモードで接続

www.youtube.com

ずっとエラーできなかったのですがこの動画を見て自動ログインにしているとだめなようです。

自動ログインを解除すると使えるようになりました。

f:id:imabari_ehime:20181020204307p:plain

あとはHyper-Vの設定の拡張セッションモードを許可するにチェックを確認

Google Apps ScriptでRSSを表示

5-4 Googleサイトで表示を統合しよう!

をベースにATOMとRSS1.0を表示・リンク追加

愛南町だけ文字化けしてます

f:id:imabari_ehime:20181019174027p:plain

function doGet(e) {
  var temp = HtmlService.createTemplateFromFile('fetch');
  temp.title = 'Fetch';
  temp.msg = '愛媛県内自治体のRSS';
  return temp.evaluate().setTitle('Fetch');
}


function getRSS(n) {
  var jenre = '愛媛県';
  var url = 'http://www.pref.ehime.jp/kurashi/bosai/juyo/juyo_rss1.xml';
  var rss_type = 'rss10';
  
  switch(n) {
    case 1:
      jenre = '新居浜市';
      url = 'https://www.city.niihama.lg.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 2:
      jenre = '西条市';
      url = 'https://www.city.saijo.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10'; 
      break;
    case 3:
      jenre = '上島町';
      url = 'https://www.town.kamijima.lg.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 4:
      jenre = '松山市';
      url = 'https://www.city.matsuyama.ehime.jp/kurashi/rss_news.xml';
      rss_type = 'rss20'; 
      break;
    case 5:
      jenre = '久万高原町';
      url = 'https://www.kumakogen.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 6:
      jenre = '砥部町';
      url = 'https://www.town.tobe.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10'; 
      break;
    case 7:
      jenre = '宇和島市';
      url = 'https://www.city.uwajima.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 8:
      jenre = '宇和島市水道局';
      url = 'https://www.city.uwajima.ehime.jp/rss/10/site-43.xml';
      rss_type = 'rss10'; 
      break;
    case 9:
      jenre = '八幡浜市';
      url = 'http://www.city.yawatahama.ehime.jp/shinchaku/index.rss';
      rss_type = 'rss10';      
      break;
    case 10:
      jenre = '大洲市';
      url = 'https://www.city.ozu.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10'; 
      break;
    case 11:
      jenre = '西予市';
      url = 'https://script.google.com/macros/s/AKfycbwT2zNtha826t9W7HZl-yJ5veAKA2wAltzF2KXcQSEista8lgQ/exec';
      rss_type = 'rss20';      
      break;
    case 12:
      jenre = '西予市社会福祉協議会';
      url = 'http://seiyo-syakyo.jp/files/content_type/type014/rss/content_3.xml';
      rss_type = 'rss10'; 
      break;
    case 13:
      jenre = '内子町';
      url = 'https://www.town.uchiko.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10'; 
      break;
    case 14:
      jenre = '伊方町';
      url = 'https://www.town.ikata.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 15:
      jenre = '松野町';
      url = 'https://www.town.matsuno.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10'; 
      break;
    case 16:
      jenre = '鬼北町';
      url = 'https://www.town.kihoku.ehime.jp/rss/10/list3.xml';
      rss_type = 'rss10';      
      break;
    case 17:
      jenre = '愛南町';
      url = 'http://www.town.ainan.ehime.jp/kurashi/news.rss';
      rss_type = 'rss10'; 
      break;
  }
  
  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();

  var content = '<tr><th>' + jenre + '</th></tr>';
  var rss_max = 10;

  switch(rss_type) {
    case 'atom':
        var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
        var values = root.getChildren('entry', atom);

        if (values.length < 10){
          rss_max = values.length;
        }
        
        for(var i = 0;i <rss_max;i++) {
          var data = values[i];
          content += '<tr><td><a href="' + data.getChild('link', atom).getAttribute('href').getValue() + '">' + data.getChild('title', atom).getValue()  + '</a></td></tr>';
        }
        break;
   
    case 'rss10':
      var rss = XmlService.getNamespace('http://purl.org/rss/1.0/');
      var values = root.getChildren('item', rss);

      if (values.length < 10){
        rss_max = values.length;
      }
      
      for(var i = 0;i <rss_max;i++) {
        var data = values[i];
        content += '<tr><td><a href="' + data.getChild('link', rss).getValue() + '">' + data.getChild('title', rss).getValue()  + '</a></td></tr>';
      }
      break;

    case 'rss20':
      var values = root.getChild('channel').getChildren('item');

      if (values.length < 10){
        rss_max = values.length;
      }
      
      for(var i = 0;i <rss_max;i++) {
        var data = values[i];
        content += '<tr><td><a href="' + data.getChild('link').getValue() + '">' + data.getChild('title').getValue()  + '</a></td></tr>';
      }
      break;
  }

  return content;
}

feed.htmlで保存

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<title>RSS Views</title>
 <script>
 function doAction(n){
   google.script.run.withSuccessHandler(onSuccess).getRSS(n);
 }
 function onSuccess(res){
   var table = document.getElementById("table");
   table.innerHTML = res;
 }
 </script>
</head>
<body onload="doAction(0);">
  <style>
    tr th { border:#aaa solid 1px; padding:5px;
         background-color:#999; color:white; }
    tr td { border:#aaa solid 1px; padding:5px 30px; }
  </style>
  <center>
    <p>
    <button onclick="doAction(0);">愛媛県</button><button onclick="doAction(1);">新居浜市</button><button onclick="doAction(2);">西条市</button><button onclick="doAction(3);">上島町</button><button onclick="doAction(4);">松山市</button><button onclick="doAction(5);">久万高原町</button><button onclick="doAction(6);">砥部町</button><button onclick="doAction(7);">宇和島市</button><button onclick="doAction(8);">宇和島市水道局</button><button onclick="doAction(9);">八幡浜市</button><button onclick="doAction(10);">大洲市</button><button onclick="doAction(11);">西予市</button><button onclick="doAction(12);">西予市社会福祉協議会</button><button onclick="doAction(13);">内子町</button><button onclick="doAction(14);">伊方町</button><button onclick="doAction(15);">松野町</button><button onclick="doAction(16);">鬼北町</button><button onclick="doAction(17);">愛南町</button>
    </p>
    <table id="table">
    </table>
    <div style="height:10px;"></div>
  </center>
</body>
</html>

matplotlibの書き方

teratail.com

matplotlibのAPIを使う1

plt.figure(figsize=(12, 4))
plt.plot(df['DATE TIME'], df['D0'])
plt.ylabel('P')
plt.xlabel('Time')

matplotlibのAPIを使う2

fig = plt.figure(figsize=(12, 4))
ax1 = fig.add_subplot(111)
ax1.plot(df['DATE TIME'], df['D0'])
ax1.set_ylabel('P')
ax1.set_xlabel('Time')

DataFrameのAPIをを使う

ax = df.plot(x='DATE TIME', y='D0',figsize=(4, 4))
ax.set_ylabel('P')
ax.set_xlabel('Time')

matplotlibを使う場合、plot() には列データを渡しますが、 DataFrame.plot() の場合は Label名を渡すことに注意してください

pylab.yticks(range(0,110,10), range(0,110,10)) # Y軸の目盛りを10刻みにする pylab.ylim(0,100) # Yの範囲を指定

Colaboratoryでグラフの日本語表示

インストール

!apt install fonts-ipafont-gothic
!rm /root/.cache/matplotlib/fontList.json

使用時

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'IPAPGothic'

# seaborn利用時
import seaborn as sns

sns.set(font=['IPAPGothic'], font_scale=1.2, style='whitegrid',rc= {'legend.frameon': True})
名前 背景 グリッド
darkgrid グレー あり
dark グレー なし
whitegrid ホワイト あり
white ホワイト なし
ticks ホワイト 軸にのみ

md-page.jsでmarkdownのhtmlファイルをHTMLに変換

github.com

<!-- my-page.html --> 
<script src="https://cdn.rawgit.com/oscarmorrison/md-page/5833d6d1/md-page.js"></script><noscript>

# Header
Welcome to my simplest site

- A
- awesome
- list