First implementation

This commit is contained in:
Takumi Sueda 2021-12-04 19:33:31 +09:00
parent 182c734061
commit 1c03c76436
56 changed files with 3251 additions and 372 deletions

1
CNAME Normal file
View File

@ -0,0 +1 @@
wiki.brainux.org

View File

@ -14,4 +14,5 @@ group :jekyll_plugins do
gem "jemoji"
gem "jekyll-include-cache"
gem "jekyll-algolia"
gem "webrick"
end

7
Makefile Normal file
View File

@ -0,0 +1,7 @@
.PHONY:
install:
bundle install
.PHONY:
serve:
bundle exec jekyll serve

View File

@ -13,14 +13,12 @@
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: MM
email:
title: Brain Hackers Wiki
author: Brain Hackers
description: >- # this means to ignore newlines until "baseurl:"
Write an awesome description for your new site here. You can edit this
line in _config.yml. It will appear in your document head meta (for
Google search results) and in your feed.xml site description.
twitter_username: username
github_username: username
The Wiki of Brain Hackers
twitter_username: brainhackerz
github_username: brain-hackers
minimal_mistakes_skin: default
search: true
@ -29,8 +27,9 @@ markdown: kramdown
remote_theme: mmistakes/minimal-mistakes
# Outputting
permalink: /:categories/:title/
paginate: 5 # amount of posts to show
paginate: 10 # amount of posts to show
paginate_path: /page:num/
locale: ja
timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
include:
@ -39,14 +38,14 @@ include:
# Exclude from processing.
# The following items will not be processed, by default. Create a custom list
# to override the default setting.
# exclude:
# - Gemfile
# - Gemfile.lock
# - node_modules
# - vendor/bundle/
# - vendor/cache/
# - vendor/gems/
# - vendor/ruby/
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/
# Plugins (previously gems:)
plugins:
@ -57,35 +56,24 @@ plugins:
- jemoji
- jekyll-include-cache
author:
name : "First Lastname"
avatar : "/assets/images/bio-photo.jpg"
bio : "My awesome biography constrained to a sentence or two goes here."
links:
- label: "Website"
icon: "fas fa-fw fa-link"
url: "https://"
- label: "Twitter"
icon: "fab fa-fw fa-twitter-square"
url: "https://twitter.com/"
- label: "GitHub"
icon: "fab fa-fw fa-github"
url: "https://github.com/"
- label: "Instagram"
icon: "fab fa-fw fa-instagram"
url: "https://instagram.com/"
atom_feed:
hide: true
stay_on_top_categories:
- 初めての方へ
- a
footer:
links:
- label: "Twitter"
icon: "fab fa-fw fa-twitter-square"
url: "https://twitter.com/"
url: "https://twitter.com/brainhackerz"
- label: "GitHub"
icon: "fab fa-fw fa-github"
url: "https://github.com/"
- label: "Instagram"
icon: "fab fa-fw fa-instagram"
url: "https://instagram.com/"
url: "https://github.com/brain-hackers"
- label: "Brainux.org"
icon: "fas fa-globe-asia"
url: "https://brainux.org/"
defaults:
# _posts
@ -94,18 +82,19 @@ defaults:
type: posts
values:
layout: single
author_profile: true
read_time: true
author_profile: false
comments: true
share: true
related: true
show_date: false
toc: true
toc_sticky: true
# _pages
- scope:
path: "_pages"
type: pages
values:
layout: single
author_profile: true
author_profile: false
show_date: false
category_archive:
type: liquid

View File

@ -1,9 +1,7 @@
main:
- title: "Posts"
url: /posts/
- title: "Categories"
url: /categories/
- title: "Tags"
- title: "初めての方へ"
url: /for%20beginners/beginner-get-started/
- title: "タグ一覧"
url: /tags/
- title: "About"
- title: "この Wiki について"
url: /about/

1910
_data/ui-text.yml Normal file

File diff suppressed because it is too large Load Diff

18
_includes/footer.html Normal file
View File

@ -0,0 +1,18 @@
<div class="page__footer-follow">
<ul class="social-icons">
{% if site.footer.links %}
{% for link in site.footer.links %}
{% if link.label and link.url %}
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i> {{ link.label }}</a></li>
{% endif %}
{% endfor %}
{% endif %}
{% unless site.atom_feed.hide %}
<li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
{% endunless %}
</ul>
</div>
<div class="page__footer-copyright">Licensed under CC-BY-SA 4.0 with :heart: by {{ site.author | default: site.title }}.</div>
<div class="page__footer-copyright">Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries. All other product names, logos, and brands are property of their respective owners.</div>

155
_includes/seo.html Normal file
View File

@ -0,0 +1,155 @@
<!-- begin _includes/seo.html -->
{%- if site.url -%}
{%- assign seo_url = site.url | append: site.baseurl -%}
{%- endif -%}
{%- assign seo_url = seo_url | default: site.github.url -%}
{% assign title_separator = site.title_separator | default: '-' | replace: '|', '&#124;' %}
{%- if page.title -%}
{%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%}
{%- endif -%}
{%- if seo_title -%}
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- endif -%}
{% if page.canonical_url %}
{%- assign canonical_url = page.canonical_url %}
{% else %}
{%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
{% endif %}
{%- assign seo_description = page.description | default: page.excerpt | default: site.description -%}
{%- if seo_description -%}
{%- assign seo_description = seo_description | markdownify | strip_html | newline_to_br | strip_newlines | replace: '<br />', ' ' | escape_once | strip -%}
{%- endif -%}
{%- assign author = page.author | default: page.authors[0] | default: site.author -%}
{%- assign author = site.data.authors[author] | default: author -%}
{%- if author.twitter -%}
{%- assign author_twitter = author.twitter | replace: "@", "" -%}
{%- endif -%}
{%- assign page_large_image = site.og_image | default: page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url -%}
{%- assign page_large_image = page_large_image | escape -%}
{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url -%}
{%- assign page_teaser_image = page_teaser_image | escape -%}
{%- assign site_og_image = site.og_image | absolute_url -%}
{%- assign site_og_image = site_og_image | escape -%}
{%- if page.date -%}
{%- assign og_type = "article" -%}
{%- else -%}
{%- assign og_type = "website" -%}
{%- endif -%}
<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
<meta name="description" content="{{ seo_description }}">
{% if author.name %}
<meta name="author" content="{{ author.name | default: author }}">
{% if og_type == "article" %}
<meta property="article:author" content="{{ author.name | default: author }}">
{% endif %}
{% endif %}
<meta property="og:type" content="{{ og_type }}">
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta property="og:url" content="{{ canonical_url }}">
{% if seo_description %}
<meta property="og:description" content="{{ seo_description }}">
{% endif %}
{% if page_large_image %}
<meta property="og:image" content="{{ page_large_image }}">
{% elsif page_teaser_image %}
<meta property="og:image" content="{{ page_teaser_image }}">
{% endif %}
{% if site.twitter.username %}
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
<meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta name="twitter:description" content="{{ seo_description }}">
<meta name="twitter:url" content="{{ canonical_url }}">
{% if page_large_image %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="{{ page_large_image }}">
{% else %}
<meta name="twitter:card" content="summary">
{% if page_teaser_image %}
<meta name="twitter:image" content="{{ page_teaser_image }}">
{% endif %}
{% endif %}
{% if author_twitter %}
<meta name="twitter:creator" content="@{{ author_twitter }}">
{% endif %}
{% endif %}
{% if page.date %}
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
{% endif %}
{% if og_type == "article" and page.last_modified_at %}
<meta property="article:modified_time" content="{{ page.last_modified_at | date_to_xmlschema }}">
{% endif %}
{% if site.facebook %}
{% if site.facebook.publisher %}
<meta property="article:publisher" content="{{ site.facebook.publisher }}">
{% endif %}
{% if site.facebook.app_id %}
<meta property="fb:app_id" content="{{ site.facebook.app_id }}">
{% endif %}
{% endif %}
<link rel="canonical" href="{{ canonical_url }}">
{% if paginator.previous_page %}
<link rel="prev" href="{{ paginator.previous_page_path | absolute_url }}">
{% endif %}
{% if paginator.next_page %}
<link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
{% endif %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
{% if site.social.type == "Organization" %}
"@type": "Organization",
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
"logo": {{ site_og_image | jsonify }}{% endif %}
{% else %}
"@type": "Person",
"name": {{ site.social.name | default: site.name | jsonify }},
"url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{% endif %}
}
</script>
{% if site.google_site_verification %}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
{% endif %}
{% if site.bing_site_verification %}
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
{% endif %}
{% if site.alexa_site_verification %}
<meta name="alexaVerifyID" content="{{ site.alexa_site_verification }}">
{% endif %}
{% if site.yandex_site_verification %}
<meta name="yandex-verification" content="{{ site.yandex_site_verification }}">
{% endif %}
{% if site.naver_site_verification %}
<meta name="naver-site-verification" content="{{ site.naver_site_verification }}">
{% endif %}
<!-- end _includes/seo.html -->

93
_layouts/categories.html Normal file
View File

@ -0,0 +1,93 @@
---
layout: archive
---
{{ content }}
{% assign stay_on_top = site.stay_on_top_categories %}
{% assign categories_max = 0 %}
{% for category in site.categories %}
{% if category[1].size > categories_max %}
{% assign categories_max = category[1].size %}
{% endif %}
{% endfor %}
<img src="/assets/images/top.jpg">
<h3>カテゴリ一覧</h3>
<ul class="taxonomy__index">
{% comment %} Iterate the Stay-on-Top list and all categories and render matched categories {% endcomment %}
{% for category in site.categories %}
{% for stay in stay_on_top %}
<!--<p>category[0] = `{{ category[0]}}`, stay = `{{ stay }}`</p>-->
{% if category[0] == stay %}
<li>
<!-- Stay on top -->
<a href="#{{ category[0] | slugify }}">
<strong>{{ category[0] }}</strong>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
{% comment %} Iterate the Stay-on-Top list and all categories and render unmatched categories {% endcomment %}
{% for category in site.categories %}
{% assign skip = false %}
{% for stay in stay_on_top %}
{% if category[0] == stay %}
{% assign skip = true %}
{% endif %}
{% endfor %}
{% if skip %}
{% continue %}
{% endif %}
<li>
<a href="#{{ category[0] | slugify }}">
<strong>{{ category[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endfor %}
</ul>
{% assign entries_layout = page.entries_layout | default: 'list' %}
{% for category in site.categories %}
{% for stay in stay_on_top %}
{% if category[0] == stay %}
<section id="{{ category[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ category[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in category.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
{% for category in site.categories %}
{% assign skip = false %}
{% for stay in stay_on_top %}
{% if category[0] == stay %}
{% assign skip = true %}
{% endif %}
{% endfor %}
{% if skip %}
{% continue %}
{% endif %}
<section id="{{ category[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ category[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in category.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endfor %}

View File

@ -1,8 +1,9 @@
---
title: "Page Not Found"
excerpt: "Page not found. Your pixels are in another canvas."
excerpt: "Page not found / ページが見つかりませんでした"
sitemap: false
permalink: /404.html
---
Sorry, but the page you were trying to view does not exist.
<br>
ページが見つかりませんでした。

View File

@ -3,6 +3,7 @@ permalink: /about/
title: "About"
---
Tempor velit sint sunt ipsum tempor enim ad qui ullamco. Est dolore anim ad velit duis dolore minim sunt aliquip amet commodo labore. Ut eu pariatur aute ea aute excepteur laborum. Esse ea esse excepteur minim mollit qui cillum excepteur ex dolore magna. Labore deserunt fugiat incididunt incididunt sint ea. Consequat dolore aute laboris quis proident quis non et est consectetur ex eiusmod sit culpa.
Brain Hackers Wiki は、電子辞書ハックを愛するメンバーが集う Brain Hackers が運営するサイトです。
電子辞書で Linux を動かすチュートリアルや有用な知見がどなたでも簡単に手に入ることを目指しています。
Cupidatat ea do et in excepteur in. Ad nostrud ut est esse eu duis ea sunt eiusmod. Aliquip tempor veniam sint elit fugiat. Velit incididunt laboris amet incididunt labore dolore irure velit excepteur commodo deserunt laborum. Consectetur eu fugiat veniam veniam Lorem labore magna eiusmod. Ea occaecat reprehenderit pariatur consectetur minim labore ut aliquip.
開発に関するより詳細な情報や会話については Discord やその他の箇所にあります。詳しくは [GitHub Org](https://github.com/brain-hackers/README) のページから参照してください。

View File

@ -1,6 +0,0 @@
---
title: "Posts by Category"
layout: categories
permalink: /categories/
author_profile: true
---

View File

@ -2,5 +2,5 @@
title: "Posts by Tag"
permalink: /tags/
layout: tags
author_profile: true
author_profile: false
---

View File

@ -1,6 +0,0 @@
---
title: "Posts by Year"
permalink: /posts/
layout: posts
author_profile: true
---

View File

@ -1,14 +0,0 @@
---
title: "Post: Modified Date"
last_modified_at: 2016-03-09T16:20:02-05:00
categories:
- Blog
tags:
- Post Formats
- readability
- standard
---
This post has been updated and should show a modified date if used in a layout.
All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end.

View File

@ -1,32 +0,0 @@
---
title: "Post: Standard"
excerpt_separator: "<!--more-->"
categories:
- Blog
tags:
- Post Formats
- readability
- standard
---
All children, except one, grow up. They soon know that they will grow up, and the way Wendy knew was this. One day when she was two years old she was playing in a garden, and she plucked another flower and ran with it to her mother. I suppose she must have looked rather delightful, for Mrs. Darling put her hand to her heart and cried, "Oh, why can't you remain like this for ever!" This was all that passed between them on the subject, but henceforth Wendy knew that she must grow up. You always know after you are two. Two is the beginning of the end.
Mrs. Darling first heard of Peter when she was tidying up her children's minds. It is the nightly custom of every good mother after her children are asleep to rummage in their minds and put things straight for next morning, repacking into their proper places the many articles that have wandered during the day.
<!--more-->
This post has a manual excerpt `<!--more-->` set after the second paragraph. The following YAML Front Matter has also be applied:
```yaml
excerpt_separator: "<!--more-->"
```
If you could keep awake (but of course you can't) you would see your own mother doing this, and you would find it very interesting to watch her. It is quite like tidying up drawers. You would see her on her knees, I expect, lingering humorously over some of your contents, wondering where on earth you had picked this thing up, making discoveries sweet and not so sweet, pressing this to her cheek as if it were as nice as a kitten, and hurriedly stowing that out of sight. When you wake in the morning, the naughtiness and evil passions with which you went to bed have been folded up small and placed at the bottom of your mind and on the top, beautifully aired, are spread out your prettier thoughts, ready for you to put on.
I don't know whether you have ever seen a map of a person's mind. Doctors sometimes draw maps of other parts of you, and your own map can become intensely interesting, but catch them trying to draw a map of a child's mind, which is not only confused, but keeps going round all the time. There are zigzag lines on it, just like your temperature on a card, and these are probably roads in the island, for the Neverland is always more or less an island, with astonishing splashes of colour here and there, and coral reefs and rakish-looking craft in the offing, and savages and lonely lairs, and gnomes who are mostly tailors, and caves through which a river runs, and princes with six elder brothers, and a hut fast going to decay, and one very small old lady with a hooked nose. It would be an easy map if that were all, but there is also first day at school, religion, fathers, the round pond, needle-work, murders, hangings, verbs that take the dative, chocolate pudding day, getting into braces, say ninety-nine, three-pence for pulling out your tooth yourself, and so on, and either these are part of the island or they are another map showing through, and it is all rather confusing, especially as nothing will stand still.
Of course the Neverlands vary a good deal. John's, for instance, had a lagoon with flamingoes flying over it at which John was shooting, while Michael, who was very small, had a flamingo with lagoons flying over it. John lived in a boat turned upside down on the sands, Michael in a wigwam, Wendy in a house of leaves deftly sewn together. John had no friends, Michael had friends at night, Wendy had a pet wolf forsaken by its parents, but on the whole the Neverlands have a family resemblance, and if they stood still in a row you could say of them that they have each other's nose, and so forth. On these magic shores children at play are for ever beaching their coracles [simple boat]. We too have been there; we can still hear the sound of the surf, though we shall land no more.
Of all delectable islands the Neverland is the snuggest and most compact, not large and sprawly, you know, with tedious distances between one adventure and another, but nicely crammed. When you play at it by day with the chairs and table-cloth, it is not in the least alarming, but in the two minutes before you go to sleep it becomes very real. That is why there are night-lights.
Occasionally in her travels through her children's minds Mrs. Darling found things she could not understand, and of these quite the most perplexing was the word Peter. She knew of no Peter, and yet he was here and there in John and Michael's minds, while Wendy's began to be scrawled all over with him. The name stood out in bolder letters than any of the other words, and as Mrs. Darling gazed she felt that it had an oddly cocky appearance.

View File

@ -1,134 +0,0 @@
---
title: "Post: Chat"
categories:
- Blog
tags:
- chat
- Post Formats
---
Abbott: Strange as it may seem, they give ball players nowadays very peculiar names.
Costello: Funny names?
Abbott: Nicknames, nicknames. Now, on the St. Louis team we have Who's on first, What's on second, I Don't Know is on third--
Costello: That's what I want to find out. I want you to tell me the names of the fellows on the St. Louis team.
Abbott: I'm telling you. Who's on first, What's on second, I Don't Know is on third--
Costello: You know the fellows' names?
Abbott: Yes.
Costello: Well, then who's playing first?
Abbott: Yes.
Costello: I mean the fellow's name on first base.
Abbott: Who.
Costello: The fellow playin' first base.
Abbott: Who.
Costello: The guy on first base.
Abbott: Who is on first.
Costello: Well, what are you askin' me for?
Abbott: I'm not asking you--I'm telling you. Who is on first.
Costello: I'm asking you--who's on first?
Abbott: That's the man's name.
Costello: That's who's name?
Abbott: Yes.
Costello: When you pay off the first baseman every month, who gets the money?
Abbott: Every dollar of it. And why not, the man's entitled to it.
Costello: Who is?
Abbott: Yes.
Costello: So who gets it?
Abbott: Why shouldn't he? Sometimes his wife comes down and collects it.
Costello: Who's wife?
Abbott: Yes. After all, the man earns it.
Costello: Who does?
Abbott: Absolutely.
Costello: Well, all I'm trying to find out is what's the guy's name on first base?
Abbott: Oh, no, no. What is on second base.
Costello: I'm not asking you who's on second.
Abbott: Who's on first!
Costello: St. Louis has a good outfield?
Abbott: Oh, absolutely.
Costello: The left fielder's name?
Abbott: Why.
Costello: I don't know, I just thought I'd ask.
Abbott: Well, I just thought I'd tell you.
Costello: Then tell me who's playing left field?
Abbott: Who's playing first.
Costello: Stay out of the infield! The left fielder's name?
Abbott: Why.
Costello: Because.
Abbott: Oh, he's center field.
Costello: Wait a minute. You got a pitcher on this team?
Abbott: Wouldn't this be a fine team without a pitcher?
Costello: Tell me the pitcher's name.
Abbott: Tomorrow.
Costello: Now, when the guy at bat bunts the ball--me being a good catcher--I want to throw the guy out at first base, so I pick up the ball and throw it to who?
Abbott: Now, that's he first thing you've said right.
Costello: I DON'T EVEN KNOW WHAT I'M TALKING ABOUT!
Abbott: Don't get excited. Take it easy.
Costello: I throw the ball to first base, whoever it is grabs the ball, so the guy runs to second. Who picks up the ball and throws it to what. What throws it to I don't know. I don't know throws it back to tomorrow--a triple play.
Abbott: Yeah, it could be.
Costello: Another guy gets up and it's a long ball to center.
Abbott: Because.
Costello: Why? I don't know. And I don't care.
Abbott: What was that?
Costello: I said, I DON'T CARE!
Abbott: Oh, that's our shortstop!

View File

@ -1,68 +0,0 @@
---
title: "Post: Notice"
categories:
- Blog
tags:
- Post Formats
- notice
---
A notice displays information that explains nearby content. Often used to call attention to a particular detail.
When using Kramdown `{: .notice}` can be added after a sentence to assign the `.notice` to the `<p></p>` element.
**Changes in Service:** We just updated our [privacy policy](#) here to better service our customers. We recommend reviewing the changes.
{: .notice}
**Primary Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. [Praesent libero](#). Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
{: .notice--primary}
**Info Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing elit](#). Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
{: .notice--info}
**Warning Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. [Integer nec odio](#). Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
{: .notice--warning}
**Danger Notice:** Lorem ipsum dolor sit amet, [consectetur adipiscing](#) elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet.
{: .notice--danger}
**Success Notice:** Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at [nibh elementum](#) imperdiet.
{: .notice--success}
Want to wrap several paragraphs or other elements in a notice? Using Liquid to capture the content and then filter it with `markdownify` is a good way to go.
```html
{% raw %}{% capture notice-2 %}
#### New Site Features
* You can now have cover images on blog pages
* Drafts will now auto-save while writing
{% endcapture %}{% endraw %}
<div class="notice">{% raw %}{{ notice-2 | markdownify }}{% endraw %}</div>
```
{% capture notice-2 %}
#### New Site Features
* You can now have cover images on blog pages
* Drafts will now auto-save while writing
{% endcapture %}
<div class="notice">
{{ notice-2 | markdownify }}
</div>
Or you could skip the capture and stick with straight HTML.
```html
<div class="notice">
<h4>Message</h4>
<p>A basic message.</p>
</div>
```
<div class="notice">
<h4>Message</h4>
<p>A basic message.</p>
</div>

View File

@ -1,12 +0,0 @@
---
title: "Post: Quote"
categories:
- Blog
tags:
- Post Formats
- quote
---
> Only one thing is impossible for God: To find any sense in any copyright law on the planet.
> <cite><a href="http://www.brainyquote.com/quotes/quotes/m/marktwain163473.html">Mark Twain</a></cite>

View File

@ -1,15 +0,0 @@
---
title: "Post: Link"
categories:
- Blog
tags:
- link
- Post Formats
link: https://github.com
---
This theme supports **link posts**, made famous by John Gruber. To use, just add `link: http://url-you-want-linked` to the post's YAML front matter and you're done.
> And this is how a quote looks.
Some [link](#) can also be shown.

View File

@ -1,29 +0,0 @@
---
title: "Welcome to Jekyll!"
date: 2019-04-18T15:34:30-04:00
categories:
- blog
tags:
- Jekyll
- update
---
You'll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
To add new posts, simply add a file in the `_posts` directory that follows the convention `YYYY-MM-DD-name-of-post.ext` and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.
Jekyll also offers powerful support for code snippets:
```ruby
def print_hi(name)
puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
```
Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekylls GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
[jekyll-docs]: https://jekyllrb.com/docs/home
[jekyll-gh]: https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/

View File

@ -0,0 +1,151 @@
---
title: 初めての方へ ─ とりあえず動かす
categories:
- For Beginners
tags:
- For Beginners
- 沼の入り口
---
<img src="/assets/images/happy.png">
# はじめに
このページでは、SHARP Brain で Linux を動かす試みから生まれた Linux ディストリビューション **Brainux** を手軽に起動する方法をご紹介します。
Linux ディストリビューションは、2つの大きな要素としてカーネルとそれ以外のソフトウェアの組み合わせでできています。Brain の場合はカーネルを起動するブートローダーも SD カード上に必要なため、正確にはカーネル・ソフトウェア・ブートローダーのセットが必要になります。
リポジトリ [buildbrain](https://github.com/brain-hackers/buildbrain) では、Raspberry Pi と同様に SD カードに書き込むだけで起動可能にした SD イメージを公開しています。ちなみにカーネル・ソフトウェア・ブートローダーはどれも自力で準備することもできます。くわしくは本 Wiki の対応するページを参照してください。
質問がある場合や開発に参加したい場合は、まず [Brain Hackers の Discord](https://github.com/brain-hackers/README) に参加して頂き、「雑談」チャンネルでお気軽にご質問ください。
# 対応している機種
2021年2月21日現在、対応している機種とハードウェアは以下の通りです。省略のため、PW-SH1 や PW-SJ1 のような同世代の機種は特記すべき差がない限りは "Sx1" のように省略形で記載します。
内蔵ハードウェアの対応状況や使い方については[内蔵ハードウェア](#内蔵ハードウェア)をご覧ください。キーマップもそちらに掲載しています。
|機種 |Linux 起動 |キーボード |注釈|
|:-----|:----------------:|:----------------:|:---|
|PW-Sx1 より前|||PW-GC610, PW-G5300 のような数字が3桁もしくは4桁の機種|
|PW-Sx1|:white_check_mark:|:white_check_mark:||
|PW-Sx2|:white_check_mark:|:white_check_mark:||
|PW-Sx3|:white_check_mark:| ||
|PW-Sx4|:white_check_mark:| ||
|PW-Sx5|:white_check_mark:| ||
|PW-Sx6|:white_check_mark:| ||
|PW-Sx7|:white_check_mark:| |未リリース・Sx6 を流用可|
|PW-x1 以降||||
# SD カードのイメージをダウンロードする
[brain-hackers/buildbrain のリリースページ](https://github.com/brain-hackers/buildbrain/releases)にアクセスし、最新リリースの配布物の中から `sdimage-*.zip` と名のついた ZIP ファイルをダウンロードします。`*` には最新リリースのバージョン名が入ります。
# SD カードに書き込む
書き込むソフトは Windows / macOS / Linux のどれをお使いの場合でも利用可能な balenaEtcher がおすすめです。[公式サイト](https://www.balena.io/etcher/)にアクセスしてダウンロードしてください。
macOS もしくは Linux をお使いの場合は、ZIP を展開して取り出した .img ファイルを `dd` コマンドでそのまま書くことも可能です。
## balenaEtcher を使う場合
今回は macOS で balenaEtcher を使用した際の画像で説明します。どの OS でも同様にして書き込めます。
1. balenaEtcher を起動します
2. "Flash from file" をクリックし、ダウンロードした ZIP ファイルを選択します
- 展開する必要はありません
<img src="/assets/images/etcher1.png" width=500px>
<img src="/assets/images/etcher2.png" width=500px>
3. "Select target" をクリックして書き込み先を選択します
- 正しい SD カードを選択しているか慎重に確認してください
- 4GB 以上の SD カードであればなんでも使用可能です
- SD カードの性能がシステムの使用感に直結するため高速な SD カードを使用することをおすすめします
- 画像では 8GB の SD カードを選択しています
<img src="/assets/images/etcher3.png" width=500px>
<img src="/assets/images/etcher4.png" width=500px>
4. "Flash!" をクリックして書き込みます
- 改めて正しい SD カードが選択されているか確認した上で書き込んでください
- 書き込みには管理者権限が必要なため管理者パスワードを入力します
<img src="/assets/images/etcher5.png" width=500px>
<img src="/assets/images/etcher6.png" width=500px>
<img src="/assets/images/etcher7.png" width=500px>
5. 完成!
<img src="/assets/images/etcher8.png" width=500px>
## dd を使う場合
macOS もしくは Linux をお使いの場合は、`dd` コマンドでも書き込むことができます。以下にコマンド例を示します。
### macOS の場合
- macOS では `/dev/disk*` に書き込むと非常に遅いため `/dev/rdisk*` を使用します
- どのディスクが SD カードかはディスクユーティリティを使用して確認します
以下に実行例を示します。バージョン番号は適宜読み替えてください。
```sh
cd ~/Downloads
unzip sdimage-2021-02-21-162410.zip
sudo dd if=~/Downloads/sdimage-2021-02-21-162410.img of=/dev/rdisk4 bs=10M
```
### Linux の場合
以下に実行例を示します。バージョン番号は適宜読み替えてください。
```sh
cd ~/Downloads
unzip sdimage-2021-02-21-162410.zip
sudo dd if=~/Downloads/sdimage-2021-02-21-162410.img of=/dev/sdc bs=10M
```
# 実機で起動する
書き込み終わった SD カードを Brain に挿入し、リセットボタンを押します。Brain のロゴが表示されたあと U-Boot が起動し、すぐ後に Linux が起動します。
本体の内蔵キーボードに対応している機種では、ログインシェルが表示されたらユーザー名とパスワードともに `root` でログインできます。非対応の機種では、電源供給が可能なタイプの OTG ケーブルを使用してキーボードを繋ぐと操作できます。
# 内蔵ハードウェア
Brain における Linux の動作はまだ初期段階であり、一部のハードウェアしか利用できません。
## キーボード (Sx1, Sx2)
キーが非常に少ない Brain のキーボードで必要な記号を打つため、キーボードの使用方法は特殊になっています。キートップに記載されたキー以外の文字は、すべて「記号」キーと「シフト」キーを組み合わせて入力します。
Shift キー・Ctrl キー・Alt キーは現実のキーボードに近い配置として以下のように対応させています。
- Shift → 「シフト」
- Ctrl → ページアップキー(《 を横に倒した記号のキー)
- Alt → 「文字切り替え」キー
キーと入力される文字のマップを以下に示します。
<img src="/assets/images/keymap.png" width=640px>

View File

@ -0,0 +1,75 @@
---
title: Linux のビルド
categories:
- Linux
tags:
- Linux
- 自力ビルド
---
# 動作環境
- Debian 10 (Buster)
- Ubuntu 20.04 LTS
本項では上記のいずれかを使用していることを前提で記述します。
#前提
この頁の内容を実行する前に[UBootビルドbuildbrain](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9Ebuildbrain)の内容を実行してください。
# 依存関係のインストール
以下のコマンドで依存関係をインストールします。
```sh
sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi debootstrap qemu-user-static
```
# Gitリポジトリのクローン
以下のコマンドでGitリポジトリをクローンして、必要なファイルをダウンロードします。長い時間がかかるので、時間のあるときに行いましょう。
```
git clone --recursive https://github.com/brain-hackers/buildbrain.git
```
# Linuxのビルド
1. `cd buildbrain``buildbrain` ディレクトリに入ります。
2. `make ldefconfig` を実行して、 `.config` ファイルを作成します。
3. `make lbuild` を実行してLinuxをビルドします。
# Brainuxのビルド
Linuxのカーネルの準備ができたら、カーネルの上で動くアプリケーションを用意して、Linuxディストリビューションを完成させます。
1. バックグラウンドで `make aptcache` を実行します。
- 新しいウィンドウでターミナルを開き、 `make aptcache` を実行してそのままにしておきます。
2. `make brainux` を実行します。長い時間がかかるので、時間のあるときに行いましょう。
## パッケージの追加方法 (任意)
追加で欲しいパッケージを `./tools/setup_debian.sh` の51行目あたりに追記します。
実際に追記した例を以下に示します。
```diff
42 apt install -y dialog sudo \
43 libjpeg-dev libfreetype6 libfreetype6-dev zlib1g-dev \
44 xserver-xorg xserver-xorg-video-fbdev xserver-xorg-dev xorg-dev x11-apps \
45 openbox obconf obmenu \
46 weston xwayland \
47 bash tmux vim htop \
48 midori pcmanfm lxterminal xterm gnome-terminal fonts-noto-cjk \
49 dbus udev build-essential flex bison pkg-config autotools-dev libtool autoconf automake \
50 python3 python3-dev python3-setuptools python3-wheel python3-pip python3-smbus \
51 resolvconf net-tools ssh openssh-client avahi-daemon
+ 52 apt install -y fbterm uim-fep uim-mozc
```
[SDカードにコピー](https://github.com/brain-hackers/README/wiki/LinuxSDカードにコピー)に続く…

View File

@ -0,0 +1,85 @@
---
title: SD カードへのコピー
categories:
- Linux
tags:
- Linux
- 自力ビルド
---
# 注意!
***この手順を実行すると、SDカードの内容が消去されます。必ずバックアップをしてから実行しましょう。***
# 前提
- [Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)にてLinuxをビルドしていること
- [U-Bootビルドbuildbrain](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9Ebuildbrain)または[UBootビルド手動](https://github.com/brain-hackers/README/wiki/U%E2%80%90Boot%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89%EF%BC%9E%E6%89%8B%E5%8B%95)にてU-Bootをビルドしていること(現在執筆中)
# パーティションを区切る
先頭に100MBくらいのFAT32のパーティションを作り、残りをext4のパーティションにします。
## GPartedのインストール
以下のコマンドで GParted をインストールします。
```sh
sudo apt install gparted
```
## パーティションを作成する
LinuxをインストールするSDカードをPCに挿入してGPartedを起動します。
### GPartedの起動
![GParted起動画面](/assets/images/Launch-GParted.png)
GPartedの右上のメニューからSDカードを選びます。容量で選ぶとわかりやすいです。
### パーティションの削除
![パーティションの削除](/assets/images/partition-delete.png)
***この手順を実行すると、SDカードの内容が消去されます。必ずバックアップをしてから実行しましょう。***
パーティションを右クリックしたあと "削除" をクリックしてパーティションを削除します。
### パーティションの作成
まず、FAT32のパーティションを作成します。 "未割り当て" のパーティションを右クリックして "新規" をクリックします。
![新規パーティションの作成のダイアログ](/assets/images/create-partition-fat32.png)
上図のようなダイアログが表示されたら
- 新しいサイズ: 100MiB 程度
- ファイルシステム: fat32
に設定して "追加" をクリックし、パーティションを作成します。
次に、ext4のパーティションを作成します。
- 新しいサイズ: 残りの容量いっぱいまで
- ファイルシステム: ext4
に設定して "追加" をクリックし、パーティションを作成します。
# 必要なファイルをコピーする
1. `buildbrain`ディレクトリの中からファイルをコピーします
- `linux-brain/arch/arm/boot/zImage`
- `linux-brain/arch/arm/boot/dts/imx28-[機種名].dts`
これらをSDカードのFAT32のパーティションへコピーします。
2. ターミナルを起動して `cd buildbrain``buildbrain` ディレクトリに入ります
以下のコマンドを実行します。
```sh
sudo cp -ar ./brainux/* /SDカードの/2つ目の/パーティション/
```
`/SDカードの/2つ目の/パーティション/` は適宜読み替えてください。

View File

@ -0,0 +1,181 @@
---
title: Wiki の編集方法とルール
categories:
- Meta
tags:
- Wiki
- メンバー向け
---
# 準備
WikiをCloneします。
```sh
$ git clone git@github.com:brain-hackers/wiki.brainux.org.git
```
# 各種操作
## 1. a. ページを追加・削除する
- 新たにブランチを作成する
- 後で Pull Request として提出するため、`master` ブランチには直接コミットしないでください
- `_posts` ディレクトリにある他のファイルを参考にして md ファイルを追加します
- 例: `2038-1-19-doomsday.md`
- 記事内容を記述します
- ひととおり追加と削除が終わったら `pull -r`, commit, push します
## 1. b. ページを編集する
- 記事内容を記述します
- ひととおり編集が終わったら `pull -r`, commit, push します
## 2. 変更を提出する・レビューを受ける・マージしてもらう
文章に対するどのような変更も、必ずドキュメント編集権限のあるメンバー最低1人にレビューを依頼します。
このレビューに通ると変更がマージされ、公開されます。
2021年12月現在、編集権限のあるメンバーは以下の通りです。
- @puhitaku
- @tka3320
注意GitHub の Brain Hackers organization のメンバーでない人はレビューを依頼できないので、
Discord にてメンバー追加依頼をしてメンバになってから Pull Request を提出しましょう。
# ファイル名のルール
Wiki のページを生成している Jekyll は、md ファイルの名前から記事の日付や URL を生成します。以下のすべての条件を満たすようにしましょう。
- `YYYY-MM-DD-{英字とハイフンでできたタイトル}.md` の形式にする
- URL が冗長になるので日本語は使わない
# 記述ルール
Wiki の体裁について以下にルールを列挙します。コミットの前にこれらに従っているかチェックしてください。Textlint はまだありません。
## 文体
基本的には、技術文書のルールと同一です。
### 「ですます」と「だ・である」は統一する
Wiki 全体で「ですます」の形で統一します。
### 依頼する時はできるだけ「します」で締める
「〇〇してください」は長いので、「します」で極力統一します。不自然に映る場合は「してください」や「しましょう」を使っても OK です。この文書でも実際にどちらも使用しています。
### 繰り返しや冗長な表現をなくす
冗長な表現を組み込んでしまうことは多いので、極限まで削ります。
「など」「いろいろ」「といった」「〇〇することができます」は使いがちですので特に気をつけましょう。
:x: 悪い例: このコマンドを使えば、Linux を起動することなどが可能です。
:o: 良い例: このコマンドで、Linux を起動できます。
### カッコは基本的に使わない
どうしても必要な場合は、名詞の別名や補足といった1〜2単語で済む体言を入れるだけにします。
:x: 悪い例: Linux マシンUbuntu か Debian が入っていることが望ましい)を用意します。
:o: 良い例: Ubuntu か Debian がインストールされた Linux マシンを用意します。
### 箇条書きには句読点を入れない
箇条書きは段落を表現する道具ではありません。よって、内容が極力短くなるようにしつつ、句読点を置かないようにします。
### 感情を排除する
極力スムーズに読める文章になるには、感情的表現を取り除く事が必須です。
文章は技術文書(レポート)のような無味乾燥なものにし、感情は Discord で共有しましょう。
### コードブロックや画像と文章の関わりを示す
「以下にコマンド例を示します」などのように、文章と以下に連なる要素を関連付けます。
## Markdown
Markdown はリッチなレンダリングがなくとも読めるシンタックスが特徴です。これを念頭に置いて、以下のルールに従ってください。
### 必ずプレビューして確認する
ブラウザで文書を編集すると、コミット前に文書を HTML にレンダーするプレビューが利用可能です。ミスがないか確認してからコミットしましょう。
ローカルのコンソールやエディタで書く場合も、Markdown をプレビューできる環境を用意して確認してからコミットしましょう。例えば [Grip](https://github.com/joeyespo/grip) が便利です。
### 改行コードは LF に統一する
Windows で特に気をつけましょう。Git は[コミット時に改行コードを LF のみに強制](https://qiita.com/uggds/items/00a1974ec4f115616580)できます。
`git config`
```
git config --global core.autocrlf input
```
と設定すると、コミット時に Unix style でコミットできます。
### 適切な空行を入れる
以下の箇所には1行空行を入れます。
- 段落と段落の間
- プレーンテキストとプレーンテキスト以外の要素の間
- 箇条書き
- テーブル
- 図
- コードブロック
- 引用
以下の箇所には2行空行を入れます。
- 節と節の間
### 適切な空白を入れる
プレーンテキスト以外の要素の前後に適切な空白がないと表示がおかしくなるケースがあります。この文書は GitHub での表示に限られるため空白がなくても大丈夫ですが、エディタでのシンタックスハイライトが上手くいかなくなることがありますので気をつけましょう。
:x: 悪い例1: `1.あいうえお`
:o: 良い例1: `1. あいうえお`
:x: 悪い例2: `` このコマンドには`-a`という引数を渡します。 ``
:o: 良い例2: `` このコマンドには `-a` という引数を渡します。 ``
### コードスパンとコードブロックを使い分ける
コードスパンとは、`` `ident` ``のように行の中に等幅で文字を入れるスパン要素を指します。
コードブロックとは
```
echo foo
```
のように新しい段落で等幅に文字を入れるブロック要素を指します。
コードスパンはコードの識別子や短いコマンドの例示に使い、コードブロックは複数行のプログラムや長いコマンドの例示に使用します。
例1: `ls` コマンドには `-l` というオプションがあります。
例2: `ls` コマンドでファイルの詳細情報を表示するには、以下のように実行します。
```sh
ls -l
```
### 明示的改行はバックスラッシュで行う
この節でいう明示的改行とは [Hard line breaks](https://github.github.com/gfm/#hard-line-breaks) のことで、空行による段落区切りや単一の LF による Soft line break ではなく確実に改行を入れることを指します。必要でない限りは使わないことが望ましいです。
明示的な改行の入れ方には行末にスペース2つを入れる方法とバックスラッシュを入れる方法がありまず。前者は通常不可視な上に意味合いがわかりづらいため、バックスラッシュを使用します。

View File

@ -0,0 +1,96 @@
---
title: ハードウェア対応状況とロードマップ
categories:
- Linux
- U-Boot
tags:
- Linux
- U-Boot
- 周辺機器
- 沼の入り口
---
# Linux のブート
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代, G4000, G5000, G5100, A7000, A9000||TOSHIBA TMPA910CRAXBG|
|4桁世代, Sx1 〜 Sx7|:white_check_mark:|NXP i.MX283|
|x1||NXP i.MX7|
# キーボード
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代||SoC が直接キーマトリクスを読む|
|4桁世代, Sx1 〜 Sx2|:white_check_mark:|MPU がキーマトリクスを読み SoC に I²C で送信|
|Sx3 〜 Sx7||SoC が直接キーマトリクスを読む|
|x1|詳細不明||
# 画面開閉検知
- 開閉イベントの伝達はキーイベントと同じ経路を辿る
- キーボードの実装に依存する
|キーボードの世代|対応済|説明|
|:--|:-:|:--|
|3桁世代||SoC が直接キーマトリクスを読む|
|4桁世代, Sx1 〜 Sx2||MPU がキーマトリクスを読み SoC に I²C で送信|
|Sx3 〜 Sx7||SoC が直接キーマトリクスを読む|
|x1||詳細不明||
# 音
- Brain に内蔵されているスマートアンプには大きく分けて Yamaha 系と Rohm 系がある
- 録音も再生も2021年2月23日現在解析中で非対応
# タッチパネル
- 2021年2月23日現在反応はするが位置がおかしい
- 世代によるハードウェアの差分は不明
# 電源コントローラー
- 2021年2月23日現在未対応のため充電状態の表示などは一切不可
# cpufreq
- CPU のクロック制御は2021年2月23日現在なし
# eMMC への Linux インストール
- 研究中
# Wi-Fi
Wi-Fi の接続は複数の手法が提案されていて、現在検証中。
- SDIO Wi-Fi チップ
- USB ドングル
# LCD
一部については実装が完了。ただし、DMA を使用しない非効率な実装になっているため、改善が必要。
|世代|対応済み|
|:--|:-:|
|3桁世代||
|4桁世代||
|Sx1 〜 Sx7|:white_check_mark:|
|x1||
# Brainux のリリース
当面は Development リリースや Stable リリースのような区分は設けず、[brain-hackers/buildbrain](https://github.com/brain-hackers/buildbrain) リポジトリのタグを直接バージョンとする。リリース間隔やスケジューリングも行わない。

View File

@ -0,0 +1,23 @@
---
title: OTG ケーブル
categories:
- Tips
tags:
- 周辺機器
- USB
---
# 使える USB OTG ケーブル一覧
Brainux の初期状態では、USB コントローラーはホストとして動作するようになっています。OTG ケーブルを使用すると好きなデバイスを接続することができます。Brain 自身は VBUS (5V) を供給する能力はないので、電源が別途供給可能な OTG ケーブルを使用する必要があります。
- [RouteR RUH-OTGU4](https://amz.run/4Kue)
- [AINEX USB-120R](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-5EHA)
- [CY 90度左右角度付きMicro USB 2.0 OTGホストアダプター](https://amz.run/4LXg)
# 使えない USB OTG ケーブル一覧
- [Easi-Cable](https://amz.run/4KqD)

View File

@ -0,0 +1,39 @@
---
title: Swap 領域
categories:
- Tips
tags:
- Linux
---
# スワップの作成を推奨します
Brain の DRAM は 128MB しかないので、簡単にメモリが食いつぶされます。この時、スワップがないと OOM Killer により重要なプロセスが終了される危険性があるため、スワップを作成することをおすすめします。
2021年2月23日現在のリリースではまだスワップ領域を標準で設定していません。Brain Hackers では将来のリリースで標準でスワップを設定することを検討しています。
# 作成方法
1. 以下のコマンドを実行して、スワップのための領域を確保します
今回の例では、256MBこれ以上を推奨の領域を確保しています。他の容量にしたい場合は適宜 `bs``count` の値を変えてください。
```
dd if=/dev/zero of=/swapfile bs=1M count=256
chmod 0600 /swapfile
```
2. スワップ領域を初期化します
```
mkswap /swapfile
```
3. スワップ領域を有効にします
```
swapon /swapfile
```

View File

@ -0,0 +1,93 @@
---
title: タッチパネル
categories:
- Linux
tags:
- Linux
- GUI
- 周辺機器
---
# 事前に
Xorgの設定ファイル ( xorg.conf )を設定していない場合は、下記のWikiを参照して設定してください。
[TipsXorg](https://github.com/brain-hackers/README/wiki/Tips%EF%BC%9EXorg#xorgconf)
# 必要なパッケージのインストール
```
apt install xserver-xorg-input-evdev xinput-calibrator
```
を実行して、必要なパッケージをインストールします。
# Xorgとopenboxの起動
```
Xorg &
```
```
openbox-session &
```
を実行して、Xorgとopenboxを起動します。
# タッチパネル補正ツールの起動
```
xinput_calibrator
```
画面上に補正画面が表示されます。
![xinput-calibratorの画面](/assets/images/xinput-calibrator.png)
# 補正する
画面上の 赤い十字 を**丁寧に** 4回タッチすると、補正用の設定項目が端末に出力されます。
```
Setting calibration data: 0, 4095, 0, 4095
Calibrating EVDEV driver for "mxs-lradc-ts" id=6
current calibration values (from XInput): min_x=0, max_x=4095 and min_y=0, max_y=4095
Doing dynamic recalibration:
Setting calibration data: 147, 3618, 3826, 350
--> Making the calibration permanent <--
copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
Identifier "calibration"
MatchProduct "mxs-lradc-ts"
Option "Calibration" "147 3618 3826 350"
Option "SwapAxes" "0"
EndSection
```
# 設定ファイルを作成・保存する
`/etc/X11/xorg.conf.d`を作成します。
```
mkdir /etx/X11/xorg.conf/d
```
xinput_calibratorの出力に従って、`/etc/X11/xorg.conf.d/99-calibration.conf`に
`Section "InputClass"` から `EndSection`までの行を nano や vi を用いて書き出します。
```
Section "InputClass"
Identifier "calibration"
MatchProduct "mxs-lradc-ts"
Option "Calibration" "147 3618 3826 350"
Option "SwapAxes" "0"
EndSection
```
# Xorgの再起動
```
pkill Xorg
```
```
Xorg &
```
```
openbox-session &
```
でXorgを再起動します。
# 完成
![ちゃんとタッチした場所にカーソルが来ています](/assets/images/calibrator-done.gif)

View File

@ -0,0 +1,78 @@
---
title: USB Ethernet Gadget
categories:
- Linux
tags:
- Linux
- USB
- 周辺機器
---
# USB Gadget とは?
コンピューターがあたかも USB デバイスであるかのように振る舞う仕組みです。
# Why USB Gadget?
インターネットに接続可能なパソコンに USB で Brain を接続するだけで Brain からインターネットに出たり、パソコンと Brain で双方向に SSH したりできるようになります。電池切れの心配もありません。
# USB コントローラーの動作モードを変更する
初期状態では Brain の USB コントローラーはホストとして動作するため、このままではデバイスになることができません。
2021年2月23日現在ではまだありませんが、コントローラーの動作モードを簡単に切り替えるスクリプトを用意する予定です。
手動で変更するには、Device Tree Compiler を使用します。
# Brain に Ethernet Gadget を喋らせる
1. 以下のスクリプトを vi や nano でホームディレクトリに保存します
```
#!/bin/sh
g=/sys/kernel/config/usb_gadget/eth
mkdir ${g}
mkdir ${g}/functions/rndis.rn0
echo "8a:15:8b:44:3a:02" > ${g}/functions/rndis.rn0/dev_addr
echo "8a:15:8b:44:3a:01" > ${g}/functions/rndis.rn0/host_addr
mkdir ${g}/configs/c.1
ln -s ${g}/functions/rndis.rn0 ${g}/configs/c.1/
echo "ci_hdrc.0" > ${g}/UDC
sleep 1
ifconfig usb0 up
sleep 1
dhclient
```
2. スクリプトに実行属性を付けます
ここではスクリプト名を `gadget.sh` としています。1. で保存した名前に置き換えてください。
```
$ chmod +x gadget.sh
```
3. 実行します
次回起動時からはこのスクリプトを都度実行します。
```
$ ./gadget.sh
```
# パソコン側の対応作業
Windows / Mac / Linux すべてで利用可能です。(注: 2021年2月23日現在、上記スクリプトでは Windows と macOS で認識しないことを確認しており、修正予定です)
パソコンを通してインターネットに出るために、ネットワーク接続の共有設定が必要になります。OS ごとに設定方法は異なりますので、別途設定してください。

View File

@ -0,0 +1,32 @@
---
title: Web ブラウザ
categories:
- Linux
tags:
- Linux
- GUI
---
# グラフィカルブラウザ
**グラフィカルブラウザを使うのは困難です!** PW-Sx7 までの Brain が搭載している SoC は初代 Raspberry Pi のクロック周波数の約半分の速度で動作し、メモリ容量も半分以下の 128MB しかありません。つまり、インターネットブラウジングは現実的ではありません。例えば、[極めて高速に表示されることで有名な著名人のサイト](http://abehiroshi.la.coocan.jp/)の表示に実測15秒ほどかかります。また、Twitter は表示不可能です。
## Midori
代表的な軽量なブラウザの選択肢に Midori があります。Brainux にはプリインストールされています。Xorg が起動している状態で、以下のコマンドを実行すると Midori が起動します。
```
$ DISPLAY=:0 midori
```
## Surf
[`surf`](https://surf.suckless.org/) も動作することを確認していますが、Midori と速度はほとんど変わりません。
# テキストブラウザ
Lynx や w3m は非常にスムーズに動作します。現実的なスピードで Web サイトを閲覧するにはこれらをおすすめします。

View File

@ -0,0 +1,42 @@
---
title: Xorg
categories:
- Linux
tags:
- Linux
- GUI
---
# Brain 特有の Xorg の設定について
PW-Sx7 までは SoC に GPU が載っておらず、framebuffer (fbdev) のみが利用可能です。つまり、お手元の Linux マシンで Xorg が GPU と通信するときに使う仕組み (DRM, DRI) は利用できません。設定ファイルに fbdev を使用するように明示的に書くことで Xorg が動かせます。
# xorg.conf
設定ファイル xorg.conf の内容を以下に示します。vi か nano を使って以下の内容を `/etc/X11/xorg.conf` に書き込んでください。
```
Section "Device"
Identifier "device"
Driver "fbdev"
EndSection
Section "Screen"
Identifier "screen"
Device "device"
EndSection
```
# 起こし方
2021年2月23日現在では、Xorg はブートシークエンスと結合されていません。つまり、手で起動します。
```sh
$ Xorg &
$ openbox-session &
```
以上を実行した後にお好みのソフトを起動してください。

View File

@ -0,0 +1,12 @@
---
title: EBOOT を介した起動
categories:
- U-Boot
tags:
- U-Boot
- EBOOT
- Windows CE
---
Under Construction

View File

@ -0,0 +1,10 @@
---
title: USB Recovery を介した起動
categories:
- U-Boot
tags:
- U-Boot
---
Under Construction

View File

@ -0,0 +1,53 @@
---
title: U-Boot のビルド
categories:
- U-Boot
tags:
- U-Boot
- 自力ビルド
---
# 動作環境
- Debian 10 (Buster)
- Ubuntu 20.04 LTS
本項では上記のいずれかを使用していることを前提で記述します。
# 環境の構築
[Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)の頁で既に構築している場合は飛ばします。
## 依存関係のインストール
以下のコマンドで依存関係をインストールしてください。
```sh
sudo apt install build-essential bison flex libncurses5-dev gcc-arm-linux-gnueabi debootstrap qemu-user-static
```
## Gitリポジトリのクローン
Gitリポジトリをクローンして、必要なファイルをダウンロードします。長い時間がかかるので、時間のある時に実いましょう。
```
git clone --recursive https://github.com/brain-hackers/buildbrain.git
```
# U-Bootのビルドとnk.binの作成
1. `cd buildbrain``buildbrain` ディレクトリに入ります
2. `make udefconfig-sh*` を実行して、 `.config` ファイルを作成します
- PW-Sx1のとき `make udefconfig-sh1`
- PW-Sx5のとき `make udefconfig-sh5`
3. `make ubuild` を実行して `u-boot.sb` を生成します
4. `make nkbin_maker` を実行します
5. `make nk.bin` を実行します
[Linuxビルド](https://github.com/brain-hackers/README/wiki/Linux%EF%BC%9E%E3%83%93%E3%83%AB%E3%83%89)に続く…

BIN
assets/.DS_Store vendored Normal file

Binary file not shown.

51
assets/css/main.scss Normal file
View File

@ -0,0 +1,51 @@
---
# Only the main Sass file needs front matter (the dashes are enough)
---
$intro-transition: none;
$global-transition: none;
@charset "utf-8";
@import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin
@import "minimal-mistakes"; // main partials
.page__content {
p, li, dl {
font-size: 0.75em; // equivalent to $type-size-6
}
table {
font-size: 0.6875em; // equivalent to $type-size-7
}
}
body {
h1 {
margin-top: 0; font-size: 1.25em;
}
h2 {
font-size: 1.15em;
}
h3 {
font-size: 1.05em;
}
h4 {
font-size: 0.95em;
}
h5 {
font-size: 0.85em;
}
h6 {
font-size: 0.75em;
}
small, .small {
font-size: 0.6875em; // equivalent to $type-size-7
}
}

BIN
assets/images/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
assets/images/etcher1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
assets/images/etcher2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

BIN
assets/images/etcher3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 KiB

BIN
assets/images/etcher4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
assets/images/etcher5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
assets/images/etcher6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
assets/images/etcher7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

BIN
assets/images/etcher8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
assets/images/happy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 925 KiB

BIN
assets/images/keymap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
assets/images/top.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -2,6 +2,6 @@
# You don't need to edit this file, it's empty on purpose.
# Edit theme's home layout instead if you wanna make some changes
# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults
layout: home
author_profile: true
layout: categories
author_profile: false
---