1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
|
<html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
<title>Chrisoft::Blog</title>
<script type="text/javascript" src="/panel.js"></script>
<script type="text/javascript" src="/blog/footnoter.js"></script>
<script type="text/javascript" src="/blog/aes-js.js"></script>
<script type="text/javascript" src="/blog/scrypt.js"></script>
<script type="text/javascript" src="/blog/sha256.js"></script>
<script type="text/javascript" src="/blog/decryptor.js"></script>
<link rel="stylesheet" type="text/css" href="/common.css">
<link rel="stylesheet" type="text/css" href="/panel.css">
<link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a">
<link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b">
<link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a">
<link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b">
<link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a">
<link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b">
<link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a">
<link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b">
<link rel="stylesheet" type="text/css" href="/blog/blogext.css">
<script>
function ol()
{
window.onresize=function()
{
if(window.innerWidth<768)
setupevents();
else unsetevents();
}
window.onresize();
_decryptonload();
}
function loadTheme(){
var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1");
if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz';
var ent="";
var d=new Date();
if(thm[0]=='z')
{
var m=d.getMonth()+1;
if(m>=3&&m<6)thm='0'+thm[1];
else if(m>=6&&m<9)thm='1'+thm[1];
else if(m>=9&&m<12)thm='2'+thm[1];
else thm='3'+thm[1];
}
if(thm[1]=='z')
{if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';}
ent=`theme${thm}`;
var R=new RegExp('theme[0-4][ab]');
for(var i=0;i<document.styleSheets.length;++i)
{
if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent)
document.styleSheets[i].disabled=true;
else document.styleSheets[i].disabled=false;
}
var thmcolor="";
switch(thm[0])
{
case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break;
case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break;
case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break;
case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break;
}
document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor);
}
loadTheme();
</script>
</head>
<body onload="ol()" style="overflow-x:hidden;">
<div id="panel" class="TText">
<ul id="panellist">
<li><a href="/"><h1>Chrisoft</h1></a></li>
<li><a href="/blog"><h2>Blog</h2></a></li>
<li><a href="#"><h3 id="title">Site Revamp and Other Rants -- 2019 Edition</h3></a></li>
<li><span>Tags</span>
<ul id="tagslist">
<li><a href="/blog/list/web/">web</a></li><li><a href="/blog/list/random-xp/">random-xp</a></li><li><a href="/blog/list/garbage/">garbage</a></li></ul>
</li>
<li id="tocouter" style="display: none;">
<span>Table of Contents</span>
<ul id="tocroot">
</ul>
</li>
<li style="margin-left:-0.5em"><a id="prevp" href="2018-12-06.html">Prev post</a></li>
<li style="margin-left:-0.5em"><a id="nextp" href="2019-04-25.html">Next post</a></li>
</ul>
</div>
<div id="content">
<h2 id="titleh" class="TText" style="font-wight:normal;">Site Revamp and Other Rants -- 2019 Edition</h2>
<div id="datetags" class="TText" style="margin-bottom:1em;">2019-02-13<br>#web #random-xp #garbage</div>
<hr><div id="article" class="TText"><article>
<p>If you are reading this, your browser probably fetched all data it required to display the page directly from my VPS hosted by ConoHa.</p>
<h1 id="mirror-in-japan">Mirror in Japan</h1>
<p>(No pun intended)</p>
<p>I set up my own git server half a year ago. Now I've found <a href="https://cgit.chrisoft.org/web.git/">the perfect use for it</a>. I create the git repository right in <code>/var/www/html</code> on my local server. The remote server has a post-receive hook that automatically pulls in the document root. Any volatile large files are moved to a new virtual host <code>filestorage.chrisoft.org</code> and kept in sync with <code>rsync</code>.</p>
<p>The site also underwent a major cleanup. Many legacy stuff got either removed or relocated.</p>
<p>Generally this means you should experience major speedup visiting this site. If, however, you are exeriencing problems, please do not hesitate to contact me.</p>
<p>The reverse proxy is now moved to <code>rp.chrisoft.org</code>. It's not yet accessible at the time of writing because my local server is hidden super stealthily under multiple layers of NAT.</p>
<h1 id="an-eruditus-from-waseda-and-an-illiterate-in-china">An Eruditus from Waseda and An Illiterate in China</h1>
<p>Everyone except me has made significant progress.</p>
<p>I was actually shocked to learn that he's now majoring in something related to aviation machinery.</p>
<p>Shame on me, I guess.</p>
<h1 id="a-world-in-which-everyone-can-program">A world in which everyone can program</h1>
<p>I shall probably quit programming and move on by then.</p>
<h1 id="googlephobia">Googlephobia</h1>
<p>Shit. They are probably also watching me writing this.</p>
<p>Thanks to (?) the GrandeFreakWitless, my reliance on Google is not that strong -- nope. It's actually my general fear and distrust of those tech giants.</p>
<p>My fear was magnified by my recent findings of just how much Google knows about me -- they probably know me better than myself; and again by Louis Rossmann <a id="n1" href="#note1" class="note">[1]</a>.</p>
<p>When those Google fanboys are still enjoying the great convenience they provide, I'm already planning to flee from Google. It's probably just me being hyperallergic, but it also could be Google doing something really unfair to their users.</p>
<h1 id="software-subscription-model-sucks">Software Subscription Model Sucks</h1>
<p>Reading through Roland Cloud's product page triggers me everytime: I sincerely cannot figure out why they make it a subscription service rather than a one-time purchase (with a fee for each upgrade).</p>
<p>Usually people subscribe for:</p>
<ul>
<li>Publication or media services, e.g. television, newspapers and magazines. These services provide frequently updated information to the subscriber.</li>
<li>Physically consumable material, such as dairy product.</li>
</ul>
<p>Roland Cloud falls into neither of these two categories. It's not updated as frequent, and it's certainly not physically consumable. The most triggering detail is that if you end your subscription, you will not be able to use any of the products you previously owned, which is ridiculous because you can always keep older issues of a newspaper even you unsubscribed from it.</p>
<p>Supporters of the subscription model may reject me saying 'if you can get access to everything when you join and keep it after unsubscribing, you are essentially purchasing it with ultra-low price', which brings up my next point: Roland Cloud's subscription model is flawed from the beginning:</p>
<ul>
<li>Get everything on subscribe: this differs from traditional subscription a lot, which seems a great bounty to the customer. But it causes problems such as ...</li>
<li>Lose everything on unsubscribe: this is <em>very</em> unfair to the subscriber and makes short-term subscription worth almost nothing. For example if I just want Sound Canvas VA really badly, I would imagine subscribing shortly before its release and unsubscribe after I'm eligible for keeping the product permanently. But this is simply not possible.</li>
<li>Weird pricing. To be honest the current pricing is pretty fair for long-term subscribers. But if Roland somehow decided to fix the 'lose everything on unsubscribe' problem (which is very unlikely to happen), the pricing would become super complex: they probably do not want people to keep a virtual TB-303 for just $19.99.</li>
<li>Potentially unsustainable. Every good thing must come to an end. The most attractive products in Roland Cloud is the software models of Roland's synthesizers from its golden years. But Roland will run out of models to recreate one day. What would Roland do by then? Release everything as a one-time purchase so that every long-term subscriber feels ripped off?</li>
</ul>
<p>I'm an absolute supporter of Roland releasing authentic-sounding digitialized version of their legendary synthesizer models. But their subscription model pisses me off so hard. I know it's not a big deal for a professional producer. However this is a real deal-breaker for amateurs such as me.</p>
<p>Unfortunately there's no real competitors out there when things come to reproducing their own synthesizers. Also a little bit off-topic: the music producing industry deserves more high quality free (as in freedom) software.</p>
<p>Now let's move on and talk about Office 365 by Microsoft and Creative Cloud from Adobe. They bundles software with value-add services such as e-mail service and (optinal) creativity material. IMHO these products they are trying to turn into a service resemble a tool, such as a screwdriver, rather than an apartment that people actually go for renting instead of purchasing.</p>
<p>Paying a monthly fee for a screwdriver makes absolutely no sense. That said, I would stick with my plain old screwdriver, rather than that shiny gold-plated screwdriver with 10 heads which I will lose whenever I stop paying them. <strong>Green is my pepper.</strong></p>
<p>The purpose of this entire rant is to remind the reader of just how many ways proprietary software vendors could come up with to screw their users up. What they care the most has always been money and this will simply not change any time soon. Get ready for more!</p>
</article>
</div><br><hr>
<div class="TText" id="notediv" style="font-size:80%;"><span class="TText"><a id="note1" href="#n1">[1]</a>: <a href="https://vimeo.com/329297480">link to video</a><br></span></div>
<div id="insanch" style="height:3em;"></div>
<div id="footer" style="">
<div id="pagesw" class="TText" style="width:100%;height:0.5em;"></div>
<div style="text-align:center;" class="TText">
Proudly powered by SSBS <reduced style="font-size:70%;">(the static stupid blogging system)</reduced> 2.5
<br>
Content licensed under CC BY-SA 4.0. <span id="purgep" style="display:none;font-size:70%;">This page has passphrase(s) stored. Click <a href="javascript:_purgep()">here</a> to purge.</span>
</div>
</div>
<div id="cmdbuf" class="TText" style="transition:500ms;padding:1em;font-size:2em;color:white;position:absolute;background-color:rgba(0,0,0,0.6);left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;">
</div>
</div>
<div id="decryptui" style="display:none;opacity:0;color:white;z-index:1000;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;">
<div id="decryptdlg" class="TText" style="padding:10px 20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);">
<div id="keyhint" style="margin-bottom:8px;"></div>
<div style="margin-bottom:8px;">Key: <input id="keyinp" type="text" style="color:#fff;"></div>
<div style="height:2.25em;">
<button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button>
<button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button>
</div>
</div>
</div></body></html>
|