在Kodi上看HBO Max

考虑到即将到来的Dune(10月22日)以及The Matrix Resurrections(12月22日),我觉得有必要搞一个HBO Max账号了。毕竟华纳已经在Twitter上猛做广告说这两部片子都在流媒体上播放,把我的胃口吊得满满的。当然两张电影票(如果是两个人一块儿看的话就是四张了)也够一年HBO Max的年费了。

在Telegram上的合租群里,HBO Max一般是90块一个季度,差不多是Disney+贵一倍。Disney+其实是个很超值的账号,除了米老鼠之外,还有漫威、星战、皮克斯和国家地理,简直是买一送四的感觉。但如果要看偏阴暗的DC宇宙的话,那就只能HBO Max了。不过价格贵了一倍,却没有买一送四的感觉,所以之前我一直还是保持观望的态度,毕竟Netflix、Apple TV+、Disney+和YouTube Premium这四个账号已经足够消遣的,更何况媳妇还要看极光TV上的脱口秀大会。

但事情的转机来自于前天在合租群里看到的一个50块一年的阿根廷区HBO Max合租车。其实七月份拼的YouTube Premium车这两天突然说翻就翻了,让人很是不爽。48块一年的YouTube其实在合租里算是个正常价,但仍然还是翻了。所以其实50块一年的HBO Max车到底能开多稳还是有待观察的,希望能如车主所说开满一年吧。上车之后发现HBO Max的内容还是很丰富的,虽然不像Disney+那样清晰地分成几个板块,但贵在量大——华纳手上的版权量当真不是盖的。不过正如大家所了解的,HBO Max完全没有中文字幕,这点上确实不太方便非英语用户来观赏。即便有些许英语基础,但遇到遣词复杂或者语速过快的片子,难免看起来还是感觉有些吃力。于是在HBO Max上加中文字幕就是个急需解决的问题,否则50块一年实在是很难能做到物有所值。

网上有不少外挂字幕的教程,年初在家搞流媒体的时候有过一些了解,似乎HBO Max是要在浏览器播放,然后使用扩展来完成字幕同步。但我用的是Chromecast with Google TV,本身就是为了坐在沙发上通过电视来观赏的,所以浏览器加扩展的解决方案并不能够满足需求。

考虑再三,决定还是打破之前的思维定势,通过放弃HBO Max App,来换取更大的内容自由。在这点上,自然还是要使用开放性高自由度强的Kodi来尝试完成。

C# 5.0入门经典配套源代码

自学的头三章还算顺利,基本上课后练习什么的靠自己就能搞定。第四章的课后练习突然冒出来让修改示例代码(p.77),搞得我一头雾水。猜测应该有配套光盘或者配套下载什么的,最终在封底找到一行小字:
读者可通过www.ptpress.com.cnhttp://vdisk.weibo.com/s/zp3n73NBke3A5下载本书的所有源代码。
第一个链接是人民邮电出版社的网址,在资源下载栏目根本找不到。第二个链接是新浪微盘。点了下载按钮却没有反应,似乎是赶上了这波网盘关闭对外分享的大潮,下载功能被停止了。在网上搜了半天也没搜到相同的文件,同名文件大都是原书的扫描PDF。最终还是下载成功了,考虑到未来可能还会有人购买这本书,在这里分享一下可以下载得到的位置。

  1. 这是我自己下载并转存到Evernote上的:
    C# 5.0入门经典
    ISBN 9787115344236
    http://www.evernote.com/l/AARAz55RmdFLr7cZTx-bux2dP27WTzaaTCI/
  2. 或者也可以到这本书的英文原版出版社官网下载,下载链接在页面下方的Downloads标签内,内容是一样的:
    Sams Teach Yourself C# 5.0 in 24 Hours
    http://www.informit.com/store/sams-teach-yourself-c-sharp-5.0-in-24-hours-9780672336843

 

拖延了半年时间终于再度拾起之前的C#,埋头自学起来。
跟着中文版的Sams Teach Yourself C#5.0的教程 慢慢学下来,虽然没有书上说的24小时就能成功那样神速,倒也学得不亦乐乎。
书中第4章里的属性和方法小节有道题目(p.67),一开始无论如何不知道是如何实现(去年在MVA上自学的课程基本上算还给那个老外了)。还好有Google,在我耐着性子(其实快想掀桌了(╯-_-)╯╧╧)尝试各种搜索之后,居然找到了CSDN上有人跟我看同一本书,并把实现的方法写了出来。方法并不复杂,可见我的编程素养还近乎是零啊。
代码如下
Program.cs
[code language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
namespace ConsoleHelloWorld
{
class Program
{
static void Main(string[] args)
{
Contact c = new Contact();
Console.WriteLine(c.ToString());
c.FirstName = “Jim”;
c.LastName = “Morrison”;
c.DateOfBirth = new DateTime(1943, 12, 8);
Console.WriteLine(c.ToString());
c.Search(37.479444f, -122.450278f);
c.Search(37.479444f, -122.450278f, 50);
c.Search(37.479444f, -122.450278f, 50, “en”);
Console.WriteLine(c.VerifyEmailAddress(“joe@example.com”));
Console.WriteLine(c.VerifyEmailAddress(“jim@example.com”));
}
}
}
[/code]
Contact.cs
[code language=”csharp”]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleHelloWorld
{
class Contact
{
private DateTime dateOfBirth;
public DateTime DateOfBirth
{
get
{
return this.dateOfBirth;
}
set
{
this.dateOfBirth = value;
}
}
public string FirstName //自动实现的属性
{
get;
set;
}
public string LastName
{
get;
set;
}
public string FullName //计算得到的属性
{
get
{
return FirstName + ” ” + LastName;
}
}
public override string ToString()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendFormat(“Name: {0}rn”, FullName); //使用计算得到的属性
stringBuilder.AppendFormat(“Date of Birth: {0}rn”, this.dateOfBirth);
return stringBuilder.ToString();
}
public bool VerifyEmailAddress(string emailAddress)
{
return emailAddress == “joe@example.com”;
}
public void Search(float latitude, float longitude)
{
Search(latitude, longitude, 10, “en-US”);
}
public void Search(float latitude, float longitude, int distance)
{
Search(latitude, longitude, distance, “en-US”);
}
public void Search(float latitude, float longitude, int distance, string culture)
{
Console.WriteLine(“latitude {0} longitude {1} distance {2} culture {3}”, latitude, longitude, distance, culture);
}
}
}
[/code]

调用Gears Desktop API

注意:Google已终止了Gears的支持,并且全面转向HTML5,请不要再尝试过时的技术。
原文:
好吧,我承认,在我研究清楚Gears Desktop API的使用方法并给自己的Blog增加“Shortcut”按钮之后,我发现原本是一个“添加到收藏夹”就能完成的功能,竟让我搞的如此复杂……这篇文章原本计划叫做“通过Gears Desktop API给你的Blog添加生成桌面快捷方式的按钮”,后来想想还是算了,太二了。
但不管怎么说,这也算是我的学习成果吧,所以思前想后,还是决定将其记录下来。