PageSourceSearch

https://xjo.ch/

html xjo.ch collected 2026-10-06 13:15:52 UTC 14,891 bytes, 148 lines download raw bytes

1<!DOCTYPE html><html class="appearance-auto" lang="en"><head><meta charset="UTF-8"><title>Zokhoi's blog</title><meta name="description" content="Where you dig the sea of thoughts just for an idea."><meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, initial-scale=1"><!-- Google Analytics --><!-- End Google Analytics -->
2<!-- Baidu Analytics --><!-- End Baidu Analytics --><link rel="icon" href="/image/favicon.ico"><link rel="stylesheet" href="/style/common/bulma.css"><link rel="stylesheet" href="/style/base.css"><link rel="stylesheet" href="/style/common/helper.css">
2<script src="/js/common.js"></script>
2<link rel="stylesheet" href="/style/widget-post-list.css"><meta name="generator" content="Hexo 6.3.0"></head><body class="is-flex is-flex-direction-column"><header class="header-widget is-flex-shrink-0 is-hidden-mobile"><div class="container is-fullhd is-flex is-justify-content-space-between is-align-items-center is-full-height"><section class="is-hidden-mobile is-flex-shrink-0"><h2><a href="/">Zokhoi's blog</a></h2></section><h3 class="is-hidden-mobile is-family-serif is-full-height is-flex is-align-items-center is-flex-shrink-0"></h3><aside class="is-flex-shrink-0"><h3 class="is-inline-block"><a href="/">Home</a></h3><h3 class="is-inline-block"><a href="/about">About</a></h3><h3 class="is-inline-block"><a href="/archives">Archives</a></h3></aside></div></header><header class="is-flex header-widget is-flex-shrink-0 is-align-items-center is-justify-content-center is-hidden-tablet"><h3 class="is-inline-block"><a href="/">Home</a></h3><h3 class="is-inline-block"><a href="/about">About</a></h3><h3 class="is-inline-block"><a href="/archives">Archives</a></h3></header><main><article class="post-container is-flex is-justify-content-center section container is-max-widescreen pt-4 px-2"><div class="columns is-variable is-1-tablet is-3-desktop-only is-2-widescreen is-full-width"><section class="column"><article class="post-item-card"><section class="content post-card-content p-4 pb-5"><header><a href="/tags/music"><i class="tag post-item-tag">music</i></a><a href="/tags/stems"><i class="tag post-item-tag">stems</i></a><a href="/tags/audio-engineering"><i class="tag post-item-tag">audio-engineering</i></a></header><h2 class="mt-4 mb-0 is-family-serif"><a href="/2023/06/14/obtain-vocaloid-stems/">Guide to Obtaining Vocaloid Stems</a></h2><time class="has-text-grey" datetime="2023-06-13T16:00:00.000Z">2023-06-14</time><p class="is-flex-grow-2 mt-2">This is a guide written specificially for the obtaining of Vocaloid song stems, including where to obtain them, and if none exists, how to create them.
3Clean stems
4For the best quality stems, you would want to find stems that are the cleanest and came from official sources, which ultimately should come from the artist themselves. Here are some of the sourc..</p><a class="button is-default mt-2 has-text-weight-semibold" href="/2023/06/14/obtain-vocaloid-stems/">Read more</a></section></article><article class="post-item-card"><header class="is-relative is-flex"><div class="post-cover-backdrop is-hidden"><img src="/image/mf3dre/MF3D.png" alt="loading.."></div><a class="post-cover-link has-text-centered skeleton" href="/2023/04/22/mf3dre/"><img class="post-cover-img js-img-fadeIn" src="/image/mf3dre/MF3D.png" alt="loading.." data-backdrop="true"></a></header><section class="content post-card-content p-4 pb-5"><header><a href="/tags/electronics"><i class="tag post-item-tag">electronics</i></a><a href="/tags/reverse-engineering"><i class="tag post-item-tag">reverse-engineering</i></a></header><h2 class="mt-4 mb-0 is-family-serif"><a href="/2023/04/22/mf3dre/">Midi Fighter 3D Reverse Engineering</a></h2><time class="has-text-grey" datetime="2023-04-21T16:00:00.000Z">2023-04-22</time><p class="is-flex-grow-2 mt-2">
5Intro
6A few years ago I bought a Midi Fighter 3D from DJ TechTools. After playing with it for a while, I was interested in using it as a game controller, which involves binding buttons to keystrokes. Bome’s Midi Translator is good, but I would like to not use a translation layer. This means I need to use a custom firmware. However, DJ TechTools have open ..</p><a class="button is-default mt-2 has-text-weight-semibold" href="/2023/04/22/mf3dre/">Read more</a></section></article></section><aside class="column is-hidden-mobile is-4-tablet is-3-widescreen"><style>.search-widget .search-input {
7    border: none;
8    outline: none;
9    background: transparent;
10    color: var(--second-text-color);
11}
12.search-widget .search-content {
13    position: absolute;
14    left: 0;
15    top: calc(100% - 3px);
16    z-index: 2;
17
18    width: 100%;
19    height: 0;
20    max-height: 550px;
21
22    overflow: auto;
23    box-sizing: border-box;
24
25    background: var(--top-bar-bg-color);
26    backdrop-filter: blur(var(--backdropFilter));
27    -webkit-backdrop-filter: blur(var(--backdropFilter));
28
29    border-bottom-left-radius: var(--borderRadius);
30    border-bottom-right-radius: var(--borderRadius);
31    box-shadow: 0 12px 15px rgba(0, 0, 0, 0.08);
32}
33
34.search-widget .search-content a:hover h5 {
35    color: #3273dc!important;
36}
37</style><main class="aside-card-container search-widget is-relative"><label for="searchInput"><div class="is-flex px-4" id="searchButton"><i class="fa-solid fa-magnifying-glass"></i><input class="search-input is-flex-grow-1" id="searchInput" placeholder="Search everything.."></div></label><section class="search-content content" id="searchContent"></section></main>
37<script>var searchDatabase = []
38var searchInputEl = document.getElementById('searchInput')
39var searchButtonEl = document.getElementById('searchButton')
40var searchResultEl = document.getElementById('searchContent')
41
42searchInputEl.oninput = function (evt) {
43    var searchValue = evt.srcElement.value
44    var haveSearchValue = Boolean(searchValue.trim())
45    if (!haveSearchValue) {
46        searchResultEl.style.height = 0
47        searchResultEl.innerHTML = null
48        return
49    }
50
51    var searchResults = searching(searchValue)
52
53    if (searchResults.length > 0) {
54        renderSearchResults(searchResults)
55    }
56}
57
58function renderSearchResults(results) {
59    searchResultEl.innerHTML = null
60    var fragment = document.createDocumentFragment()
61
62    results.forEach(function (item) {
63        var link = document.createElement('a')
64        var title = document.createElement('h5')
65        var content = document.createElement('p')
66
67        title.className = 'mb-1'
68        title.innerText = item.title
69        content.innerText = item.content
70
71        link.href = item.link
72        link.appendChild(title)
73        link.appendChild(content)
74        link.className = 'p-4 is-block'
75
76        fragment.appendChild(link)
77    })
78
79    searchResultEl.appendChild(fragment)
80    searchResultEl.style.height = 'auto'
81}
82
83function searching(inputText) {
84    var inputTexts = inputText.split(' ')
85    var searchResults = []
86    inputTexts.forEach(function (searchKey) {
87        var haveSearchValue = Boolean(searchKey.trim())
88        if (!haveSearchValue) return
89
90        var key = searchKey.toLowerCase()
91
92        for (var entry of searchDatabase) {
93            var title = entry.getElementsByTagName('title')[0].textContent
94            var link = entry.getElementsByTagName('link')[0].getAttribute('href')
95            var contentWithTags = entry.getElementsByTagName('content')[0].textContent
96            var rawContent = contentWithTags.trim().replace(/<[^>]+>/g, '').toLowerCase()
97
98            var LENGTH = 80
99            var finalContent = ''
100            var contentLength = rawContent.length
101            var searchResultIdx = rawContent.indexOf(key)
102
103            var startIdx = searchResultIdx - 20,
104                endIdx = startIdx + LENGTH
105
106            if (startIdx < 0) {
107                startIdx = 0
108                endIdx = 100
109            }
110
111            endIdx > contentLength && (endIdx = contentLength)
112
113            finalContent = rawContent.substring(startIdx, endIdx)
114
115            if (title.indexOf(key) > -1 || searchResultIdx > -1) {
116                searchResults.push({
117                    link: link,
118                    title: title,
119                    content: finalContent
120                })
121            }
122        }
123    })
124    return searchResults
125}
126
127searchButtonEl.onclick = function () {
128    if (searchDatabase.length > 0) return;
129
130    fetch(window.location.href + '/search.xml').then(res => res.text()).then(res => {
131        var domparser = new DOMParser
132        var doc = domparser.parseFromString(res, 'application/xml')
133        searchDatabase = doc.getElementsByTagName('search')[0].children
134    })
135}</script>
135<main class="aside-card-container profile-widget"><!-- todo: 使用取色工具动态阴影--><section class="is-flex is-flex-direction-column is-justify-content-center is-align-items-center"><section class="is-flex is-justify-content-center avatar is-clipped skeleton"><!-- debug images "https://api.ixiaowai.cn/gqapi/gqapi.php"--><img class="js-img-fadeIn" src="/image/zokhoi.svg" alt="user avatar"></section><h3 class="user-name">Zokhoi</h3><div class="has-text-centered is-relative"><span style="margin-bottom: 5px;">Where you dig the sea of thoughts just for an idea.</span></div></section><section class="sns-container is-flex is-justify-content-center is-align-items-center"><!-- Github--><a title="github" target="_blank" rel="noopener nofollow" href="//github.com/Zokhoi"><i class="fa fa-brands fa-github"></i></a><!-- Instagram--><!-- RSS--><!-- 知乎--><!-- LinkedIn--><!-- Facebook--><!-- ko-fi--><a title="ko-fi" target="_blank" rel="noopener nofollow" href="//ko-fi.com/Zokhoi"><i class="fa fa-solid fa-mug-saucer"></i></a><!-- liberapay--><a title="liberapay" target="_blank" rel="noopener nofollow" href="//liberapay.com/Zokhoi"><i class="fa fa-solid fa-circle-dollar-to-slot"></i></a></section></main><main class="aside-card-container recent-widget"><h3>Recent</h3><ul><li class="is-flex"><!-- change to element replace image placeholder--><img class="js-img-fadeIn" src="https://ui-avatars.com/api/?background=f5f5f5&amp;name=Gu" alt="cover"><!--else--><!--    div.post-img-placeholder--><section class="is-flex-grow-2"><p class="has-text-weight-semibold" style="line-height: 20px; font-size: 14px"><a href="/2023/06/14/obtain-vocaloid-stems/">Guide to Obtaining Vocaloid Stems</a></p><time class="has-text-weight-semibold has-text-grey" datetime="2023-06-13T16:00:00.000Z">2023-06-14</time></section></li><li class="is-flex"><!-- change to element replace image placeholder--><img class="js-img-fadeIn" src="/image/mf3dre/MF3D.png" alt="cover"><!--else--><!--    div.post-img-placeholder--><section class="is-flex-grow-2"><p class="has-text-weight-semibold" style="line-height: 20px; font-size: 14px"><a href="/2023/04/22/mf3dre/">Midi Fighter 3D Reverse Engineering</a></p><time class="has-text-weight-semibold has-text-grey" datetime="2023-04-21T16:00:00.000Z">2023-04-22</time></section></li></ul></main><main class="aside-card-container categories-widget category-page"><h3>Categories</h3><section><ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/electronics/">electronics</a><span class="category-list-count">1</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/music/">music</a><span class="category-list-count">1</span></li></ul></section></main><main class="aside-card-container archives-widget"><h3>Archives</h3><section><ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2023/06/">June 2023</a><span class="archive-list-count">1</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2023/04/">April 2023</a><span class="archive-list-count">1</span></li></ul></section></main><main class="aside-card-container tag-widget"><h3>Tags</h3><section><a href="/tags/electronics"><span class="tag post-item-tag" style="margin-bottom: 5px;">electronics</span></a><a href="/tags/music"><span class="tag post-item-tag" style="margin-bottom: 5px;">music</span></a><a href="/tags/stems"><span class="tag post-item-tag" style="margin-bottom: 5px;">stems</span></a><a href="/tags/reverse-engineering"><span class="tag post-item-tag" style="margin-bottom: 5px;">reverse-engineering</span></a><a href="/tags/audio-engineering"><span class="tag post-item-tag" style="margin-bottom: 5px;">audio-engineering</span></a></section></main></aside></div></article>
135<script>$claudia.fadeInImage(null, $claudia.blurBackdropImg)
136
137window.addEventListener('resize', $claudia.throttle(function () {
138    var images = document.querySelectorAll('.js-img-fadeIn')
139
140    images.forEach($claudia.blurBackdropImg)
141}, 150))</script>
141</main><footer class="is-flex is-flex-direction-column is-align-items-center is-flex-shrink-0 is-family-serif"><section class="sns-container"><!-- Github--><a title="github" target="_blank" rel="noopener nofollow" href="//github.com/Zokhoi"><i class="fa fa-brands fa-github"></i></a><!-- Instagram--><!-- RSS--><!-- 知乎--><!-- LinkedIn--><!-- Facebook--><!-- ko-fi--><a title="ko-fi" target="_blank" rel="noopener nofollow" href="//ko-fi.com/Zokhoi"><i class="fa fa-solid fa-mug-saucer"></i></a><!-- liberapay--><a title="liberapay" target="_blank" rel="noopener nofollow" href="//liberapay.com/Zokhoi"><i class="fa fa-solid fa-circle-dollar-to-slot"></i></a></section><p><span>Copyright ©</span><span> Zokhoi 2026</span></p><div class="is-flex is-justify-content-center is-flex-wrap-wrap"><p>Powered by Hexo &verbar;&nbsp;</p><p class="is-flex is-justify-content-center"><a title="Hexo theme author" target="_blank" rel="noopener" href="//github.com/haojen">Theme by Haojen&nbsp;</a><span>and&nbsp;</span><a title="Hexo theme author" target="_blank" rel="noopener" href="//github.com/Zokhoi">Modified by Zokhoi&nbsp;</a></p><div style="margin-top: 2px"><a class="github-button" title="github-button" target="_blank" rel="noopener" href="https://github.com/haojen/hexo-theme-Claudia" data-color-scheme="no-preference: light; light: light; dark: dark;" data-show-count="true"></a></div></div><div><span></span></div></footer>
141<script async defer src="https://buttons.github.io/buttons.js"></script>
141<script>$claudia.fadeInImage(null, $claudia.blurBackdropImg)
142
143window.addEventListener('resize', $claudia.throttle(function () {
144    var images = document.querySelectorAll('.js-img-fadeIn')
145
146    images.forEach($claudia.blurBackdropImg)
147}, 150))</script>
147<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"74bb2159a1eb42a7a371d802a8b25c97","r":1,"spa":2}' crossorigin="anonymous"></script>
147
148</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.