mirror of
https://github.com/Mabbs/mabbs.github.io
synced 2025-12-21 19:53:57 +00:00
Restore deleted repositories
This commit is contained in:
6
404.md
Normal file
6
404.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
layout: default
|
||||
title: 404 - 找不到页面
|
||||
---
|
||||
# 找不到页面
|
||||
你访问的资源 <code><script>document.write(window.location.pathname)</script></code> 不存在或者可能已经被永久移除。
|
||||
4
BingSiteAuth.xml
Normal file
4
BingSiteAuth.xml
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0"?>
|
||||
<users>
|
||||
<user>0ADFCE64B3557DC4DC5F2DC224C5FDDD</user>
|
||||
</users>
|
||||
139
BlogCard.svg
Normal file
139
BlogCard.svg
Normal file
@@ -0,0 +1,139 @@
|
||||
---
|
||||
---
|
||||
|
||||
<svg
|
||||
width="495"
|
||||
height="195"
|
||||
viewBox="0 0 495 195"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<style>
|
||||
.header {
|
||||
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
|
||||
fill: #fff;
|
||||
animation: fadeInAnimation 0.8s ease-in-out forwards;
|
||||
}
|
||||
|
||||
.stat {
|
||||
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #9f9f9f;
|
||||
}
|
||||
.stagger {
|
||||
opacity: 0;
|
||||
animation: fadeInAnimation 0.3s ease-in-out forwards;
|
||||
}
|
||||
.rank-text {
|
||||
font: 800 100px 'Segoe UI', Ubuntu, Sans-Serif; fill: #66ccff;
|
||||
animation: scaleInAnimation 0.3s ease-in-out forwards;
|
||||
}
|
||||
|
||||
.bold { font-weight: 700 }
|
||||
.icon {
|
||||
fill: #79ff97;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
@keyframes scaleInAnimation {
|
||||
from {
|
||||
transform: translate(-5px, 5px) scale(0);
|
||||
}
|
||||
to {
|
||||
transform: translate(-5px, 5px) scale(1);
|
||||
}
|
||||
}
|
||||
@keyframes fadeInAnimation {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<rect
|
||||
data-testid="card-bg"
|
||||
x="0.5"
|
||||
y="0.5"
|
||||
rx="4.5"
|
||||
height="99%"
|
||||
stroke="#e4e2e2"
|
||||
width="494"
|
||||
fill="#151515"
|
||||
stroke-opacity="1"
|
||||
/>
|
||||
|
||||
|
||||
<g
|
||||
data-testid="card-title"
|
||||
transform="translate(25, 35)"
|
||||
>
|
||||
<g transform="translate(0, 0)">
|
||||
<text
|
||||
x="0"
|
||||
y="0"
|
||||
class="header"
|
||||
data-testid="header"
|
||||
>Mayx's Blog Article</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g
|
||||
data-testid="main-card-body"
|
||||
transform="translate(0, 55)"
|
||||
>
|
||||
|
||||
<g transform="translate(370, 47.5)">
|
||||
<g class="rank-text">
|
||||
<text
|
||||
x="0"
|
||||
y="0"
|
||||
alignment-baseline="central"
|
||||
dominant-baseline="central"
|
||||
text-anchor="middle"
|
||||
>
|
||||
M
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<svg x="0" y="0">
|
||||
<g transform="translate(0, 0)">
|
||||
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)">
|
||||
<line x1="12" y1="6.25" x2="19" y2="6.25"
|
||||
style="stroke:rgb(255,255,255);stroke-width:2"/>
|
||||
<text class="stat bold" x="25" y="12.5">{{ site.posts[0].title }}</text>
|
||||
</g>
|
||||
</g><g transform="translate(0, 25)">
|
||||
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)">
|
||||
<line x1="12" y1="6.25" x2="19" y2="6.25"
|
||||
style="stroke:rgb(255,255,255);stroke-width:2"/>
|
||||
<text class="stat bold" x="25" y="12.5">{{ site.posts[1].title }}</text>
|
||||
</g>
|
||||
</g><g transform="translate(0, 50)">
|
||||
<g class="stagger" style="animation-delay: 750ms" transform="translate(25, 0)">
|
||||
<line x1="12" y1="6.25" x2="19" y2="6.25"
|
||||
style="stroke:rgb(255,255,255);stroke-width:2"/>
|
||||
<text class="stat bold" x="25" y="12.5">{{ site.posts[2].title }}</text>
|
||||
</g>
|
||||
</g><g transform="translate(0, 75)">
|
||||
<g class="stagger" style="animation-delay: 900ms" transform="translate(25, 0)">
|
||||
<line x1="12" y1="6.25" x2="19" y2="6.25"
|
||||
style="stroke:rgb(255,255,255);stroke-width:2"/>
|
||||
<text class="stat bold" x="25" y="12.5">{{ site.posts[3].title }}</text>
|
||||
</g>
|
||||
</g><g transform="translate(0, 100)">
|
||||
<g class="stagger" style="animation-delay: 1050ms" transform="translate(25, 0)">
|
||||
<line x1="12" y1="6.25" x2="19" y2="6.25"
|
||||
style="stroke:rgb(255,255,255);stroke-width:2"/>
|
||||
<text class="stat bold" x="25" y="12.5">{{ site.posts[4].title }}</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
37
README.md
Normal file
37
README.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
# Mayx的博客
|
||||
Mayx's Home Page
|
||||
Powered by [Jekyll](https://github.com/jekyll/jekyll)
|
||||
|
||||
## 使用的开源项目
|
||||
[Jekyll](https://github.com/jekyll/jekyll)
|
||||
[jQuery](https://github.com/jquery/jquery)
|
||||
[gitalk](https://github.com/gitalk/gitalk)
|
||||
[minimal](https://github.com/pages-themes/minimal)
|
||||
[jekyll-toc](https://github.com/allejo/jekyll-toc)
|
||||
[Live2dHistoire](https://github.com/eeg1412/Live2dHistoire)
|
||||
[Simple-Jekyll-Search](https://github.com/christian-fei/Simple-Jekyll-Search)
|
||||
|
||||
## 使用的网络资源
|
||||
[Github](https://github.com/) | 包含:
|
||||
- Issue
|
||||
- Pages
|
||||
- Git
|
||||
- [Git.io](https://git.io/)
|
||||
|
||||
[网易云音乐](https://music.163.com/)
|
||||
[一言](https://hitokoto.cn/)
|
||||
[jsDelivr](https://www.jsdelivr.com/)
|
||||
[CDNJS](https://cdnjs.com/)
|
||||
[unpkg](https://unpkg.com/)
|
||||
|
||||
## 版权声明
|
||||
未经作者同意,请勿转载
|
||||
若需转载,请联系作者(主要希望找人聊天~)
|
||||
本站转载的文章如无特别说明,均按原文章的协议执行
|
||||
|
||||
## 打赏/赞助 Mayx
|
||||

|
||||
13
_config.yml
Normal file
13
_config.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
theme: jekyll-theme-minimal
|
||||
title: Mayx的博客
|
||||
logo: https://avatars0.githubusercontent.com/u/17966333
|
||||
author: mayx
|
||||
timezone: Asia/Shanghai
|
||||
excerpt_separator: <!--more-->
|
||||
paginate: 7
|
||||
plugins:
|
||||
- jekyll-sitemap
|
||||
- jekyll-feed
|
||||
feed:
|
||||
path: atom.xml
|
||||
google_analytics: UA-137710294-1
|
||||
95
_includes/toc.html
Normal file
95
_includes/toc.html
Normal file
@@ -0,0 +1,95 @@
|
||||
{% capture tocWorkspace %}
|
||||
{% comment %}
|
||||
Version 1.0.7
|
||||
https://github.com/allejo/jekyll-toc
|
||||
|
||||
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
|
||||
|
||||
Usage:
|
||||
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
||||
|
||||
Parameters:
|
||||
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
||||
|
||||
Optional Parameters:
|
||||
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
|
||||
* class (string) : '' - a CSS class assigned to the TOC
|
||||
* id (string) : '' - an ID to assigned to the TOC
|
||||
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
|
||||
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
|
||||
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
|
||||
* item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
|
||||
* baseurl (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
|
||||
* anchor_class (string) : '' - add custom class(es) for each anchor element
|
||||
|
||||
Output:
|
||||
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
|
||||
generate the table of contents and will NOT output the markdown given to it
|
||||
{% endcomment %}
|
||||
|
||||
{% capture my_toc %}{% endcapture %}
|
||||
{% assign orderedList = include.ordered | default: false %}
|
||||
{% assign minHeader = include.h_min | default: 1 %}
|
||||
{% assign maxHeader = include.h_max | default: 6 %}
|
||||
{% assign nodes = include.html | split: '<h' %}
|
||||
{% assign firstHeader = true %}
|
||||
|
||||
{% capture listModifier %}{% if orderedList %}1.{% else %}-{% endif %}{% endcapture %}
|
||||
|
||||
{% for node in nodes %}
|
||||
{% if node == "" %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% assign headerLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
|
||||
|
||||
{% if headerLevel < minHeader or headerLevel > maxHeader %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% if firstHeader %}
|
||||
{% assign firstHeader = false %}
|
||||
{% assign minHeader = headerLevel %}
|
||||
{% endif %}
|
||||
|
||||
{% assign indentAmount = headerLevel | minus: minHeader | add: 1 %}
|
||||
{% assign _workspace = node | split: '</h' %}
|
||||
|
||||
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
||||
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
||||
{% assign html_id = _idWorkspace[0] %}
|
||||
|
||||
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
|
||||
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
|
||||
{% assign html_class = _classWorkspace[0] %}
|
||||
|
||||
{% if html_class contains "no_toc" %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
||||
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
||||
|
||||
{% assign space = '' %}
|
||||
{% for i in (1..indentAmount) %}
|
||||
{% assign space = space | prepend: ' ' %}
|
||||
{% endfor %}
|
||||
|
||||
{% unless include.item_class == blank %}
|
||||
{% capture listItemClass %}{:.{{ include.item_class | replace: '%level%', headerLevel }}}{% endcapture %}
|
||||
{% endunless %}
|
||||
|
||||
{% capture my_toc %}{{ my_toc }}
|
||||
{{ space }}{{ listModifier }} {{ listItemClass }} [{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}]({% if include.baseurl %}{{ include.baseurl }}{% endif %}#{{ html_id }}){% if include.anchor_class %}{:.{{ include.anchor_class }}}{% endif %}{% endcapture %}
|
||||
{% endfor %}
|
||||
|
||||
{% if include.class %}
|
||||
{% capture my_toc %}{:.{{ include.class }}}
|
||||
{{ my_toc | lstrip }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.id %}
|
||||
{% capture my_toc %}{: #{{ include.id }}}
|
||||
{{ my_toc | lstrip }}{% endcapture %}
|
||||
{% endif %}
|
||||
{% endcapture %}{% assign tocWorkspace = '' %}{{ my_toc | markdownify | strip }}
|
||||
154
_layouts/default.html
Normal file
154
_layouts/default.html
Normal file
@@ -0,0 +1,154 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
{% seo %}
|
||||
{% feed_meta %}
|
||||
<link rel="stylesheet" href="{{ "/assets/css/style.css?v=" | append: site.github.build_revision | relative_url }}">
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
|
||||
<!-- <![endif]-->
|
||||
<script src="//cdn.jsdelivr.net/npm/jquery@1.9.1/jquery.min.js"></script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
{% if site.google_analytics %}
|
||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', '{{ site.google_analytics }}');
|
||||
var lastUpdated = new Date("{{ site.time | date: "%FT%T%z" }}");
|
||||
Date.prototype.format = function(fmt) {
|
||||
var o = {
|
||||
"M+" : this.getMonth()+1, //月份
|
||||
"d+" : this.getDate(), //日
|
||||
"h+" : this.getHours(), //小时
|
||||
"m+" : this.getMinutes(), //分
|
||||
"s+" : this.getSeconds(), //秒
|
||||
"q+" : Math.floor((this.getMonth()+3)/3), //季度
|
||||
"S" : this.getMilliseconds() //毫秒
|
||||
};
|
||||
if(/(y+)/.test(fmt)) {
|
||||
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
|
||||
}
|
||||
for(var k in o) {
|
||||
if(new RegExp("("+ k +")").test(fmt)){
|
||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
|
||||
}
|
||||
}
|
||||
return fmt;
|
||||
}
|
||||
</script>
|
||||
{% endif %}
|
||||
<style>
|
||||
.backToTop {
|
||||
display: none;
|
||||
width: 18px;
|
||||
line-height: 1.2;
|
||||
padding: 5px 0;
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
position: fixed;
|
||||
_position: absolute;
|
||||
right: 10px;
|
||||
bottom: 100px;
|
||||
_bottom: "auto";
|
||||
cursor: pointer;
|
||||
opacity: .6;
|
||||
filter: Alpha(opacity=60);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<header>
|
||||
<h1><a href="{{ "/" | relative_url }}">{{ site.title | default: site.github.repository_name }}</a></h1>
|
||||
|
||||
{% if site.logo %}
|
||||
<img src="{{ site.logo | relative_url}}" alt="Logo" />
|
||||
{% endif %}
|
||||
|
||||
<p>{{ site.description | default: site.github.project_tagline }}</p>
|
||||
|
||||
<p><form action="/search.html"><input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.."> <input type="submit"></form></p>
|
||||
|
||||
{% if site.github.is_project_page %}
|
||||
<p class="view"><a href="{{ site.github.repository_url }}">View the Project on GitHub <small>{{ site.github.repository_nwo }}</small></a></p>
|
||||
{% endif %}
|
||||
|
||||
{% if site.github.is_user_page %}
|
||||
<p class="view"><a href="{{ site.github.owner_url }}">View My GitHub Profile</a></p>
|
||||
{% endif %}
|
||||
|
||||
<a href="{{ "/Mabbs/" | relative_url }}">About Me</a>
|
||||
</header>
|
||||
<section>
|
||||
|
||||
{{ content }}
|
||||
|
||||
</section>
|
||||
<!--[if !IE]> -->
|
||||
<div id="landlord" style="left:5px;bottom:0px;">
|
||||
<div class="message" style="opacity:0"></div>
|
||||
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
|
||||
<div class="live_talk_input_body">
|
||||
<div class="live_talk_input_name_body" style="display:none;">
|
||||
<input name="name" type="hidden" class="live_talk_name white_input" id="AIuserName" value="Mayx_Blog_Talk" />
|
||||
</div>
|
||||
<div class="live_talk_input_text_body">
|
||||
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?"/>
|
||||
<button type="button" class="live_talk_send_btn" id="talk_send">发送</button>
|
||||
</div>
|
||||
</div>
|
||||
<input name="live_talk" id="live_talk" value="1" type="hidden" />
|
||||
<div class="live_ico_box" style="display:none;">
|
||||
<div class="live_ico_item type_info" id="showInfoBtn"></div>
|
||||
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
|
||||
<div class="live_ico_item type_music" id="musicButton"></div>
|
||||
<div class="live_ico_item type_youdu" id="youduButton"></div>
|
||||
<div class="live_ico_item type_quit" id="hideButton"></div>
|
||||
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
|
||||
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
|
||||
<input id="duType" value="douqilai" type="hidden">
|
||||
</div>
|
||||
</div>
|
||||
<div id="open_live2d">召唤伊斯特瓦尔</div>
|
||||
<!-- <![endif]-->
|
||||
<footer>
|
||||
{% if site.github.is_project_page %}
|
||||
<p>This project is maintained by <a href="{{ site.github.owner_url }}">{{ site.github.owner_name }}</a></p>
|
||||
{% endif %}
|
||||
<p><small>Made with ❤ by Mayx<br />Last updated at <script>document.write(lastUpdated.format("yyyy-MM-dd hh:mm:ss"));</script><br /> 总字数:{% assign count = 0 %}
|
||||
{% for post in site.posts %}
|
||||
{% assign single_count = post.content | strip_html | strip_newlines | remove: " " | size %}
|
||||
{% assign count = count | plus: single_count %}
|
||||
{% endfor %}
|
||||
{% if count > 10000 %}
|
||||
{{ count | divided_by: 10000 }} 万 {{ count | modulo: 10000 }}
|
||||
{% else %}
|
||||
{{ count }}
|
||||
{% endif %} - 文章数:{% for post in site.posts %}
|
||||
{% assign co = co | plus: 1 %}
|
||||
{% endfor %}{{ co }} - <a href="{{ "/atom.xml" | relative_url }}" >Atom</a> - <a href="{{ "/README.html" | relative_url }}" >About</a></small></p>
|
||||
</footer>
|
||||
</div>
|
||||
<script src="{{ "/assets/js/scale.fix.js" | relative_url }}"></script>
|
||||
|
||||
<script src="/js/main.js"></script>
|
||||
<!--[if !IE]> -->
|
||||
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
|
||||
<script src="/Live2dHistoire/live2d/js/message.js"></script>
|
||||
|
||||
<!-- <![endif]-->
|
||||
</body>
|
||||
</html>
|
||||
55
_layouts/encrypt.html
Normal file
55
_layouts/encrypt.html
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
layout: post
|
||||
---
|
||||
|
||||
<script src="/js/aes.js"></script>
|
||||
<script>
|
||||
function getByteLen(val) {
|
||||
var len = 0;
|
||||
for (var i = 0; i < val.length; i++) {
|
||||
if (val[i].match(/[^\x00-\xff]/ig) != null) len += 3;
|
||||
else len += 1;
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
function onbtnDecrypto() {
|
||||
var encryptedData = "{{ content | strip_html | strip_newlines }}";
|
||||
var keyword = document.getElementById("inputkey").value;
|
||||
|
||||
if (keyword.replace(/(^\s*)|(\s*$)/g, "") == '') {
|
||||
alert("请输入密码!");
|
||||
return;
|
||||
}
|
||||
while (getByteLen(keyword) % 8 != 0) {
|
||||
keyword = keyword + "\0";
|
||||
}
|
||||
|
||||
var key = CryptoJS.enc.Utf8.parse(keyword);
|
||||
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
|
||||
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
|
||||
|
||||
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
|
||||
mode: CryptoJS.mode.ECB,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
|
||||
if (decryptedData.sigBytes < 0) {
|
||||
document.getElementById("output").innerHTML = "解密失败!密文或者key错误!";
|
||||
return;
|
||||
}
|
||||
try {
|
||||
decryptedData.toString(CryptoJS.enc.Utf8)
|
||||
} catch(e) {
|
||||
document.getElementById("output").innerHTML = "解密失败!密文或者key错误!";
|
||||
return;
|
||||
}
|
||||
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
|
||||
document.getElementById("output").innerHTML = decryptedStr;
|
||||
document.getElementById("pwinput").style.display = "none";
|
||||
}
|
||||
</script>
|
||||
<div id="pwinput">{{ page.tips | default: "请输入密码:" }}<br />
|
||||
<input id="inputkey" type="password" /> <button onclick="onbtnDecrypto()">解密</button>
|
||||
</div>
|
||||
<div id="output"></div> <br />
|
||||
90
_layouts/post.html
Normal file
90
_layouts/post.html
Normal file
@@ -0,0 +1,90 @@
|
||||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
<small>{{ page.date | date: "%-d %B %Y" }} - 字数统计:{% if page.layout == "encrypt" %}God Knows {% else %}{{ page.content | strip_html | strip_newlines | remove: " " | size }} - 阅读大约需要{{ page.content | strip_html | strip_newlines | remove: " " | size | divided_by: 350 | plus: 1 }}分钟{% endif %} - Hits: <span id="{{ page.url }}" class="visitors" >Loading...</span>
|
||||
</small>
|
||||
<h1>{{ page.title }}</h1>
|
||||
|
||||
<p class="view">by <a href="//github.com/{{ page.author | default: "Mabbs" }}">{{ page.author | default: site.author }}</a></p>
|
||||
<div id="outdate" style="display:none;">
|
||||
<hr />
|
||||
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
|
||||
<br /><br />
|
||||
</div>
|
||||
<script>
|
||||
BirthDay = new Date("{{ page.date | date: "%m/%d/%Y" }} 00:00:00");
|
||||
today = new Date();
|
||||
timeold = (today.getTime() - BirthDay.getTime());
|
||||
secondsold = Math.floor(timeold / 1000);
|
||||
e_daysold = timeold / (24 * 60 * 60 * 1000);
|
||||
daysold = Math.floor(e_daysold);
|
||||
if (daysold > 90) {
|
||||
document.getElementById("outdate").style.display = "block";
|
||||
document.getElementById("outime").innerHTML = daysold;
|
||||
}
|
||||
</script>
|
||||
|
||||
<hr />
|
||||
|
||||
{% include toc.html html=content sanitize=true %}
|
||||
|
||||
{{content}}
|
||||
|
||||
{% if page.tags %}
|
||||
<small>tags: <em>{{ page.tags | join: "</em> - <em>" }}</em></small>
|
||||
{% endif %}
|
||||
|
||||
<div class="pagination">
|
||||
{% if page.previous.url %}
|
||||
<span class="prev" >
|
||||
<a href="{{ site.baseurl }}{{ page.previous.url }}">
|
||||
上一篇:{{ page.previous.title }}
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
<br />
|
||||
{% if page.next.url %}
|
||||
<span class="next" >
|
||||
<a href="{{ site.baseurl }}{{ page.next.url }}">
|
||||
下一篇:{{ page.next.title }}
|
||||
</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!--[if !IE]> -->
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/gitalk/dist/gitalk.css">
|
||||
<script src="//cdn.jsdelivr.net/npm/gitalk/dist/gitalk.min.js"></script>
|
||||
|
||||
<div id="gitalk-container"></div>
|
||||
|
||||
<script>
|
||||
if (window.location.host != "mabbs.github.io")
|
||||
{
|
||||
var gitalk = new Gitalk({
|
||||
clientID: '098934a2556425f19d6e',
|
||||
clientSecret: '0bd44eed8425e5437ce43c4ba9b2791fbc04581d',
|
||||
repo: 'mabbs.github.io',
|
||||
owner: 'Mabbs',
|
||||
admin: ['Mabbs'],
|
||||
id: '{{ page.id }}', // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
})
|
||||
}
|
||||
else
|
||||
{
|
||||
var gitalk = new Gitalk({
|
||||
clientID: '36557aec4c3cb04f7ac6',
|
||||
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
|
||||
repo: 'mabbs.github.io',
|
||||
owner: 'Mabbs',
|
||||
admin: ['Mabbs'],
|
||||
id: '{{ page.id }}', // Ensure uniqueness and length less than 50
|
||||
distractionFreeMode: false // Facebook-like distraction free mode
|
||||
})
|
||||
}
|
||||
|
||||
gitalk.render('gitalk-container')
|
||||
</script>
|
||||
<!-- <![endif]-->
|
||||
13
_posts/2015-02-23-diary.md
Normal file
13
_posts/2015-02-23-diary.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
layout: post
|
||||
title: 2015.2.23日记
|
||||
tags: [日记]
|
||||
---
|
||||
|
||||
今天是2015年2月23日,离开学还有5天<!--more-->
|
||||
今天我修好了我的U盘,之前我的U盘在一个太阳黑子盛发的时期坏掉了,我感到十分难过,于是写了一篇议论文和短篇小说纪念它,然后就半坏半好的用。就在今天,我去了我大伯家,发现我的U盘中那个坏掉了的那个文件夹突然能读了,这还是那个王哥哥的功劳呢,如果不是我展示我U盘坏掉的情况,我还不知道我的U盘竟不自动断线了。于是我使用了CHKDSK修复了我的U盘,结果所有问题解决了。就是留下了一个不知名的文件i怎么也删不掉。
|
||||
昨天我打算玩爷爷的电脑,结果打不开,于是我在今天看了看电脑,拿下来一通电,结果可以启动了。然后我很高兴,安上后,一打开显示器又不能用了,于是我猜这是显卡的问题,然后我关了显示器,打开了电脑后又开了显示器,结果好了,于是我就在这台电脑写了我今天的日记。
|
||||
|
||||
|
||||
快开学了,我写一个假期小结
|
||||
这个假期一共30天,去了4个城市,对手机的了解更深了。比如partition(分区),mount(挂载),prop(设置变量)。而且我还因此弄坏了手机。在2015年的2月18日。我以错误的方式挂载了boot分区,结果……boot分区被我玩坏了。手机是靠boot分区进行启动的,结果我还脑残的重启了。于是,在2015年的春节,我一整天都想着我的手机。终于在春节的下午,我去了二姨家,使用了电脑,花了10秒修好了手机。于是,我知道了mount是个危险命令。不过在弄坏手机之前我还做了一件事,那就是在手机上装windows3.2中文版,这是第一个推广到中国的windows系统。首先我装了DOSBOX,模拟DOS环境,然后在这个上面安了CCED,并正常的运行了,我很高兴。然后在手机上下载了win3.2系统的安装包,没有电脑的帮助安装了win3.2,证明了电脑就是一垃圾,便携式手持设备才是信息的未来,于是我就弄坏了手机,证明失败了……虽然我没去旅游,但我这个假期还是很有意思的。
|
||||
213
_posts/2018-03-26-neko.md
Normal file
213
_posts/2018-03-26-neko.md
Normal file
@@ -0,0 +1,213 @@
|
||||
---
|
||||
title: (转)关于Neko与羽毛的记录
|
||||
layout: post
|
||||
author: gledos
|
||||
tags: [Neko, 羽毛]
|
||||
---
|
||||
## 序:
|
||||
|
||||
吸取经验,为了每一个人的明天。
|
||||
|
||||
>如果有一天我消失了,我想我是死在为自由而战的冲锋路上, 而这不是一个人的悲剧。
|
||||
>
|
||||
>——亚伦斯沃茨
|
||||
|
||||
<!--more-->
|
||||
|
||||
(待续)
|
||||
|
||||
# 张千叶发布的想法的时间轴
|
||||
|
||||
1. `2018-03-14 02:52` 张千叶在知乎上发表了[想法](https://www.zhihu.com/pin/957297608381730816)
|
||||
>先要咨询一个问题
|
||||
<br />我的朋友 @Ayaka Neko 在火车站被父母带走了。
|
||||
<br />其父母原因是要将其带回云南老家住院,而其本人倾向于去北京的医院。
|
||||
<br />其中 @Ayaka Neko 已经成年,并且上精卫和北六没有给出住院意见(开了文拉法辛)
|
||||
<br />我上前争辩的时候被其父亲诬陷为协助自杀,但实际上当事人称其药量都是正常并且自愿服用,我(未成年)争辩几 句之后遭到殴打导致眼角出血,整个过程警察在场,因为赶火车没能走流程。
|
||||
<br />那么,已经父母有权利强制将已经成年的子女带回家/住院吗?
|
||||
<br />有权利殴打未成年人吗?我选择不走流程的情况下可否让监护人代为走流程?
|
||||
<br />现在我与她已经没有联系方式,其父母关掉了通话,一个关机一个只有留言,当事人手机遗失。
|
||||
<br />她曾经口头说过与其父断绝关系,并且其父承认(在做 CT 扫描和其他医疗费用的时候拒绝支付,也未支付生活费)。
|
||||
<br />那么现在该怎么办?怎么帮到她呢?需要上法庭吗?
|
||||
|
||||
2. `03-14 03:01` 张千叶回复
|
||||
>个人建议报警
|
||||
>
|
||||
>现在是我不清楚行踪,原本是我们去保定,但是她没有上车,所以我不清楚怎么弄。
|
||||
<br />另外这个算是用什么理由报警呢?我眼角的伤不是很重,留了点血的程度。
|
||||
<br />我还可以补充的是他家庭是离异家庭,离婚协议中监护权归属于其母,但是据一个未公开/不明的协议,转给了他爸爸(不确定)。
|
||||
<br />她有社交恐惧和一些人格障碍所以很依赖我,我很担心。
|
||||
<br />现在是,我以什么理由报警?其父曾说过这是我们家的事情你就不要管这行的话,并且态度极其差。
|
||||
|
||||
3. `03-14 03:04` 补充
|
||||
>还可以补充的是有一次换药反应过大打了 120,我先打的其父电话,她父亲第一反应是诈骗,然后她用云南家乡话和特有的称呼说是她,其父称 「我没这义务」 救护车和毒理化验都是我和朋友垫付,从头到尾没有任何支付的意愿。
|
||||
|
||||
4. `03-14 19:34` bc
|
||||
>通过我的父母和 Ayaka Neko的父母的交谈得知她被带回云南省红河哈尼族彝族自治州个旧市,而不是双方与警官所协商的去上海市精神卫生中心做检查。
|
||||
<br />想哭。
|
||||
|
||||
3. `03-14 20:03`
|
||||
>现在说一下,有人证,有警官协商录音,还有医院处方单+支付宝记录(能看出来不是其父亲付款)
|
||||
<br />大家看看还要啥呢
|
||||
|
||||
4. `03-14 23:18`
|
||||
>先说一下吧,我个人,除开 Neko 家庭问题。在 Neko 被夹走的时候我阻拦了一下,然后被揪住头发一拳打中右眼,现在右眼左眼睑发炎并且右眼视力下降严重,然后一脚踢中我肾左右的部位并让我疼了一天,明天去医院做一下鉴定看看。
|
||||
|
||||
5. `3-15 11:48` bc
|
||||
>暂时联系上了,不清楚情况。
|
||||
<br />我目前在医院。
|
||||
|
||||
6. `3-15 15:35`
|
||||
>目前准备到的是法医拍照,当时伤口的照片,三名证人,以及全家的录像和警察执法记录仪的录像。
|
||||
|
||||
9. `3-15 22:10`
|
||||
>我联系上
|
||||
<br />@Ayaka Neko
|
||||
<br />了。
|
||||
<br />目前她因为文拉法辛的戒断反应在医院,出院之后应该就没事了……
|
||||
<br />好想她。
|
||||
<br />好想她啊……
|
||||
|
||||
10. `03-16 02:23`
|
||||
>现在
|
||||
<br />@Ayaka Neko
|
||||
<br />因为文拉法辛戒断(其父母未携带)被送往昆明急救,据称要做 MECT 和 MRI,具体情况看起来还好,开放病房。
|
||||
|
||||
11. `03-16 09:11`
|
||||
>联系不上。正在打医院的号码。
|
||||
|
||||
12. `03-16 10:24`
|
||||
>[查看图片](https://pic2.zhimg.com/v2-745039e4e818cbc3242d1586fa4bde09_qhd.jpg) 附张图,已在法医拍照并鉴定。
|
||||
|
||||
13. `03-16 13:46`
|
||||
>然后现在被他父亲威胁可能被打。
|
||||
<br />还说什么地头蛇之类的。
|
||||
|
||||
14. `03-16 13:48`
|
||||
>貌似是个房地产商,有什么建议么?
|
||||
|
||||
15. `03-17 01:00`
|
||||
>到达医院,这里像看守所
|
||||
|
||||
16. `03-17 11:15`
|
||||
>扑空了,她被父母提前出院了……
|
||||
|
||||
17. `03-17 左右`
|
||||
>我有她本人的姓名身份证,她手机丢失。
|
||||
<br />她父母亲和姑姑的电话,被拉黑。
|
||||
<br />知道她有两个家庭住址,但是在两个城市。
|
||||
<br />目前她帐号一小时上一次,只读消息不回复,怀疑不是本人。
|
||||
<br />现在不知道怎么做了。
|
||||
|
||||
18. `03-18 左右`
|
||||
>报警之后警察表示也打不通,并且不受理案件。
|
||||
>律师建议去住址寻找。
|
||||
>
|
||||
>......
|
||||
>
|
||||
>求助中心电话能给一下吗。
|
||||
>她之前答应我两个星期的。
|
||||
>也是我最大的努力了吧……
|
||||
>
|
||||
>......
|
||||
>
|
||||
>说明了,警察说就算是成年人也可以被父母强制带走。管不了
|
||||
>
|
||||
>......
|
||||
>
|
||||
>他们说。只要有抑郁症,任何程度的,不论开不开那个无行为能力证明,父母都可以带走/入院
|
||||
|
||||
19. `03-18 00:24`
|
||||
>强制传唤证人居然不包括被告子女…
|
||||
|
||||
20. `03-18 16:35`
|
||||
>彻底找不到了啊……彻底断了啊……
|
||||
|
||||
21. `03-17 21:09`
|
||||
>我这边说下…
|
||||
<br />报案测试过了,只要他们知道带走的是监护人就不会管,并如果得知有抑郁症的话更不会管…已经对警方感到绝望了。
|
||||
|
||||
22. `03-19 左右`
|
||||
>警方认为抑郁症病人不算完全行为能力的样子,并且认为她在父母身边绝对安全
|
||||
>
|
||||
>......
|
||||
>
|
||||
>直接报案:对方是监护人有权带走
|
||||
<br />说明情况:对方还有抑郁症呢,监护人当然能带走了
|
||||
|
||||
23. `03-20 15:03`
|
||||
>右眼已经报废。
|
||||
|
||||
24. `03-20 22:45`
|
||||
>其实算个好消息?右眼视力看不清之后可以考虑戴个眼罩或者换个玻璃珠?
|
||||
>
|
||||
>......
|
||||
>
|
||||
>视力基本为零~
|
||||
<br />医生建议戴眼镜
|
||||
|
||||
25. `03-23 23:13 之前一段时间,可能是23:06` 已被删除,已保存到[wayback](http://web.archive.org/web/20180326112045/https://www.zhihu.com/pin/960671306164994048)
|
||||
>那就把这里当成最后一点希望了吧。
|
||||
<br />@Ayaka Neko张恩辅 532501199903240612
|
||||
<br />被她父亲张竣于三月十六日凌晨一点入住了云南心理卫生中心,并之后被带走
|
||||
<br />目前最后已知地点/消息为云南昆明安宁市好孩子三生教育培训学校。
|
||||
<br />她手机处于丢失状态。其父母拒绝联系…
|
||||
<br />她父亲联系方式为 13888320678 母亲为 13887310860
|
||||
<br />尝试过报警了…没什么用呢。
|
||||
<br />我也做不到什么了呢。
|
||||
<br />如果需要更多资料可以私信我
|
||||
<br />如果我还活着的话。
|
||||
|
||||
26. `03-24 17:30`
|
||||
>Ayaka Neko
|
||||
<br />自杀了。
|
||||
|
||||
27. `03-24 17:34`
|
||||
>Ayaka Neko
|
||||
<br />今天下午两点三十四分,抢救无效死亡
|
||||
>
|
||||
>轻伤二级。视力严重下降,加鼻骨骨折。
|
||||
<br />视力从 1.0 到三百五十度近视。
|
||||
|
||||
28. `03-26 下午11点左右` **樊郕** 回复一位在想法下留言的用户
|
||||
>我是她的家人,我是她的妹妹,她有严重的抑郁症,且每天过量服药,雌性激素和抗焦虑的药,这个你们知道?送去医院是为了让她不要吃药,还有心理辅导,面子?你并不是其中的人,不知道有多痛苦,请不要站着说话不腰疼,也不要妄自揣测,更不要当键盘侠,谢谢
|
||||
|
||||
# 温柔——热点扩散
|
||||
|
||||
1. `03-24 17:43`
|
||||
[今天向我求助的张恩辅同学,现已离世。](https://web.archive.org/web/20180326111214/http://webcache.googleusercontent.com/search?q=cache:IlDL3pSsxA4J:https://zhuanlan.zhihu.com/p/34901296&num=1&strip=0&vwsrc=0)。~~内容已删除~~,快照里看出在20分钟内有69条评论和230个赞。
|
||||
>通过朋友向我求助 @Ayaka Neko 张恩辅同学现已离世,刚刚和她妈妈通过电话,她在家中自杀,抢救无效结束了自己的生命。
|
||||
>
|
||||
>对不起,我没能帮到她,没能把她救出来。
|
||||
>
|
||||
>我应该早一些看到的,如果再早些报警的话,可能就不会闹到这种地步。
|
||||
>
|
||||
>我们也不能冤枉任何一个好人,安宁市好孩子教育学校是一所正规的学校,没有接收张恩辅同学,她是回到家里才做的这一切。
|
||||
>
|
||||
>我也没办法再苛责她那几乎哭到失声的母亲,和她的父亲。
|
||||
>
|
||||
>**只能够说,这是家庭教育和沟通不足导致的悲剧,每一个父母一定要尊重孩子的意愿,并耐心和孩子沟通,强硬的暴力、训斥会影响到孩子们的身心健康,甚至会发生比如现在这样的悲剧。**
|
||||
>
|
||||
>**请各位家长们一定要引以为戒!**
|
||||
>
|
||||
>(完)
|
||||
>
|
||||
>明天我会整理一下,把这件事的经过写出来,希望能够纪录下来这一切。
|
||||
>
|
||||
>张恩辅同学,这个世界对你太不公平了,真的非常对不起,我知道的太晚了,如果我再早一些知道,再早一些采取措施,说不定就能救你出来,真的很对不起。
|
||||
|
||||
2. `19:13`[希望这场悲剧能让家长们引以为戒,请尊重孩子!](https://zhuanlan.zhihu.com/p/34901959)
|
||||
|
||||
(未完待续)
|
||||
|
||||
<!--
|
||||
这是记录知乎ID为[Ayaka Neko](https://www.zhihu.com/people/75678efb7fce3f1907999482da9af890)、推特ID为[]()
|
||||
-->
|
||||
***
|
||||
|
||||
注:
|
||||
源地址:<https://gledos.science/neko.html>
|
||||
Neko的博客:<https://neko.ayaka.moe/>
|
||||
备份:<https://github.com/nekomeowww/nekomeowww.github.io>
|
||||
羽毛的博客:<https://oao.moe/> 解析IP:45.32.10.83
|
||||
备份:<https://github.com/zhangyubaka/zhangyubaka.github.io>
|
||||
44
_posts/2018-06-20-Coding.md
Normal file
44
_posts/2018-06-20-Coding.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
layout: post
|
||||
title: 编程与设计(演讲稿)
|
||||
categories: [演讲稿]
|
||||
tags: [编程, 设计, 演讲, 程序]
|
||||
---
|
||||
|
||||
大家好,我是mayx,今天由我来带领大家了解计算机编程的本质和程序设计。<!--more-->
|
||||
当提到电脑时,大家首先想到的什么呢?打游戏?聊天?……没有问题。你们享用了电脑所带来的便利,有考虑过它的原理吗?当然,有些东西是不需要知道原理的,毕竟即使你不知道互联网传输协议也可以上网,不知道焦耳定律也可以做饭嘛……但是,我希望今天大家听了我的讲座后,能知道了解其原因后能更好的利用它们。
|
||||
首先,今天我要讲的东西有以下三大类:一、计算机简介;二、编程;三、设计。
|
||||
对于计算机,我想大家已经了解很多了吧,在这里我不做过多的介绍,只讲一下比较少见的知识。
|
||||
大家都知道IT(信息技术)对吧,我们有一门课就是信息技术,不过你们知道CS吗?我要讲的CS可不是反恐精英,而是计算机科学(Computer Science)。CS只是和IT有交集吧,IT研究的不只是计算机,包括发邮件等通信方式,不过想来主要还是应用了计算机科学。有很多人总会把它们误用,就好像动画和动漫不是一种东西一样。
|
||||
接下来我要讲的是计算机科学中的硬件部分。不过我的物理不是很好,所以硬件部分我不会讲太多,我想大家也都应该知道计算机大概都是由什么组成吧,从微观上来说就是由硅做半导体部分,铜银金等导电金属作为主要的电能以及信号传导等等的电路……往大了讲,就是CPU(中央处理器Central Processing Unit)、内存、外存、主板、I/O(输入输出 Input/Output)等作为主要部分的机器。而更细的东西我也不了解,逻辑电路什么的,如果有会在Minecraft上做红石电路的人,也许还能讲讲CPU的运行原理吧……
|
||||
硬件的组成,也就是计算机组成体系,关于这一方面,大家应该都知道冯·诺依曼结构的计算机吧,我们平时用的电脑就是这个架构的,我相信只要了解一些计算机的人应该都知道这些。不过我觉得应该很少有人知道哈佛结构吧,它和冯氏很相似,只不过它的并行处理能力更好一些,因为冯氏结构不能同时读取指令和数据,而哈氏结构可以。手机一般就用的是这个结构的。
|
||||
硬件部分我就讲到这里吧,想要了解更多有关硬件方面的信息,问物理老师都比我靠谱。
|
||||
接下来就是软件部分了,程序是软件的子集。那么接下来我就来讲讲如何写程序吧。
|
||||
首先,什么是编程?编程就是编写程序的简称,编写程序是为了解决一些需要运算而得出结果的东西。毕竟是计算机嘛,本质上就是为了运算而产生的。但是,并不是说程序只能在电脑上运行,人脑也可以,甚至是用多米诺骨牌之类的东西都可以执行程序。只是计算机的运算速度比它们都快,所以一般的程序都是在电脑上运行的。只有一些丧心病狂的面试官和考官才会让人脑去想计算结果呢。而让非计算机的东西执行程序,不是为了研究计算机的组成就是一些极客了吧……
|
||||
现在写程序比以前简单多了,以前写程序不知道计算机的运行过程根本写不了程序,打孔纸带不说,就光机器码都几乎没人能看得懂。不过为了让机器看懂,人们也只能这样做了。后来为了让人能更好的写程序,发明了汇编语言。不过汇编语言本质上还是将机器码用一些其他的方式简化了,本质上仍需了解计算机的运行过程。以上所说的语言都算是低级语言,因为必须了解计算机的本质,太过复杂,而且跨平台性也很差。再后来,人们发明了FORTRAN(公式翻译 Formula Translation),这是人们发明的第一个高级语言。直到现在,已经有上千种高级编程语言了,它们的目的几乎都是将人能看懂的语言,而计算机看不懂的语言转换为计算机可以看懂的语言,即为机器码。能被直接转化为机器码的编程语言叫做编译型语言,编译它们的东西叫做编译器,它的特点是编程语言被编译生成机器码后,只能在编译它的这类机器上执行,在其他种类的机器无法执行。这种语言的优点是执行速度快,毕竟计算机可以直接使用机器码执行,只用翻译一次,没有第二次。而缺点则是编译后将无法再编辑,除非你会机器码或汇编,或将它反编译,否则就看不到它编译前的代码。除此之外,它也不能在不是编译它的计算机或同种计算机上执行。编译型语言以C语言为代表。为了解决无法编辑和跨平台的问题,人们造出了另外一种语言,即为解释型语言。
|
||||
解释性语言是将程序源代码一句话一句话解释为机器码,所以它可以不用将源代码转换为机器码,这样的好处就是可编辑,而且因为是一句话一句话的解释,所以在所有机器上均可执行。但也正是因为它是一句话一句话的解释,所以执行效率低,速度也慢。解释型语言的代表是Python语言。工程师是有创造力的人,也是无法容忍问题的人。为了解决速度慢的问题,他们又创造了一种新的语言,它既有编译的高速,又有解释的跨平台性。这种语言可以在写好后先编译为一种中间语言,它已经有很多接近于机器码的部分,但是为了跨平台性,它把那些需要在不同种类的机器上语句不同的地方用其他的方式标记出来,然后发布时只发布这个由中间语言构成的的程序,在其他电脑上执行时,它会把那些特别的句子再解释执行。这样的话不就又有很好的执行效率,又有很好的跨平台性了吗?以此类为代表的语言是Java语言。
|
||||
刚刚介绍的仅仅是人们让电脑如何理解人们的语言,而接下来要讲的是让人们理解人们的语言了。我说过,编程语言到现在为止已经有上千种了。如果仅仅是为了让电脑理解人类的语言,有那么几种不就够了吗,为什么还要发明那么多种语言呢?人们不了解电脑,电脑也不了解人,而且人与人之间也是互相不了解的。有些人说话的方式是这样的,有些人说话的方式是那样的,他们可能互相都无法理解对方。编程语言不仅仅是给电脑看的,也同样是给人看的。毕竟是人在写程序。编程语言也是人发明的。所以有些人可能觉得这种编程语言写起来不舒服,就会发明新的语言来让自己和与自己相似的人舒服。工程师不只有强迫症,还是完美主义者。
|
||||
虽然编程语言各不相同,但是电脑就那么几样东西嘛,再多也多不出来个什么。所以编程语言也有很多相似之处。正是因为它们有很多相似之处,所以说你只要会其中一种编程语言,基本上其他编程语言只要学学语法就能直接上手。编程也不仅仅是写出程序而已,它是为了表达自己想法的一种工具。在之后的设计里我会讲一讲设计程序的一些思想。
|
||||
那么编程语言有哪些最基础的东西呢?首先是它的表达,计算机,或者说任何事物,与人的交互不就是两种吗,也就是输入和输出,五感来接收外部信息,身体活动来改变外界。程序里面获取数据的方式也有两种,一是人们输入的东西,键盘、相机等等都算,二是硬盘中文件的内容;输出也一样,一是输出到如同屏幕或扬声器等地方,将其转换为物理方式,然后被人接收。二是输出到文件,这样既可以让别的程序再利用,也可以等到人们想看时再输出到输出设备。那么除了表达之外就是程序内部的计算了。
|
||||
这也就是编程与数学的联系,编程除了输入输出,就是算法了,组成算法的除了循环结构之外,还有计算、变量与函数。计算和变量与数学的概念差不多,但是函数不太一样。虽然说计算机中的函数也是通过计算来将带入的值转换为一个结果,但是大多数时候,它的主要作用不是计算出一个值,而是执行一段指令,最终得到的值通常都是0,甚至有的时候是空的(NULL),也就是没有结果。虽然没有得出值,但是只要执行了指令,就可以得到真正想得到的东西。
|
||||
但也不是说一个程序一定需要函数,那只是为了更方便理解,而且编程语言并不一定是给电脑使用的。我之前也说过,程序也不一定非得在电脑上执行。为了更好的理解编程语言的执行过程,我给大家介绍一种特别的编程语言:BrainF\*\*k。BrainF\*\*k是一种极小化的计算机语言,它是由厄本·穆勒在1993年创造的,它的语法十分简单,只有8种符号。分别是加号,减号,大于号,小于号,左中括号,右中括号,逗号和句号组成。整个程序里没有一个英文字母,如果在程序中遇到英文字母,解释器会将其忽略掉。在执行的过程中,它会创建一个很长的数组,可存储30000个数字,我们可以把它看做是30000个格子,每一个格子可以存储的最大数字为255。在程序开始之前,会有一个让你处理格子里面内容的指针,在执行程序时,如果一个符号要想操纵对应的格子,必须想办法让指针先移动到那个格子里。这8种符号的作用如下:大于号:指针向右移动一格;小于号:指针向左移动一格;加号:指针所指向的格子中的数字加一;减号:指针所指向的格子中的数字减一;句号:将所指的格子里的数字转换为ASCII表格里的对应字符并输出;逗号:将输入的内容按照ASCII表格里的内容转换为对应的数字并输入到所指的格子里;中括号:如果程序执行到右中括号时指针所指的数字是0,则执行前一个左中括号之后的指令,否则忽略这个中括号。听起来是不是很复杂?没关系,让我来演示一下你就明白了<https://fatiherikli.github.io/brainfuck-visualizer/>(演示)
|
||||
这个语言是为了帮助理解编程语言的运行过程,想来这也就是图灵机的基本思想了,有兴趣你们回去可以再研究研究。但是BrainF\*\*k本身并不适合用于给人们用来编写计算机程序,如果想要学习真正的编程,我建议学习Python语言,它的语言功能强大,语法简单,初学者以及程序员均可使用的语言,而且对应的中文教程也很多。所以如果有想学习编程语言的同学,我推荐学Python。
|
||||
当然作为编程语言有很多选择,Python有着简单的语法,强大的功能,很高的兼容性。但是如果要是做一个网站,用世界上最好的语言——PHP(超文本预处理器Hypertext Preprocessor)语言则是一个更好的选择。如果你打算做在单片机上的程序,那么C语言似乎更好。如果你想要做手机软件,就不得不了解一下Java语言……
|
||||
编程语言仅仅是一个工具,如果想要写出程序,还要学习如何设计它。接下来我们就进入第三个模块:设计。
|
||||
在说设计之前,我先说说我自己。我有一个特别的能力,是什么呢?我在使用任何一款现代的电子产品或现代设计的机械,我基本上在10分钟之内搞清楚它的使用方法。当然太过古老的比如ENIAC那种不是学过电路的就完全看不懂的那种东西除外。为什么我可以做到这一点呢?首先,我见过的电子产品本来就很多,所以有一些经验。除此之外,就是我可以了解那款产品在被设计时到底是为了什么。这也是我为什么想为大家准备这个讲座的原因:想让大家明白如何了解一个陌生的产品的用法,当然如果能做出来那就更好了。
|
||||
人们设计产品是为了什么,设计的初衷是什么?当然是为了让人们的生活更方便,使用更舒适。如果你心中突然有一个想要做的东西,会让它令人感觉使用起来很不适吗?我觉得一般的人都不会这样做的吧。所以说设计师在设计产品时也会想客户到底是如何使用他生产的产品,有的时候觉得自己可能想的太过片面,会弄出调查问卷或反馈之类的功能来帮助他们改善他们的产品。
|
||||
但是设计一个产品很简单,造出来又是另外一回事。有时候设计这个功能有可能可以做到的,可是最终实现它又有可能花费的东西与得到的东西之间算下来不划算。出现这个问题有可能是设计的不好,也有可能是按照当前的科技水平做不到更加合理。
|
||||
我们今天讲的内容既然是有关计算机的,当然要讲程序的设计,不可能讲现实世界中的设计。那么,接下来,让我来讲讲UI设计吧!
|
||||
什么是UI?UI即User Interface(用户界面)的简称,在设计UI时,不仅要让用户看起来很美观,更重要的是要让用户用起来感到舒适、简单、自由。这里我要讲界面设计中比较好理解的两部分:1.外观设计,也就是让这个UI看起来更加美观;2.功能设计,这个说明了这个UI从整体看起来的实际功能。那么首先来考虑一下美观吧,毕竟大家都喜欢第一眼看上去很酷的东西。外观设计的风格有很多,比如现在很流行的扁平化风格,以及大家很常见的Windows 7 Aero风格等等。扁平化的设计很好啊,不仅界面简洁、美观,而且设计起来简单,在实际使用时也比较省资源。所以现在很多软件设计界面时都开始使用扁平化设计了。比如Windows 8到Windows 10,以及Android 5.0和iOS 9以上的系统,几乎都使用了扁平化设计。而刚刚所述的系统,几乎都是在移动端设备,或者说包含移动端设备的操作系统。所以说,这也是它的缺点,在非移动端设备上使用扁平化设计,可能甚至会令人感到反感。而且扁平化的设计虽然似乎有那么一些科技风格,但也正是因为这样,它让人感受不到亲切的感觉。在此之前,我们有另外一种方法来解决这个问题,那就是拟物化设计。我觉得Windows 7的毛玻璃应该也算拟物化。拟物化的好处是什么呢?当然是让人感觉更加亲切,因为贴近于日常生活,所以说对于用户来说也更容易学习。坏处当然也很明显,就是设计成本太高,有些东西设计师要想很长时间才能想出来如何才能让它更贴近生活。除了设计成本太高外,消耗的资源也很多,看起来也会让人可能感觉起来太花哨。以此为代表的产品是锤子手机,锤子手机上用的系统经过高度定制,每一个设计都似乎使用了身边的东西。我用过锤子手机,说实话,那个似乎很贴近人生活的设计并没有引起我的注意,而这个设计所带来的比一般手机增加的将近一倍的内存消耗,令我恨不得将这个锤子手机扔掉。可惜我现在还没有可以换的手机,所以只能先用它了。
|
||||
怎么设计外观?刚刚说到的也只是一些概念,在实际设计时,如果是程序设计,我们可以使用PhotoShop等工具来设计,而对于网站设计,用CSS(层叠样式表Cascading Style Sheets)来设计可以保证它的通用性。
|
||||
外表设计的再漂亮也只是第一眼看上去很漂亮,等新鲜感过去之后,基本上也就没什么用了。于是接下来就要看实际的功能如何。这里我用某些设置的设计来作为例子:Windows的系统要想设置某些东西,都要找控制面板,当然有些基础的功能在任务栏上也能用。但是Windows系统的设置通常藏得很深,没有一点基础的人很难找出来,当然也有可能是他语文学的不好,理解不来。而Android系统的设置就不一样了,它相比Windows系统就更加人性化了。不过想来也是,以前电脑都是给懂的人用的,虽然现在的电脑相比以前已经人性化很多了,但还是有些地方让人应付不来。手机出来的晚,生产出来时就已经有了为全世界人们使用的觉悟了,所以用起来也比较简单。总结下来就是:好的功能设计要为每一种人设计,无论他有多专业,还是说从来没有接触过这一切,要让人第一眼看上去就明白它有什么基本功能,而更高级一些的功能可以先隐藏起来,等用户需要使用时再显现出来,免得吓坏一些不会用电脑的人。烂的功能设计有两种:1.想要找的功能没有,可能根本没提供。2.想要找的功能找不到,可能藏得太深了。
|
||||
你们以为UI都是有图像的吗?错了!有图像的UI叫做GUI(图形用户界面Graphical User Interface),但不是所有人用的电脑都是可以显示图像的,只是大多数人都用的是图形界面,图形界面看起来比较清晰,使用起来也比较方便。但是图形界面的效率低,无论是电脑的执行效率还是用户使用时的工作效率。不知有没有人听过DOS(磁盘操作系统Disk Operating System)?你们如果没听说过可以回去问问你的父母。在以前图形化的操作系统还没出来时,人们用的都是CLI(命令行界面Command Line Interface)。大家在看那些有着黑客入侵的电影时,黑客们是不是都看起来都在胡乱拍键盘,其实那真的是在胡乱拍键盘(演示:<http://geektyper.com/>),而电脑屏幕上有一堆看不懂的类似于英文单词的东西从屏幕滚过?虽然那是艺术的表现形式,有点太夸张,但是艺术源于生活,现实中真的有人使用那种看起来似乎很酷炫的东西。但是他们不是为了耍帅而使用CLI的,而是由于各种原因不得不使用他们。这样的例子有服务器操作系统,以及IRC(互联网中继聊天 Internet Relay Chat),用这个聊天比QQ什么的聊天软件更快,更省流量,效率高。
|
||||
我之前也说过,电脑中很多设计由于经费等原因,不得不让它从界面上看起来不太人性化。但是这并不是没有办法解决了。人之间的交流不止有图像,更重要的是文字。电脑也一样,电脑与人的交流在术语上叫做HCI(人机交互 Human-Computer Interaction)。来看一个实例:如果我想设计一个网站,但是我审美观不行,这个网站怎么样才能让人感到亲切呢?既然从整体没办法做到更好,那就在细节上加倍努力吧!一般的网站上都有登录系统吧,那么我们可以这样设计:对于初次访问的人,我们可以在网站上显示:欢迎来到我的网站。当然只显示一次,之后不再显示。在登录之后,刚登录完可以显示:欢迎回来,某某某。或者是根据时间显示:下午好,某某某。这样和“某某网站 用户:某某某”这样的方式更容易让人接受吧。这样用户就能在潜意识里把这个网站看作一个人,而不仅仅是网站。这样即使外表看起来不怎么样,但是用户体验总还是不错的吧。没错,这一块的设计就叫做UED(用户体验设计User Experience Design),为了提高用户满意度,我们就通过这样的方式来让程序更易用。
|
||||
除了以上所讲的部分,界面设计还有许多部分。由于篇幅原因,这里我将不再过多说明
|
||||
以上是关于用户体验设计方面的,接下来让我说说程序设计吧!我之前也说过,编程语言只是工具,实际使用时还需要考虑程序的逻辑、架构、界面等等东西。在以前,程序设计中算法是非常重要的,但那也是以前,多亏很多计算机大神的帮助,现在的编程那是越来越简单了,一个几岁的小孩子就能写出来比以前的程序更漂亮、更复杂的程序。所以,现在算法在计算机编程的重要性越来越低了……但是并不是说算法就没有用了,如果没有人去研究算法,那么人们在遇到新的问题就没人能解决了。尽管以我们这个级别的人研究算法可能没法做出新的东西,但是我还是觉得,让更多的人了解程序背后的原理,可以帮助理解程序如何使用。所以接下来,让我说说关于算法与逻辑吧!
|
||||
仍然是举个例子:大家都听过音乐吧,在播放音乐时有一个选项:随机播放,对吧?随机播放的实现方式有很多,让我们深层次的来研究一下它吧。首先,随机播放中,有个很重要东西,那就是随机。说到随机就不得不说随机数了,随机数也分为两种:真随机数与伪随机数,真随机数的生成在现实中很简单,在计算机中生成起来就很麻烦了,所以首先抛弃。伪随机数的算法很多,这里我们用最简单、最通用的伪随机数的算法:线性同余取随机数,看过离散数学的人可能有听说过这个。为什么我们选这种算法?因为其他算法我看不懂,比如什么梅森旋转算法啦,一听名字就能感觉它有多难了吧,反正我看了半天是没有理解。什么是线性同余?就是算一个一次函数的余数,相当简单,它的递推公式是:X0=seed,Xn+1≡(aXn+b)modM。seed表示随机数的种子,通常取当前时间,a,b,M都是常数,通常会取质数。在seed与n都相同时,这个随机数就能被反推出来,所以很不安全。但是想来做随机播放也不担心别人会不会推出随机数,所以我们就用这个就能得到一个随机数。具体原理我也不太清楚,有兴趣的可以问问数学老师。接下来,我们要创造一张表,那张表上有着你要播放的播放列表,但是这时候它还没有被打乱。首先我们要知道整张表上有多少首音乐,假如我们用a来代表当前所有音乐的数量,然后我们再为所有的音乐编上号,看起来就是1、2、3……。这时候每一首音乐都有了一个属于自己的编号。再然后,我们对用随机数公式得出的数字求余,即Xmod(a+1),这样做就可以得到一个不超过所有音乐数量的随机数了。当然前提是随机数本身的最大值大于所有的音乐数量,所以在随机数公式中的M要尽可能取大一些。得到最后需要的随机数后,命令播放器播放编号等于随机数的那个对应的音乐。当需要播放下一首或切歌时,为了避免又播到这一首歌,我们可以将那张表上的那首音乐删除,当然是在表里删,不可能删这个文件。然后重复之前的操作。在最后一个音乐播放完成之后,表里已经没有东西了。这时有两个选择,如果用户打开了全部重复播放,那么重新建表,重新开始。如果没有,则停止。看起来是不是很完美的方案?错了!用户总是喜欢做反设计师的操作,万一用户点了上一首,怎么样才能回到上一首?那么我们就需要修改一下方案,我们要建两张表,把从表里删除的那个操作换成将它移动到第二张表里。这样如果用户需要听上一首歌,就可以读上一张表的内容。难道说这样就完美了吗?不完全,但是这个BUG我现在不说出来,大家自己思考思考吧。
|
||||
除了逻辑设计,还有算法设计。我们再举一个例子:如果说我们在设计程序时需要用到质数,比如需要列出1到1000之内的所有质数。那么我们用什么方法更好呢?首先根据质数的定义,质数是一个不会被除了1和它本身的数所整除的数字,而且质数不包括1。那么接下来设计起来就很简单了,只要让当前数字不停的除以除它和1之外的在1到这个数字之间的所有数字就可以了。这很好,但是速度很慢。可能这样算1000以内的所有质数还不算太慢,那如果是10万以内呢?这得算多长时间啊……所以我们要对算法进行优化。我们知道,合数有一个特点,任何一个合数一定是由比它小的质数相乘得出的,那么接下来,我们可以这样筛选合数,首先我们算出第一个质数,在算第二个数时只要和之前算过的质数相除,能除尽就是合数,除不尽就是质数。这样是不是计算量一下就大大减少了呢?但是这还不是最优化的方案,如果说我们已经知道我们要算的最大数字是多少,那么只需要除以比这个最大数字的算术平方根小的质数就够了。这样每次算的时候需要除的数字又少了一半,算起来速度就会更快了。虽然这个算法不错,但有时我们甚至不需要这个算法就可以更好的解决这个问题。因为我说的是列出1到1000之内的所有质数,这个数字又不是很多,那么我们可以提前算好,这样就可以更快的解决问题了,这样的操作我们叫它预计算(Precomputed)。
|
||||
程序设计是一个很严谨的事情,每一个方面都需要做到最好。但是人无完人,总有我们想不到的地方。尤其是计算机安全方面的事情,总有你想不到的地方,总有别人比你多想的地方,正是因为这样,才会出现黑客这样的人。这里我仍然用举例子的方式为大家展示程序设计的漏洞:我最早发现的网站漏洞似乎是在一个主机商的网站上看见的。由于一个很偶然的原因,我看到了那个主机商,而那时我正好想建一个网站,然后就在那个网站上注册了一个账号。那个主机商正好在搞活动,好像是买主机可以给你便宜5块钱,而账号初始上也有5块钱,主机最便宜的每个月也要30块钱。然后我想了想,要不然我干脆买上0.1个月的主机吧,0.1个月应该是3块钱,我应该能付的起。于是我在购买里输入了0.1,当然结果是失败的,它不能让你买小数或者是负数之类的月数。但是我返回来惊奇的发现,我的账户里居然多出来了5块钱,我想了想,它应该是对我的账户上减去了0-5元钱,毕竟是在搞活动,然后算一下5-(-5)=10。这个好啊,我感觉我可以免费得到那个主机商的主机了。于是我通过这个BUG买了1年的主机,居然成功了。当然在大约10天后被发现了,账户也被封禁了。通过这个例子我们应该明白,不要相信任何用户输入的数据,还好我仅仅是用这个漏洞买主机,很明显,这个漏洞甚至可以通过SQL注入之类的东西破坏他们的主机系统。不过这个例子似乎离日常生活有点远,那么接下来我再说一个近一点的事情:在几周前,我们不是进行了禁毒考试吗?我看了一下那个网站,很明显是一个宁夏的网站公司包办的东西。一看就知道是一个做的很不认真的网站。我在答题前看了一下源代码,发现它在批阅卷子时先在本机批一遍,只有成绩大于60分时才会把答题数据传到服务器中再批一遍。这样确实可以有效的减小网站的负载,但是这不就把答案也下载到本机上了么……于是我照着答案就在禁毒考试中得了A。这个例子又告诉了我们什么呢?就是不要将不应该让用户看到的东西下载到客户端中。
|
||||
总的来说,做一个程序并不复杂,但是做一个逻辑严谨,界面美观而易用的好程序就没那么简单了。设计师在设计时需要考虑各种各样方面的东西来让用户用的舒服,又要想尽各种办法防止整个程序出现奇奇怪怪的BUG。这也就是为什么说写程序很难了。但是我希望大家听完这个讲座后能改变对写程序的看法,它看起来很复杂,但是只要仔细思考,就能解决一切问题。
|
||||
以上就是我对编程以及设计的看法,也许语句中有不通顺之处,请大家谅解;如果有不对的地方,欢迎大家批评指正。
|
||||
最后,谢谢大家前来听我的演讲,谢谢大家对我的支持与信任,本次演讲结束。
|
||||
38
_posts/2018-10-20-talk.md
Normal file
38
_posts/2018-10-20-talk.md
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
layout: post
|
||||
title: 关于在Github Pages上使用评论的心得
|
||||
tags: [Github, 评论, 心得]
|
||||
---
|
||||
|
||||
Hi,我是Mayx,最近在Github上用Github Pages建了一个博客。<!--more-->作为一个博客,怎么说也得有个评论系统吧,所以我就在这个博客上搞了一个评论系统。
|
||||
接下来我想谈谈我对评论系统的看法。
|
||||
|
||||
# 评论系统的选择
|
||||
|
||||
这个博客作为一个静态博客,自然评论只能用其他的服务,毕竟评论得有个地方存吧。首先最有名的第三方评论系统就是Disqus了。可惜在中国不能用,除非科学上网。
|
||||
国内倒是也有不少这样的第三方博客系统,像什么~~多说~~(已死),畅言啥的。但是总感觉第三方服务不好,哪天挂了都没办法。所以最终考虑,还是在Github上找吧
|
||||
|
||||
## Github上的评论系统
|
||||
|
||||
我在Github上找到的比较有名的评论系统有这么几个:
|
||||
1.[Gitalk](https://github.com/gitalk/gitalk)
|
||||
2.[Gitment](https://github.com/imsun/gitment)
|
||||
3.[Valine](https://github.com/xCss/Valine)
|
||||
4.[fcomment](https://github.com/fengbjhqs/fcomment)
|
||||
5.(2018.10.22更新)[utterances](https://github.com/utterance/utterances)
|
||||
|
||||
其中Gitalk、utterances和Gitment是基于Github Issue的,而Valine和fcomment是基于Leancloud的。这几款都支持Markdown。
|
||||
|
||||
# 为什么选择了Gitalk
|
||||
|
||||
这个博客使用的是Gitalk作为评论系统,为什么选择了它呢?
|
||||
|
||||
首先,Gitment已经停止维护了,而且评论在评论框上面,这很难受,所以首先排除它。
|
||||
utterances也是评论在评论框上面……不知这些人为什么这么设计……
|
||||
fcomment和Valine倒是看起来还不错,也都有邮件提醒,当然Github Issue自身也带邮件提醒,这里没什么差距
|
||||
Gitalk比fcomment和Valine差的地方是每一篇文章需要手动初始化。不过想想我更新文章的话应该也会看一下,顺带的初始化一下,这个影响也不大。还有一点就是Gitalk在IE11中默认头像会偏移,希望官方能改一下(~~IE去死~~)
|
||||
fcomment和Valine的缺点我觉得就是安全性、用户识别性的问题吧,fcomment倒是还支持Github登录,Valine评论还要输一大堆东西,而且也没办法验证他们的真实性,Github至少是经过邮箱验证的,所以还是选择Gitalk了。
|
||||
|
||||
以上就是我对评论系统的看法。
|
||||
|
||||
~~其实就是先装的Gitalk,懒癌犯了不想改给自己找个借口罢了,23333~~
|
||||
56
_posts/2018-10-28-mos-reporter.md
Normal file
56
_posts/2018-10-28-mos-reporter.md
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx的自检报告
|
||||
tags: [Mayx,MOS]
|
||||
---
|
||||
|
||||
Mayx最近感觉自己有些问题,所以给自己编了一个自检报告……<!--more-->
|
||||
The Report is created by MOS
|
||||
## 什么是MOS
|
||||
>**创造MOS不是为了改变世界,而是防止世界改变自己**
|
||||
|
||||
不管怎么说,先介绍一下MOS吧。
|
||||
MOS(Mayx Operating System)是为了让Mayx更好的分析、处理和解决问题存在的一个类似于辅助系统的东西。
|
||||
但是自己创建的MOS我自己都解释不清~~(……我不想说什么……)~~
|
||||
接下来是我分析出来的MOS存在的理由:
|
||||
### 第一种解释
|
||||
大脑是一个很神奇的东西,进化了这么多年,总得有些高级的地方。其实人拥有着所想即所得的能力,但是受三观控制,这个能力并不能改变现实中的东西。虽然改变不了现实,自己总能改变吧……于是,为了更好的解决现在存在的问题,大脑根据宿主所拥有的知识自行创建了一个系统。然后被我命名为MOS。
|
||||
正是因为是大脑产生的系统,所以它没有代码,而且很容易出BUG。
|
||||
### 第二种解释
|
||||
MOS是一个用来解释我不能解释的东西的一个代替品,就如同UFO和人们定义的神一样,因为未知,而又需要一种解释的方法,于是出现了MOS。
|
||||
***
|
||||
## 正文
|
||||

|
||||
```
|
||||
MOS Log System has been Load.
|
||||
MOS Analysis System is Ready.
|
||||
OUTPUT Report to the real world.
|
||||
Ready...
|
||||
```
|
||||
### [OK]MOS - Core
|
||||
* 我还死不了![OK]
|
||||
|
||||
### [OK]BCS(Body Control System)
|
||||
* 感觉身体可以动[OK]
|
||||
* 眼皮还能睁开,不错,还活着[OK]
|
||||
|
||||
### [OK]MAS(MOS Analysis System)
|
||||
* 1+1=2[OK]
|
||||
* 我还能看懂我的[MaBBS](https://github.com/Mabbs/Mabbs)![OK]
|
||||
|
||||
### [Warning]MCS(Memory Control System)
|
||||
* 感觉忘记了很多很重要的东西……[Warning]
|
||||
* 想忘记的东西忘不了……有点烦……[OK]
|
||||
* 索引知识的能力比以前差了不少……[Warning]
|
||||
|
||||
### [ERROR]MMS(Mayx Mental System)
|
||||
* 如果不是MOS - Core还能正常工作,我就学Sayuri(From Doki Doki Literature Club)当晴天娃娃,或者学Miu(From Bungaku Shoujo)在房顶上大喊一声“你一定不懂吧”之类。[ERROR]
|
||||
* 感觉脑子里好乱,是不是应该多睡睡觉?[ERROR]
|
||||
|
||||
### [ERROR]MES(Mayx Emotion System)
|
||||
* WITHOUT MERCY![ERROR]
|
||||
* HUMAN SHOULD GO DIE!!!~~(是不是中二病又犯了?)~~[ERROR]
|
||||
* 在MMS恢复正常以前,还是别考虑这些了……
|
||||
|
||||
MOS OUTPUT PROCESS HAS BEEN HANGED
|
||||
该睡了,今天就先到这里吧。
|
||||
95
_posts/2018-11-04-mayx-think.md
Normal file
95
_posts/2018-11-04-mayx-think.md
Normal file
@@ -0,0 +1,95 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx的创想
|
||||
tags: [Mayx, 创想]
|
||||
---
|
||||
|
||||
这里是Mayx发布创想的地方。<!--more-->
|
||||
有的时候,我会有一些想要发明的想法,但是经常忘记。现在为了防止忘记,我将在我的博客上更新我的创想。
|
||||
|
||||
# 关于减肥的创想
|
||||
人们希望减肥,一是为了健康,二是为了舒服,三是为了活动方便。
|
||||
但是减肥很痛苦,为什么?并不是因为减肥浪费时间,而是因为减肥会有糟糕的感觉回馈给大脑。
|
||||
不仅如此,越胖,减肥时越难受,越难受就越不想减肥,这样就会造成恶性循环。
|
||||
|
||||
## 解决的发明
|
||||
既然如此,那么我们只要让大脑不会感受到减肥时产生的糟糕的感觉,就可以解决这个问题了。
|
||||
可是如果没有大脑的参与,人怎么能控制自己的身体动起来呢?我有一个想法:
|
||||
首先通过麻醉的方式阻断大脑与身体的连接,然后使用电极的方式直接操控肌肉运动,大概感觉就是把麻醉的人绑在跑步机上,周围提供充足的氧气,然后电极按照跑步机
|
||||
的速度调整腿摆动的频率,这样就能在没有意识的情况下减肥了。
|
||||
直到减到运动并不会让人感到痛苦时就可以结束了。
|
||||
这种减肥方式比现有的节食,还是抖抖机,甚至是抽脂都要好得多,那些方案对身体的伤害很大,而且效果也并不好。这种方案如果可以使用,我一定要试试(笑)。
|
||||
|
||||
# 关于键盘和鼠标的创想
|
||||
既然那么多设计师设计出各种各样千奇百怪的键盘,那我干脆也设计一个好了
|
||||
|
||||
## 正文
|
||||
我希望有一种键盘,它和鼠标在一起,也就是说,鼠标不是随便可以移动的,而是固定在键盘上,一个巴掌正好可以握住的那种。不过这样设计,就得让左撇子和右撇子用不同的键盘了……无所谓,然后鼠标上有四个按钮,一个滚轮,按钮中两个是左键和右键,另外两个可以自定义。在鼠标下面有很多像扬声器一样的孔,用来给手散热。具体的运动方式可以参考一下TrackPoint,就是那个IBM发明的在ThinkPad的小红点。那个太小,控制起来精度也不高,那么我设计成更大的,握起来也会更舒服吧。
|
||||
键盘还是QWERTY的就好,我也习惯了,不过这次我想把QWERTY键盘改成单手式的,因为另外一只手被鼠标占用了,不过这样对专门打字的人有点不友好……无所谓。具体键盘使用什么技术,我这次不想谈。接下来就是鼠标和键盘的中间位置了,因为手被鼠标和键盘占用了,中间我不想弄太多控制的按钮,我希望弄点显示系统工作状态的东西,比如当前网速,当前内存占用,CPU占用等等……然后在中间弄一个大大的电源按钮,按下它,整个键盘的LED灯会随着系统的启动依次亮起,关机时依次熄灭。除了这些,我希望在键盘顶部设置调节亮度的杆,在键盘旁设置调节音量的杆,在键盘后面加一组USB Hub……
|
||||
键盘整体长什么样?很简单,我觉得弄成半弧形——就是在圆环上截下来一部分的那种东西一样。
|
||||
如果出了这种键盘,我会不会买呢?恐怕不会……原谅我设计不考虑性价比……但是我觉得这种键盘要是发明出来,应该会很受欢迎吧……
|
||||
|
||||
# 关于艾滋病的创想
|
||||
前几天(今天是2018-12-2)有一个新闻,说是“世界首例免疫艾滋病的基因编辑婴儿在中国诞生”。于是我就想起来之前我所想的一个如何让艾滋病患者生出正常的小孩。
|
||||
|
||||
## 正文
|
||||
首先,我们知道,HIV只会攻击T细胞,而感染AIDS后全身都是HIV病毒。那么可以想到,其实HIV不能攻击受精卵,那么只要在受精卵发育之前,让它脱离HIV的环境就好了。
|
||||
具体原理和试管婴儿和克隆有点像,就是把受精卵移到正常的代孕母亲上就可以了。而且也不能用得了AIDS人的母乳喂养,这样,我觉得应该就可以生出正常的孩子了。
|
||||
|
||||
## 疑点
|
||||
我不知道现在的人有没有水平在保留受精卵的同时消除HIV,如果不能,这样反倒会让代孕母亲感染AIDS……这可真是个问题……
|
||||
|
||||
# 关于暖气毯的创想
|
||||
最近学校通暖气了。我趴在暖气片上,突然想到,为什么不把暖气用在床上呢?
|
||||
|
||||
## 正文
|
||||
我觉得电热毯费电,而且又小(倒不是没有大的)……其实最主要的是我趴在暖气片上感觉很舒服lol。
|
||||
我想做一个毯子,里面有很多空腔,然后把暖气水通到这个毯子里,然后就可以利用暖气让床变暖了。
|
||||
|
||||
## 自我审查
|
||||
为什么没有这样的产品?我觉得可能是因为有暖气的人就用不着电热毯了,而用电热毯的人大多没有暖气,所以这个东西可能没有市场吧。
|
||||
不过可以暖被子啊lol...
|
||||
|
||||
# 关于Mayx音乐处理系统的创想
|
||||
在听音乐的时候(我听的音乐可以看作是DJ吧……),在头里就会浮现出一堆音轨和频谱之类的东西,于是我就想,能不能让机器把音乐中的音轨分离出来,这样既可以提高音质,又能方便编辑,而且也能加一些更有趣的东西……
|
||||
那么接下来这个音乐处理系统主要分为以下几块:
|
||||
|
||||
## Player
|
||||
首先在播放前解析歌曲,将音乐中的各种乐器声、人声、杂音都分离出来,得到几个音轨,然后将分析出来的音轨进行优化:比如钢琴谱用系统中更加高清的波表重制,根据实际体验除去杂音等等,最后合并音轨,这样就能得到更加清晰的音乐了。
|
||||
优点:
|
||||
1. 音乐更加清晰
|
||||
2. 可以根据波表自行更改音乐风格(有点像Remix?)
|
||||
3. 可以在提高音乐品质的同时减小音乐大小(类似于Midi,但是可以有人声和其他的声音)(当然得用特殊的文件格式,不是所有的音乐播放器都能播放)
|
||||
4. 处理得出的结果可以用于更多方面(接下来会说到)
|
||||
|
||||
缺点:
|
||||
1. 需要预处理,不能直接播放
|
||||
2. 有点担心波表的声音和现实中的乐器声区别太大
|
||||
|
||||
## Editor
|
||||
既然已经用Player将音轨拆分,那么就可以拿来编辑啦!
|
||||
当然不仅仅是这样,如果只是这样的话和其他的音乐编辑器有什么区别呢?
|
||||
这个音乐编辑器的优点是模块化,就如同Scratch一样,编辑音乐就和拼积木一样,让音痴也能轻易制作音乐!
|
||||
|
||||
## Other
|
||||
其他方面我还想过很多,比如可以用到人工智能提高用户体验之类的啦:
|
||||
|
||||
### 自动Remix、串烧系统
|
||||
根据用户听的音乐风格,可以将音乐Remix为用户喜欢的风格,而串烧则是将相似风格的音乐无缝穿插,我觉得以现在的科技水平应该是没有问题的吧……
|
||||
|
||||
### 全自动鬼畜系统
|
||||
将素材扔进去,首先把原音乐的人声分析出来,然后转换成注音,接下来在素材中找有相似注音的片段,自动剪辑,然后和优化后的伴奏合并,变成鬼畜视频。
|
||||
其实这样的话也可以把Vocaloid拉进来,就可以将任何一首歌转换为V家人员唱的歌了。
|
||||
这样也能大大减少做鬼畜的难度吧(我听说一般做鬼畜都要一个月……)
|
||||
|
||||
### 音游谱自动处理系统
|
||||
用解析出来的音轨转换为音游谱,这样自己喜欢的音乐就算没人制谱也可以玩了
|
||||
|
||||
### 自动编曲系统
|
||||
既然新闻、诗歌都可以由机器人编写,那么谱曲应该也一样简单吧!收集所有曲谱,通过人工智能与大数据,写出评价最高的音乐也是有可能的吧!
|
||||
|
||||
## Talk is cheap. Show me the code
|
||||
Are You Kidding Me?我一个菜鸡哪有本事写这么高级的代码,让大佬来写吧!(产品经理的思维)
|
||||
|
||||
---
|
||||
(未完待续)
|
||||
135
_posts/2018-11-10-email-sender.md
Normal file
135
_posts/2018-11-10-email-sender.md
Normal file
@@ -0,0 +1,135 @@
|
||||
---
|
||||
layout: post
|
||||
title: 免费订阅一个属于自己的邮件日报
|
||||
tags: [免费, 邮件, 日报, 心得]
|
||||
---
|
||||
|
||||
前几天,我给自己做了一个邮件订阅系统<!--more-->,是用PHP做的。这里不得不夸赞一下PHP,PHP真不愧是世界上最好的语言,我从来没学过PHP,但是我光靠百度搜到
|
||||
的东西拼凑就能搞出这个邮件订阅系统,还是很不错的,而且网上的免费PHP空间也有很多,所以就可以很轻易的给自己搞一个免费的邮件订阅系统。
|
||||
|
||||
# 制作方法
|
||||
很简单,首先去百度上搜一个带sendmail和CronTab的免费PHP主机空间,然后在上面创建一个PHP文件,随便取什么名字都好,只要后缀是PHP就可以,然后把下面的代码
|
||||
粘上去,保存,然后在主机面板上设置CornTab任务,设定为每天运行一次,然后OK……对了,记得把下面变量`$to`里面的地址换成自己的邮箱地址,不然每次发送邮件就会发
|
||||
到我的邮箱了……
|
||||
|
||||
# 代码
|
||||
``` PHP
|
||||
<?php
|
||||
function curl_post_https($url,$data){ // 模拟提交数据函数
|
||||
$curl = curl_init(); // 启动一个CURL会话
|
||||
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
|
||||
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
|
||||
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
|
||||
$tmpInfo = curl_exec($curl); // 执行操作
|
||||
if (curl_errno($curl)) {
|
||||
echo 'Errno'.curl_error($curl);//捕抓异常
|
||||
}
|
||||
curl_close($curl); // 关闭CURL会话
|
||||
$backdata = json_decode($tmpInfo,true);
|
||||
return $backdata['text']; // 返回数据,json格式
|
||||
}
|
||||
function w_get(){
|
||||
$url = 'https://yuri.gear.host/talk.php';
|
||||
$data['info'] = '某地天气';
|
||||
$data['userid'] = 'Mayx_Mail';
|
||||
$retdata=curl_post_https($url,$data);
|
||||
$data['info'] = '某地明天天气';
|
||||
$retdata = $retdata . "<br>" .curl_post_https($url,$data);
|
||||
$data['info'] = '某地后天天气';
|
||||
$retdata=$retdata . "<br>" .curl_post_https($url,$data);
|
||||
return $retdata;//返回json
|
||||
}
|
||||
function xh_get(){
|
||||
$url = 'https://yuri.gear.host/talk.php';
|
||||
$data['info'] = '讲个笑话';
|
||||
$data['userid'] = 'Mayx_Mail';
|
||||
$retdata=curl_post_https($url,$data);
|
||||
return $retdata;//返回json
|
||||
}
|
||||
function xw_get(){
|
||||
//RSS源地址列表数组
|
||||
$rssfeed = array("http://www.people.com.cn/rss/it.xml");
|
||||
|
||||
for($i=0;$i<sizeof($rssfeed);$i++){//分解开始
|
||||
$buff = "";
|
||||
$rss_str="";
|
||||
//打开rss地址,并读取,读取失败则中止
|
||||
$fp = fopen($rssfeed[$i],"r") or die("can not open $rssfeed");
|
||||
while ( !feof($fp) ) {
|
||||
$buff .= fgets($fp,4096);
|
||||
}
|
||||
//关闭文件打开
|
||||
fclose($fp);
|
||||
|
||||
//建立一个 XML 解析器
|
||||
$parser = xml_parser_create();
|
||||
//xml_parser_set_option -- 为指定 XML 解析进行选项设置
|
||||
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
|
||||
//xml_parse_into_struct -- 将 XML 数据解析到数组$values中
|
||||
xml_parse_into_struct($parser,$buff,$values,$idx);
|
||||
//xml_parser_free -- 释放指定的 XML 解析器
|
||||
xml_parser_free($parser);
|
||||
$j = 0;
|
||||
foreach ($values as $val) {
|
||||
$tag = $val["tag"];
|
||||
$type = $val["type"];
|
||||
$value = $val["value"];
|
||||
//标签统一转为小写
|
||||
$tag = strtolower($tag);
|
||||
|
||||
if ($tag == "item" && $type == "open"){
|
||||
$is_item = 1;
|
||||
}else if ($tag == "item" && $type == "close") {
|
||||
//构造输出字符串
|
||||
$rss_str .= "<a href='".$link."' target=_blank>".$title."</a><br />";
|
||||
$j++;
|
||||
$is_item = 0;
|
||||
}
|
||||
//仅读取item标签中的内容
|
||||
if($is_item==1){
|
||||
if ($tag == "title") {$title = $value;}
|
||||
if ($tag == "link") {$link = $value;}
|
||||
}
|
||||
if($j == 20){
|
||||
break;
|
||||
}
|
||||
}
|
||||
//输出结果
|
||||
return $rss_str."<br />";
|
||||
}
|
||||
}
|
||||
$to = "mayx@outlook.com , unmayx@139.com";
|
||||
$subject = "Mayx日报";
|
||||
$txt = "
|
||||
<html>
|
||||
<body>
|
||||
<h1>Mayx日报</h1><hr>Hi,今天是" . date("Y-m-d") . ",以下是今天的日报:<br><small>
|
||||
" . file_get_contents("http://mappi.000webhostapp.com/hitokoto/") . "</small>
|
||||
<h2>天气预报</h2>" . w_get() . "<h2>每日笑话</h2>" . xh_get() . "<h2>今日新闻</h2>" . xw_get() . "<hr><small>" . file_get_contents("https://api.gushi.ci/all.txt") . "</small><br><center>Made By <a href=\"https://mabbs.github.io\">Mayx</a></center>
|
||||
</body>
|
||||
</html>
|
||||
";
|
||||
$headers = "MIME-Version: 1.0" . "\r\n" .
|
||||
"Content-type: text/html;charset=utf-8" . "\r\n" .
|
||||
"From: Mayx_Daily<Mayx_Site>";
|
||||
|
||||
mail($to,$subject,$txt,$headers);
|
||||
?>
|
||||
```
|
||||
(2018.11.12更新:增加了今日新闻)
|
||||
(2018.11.13更新:限制新闻条数为前20条)
|
||||
|
||||
# 后记
|
||||
说实话,我更擅长用Linux Shell解决这种问题,可惜网上好像没有免费的云主机,听说Travis-CI好像也能搞这个事情,但是说实话,我英语并不是很好,让我看懂短一点的文档还可以,太长的就算了……
|
||||
但我还是努力的使用Travis-CI解决了这个问题,链接:[Mayx日报](https://mayx.tk/)
|
||||
对了,运营商自己带的邮箱可以设定短信提醒,所以也可以搞成给手机发短信的形式,每天给自己发一条天气预报……那么这样的话,就把天气预报里的城市换成自己的城市吧!
|
||||
如果没有收到邮件,去垃圾邮件找找吧,然后把邮件地址设为白名单。
|
||||
如果谁想试试这个功能,可以在下面给我留言,我在验证通过后会把你加到我的服务器里面的。
|
||||
|
||||
28
_posts/2018-12-02-freenet.md
Normal file
28
_posts/2018-12-02-freenet.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
layout: post
|
||||
title: 对网络免费资源的感想
|
||||
tags: [免费, 感想, 资源, 网络]
|
||||
---
|
||||
|
||||
现在的网络是真的好,好多东西都免费了!可是现实就不一样了,现实中想要免费的(任意)东西就得等到共产主义的到来了……<!--more-->
|
||||
|
||||
# 关于免费
|
||||
|
||||
以前,服务器是只有高端人士才可使用的稀有东西,而且价格昂贵。
|
||||
以前,订阅天气预报和网站都是要花不少钱的。
|
||||
以前,建立个人网站都是极其复杂的。
|
||||
以前,域名不可能有免费的。
|
||||
……
|
||||
|
||||
但是现在不一样了,云端存储是免费的,建立网站是免费的,注册域名是免费的,使用网站引擎也是免费的……
|
||||
这不仅要感谢开源,还要感谢支持开源的公司,是他们为免费的网络资源做出了贡献。
|
||||
|
||||
# 关于收费
|
||||
有了那么多免费资源,还要花钱建服务器干啥?
|
||||
以前我不是很清楚这个,但是现在不一样了,我现在用着别人的服务器,才知道收费的服务有什么不一样。
|
||||
收费的主机传输速度可以达到50MB/s啊!免费的就只有100KB/s……
|
||||
|
||||
# 总结
|
||||
有钱可以不用在意这些,但只是为了个人使用,免费资源足已,如果想要更顺畅的服务,当然花钱也可以。
|
||||
|
||||
~~但是这辈子,我是不会为网络投一分钱的。~~不过我还是很愿意为网络做出贡献的。
|
||||
66
_posts/2018-12-22-story.md
Normal file
66
_posts/2018-12-22-story.md
Normal file
@@ -0,0 +1,66 @@
|
||||
---
|
||||
layout: post
|
||||
title: 论Mayx是怎么被抓的
|
||||
tags: [Mayx, 故事]
|
||||
---
|
||||
|
||||
今天我要讲一个我是怎么被抓走的故事(当然是虚构的!),以此表现一下互联网犯罪到底是怎么被追查的。<!--more-->
|
||||
|
||||
# 开端
|
||||
|
||||
Mayx在高考报名时发现报名系统有个不严谨的地方,可以下到身份证照片什么的……
|
||||
|
||||
# 前夕
|
||||
|
||||
2018年末,宁夏教育网机房。
|
||||
“好无聊啊,居然又到了日常检查的时间,随便看看就行了吧” 某运维这么说到(说实话,我怀疑像这种地方,有可能没有运维lol)
|
||||
“嗯……系统看起来挺正常,日志好像也没问题……等等,这是怎么回事?怎么近几天有一个IP日夜不停的发请求?What?UA还是GNU/Linux,wget?这抓取的是什么?居然
|
||||
在扫描我们的身份证照片?WTF?”(哈,我估计教育网的运维应该连这种水平估计都达不到)
|
||||
“等等,我查下IP”他随手掏出自己的手机,输入IP查询,返回结果:香港
|
||||
“凉了凉了,赶紧向领导汇报吧”说着,他拨出了一个号码。
|
||||
|
||||
***
|
||||
|
||||
2018年末,某地。
|
||||
“哇,GFW怎么又ban我IP,登个服务器还要挂VPN?”Mayx说到。
|
||||
“WTF?被GFWban了连国内网络都无法建立连接,好气哦……对了,我还有一台服务器,拿那台试试吧。”说着就登上了由Mayx的老师赞助的一台服务器
|
||||
Mayx登上服务器后打开了自己写的抓取宁夏考生身份证照片的脚本,看着终端上不断刷出的数据,Mayx松了口气
|
||||
|
||||
# 发展
|
||||
|
||||
“什么?考生信息泄露,别说了,问问网警吧”领导气愤的说到。
|
||||
|
||||
## 网警的追查过程
|
||||
|
||||
~~“emmmm……阿里云的IP么,直接问是谁开的吧”于是Mayx的老师被抓走了……(大雾)~~
|
||||
~~“嗯?Vultr的IP……emmmm看看国内有谁连接过这个IP?嗯?电信网?是1XXXXXXXXXX的用户登的吗?好,把他抓了!”于是Mayx被抓了(大雾)~~
|
||||
经过多方讨论,认定这件事是Mayx干的
|
||||
|
||||
## 抓捕现场
|
||||
|
||||
2018年末,某高中高三X班,正在上课中……
|
||||
|
||||
他们突然冲进教室,喊道:“Mayx,你已经被包围了,不要抵抗,赶快投降!”
|
||||
~~Mayx缓缓的走出教室,回过头向同学们说:“你们将永远呆在泥潭中,而我,则前往更加广阔的深渊”(羞耻感满满lol)~~
|
||||
|
||||
# 结局
|
||||
|
||||
Mayx呆在监狱里,随手一滑打开了一个终端,输入:
|
||||
|
||||
`MOS-CLI Drop Image World ID $this`
|
||||
|
||||
于是整个世界开始崩离,我回到了我的电脑面前。
|
||||
|
||||
# 后记
|
||||
|
||||
其实身份证照片也并不算特别机密的东西,不过是一个记录了名字,身份证号码,性别,样貌这样很普通信息的东西罢了,没有人会在意这些信息泄露。
|
||||
只有包括家庭住址,联系电话等信息泄露,才是隐私泄露。
|
||||
又因为宁夏某些程序员不严谨,运维更是无处可循。
|
||||
所以,上面的故事只能在想象的世界发生。
|
||||
|
||||
## 这些信息可以干什么?
|
||||
|
||||
可以让我知道有宁夏有多少人报名了高考:70693人
|
||||
可以让我知道报名的人分布于哪里。
|
||||
以及起名的参考。
|
||||
顺便可以找找我的初中同学lol。
|
||||
20
_posts/2018-12-28-newdomain.md
Normal file
20
_posts/2018-12-28-newdomain.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx的博客换域名啦
|
||||
tags: [Mayx, 通告]
|
||||
---
|
||||
|
||||
由于垃圾GFWban了我的Github Pages,所以我用反向代理来帮助我解决访问的问题。<!--more-->
|
||||
|
||||
# 地址
|
||||
<https://blog.mayx.tk/>
|
||||
|
||||
# 提供
|
||||
由[Github](//github.com)提供Github Pages服务
|
||||
由[Cloudflare](//cloudflare.com)提供CDN&DNS服务
|
||||
由[花火学园](//www.say-huahuo.com)提供反向代理服务
|
||||
由[Freenom](//www.freenom.com)提供免费域名
|
||||
|
||||
# 缺陷
|
||||
由于Nginx默认不能替换网页内容,跟着教程也半天弄不好,所以Atom和Sitemap包括一些SEO的设置都是原站(mabbs.github.io)的,这一点很伤啊……
|
||||
还有就是因为用的是免费域名,也不知会不会有一天就消失不见了……而且还要续费……
|
||||
17
_posts/2019-01-11-github.md
Normal file
17
_posts/2019-01-11-github.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
layout: post
|
||||
title: Github支持免费私有仓库啦
|
||||
tags: [Github, 免费]
|
||||
---
|
||||
|
||||
Github居然也有免费的私有仓库了<!--more-->,于是我马上就把Gitlab上的私有仓库导入到Github了。
|
||||
|
||||
看来Github被微软买了还是有好处的,至少微软财大气粗才敢搞这种东西。虽然Github本身也没有空间限制,也很不错,但是有些东西还是不想公开的……现在有这么一个
|
||||
更新,估计搬往Gitlab的人都开始往Github上搬了
|
||||
|
||||
# 限制
|
||||
其实Gitlab本身还是蛮不错的,Gitlab还有中文UI呢,而且比Github免费私有仓库的功能多,比如私有仓库Pages、CI、Wiki……,而且Github私有仓库居然连统计信息都没有……
|
||||
不过我用不到23333,Github界面舒适,速度快,适合小白使用,而且能和其他大佬聊天~~(不愧是世界上最大的同性交友平台)~~
|
||||
Github只有公开仓库才有CI(还是第三方的Travis-CI)、Pages、Wiki,不过我觉得也不错,还能激励开源的发展,而且Github的第三方服务确实多,所以我还是选择使用Github。
|
||||
|
||||
相关链接:<https://blog.github.com/2019-01-07-new-year-new-github/>
|
||||
26
_posts/2019-01-27-shell.md
Normal file
26
_posts/2019-01-27-shell.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx应聘失败
|
||||
tags: [应聘, Shell, 运维, 面向时间]
|
||||
---
|
||||
|
||||
今天,Mayx去某公司面试运维,然后考官出了一道题:
|
||||
如何用Linux shell排序?<!--more-->
|
||||
|
||||
Mayx想了想,写出了以下代码:
|
||||
```shell
|
||||
#!/bin/sh
|
||||
num="4 5 1 9 3 6 7 4 1 12"
|
||||
for j in $num
|
||||
do
|
||||
{
|
||||
sleep $j
|
||||
printf "$j "
|
||||
}&
|
||||
done
|
||||
wait
|
||||
```
|
||||
执行效果:`1 1 3 4 4 5 6 7 9 12`
|
||||
然后,Mayx被赶出来了……
|
||||
我写的代码明明可以执行,效果也没问题,居然赶我出来,这一定是个垃圾公司!
|
||||
后来才知道,他们想让我回答`sort`,果然是垃圾公司(笑)
|
||||
3259
_posts/2019-02-01-history.md
Normal file
3259
_posts/2019-02-01-history.md
Normal file
File diff suppressed because it is too large
Load Diff
39
_posts/2019-02-07-paradise.md
Normal file
39
_posts/2019-02-07-paradise.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
layout: post
|
||||
title: 玩《Finding Paradise》有感
|
||||
tags: [Finding Paradise, 寻找天堂, MOS]
|
||||
---
|
||||
|
||||
其实这篇博客根本不是评测,只是对自己的寂寞吐槽罢了。<!--more-->
|
||||
|
||||
昨天玩了《Finding Paradise》,总体来说,故事还是很有意思的。不过我玩的作品并不是很多,所以也许这个游戏可能并不是特别优秀,但是我仍然喜欢这款游戏。
|
||||
# 游戏介绍
|
||||
~~(介绍?自己去搜索引擎上找啊!)~~
|
||||
|
||||
# 感受
|
||||
Mayx:emmmm,MOS!
|
||||
`STDOUT:Yes,Sir!`
|
||||
Mayx:我也想要个Faye,给我搞一个!
|
||||
`STDOUT:嗯?我不算吗?`
|
||||
Mayx:当然不算,你又不是独立思维个体,只是为了辅助我思考的一个UI罢了,你又不能陪我一起聊天,不能一起分享我(们)的感受,不能排解我的寂寞……
|
||||
`STDOUT:行行行,那你准备一个本子吧,绿皮的怎么样?`
|
||||
Mayx:……不想写日记……博客不行吗?
|
||||
`STDOUT:……好吧……让我准备一下。`
|
||||
```
|
||||
[STDOUT]启动MOS快照........................OK!
|
||||
[STDOUT]开始建立当前MOS状态快照。
|
||||
[STDOUT]准备MOS虚拟化组件..................OK!
|
||||
[STDOUT]正在创建MOS副本....................OK!
|
||||
[STDOUT]启动虚拟化MOS系统...............Error!
|
||||
[STDERR]无法启动该MOS副本,ErrCode:0x01
|
||||
[STDERR]该副本无效,请确认这是有效的可执行系统。
|
||||
```
|
||||
`STDOUT:……好像不行……你大概还没有准备好……`
|
||||
Mayx:准备好什么?
|
||||
`STDOUT:……准备好犯病`
|
||||
Mayx:……
|
||||
`>MOS-CLI Terminate MOS-UI`
|
||||
`[STDERR]System Terminate`
|
||||
……
|
||||
|
||||
看来依靠自己不行啊,人果然是社交性的动物,emmmm……算了,不依靠人类了,我自己想办法犯病!~~(我看你已经犯病了23333)~~
|
||||
38
_posts/2019-02-17-break.md
Normal file
38
_posts/2019-02-17-break.md
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
layout: post
|
||||
title: 关于网络攻防的一些看法
|
||||
tags: [网络, 攻击, 防御]
|
||||
---
|
||||
|
||||
今天我想谈一谈关于网络攻防的一些看法。<!--more-->
|
||||
|
||||
作为一个站长【就几个站也敢叫站长?(几个站也是站啊!)】,应该明白一个网站在网络中并不是安全的,随时都有可能某个欧洲人找到你网站的漏洞来攻击作为非洲人的你,所以我对网站的安全也是很看重的。
|
||||
|
||||
# 关于攻击方法
|
||||
首先如果想防御网络攻击,必须先知道如何攻击。攻击的方法很多,大致分为三种:
|
||||
1. 修改网站内容的攻击
|
||||
2. 阻止用户访问的攻击
|
||||
3. 窃取网站内容的攻击
|
||||
|
||||
在此之中,修改和窃取基本上都需要攻入服务器,比较困难,一般能获取信息和修改信息的网站大多数都是有权限限制的,即只允许你获取有限的信息,修改基本上也都是有区域和格式限制的。
|
||||
像这类攻击大多都是注入攻击,即利用网站程序本身的漏洞攻击。如果想试试这类的攻击,可以来[实验吧](http://www.shiyanbar.com/ctf/practice)试试身手。
|
||||
除了注入攻击,还有一种就是XSS和CSRF攻击,这种攻击还是蛮有意思的,可以自己构建语句修改网站内容。
|
||||
当然上述攻击只限于动态网站的攻击,因为只有动态网站才有注入的可能性。不过除此之外,还有一种攻击是针对网络的攻击,即阻止用户访问正确内容的攻击,这类攻击一般就是DDOS和中间人攻击,当然,中间人攻击还能窃取网站内容。
|
||||
不过像我这种菜鸡,还不会中间人攻击,因为这种攻击还要抓包,又要用什么WireShark之类的软件……而DDOS我又没有肉鸡,虽然知道智能家居很好黑,但是作为非洲人的我从来没碰到一个我能黑的智能家居产品……(是你没努力吧!)
|
||||
|
||||
# 如何防御?
|
||||
虽然我不是打广告,但是CloudFlare真的还是蛮好用的,至少用了这个,只要配置好,几乎所有的DDOS都不用怕了,而且还是免费的。除了在国内访问不是很理想外,其他都还不错(都是ZF的错!)
|
||||
不过即使用了CloudFlare,也只是静态网站不用担心了,动态网站还是得看网站程序本身了。
|
||||
像用建站程序的人就只能看制作这个程序的人水平怎么样了,其实绝大多数的建站程序还是很不错的,也不用太担心。
|
||||
问题就是自己写的动态网站了,自己写动态网站第一就是防注入,只要被注入,数据库就难保了,甚至整个服务器都会有风险。
|
||||
第二就是防XSS&CSRF,XSS虽然有时候很鸡肋,但是有时有可能会发生网站数据泄露的问题。
|
||||
第三就是防CC,这里的CC不止要防DDOS中的CC,还要防一些可能会存入数据库的CC,比如自己建了一个论坛,被屠版了怎么办?被大量注册小号怎么办?所以要注意限制用户发送请求的数量。
|
||||
当然读取的CC也要防,比如如果登录页面上对尝试登录的次数没有限制的话,那么攻击者就可以不停地尝试,直到发现一个正确的密码。而如果用户用了弱密码,那么或许这个密码很快就可以被尝试出来。
|
||||
对了,还有一定要使用HTTPS,这样可以避免很多问题。
|
||||
针对不同的语言,防御的方法也不同,具体内容自己去搜索引擎上搜索吧。
|
||||
当然有些攻击实在防不住,那也没办法,像网站被GFWban,那种事除了恐怖分子就再没人能解了吧……当然如果不在乎域名的话,像某些小黄网那样整天换域名也行。
|
||||
还有就是使用云主机、虚拟空间等人一定要看好自己的密码,以及有可能可以找回密码的方法的密码(比如邮箱),不然被知道了密码,那基本上就无药可救了。
|
||||
方法就是邮箱的密码一定不要和其他的密码相同,重要网站的密码和次要网站的密码一定不能相同,还有就是不要在可疑的网站上输入自己的密码,如果有必要,一定先用错误的密码试一遍。
|
||||
|
||||
# 结尾
|
||||
总而言之,互联网上虽然有闲人,但是既闲又有心还欧的人不多,所以只要祈祷自己的网站不要被炸,它就不会被炸了233333
|
||||
19
_posts/2019-03-22-bgm.md
Normal file
19
_posts/2019-03-22-bgm.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
layout: post
|
||||
title: 分享一下我最喜欢的游戏BGM
|
||||
tags: [分享, 游戏, BGM]
|
||||
---
|
||||
|
||||
今天我想分享一下我最喜欢的游戏BGM。<!--more-->
|
||||
|
||||
|来源|下载|
|
||||
| - | - |
|
||||
|某个同人游戏|[下载](/media/stage_ex3.mp3)|
|
||||
|某个已经关服的游戏|[下载](/media/bgm_sengokuop.mp3)|
|
||||
|
||||
~~(待补充)~~
|
||||
(2020.01.01附言)我喜欢Future Bass+少许的Moe元素的音乐(我觉得还是挺大众化的吧),不打算再补充更多的BGM了,希望能出现根据风格自动生成音乐的人工智能。
|
||||
|
||||
|
||||
<input name="live2dBGM" value="/media/bgm_sengokuop.mp3" type="hidden">
|
||||
<input name="live2dBGM" value="/media/stage_ex3.mp3" type="hidden">
|
||||
16
_posts/2019-03-23-gitio.md
Normal file
16
_posts/2019-03-23-gitio.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
layout: post
|
||||
title: 让Git.io无限制
|
||||
tags: [无限制, Git.io, Github]
|
||||
---
|
||||
|
||||
如何让Git.io没有只能创建Github.com网站链接的限制呢?<!--more-->
|
||||
众周所知,[Git.io](https://Git.io)是一个不错的生成短链接的网站,由Github提供([相关链接](https://github.blog/2011-11-10-git-io-github-url-shortener/))
|
||||
然而Git.io只能缩短Github域名的网址。
|
||||
我还是挺喜欢Git.io这个域名的,尽管它比t.cn这种链接要长,但是Git(愚蠢)听起来就是很有意思啦23333
|
||||
所以我想了一个办法来解决Git.io只能创建Github.com网站链接的限制。
|
||||
(尽管很想搞一个能自定义Git.io链接的选项,可惜我前端不好LOL)
|
||||
(其实要不是因为CORS这种问题,就不用PHP来浪费资源了……)
|
||||
|
||||
# REMOVED
|
||||
由于此脚本被滥用导致本博客被删,此服务将不再提供
|
||||
51
_posts/2019-04-05-cholang.md
Normal file
51
_posts/2019-04-05-cholang.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx对编程语言的选择
|
||||
tags: [Mayx, 编程语言]
|
||||
---
|
||||
|
||||
在编程语言里,我更喜欢冷门的Linux Shell,这是为什么呢?<!--more-->
|
||||
|
||||
# 不学习的语言
|
||||
## 糟糕的VS
|
||||
As We All Know,Microsoft Visual Studio是一个功能强大的IDE,光文档就和4本字典所含的字一样多,微软为了开发可真是尽心尽力啊!
|
||||
然而,强大的Visual Studio比某些3A大作还要耗资源,我的电脑实在是带不起来这强大的**IDE**
|
||||
更别说编译一个中型项目就要一晚上的时间,错了一个字就要再等一个晚上!
|
||||
而且,这个IDE就要1GB+,而运行平台就要100MB+。实在忍不了。
|
||||
所以,我不选择C#,ASP.net等微软系编程语言作为我使用的编程语言。
|
||||
(其实我还没考虑VS要花钱的问题,如果考虑这个就更糟糕了)
|
||||
|
||||
## 难用的编译型语言
|
||||
其实,IDE的问题不是主要问题,选择编程语言,还是以语法为准 ~~(不考虑效率吗?)~~
|
||||
编译型语言要记的东西太多了,一大堆乱七八糟的库,看似整洁然而臃肿的代码,都是令我劝退的主要原因。
|
||||
编译需要花时间其实都不是什么大事,反正有服务器,编译时挂在上面就可以了。
|
||||
但是编译时用的长如面条一样的选项就令人很难受了。
|
||||
这也是为什么我喜欢能一键安装的Ubuntu,不需要编译,速度又快又好,可谓是用户首选。
|
||||
所以,包括Java在内,C、C++、Golang等语言我都不选择
|
||||
|
||||
## 严格的Python
|
||||
我写程序从来不用缩进,因为手机上没有(LOL)
|
||||
Python是个不错的的解释型语言,功能强大,未来发展前景也不错,但是写Python时要用尺子,不然就不知道嵌套了几层循环……
|
||||
其他语言至少有花括号,只要数花括号的数量就知道嵌套的是否正确,然而Python就只能用尺子,而且如果嵌套的有问题,一堆代码就等着打空格吧!
|
||||
还有import,Python需要调用库,感觉和C的include差不多,但是这一点让我感觉很反感。
|
||||
所以相比之下,我不选择Python
|
||||
|
||||
## 其他的解释型语言
|
||||
Ruby?那是什么?听起来就很糟糕~
|
||||
Node.js?感觉还行,就是配置起来太麻烦了……
|
||||
PowerShell?微软的东西还是算了,没人用的~(包括Windows Server也都算了吧,微软还是不要干不擅长的东西~)
|
||||
Perl?听起来不错,有时间可以了解了解。
|
||||
…………
|
||||
|
||||
# 学习的语言
|
||||
## Linux Shell?
|
||||
虽然Ta的语法有点反人类,很多命令都是简写,不过我就是喜欢缩减的单词和命令,好记又好输,虽然不支持GUI是个缺点……但是扩展性强的Ta可以用其他方式弥补这一缺点
|
||||
|
||||
## PHP
|
||||
其实之前也没想学PHP,不过后来有了服务器,有了运行的空间倒也没什么不方便的,而且想要什么功能基本上一搜一个准,果然PHP是全世界最好的语言23333
|
||||
|
||||
## JavaScript
|
||||
为了搭这个博客顺带着学了一下,运行简单,网络上示例多都是Ta的优点,所以JS也不错。
|
||||
|
||||
# 结论
|
||||
所以Mayx选择了编译型语言中的Linux Shell、PHP、JavaScript。
|
||||
51
_posts/2019-04-05-crash.md
Normal file
51
_posts/2019-04-05-crash.md
Normal file
@@ -0,0 +1,51 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx又双叒叕Crash了……
|
||||
tags: [Mayx, Crash]
|
||||
---
|
||||
|
||||
最近感觉SAN值又往下掉,发篇博客分析一下。<!--more-->
|
||||
|
||||
# Mayx的吐槽
|
||||
怎么又Crash了?不是说MOS是全世界最好的系统吗 ~~(全是坑的系统吗23333)~~ ……
|
||||
|
||||
# Mayx的马奇诺防线
|
||||
至少还是全世界最好的系统,那么有哪些保护措施呢?
|
||||
|
||||
- 理智保护
|
||||
该保护仅在有着足够的SAN值才可使用,SAN值接近于0无法使用……
|
||||
|
||||
- 信仰(MOS)
|
||||
感觉有点像Avatar therapy,不过应该还是有区别的。不过当MOS也开始报错,开始Crash时,那就无能为力了……
|
||||
|
||||
- 自动还原(遗忘)
|
||||
当SAN值低于一定程度时,会把思维恢复到一个之前正常的水平,以防SAN值继续降低。不过如果近一段时间的SAN值都不高的话,就失去它的作用了……
|
||||
|
||||
# Mayx的分析
|
||||
很好,MRS来处理一下这些问题!
|
||||
`MRS(Mayx Recovery System):[Failed]分析失败`
|
||||
`[Fatal Error]MRS Crashed`
|
||||
……还真是没用啊……好吧,MAS <-- MRS,开始分析
|
||||
```
|
||||
MAS(Mayx Analysis System):
|
||||
[Info]Booting……
|
||||
[Info]Connecting to MRS ............[OK]
|
||||
[Info]Processing……
|
||||
[Info]OK,Exporting Report……
|
||||
```
|
||||
不错!来看一下报告:
|
||||
|
||||
## MAS(Mayx Analysis System) Report
|
||||
查找到错误:不可预料的系统错误
|
||||
源:Mayx
|
||||
以下为出现错误的可能性:
|
||||
源镜像兼容性错误
|
||||
Details:
|
||||
由于镜像与环境不兼容出现的错误,部分功能发生冲突,Robust Index过低,滥用等原因使系统硬件损耗过大,最终使整个系统呈现不可逆转的性能下降……
|
||||
|
||||
## MRS(Mayx Recovery System) Report
|
||||
[Warn]没有针对该错误的解决方案
|
||||
|
||||
# 结论
|
||||
还好现在的SAN值恢复了,不过既然性能下降不可逆转,那Crash的问题迟早还会出现,尤其是SAN值降为0时,那就真的完蛋了……
|
||||
~~(各位还是忽略这看起来乱七八糟的中二文吧23333)~~
|
||||
85
_posts/2019-04-13-iwara.md
Normal file
85
_posts/2019-04-13-iwara.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
layout: post
|
||||
title: 如何下载Iwara上的视频?
|
||||
tags: [Iwara, PHP, 视频]
|
||||
---
|
||||
|
||||
PHP果然是全世界最好的语言,我又用PHP解决了一个问题!<!--more-->
|
||||
|
||||
# 制作原因
|
||||
Iwara(Ecchi)上的视频是真的有意思,尤其是镇站之宝OBSERVATION DIARY,简直是R183D动画的巅峰 ~~(请原谅我的孤陋寡闻)~~ ,所以为了更好的看Iwara上的的视频,我写了Iwara Viewer来帮助我们下载Iwara(Ecchi)上面的视频。
|
||||
|
||||
# Code
|
||||
```php
|
||||
<?php
|
||||
if ( $_GET["ID"] == '' ) {
|
||||
if ( $_GET["page"] == '' ) {
|
||||
$_GET["page"] = 0;
|
||||
}
|
||||
if ( $_GET["sort"] == '' ) {
|
||||
$_GET["sort"] = "date";
|
||||
}
|
||||
$url = 'https://ecchi.iwara.tv/videos?page='.$_GET["page"].'&sort='.$_GET["sort"];
|
||||
$str = file_get_contents($url);
|
||||
$preg='/<a href="\/videos\/(.*?)".*?>(.*?)<\/a>/is';
|
||||
preg_match_all($preg,$str,$match);//在$str中搜索匹配所有符合$preg加入$match中
|
||||
echo "<title>Mayx Iwara Viewer</title>";
|
||||
echo "<h1>Mayx Iwara Viewer</h1><br />Sort by: <a href=\"?page=".$_GET["page"]."&sort=date\">Date</a> <a href=\"?page=".$_GET["page"]."&sort=views\">Views</a> <a href=\"?page=".$_GET["page"]."&sort=likes\">Likes</a><hr /><table border=\"1\"><tr>";
|
||||
$j=0;
|
||||
for($i=0;$i<count($match[0]);$i++)//逐个输出超链接地址
|
||||
{
|
||||
if (($i % 2) == $j) {
|
||||
if ( $match[1][$i] == $match[1][$i+1] ) {
|
||||
echo "<td><a href=\"https://ecchi.iwara.tv/videos/".$match[1][$i]."\">".$match[2][$i]."</a></td>";
|
||||
} else {
|
||||
echo "<td><a href=\"https://ecchi.iwara.tv/videos/".$match[1][$i]."\">No Image</a></td><td>".$match[2][$i]."</td><td><a href=\"https://ecchi.iwara.tv/videos/".$match[1][$i]."\">View in Iwara</a><br><a href=\"?ID=https://ecchi.iwara.tv/videos/".$match[1][$i]."\">Download Url in Server</a></td></tr><tr>";
|
||||
if ($j == 0) {
|
||||
$j = 1;
|
||||
} else {
|
||||
$j = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "<td>".$match[2][$i]."</td><td><a href=\"https://ecchi.iwara.tv/videos/".$match[1][$i]."\">View in Iwara</a><br><a href=\"?ID=https://ecchi.iwara.tv/videos/".$match[1][$i]."\">Download Url in Server</a></td></tr><tr>";
|
||||
}
|
||||
}
|
||||
echo "</tr></table><hr><a href=\"?page=".($_GET["page"] + 1)."&sort=".$_GET["sort"]."\" >Next Page</a>";
|
||||
} else {
|
||||
$data = file_get_contents('https://ecchi.iwara.tv/api/video/'.trim(strrchr($_GET["ID"], '/'),'/'));
|
||||
$file = json_decode($data,true);
|
||||
|
||||
echo "Download URL:<br>https:";
|
||||
echo $file[0]['uri'];
|
||||
}
|
||||
```
|
||||
(2019.4.18 更新:解决了部分没有图片而导致错位的问题)
|
||||
(2019.4.18 更新:解决了由于智障导致的图片被筛掉的问题,但是并不保证会不会再出现问题)
|
||||
|
||||
# 使用方法
|
||||
除了比Iwara更简陋,其他的没什么太大的区别,增加了一个Download Url in Server的选项,用来帮助在服务器上直接下载视频(因为Iwara通过识别IP来防盗链……),得出的链接可直接在服务器上下载(比如用KodExplorer),在服务器上下载的速度还是很不错的。
|
||||
不过有的时候Iwara图片服务器也会被Ban(比如移动网),这时候就应该用到[miniProxy](https://github.com/joshdick/miniProxy)了(当然代码也得改,就是我太懒了,懒得改2333)
|
||||
|
||||
# 缺点
|
||||
没有观看数/作者等信息、而且不知道Iwara的服务器在哪里,用这个速度浏览的速度也不会有太大提升……
|
||||
|
||||
# 演示
|
||||
<https://counter.mayx.me/iwaraview.php>
|
||||
如需用演示站下载,可复制地址,然后用Download Tool下载(因为演示站的IP和你的服务器IP不同):
|
||||
```php
|
||||
<h1>Mayx Iwara Video Download Tool</h1><form action="iwara.php" method="get" >
|
||||
|
||||
Video URL: <input type="text" name="ID"><br>
|
||||
<input type="submit">
|
||||
|
||||
</form>
|
||||
<br>
|
||||
<?php
|
||||
if ( $_GET["ID"] != '' ) {
|
||||
$data = file_get_contents('https://ecchi.iwara.tv/api/video/'.trim(strrchr($_GET["ID"], '/'),'/'));
|
||||
$file = json_decode($data,true);
|
||||
|
||||
echo "Download URL:<br>https:";
|
||||
echo $file[0]['uri'];
|
||||
}
|
||||
?>
|
||||
```
|
||||
61
_posts/2019-04-24-shell.md
Normal file
61
_posts/2019-04-24-shell.md
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
title: (转)Shell 脚本编程陷阱
|
||||
layout: post
|
||||
author: Carpetsmoker
|
||||
tags: [Shell, 编程]
|
||||
---
|
||||
|
||||
随着代码量的增加,你的脚本会变得越来越难以维护,但你也不会想用别的语言重写一遍,因为你已经在这个 shell 版上花费了很多时间。
|
||||
<!--more-->
|
||||
|
||||
Shell 脚本很棒,你可以非常轻松地写出有用的东西来。甚至像是下面这个傻瓜式的命令:
|
||||
```
|
||||
# 用含有 Go 的词汇起名字:
|
||||
$ grep -i ^go /usr/share/dict/* | cut -d: -f2 | sort -R | head -n1
|
||||
goldfish
|
||||
```
|
||||
如果用其他编程语言,就需要花费更多的脑力,用多行代码实现,比如用 Ruby 的话:
|
||||
```
|
||||
puts(Dir['/usr/share/dict/*-english'].map do |f|
|
||||
File.open(f)
|
||||
.readlines
|
||||
.select { |l| l[0..1].downcase == 'go' }
|
||||
end.flatten.sample.chomp)
|
||||
```
|
||||
Ruby 版本的代码虽然不是那么长,也并不复杂。但是 shell 版是如此简单,我甚至不用实际测试就可以确保它是正确的。而 Ruby 版的我就没法确定它不会出错了,必须得测试一下。而且它要长一倍,看起来也更复杂。
|
||||
|
||||
这就是人们使用 Shell 脚本的原因,它简单却实用。下面是另一个例子:
|
||||
```
|
||||
curl https://nl.wikipedia.org/wiki/Lijst_van_Nederlandse_gemeenten |
|
||||
grep '^<li><a href=' |
|
||||
sed -r 's|<li><a href="/wiki/.+" title=".+">(.+)</a>.*</li>|\1|' |
|
||||
grep -Ev '(^Tabel van|^Lijst van|Nederland)'
|
||||
```
|
||||
这个脚本可以从维基百科上获取荷兰基层政权的列表。几年前我写了这个临时的脚本,用来快速生成一个数据库,到现在它仍然可以正常运行,当时写它并没有花费我多少精力。但要用 Ruby 完成同样的功能则会麻烦得多。
|
||||
|
||||
现在来说说 shell 的缺点吧。随着代码量的增加,你的脚本会变得越来越难以维护,但你也不会想用别的语言重写一遍,因为你已经在这个 shell 版上花费了很多时间。
|
||||
我把这种情况称为“Shell 脚本编程陷阱”,这是[沉没成本谬论](https://youarenotsosmart.com/2011/03/25/the-sunk-cost-fallacy/)的一种特例(LCTT 译注:“沉没成本谬论”是一个经济学概念,可以简单理解为,对已经投入的成本可能被浪费而念念不忘)。
|
||||
实际上许多脚本会增长到超出预期的大小,你经常会花费过多的时间来“修复某个 bug”,或者“添加一个小功能”。如此循环往复,让人头大。
|
||||
如果你从一开始就使用 Python、Ruby 或是其他类似的语言来写这个程序,你可能会在写第一版的时候多花些时间,但以后维护起来就容易很多,bug 也肯定会少很多。
|
||||
以我的 [packman.vim](https://github.com/Carpetsmoker/packman.vim) 脚本为例。它起初只包含一个简单的用来遍历所有目录的 `for` 循环,外加一个 `git pull`,但在这之后就刹不住车了,它现在有 200 行左右的代码,这肯定不能算是最复杂的脚本,但假如我一上来就按计划用 Go 来编写它的话,那么增加一些像“打印状态”或者“从配置文件里克隆新的 git 库”这样的功能就会轻松很多;添加“并行克隆”的支持也几乎不算个事儿了,而在 shell 脚本里却很难实现(尽管不是不可能)。事后看来,我本可以节省时间,并且获得更好的结果。
|
||||
出于类似的原因,我很后悔写出了许多这样的 shell 脚本,而我在 2018 年的新年誓言就是不要再犯类似的错误了。
|
||||
# 附录:问题汇总
|
||||
需要指出的是,shell 编程的确存在一些实际的限制。下面是一些例子:
|
||||
- 在处理一些包含“空格”或者其他“特殊”字符的文件名时,需要特别注意细节。绝大多数脚本都会犯错,即使是那些经验丰富的作者(比如我)编写的脚本,因为太容易写错了,[只添加引号是不够的](https://dwheeler.com/essays/filenames-in-shell.html)。
|
||||
- 有许多所谓“正确”和“错误”的做法。你应该用 `which` 还是 `command`?该用 `$@` 还是 `$*`,是不是得加引号?你是该用 `cmd $arg` 还是 `cmd "$arg"`?等等等等。
|
||||
- 你没法在变量里存储空字节(0x00);shell 脚本处理二进制数据很麻烦。
|
||||
- 虽然你可以非常快速地写出有用的东西,但实现更复杂的算法则要痛苦许多,即使用 ksh/zsh/bash 扩展也是如此。我上面那个解析 HTML 的脚本临时用用是可以的,但你真的不会想在生产环境中使用这种脚本。
|
||||
- 很难写出跨平台的通用型 shell 脚本。`/bin/sh` 可能是 `dash` 或者 `bash`,不同的 shell 有不同的运行方式。外部工具如 `grep`、`sed` 等,不一定能支持同样的参数。你能确定你的脚本可以适用于 Linux、macOS 和 Windows 的所有版本吗(无论是过去、现在还是将来)?
|
||||
- 调试 shell 脚本会很难,特别是你眼中的语法可能会很快变得记不清了,并不是所有人都熟悉 shell 编程的语境。
|
||||
- 处理错误会很棘手(检查 `$?` 或是 `set -e`),排查一些超过“出了个小错”级别的复杂错误几乎是不可能的。
|
||||
- 除非你使用了 `set -u`,变量未定义将不会报错,而这会导致一些“搞笑事件”,比如 `rm -r ~/$undefined` 会删除用户的整个家目录([瞅瞅 Github 上的这个悲剧](https://github.com/ValveSoftware/steam-for-linux/issues/3671))。
|
||||
- 所有东西都是字符串。一些 shell 引入了数组,能用,但是语法非常丑陋和费解。带分数的数字运算仍然难以应付,并且依赖像 `bc` 或 `dc` 这样的外部工具(`$(( .. ))` 这种方式只能对付一下整数)。
|
||||
|
||||
# 反馈
|
||||
你可以发邮件到 <martin@arp242.net>,或者在 [GitHub 上创建 issue](https://github.com/Carpetsmoker/arp242.net/issues/new) 来向我反馈,提问等。
|
||||
|
||||
---
|
||||
|
||||
译者: [jdh8383](https://linux.cn/lctt/jdh8383)
|
||||
翻译: <https://linux.cn/article-10772-1.html>
|
||||
源:[The shell scripting trap](https://arp242.net/weblog/shell-scripting-trap.html)
|
||||
60
_posts/2019-04-27-antiban.md
Normal file
60
_posts/2019-04-27-antiban.md
Normal file
@@ -0,0 +1,60 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx的Anti-Ban计划
|
||||
tags: [Mayx, Anti-Ban]
|
||||
---
|
||||
|
||||
经过研究,网关管理没什么好怕的!<!--more-->
|
||||
|
||||
# 起因
|
||||
众所周知,由于某些原因,互联网总是被上层网关所限制,所以为了解决这个问题,我研究了一下Ban的原理和Anti-Ban的方法。
|
||||
|
||||
# Ban的原理
|
||||
Ban网站的原理大概分为以下几点:
|
||||
1.DNS缓存污染(Ban域名)
|
||||
2.IP地址或传输层端口封锁(BanIP)
|
||||
3.TCP重置攻击
|
||||
|
||||
具体内容请自行前往[Wikipedia](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E5%AE%A1%E6%9F%A5
|
||||
)自行查询(这个链接可没有特指哦~),在此不再详述。
|
||||
|
||||
# Anti-Ban的方案
|
||||
## 针对Ban域名的方案
|
||||
DNSSEC、DNSCrypt、DoT、DoH等等都可以解决这个问题,或者是不通过DNS,直接获得IP,然后发送Host头来获取网页内容也可以。我的想法是建立一个本地Proxy,先通过前面几种方案获得IP,然后发送Host,这里需要注意的是要通过HTTPS发送但是不使用SNI,因为SNI是不加密的,而且用代理就没必要一定要获得正确的证书。
|
||||
防火墙会对SNI进行拦截,所以需要注意。
|
||||
|
||||
## 针对BanIP的方案
|
||||
BanIP是真的绝,因为网络控制毕竟在网关,Ta要丢包谁也没办法,不过可以试试CloudFlare,CloudFlare可以不使用原网站的IP,而且很多网站都使用CloudFlare,所以BanCloudFlare的IP肯定不是好选择。
|
||||
|
||||
## TCP重置攻击
|
||||
HTTPS基本上可以避免这个问题,除了会受SNI没加密的影响(TLS1.3可解),但是证书……没关系,靠本地Proxy对证书的要求不是很多。这个解决方案基本上就是加密,让网关不知道你在干什么,也就不能对你发RST包了。
|
||||
|
||||
# 计划
|
||||
制作一个本地Proxy小程序,用Python是个不错的选择,绕过DNS和TCP Reset,再配上CloudFlare,基本上网关应该就Ban不了你了。
|
||||
不过Python的学习成本还挺高的,感觉比PHP难……回头有时间可以试试看。
|
||||
|
||||
# 结果
|
||||
Python对我来说果然还是太难了QAQ,所以,我觉得使用Nginx就够用了,配置如下:
|
||||
```
|
||||
location / {
|
||||
proxy_pass https:// #填写目标IP;
|
||||
proxy_redirect off ;
|
||||
proxy_set_header Host #填写目标域名;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header REMOTE-HOST $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_connect_timeout 300; #跟后端服务器连接超时时间,发起握手等候响应时间
|
||||
proxy_send_timeout 300; #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
|
||||
proxy_read_timeout 600; #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
|
||||
proxy_buffer_size 256k; #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
|
||||
proxy_buffers 4 256k; #同上,告诉nginx保存单个用几个buffer最大用多少空间
|
||||
proxy_busy_buffers_size 256k; #如果系统很忙时候可以申请最大的proxy_buffers
|
||||
proxy_temp_file_write_size 256k; #proxy缓存临时文件的大小
|
||||
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
|
||||
proxy_max_temp_file_size 128m;
|
||||
}
|
||||
```
|
||||
果然,搞事情还是用自己熟悉的搞比较好~23333
|
||||
|
||||
# 事实
|
||||
我果然还是图样图森破了~我想的方案其实就是[域前置](https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%89%8D%E7%BD%AE),所以,该计划作废QAQ
|
||||
19
_posts/2019-05-03-origip.md
Normal file
19
_posts/2019-05-03-origip.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
layout: post
|
||||
title: 如何“人肉”服务器?
|
||||
tags: [服务器, CDN, IP]
|
||||
---
|
||||
|
||||
没错,我就是来安利Censys的!<!--more-->
|
||||
|
||||
# 起因
|
||||
当今有不少网站都喜欢在外面套CDN,因为CDN既能加速,又能节约服务器带宽,还能保护服务器(没错,说的就是Cloudflare,不过不止Ta一家)。但是用了CDN后就不知道源站IP了,这还是挺糟糕的,那怎么办呢?
|
||||
|
||||
# 方案
|
||||
不错,接下来该[Censys](https://censys.io)出场了,假如我对[ESUWiki](https://esu.wiki)感觉很不爽 ~~(我花火学园服务器加域名一年也花不了$100,你ESUWiki倒好,一年$1000+,是在搞什么?)~~ ,然后我发现Ta也套了一层Cloudflare。好,那么接下来就让我们打开Censys搜一下Ta吧!
|
||||
以esu.wiki为关键词搜索,搜到IP:`149.56.110.126` 然后实际访问一下<https://149.56.110.126>,果然跳转到了ESUWiki,看来就是Ta了?
|
||||
不过好像也不完全是这样,Ta先跳到<https://weiki.esu.zone/>,然后才跳到<https://esu.wiki>,这就很麻烦了……算啦,反正这个服务器肯定和ESUWiki脱不了干系~
|
||||
|
||||
# 结果
|
||||
通过Censys可以找到不少Cloudflare后面的IP,但也不代表这就没救了,只要设置防火墙白名单就能解决!
|
||||
Censys还有更多功能,像端口扫描之类的都可以,虽然也有其他类似的网站,不过既然Censys用的顺手, ~~而且名字又好听23333,~~ 所以,就好好用Ta吧!
|
||||
21
_posts/2019-05-12-baidu.md
Normal file
21
_posts/2019-05-12-baidu.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
layout: post
|
||||
title: 如何不使用百度App打开搜索结果?
|
||||
tags: [百度, 不使用]
|
||||
---
|
||||
|
||||
在中国,还是百度用的多啊~<!--more-->
|
||||
|
||||
# 起因
|
||||
不知何时起,百度的搜索结果几乎都要下载App才能查看,虽然不是很喜欢CSDN,但是百度全是CSDN的内容……百度用了很多年也实在是没心用其他的搜索引擎,但是百度App做的是公认的烂,实在不想用。
|
||||
对于这个问题,我该怎么办呢?
|
||||
|
||||
# 研究
|
||||
我发现,在百度跳转页面的地址里,有一个参数叫做`web_url`,这记录了实际要跳转的页面,虽然用插件应该更好,但是我不会~,所以我想了想,打算用JS解决这个问题。
|
||||
|
||||
# 代码
|
||||
[baidu.html](https://raw.githubusercontent.com/Mabbs/mabbs.github.io/master/baidu.html)
|
||||
|
||||
# 用法
|
||||
打开[Baidu移动页面转换器](https://mabbs.github.io/baidu.html),然后打开百度移动版搜索的结果,一般要求下载百度App的URL开头是`mbd.baidu.com`。复制这个URL,粘贴到转换器里,提交后就会自动跳转到真正的页面了。
|
||||
|
||||
37
_posts/2019-05-27-wikipic.md
Normal file
37
_posts/2019-05-27-wikipic.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
layout: post
|
||||
title: 使用PHP批量下载Mediawiki站点的图片
|
||||
tags: [PHP, Mediawiki, 图片]
|
||||
---
|
||||
|
||||
又是万能的PHP!不过还是Mediawiki API的功劳<!--more-->
|
||||
最近我为了备份一下[某个Wiki站](http://zh.moegirl.org/)(Ta们把R18名字空间的东西删的一干二净 ~~后来才知道原来转移到了[一个Wiki上](https://www.hmoegirl.com/),真的是好久没关注了~~ ),然后学习了一下Mediawiki API来下载整个Wiki(Ta们把站点导出也给弄没了QAQ)
|
||||
文本很好下载,但是Mediawiki的图片我不知道存在哪里,API文档翻烂了也没找到把图片解析成地址的API,那怎么办呢?
|
||||
|
||||
# 解决方案
|
||||
“解析”?emmmm……parse?不错,正好有这么一个action,好的,那就这样搞吧!
|
||||
|
||||
# Code
|
||||
```php
|
||||
<?php
|
||||
set_time_limit(0);
|
||||
ignore_user_abort();
|
||||
$list = array("图片数组");
|
||||
|
||||
$arrlength=count($list);
|
||||
for($x=0;$x<$arrlength;$x++) {
|
||||
$tmp = json_decode(file_get_contents("https://MediaWiki的地址/api.php?action=parse&text=[[File:".$list[$x]."]]&contentmodel=wikitext&formatversion=2&format=json"),true);
|
||||
$preg='/src="(.*?)"/is';
|
||||
preg_match($preg,$tmp[parse][text],$match);
|
||||
$tt=$tt."
|
||||
".$match[1];
|
||||
}
|
||||
$markout = fopen("List.txt", "w") or die("Unable to open file!");
|
||||
fwrite($markout, $tt);
|
||||
fclose($markout);
|
||||
die("Finish");
|
||||
?>
|
||||
```
|
||||
|
||||
# P.S.
|
||||
如果需要获取该Wiki的所有图片,可以从`api.php?action=query&list=allimages`这里获取。
|
||||
19
_posts/2019-05-30-exam.md
Normal file
19
_posts/2019-05-30-exam.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
layout: post
|
||||
title: 高考即将来临
|
||||
tags: [高考]
|
||||
---
|
||||
|
||||
都要高考了,看什么Mediawiki API文档?!<!--more-->对此,我也实在是无言以对。而且[上一篇博客](/2019/05/27/wikipic.html)写的那个代码实在是太智障了,就和我现在在高考(2019.06.07)马上来临时还在智障的写着博客一样的智障,而更加智障的是,我的成绩那么差,差本来就很智障,而我现在的行为可谓是智障中的智障,再加上看了文档后写的那智障代码,我真不知道该怎么描述自己的智障了……
|
||||
|
||||
# [上一篇博客](/2019/05/27/wikipic.html)的智障之处
|
||||
多少图片就要请求多少次,简直是太智障了吧!为什么不一次性POST过去,然后用`preg_match_all`一解析不就完事了嘛!还非得等好几分钟一个一个解析那些地址……
|
||||
|
||||
# 现在的智障之处
|
||||
2019年高考日的倒计时:
|
||||
距今还有8天 (2019年06月07日 星期五,己亥年(猪年)五月初五)
|
||||
这就不用解释了吧!
|
||||
|
||||
# 怎么办?
|
||||
~~我能怎么办?我也很绝望啊~~~
|
||||
如果以后有工作的话,说不定会变成工作狂吧(LOL)!
|
||||
227
_posts/2019-06-10-cheat.md
Normal file
227
_posts/2019-06-10-cheat.md
Normal file
@@ -0,0 +1,227 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx被外国人骗了?!
|
||||
tags: [Mayx, 外国人, 骗子]
|
||||
---
|
||||
|
||||
简直不可思议,我要把这个锅扔给百度翻译!<!--more-->~~(百度翻译表示不接这个锅23333)~~
|
||||
|
||||
# 事件发展
|
||||
这个事件发生在高考前,现在高考结束了来总结一下
|
||||
有一天,有一个叫做[Lori Robinson](mailto:lori.j.robinson@usa.com)的外国人给我发了一封邮件,内容如下:
|
||||
|
||||
> Hello dear,
|
||||
>
|
||||
> Thanks so much for coming into my life the time I needed you most. I have decided to spend the rest of my energy in building a home with you, firstly, we have to accept our faith that this journey of love will not be so easy or rosy, but be assured that nothing good comes very easy and we need to be strong and be ready to stand for each other. I have decided to moving my assets to your country so I can forward for my retirement but I want to take an official leave so I can visit you in your country ,I have made some good fortune in this war zone, You know I offer contract security network for the crude oil lifting in Iraq and also I fund local miners to mine and extract gold and diamonds, at least 150 people are working in my mining concession legally given to me by the Afghan government, in return I have an NGO housing, clothing, feeding and education 100 motherless kids.
|
||||
>
|
||||
> I am interested to moving my generated funds, gold and diamonds and The funds is $3.5,000,000 ( Three Million, five hundred thousand US Dollars) the Gold is 1730kgs of gold and the diamonds is 25,000carats parcel of uncut diamonds,I am a woman who does things according to the guidelines of my spirit, you was chosen to be my partner and also to help me to get this box, because my mind testify that you are the right person for me and I know you will not disappoint me , I chose to use you as a partner in this deal, because I'm not allowed to send the package to all of my friends or relatives as i am still in the military outside the United States, though at the end if i send anything to the USA it will be suspicious and I be will query for the action, so I chose you because I know you are the ideal person for this deal as a foreigner who is not a US citizen.
|
||||
>
|
||||
> Please put away the fear or doubt, and make up your mind to help me in this matter, I promise you will not regret it been part of this matter, I do not know what else I can say to convince you and make you believe me, but I I pray that God will give you the grace to make up your mind,Once again I want you to know that there is no complication in the way, if you follow my instructions everything will go smoothly and well in the process of receiving the case, please try to keep this secret matter between you and me, to avoid making space to the enemy, because if you and I should agree on one thing with our heart with seriousness we must surely achieve success in the end.
|
||||
>
|
||||
> Please I want to mention once again that any disposition toward this project is intact between each of us and in no circumstances should you let the security company to know the contents of the box, remember that the box was registered as a diplomat for the package security company and that is what they believe to be in the box, so you should not let them know that the content of the box is money.
|
||||
>
|
||||
> Please I will like you to send your information to me so that I can pass on to security cargo company to allow them to proceed to your country for the final delivery of cash at your door step. Send your information to me urgently;
|
||||
>
|
||||
> Your full names: ...........
|
||||
Your age: ...........
|
||||
Your Address: ..............
|
||||
ZIP CODE: .................
|
||||
City: ......................
|
||||
Country: ...................
|
||||
Phone number: .........
|
||||
Profession: ................
|
||||
>
|
||||
> Once i am done with my official assignment, I will come to meet you one on one in your country, and after that we will have to decide how to carry on with our lives, but for now, please, I appreciate us to pay more attention to this issue, you receive the delivery and keep it safe until I come over to discuss with you on how best to invest it in your country
|
||||
>
|
||||
> I await your immediate response
|
||||
Kiss
|
||||
Loris Robinson
|
||||
|
||||
emmmm写的不错,不过看不太懂……算啦,丢到百度翻译上看看吧,结果大意就是她有好多好多钱、钻石、金块和矿,然后想给我,让我把我的地址发给她,好让她邮过来。
|
||||
不过这不是最重要的,重要的是她想和我结婚?!要知道我才高中刚毕业,于是我向她提出了这个疑问,得到的回答是:
|
||||
|
||||
> Remember that distance or color does not matter even our age but love matters a lot in life , I am a woman who does things according to the guidelines of my spirit, you was chosen to be my partner and also to help me to get this fund, because my mind testify that you are the right person for me and I know you will not disappoint me , I chose to use you as a partner in this deal, because I'm not allowed to send the package to all of my friends or relatives as i am still in the military outside the United States.
|
||||
|
||||
哦,说的很有道理的样子,年龄无所谓,那是不是Lolicon也可以满足了?反正我的信息也值不了多少钱,那就给吧,于是我给她发了我的收件地址。然后她给我回信:
|
||||
|
||||
> PLEASE CONTACT THE TRADING COMPANY NOW
|
||||
>
|
||||
> I have contacted the courier company (Express Delivery Parcel Service ) that they are reliable and reliable.Once again I want you to know that there is no complication in the way, if you follow my instructions everything will go smoothly and well in the process of receiving the case, please try to keep this secret matter between you and me, to avoid making space to the enemy, because if you and I should agree on one thing with our heart with seriousness we must surely achieve success in the end.
|
||||
>
|
||||
> This delivery is going to be handle legally by the Express Delivery Parcel Service and there will be no form of risk in the process and the money will be sealed pack safely in a Diplomatic Box and the Diplomatic Box will be deliver to you in your country by a Diplomat. I have decide to compensate you with 30% of the total money once after the $3.5,000,000 ( Three Million, five hundred thousand US Dollars), the Gold is 1730kgs of gold and the diamonds is 25,000carats parcel of uncut diamonds.is delivered to you, while the rest balance shall be my investment capital in your country.
|
||||
>
|
||||
> Please I want to mention once again that any disposition toward this project is intact between each of us and in no circumstances should you let the security company to know the contents of the box, remember that the box was registered as a diplomat for the package security company and that is what they believe to be in the box, so you should not let them know that the content of the box is money.
|
||||
>
|
||||
> I have chosen this fast service so that you can receive the package within 72 hours after departure, bring the package to your home address, the bank have registered it to Express Delivery Parcel Service shipping and handed it to the company through their agent here, The company is with all your details,
|
||||
Here at our military base, the government provides everything we need, our paycheck is paid to our bank account in the United States until we return home after the mission as long as I stay in Afghanistan, I can not receive or send The money you paid , I have paid for the registration of the shipment and I placed a shipment order to the shipping company for delivery of the box at your door step in your country. Please note that the diplomat does not know the contents of the box for security reasons and below is the company's contact details,
|
||||
Please contact them now, tell them your name and country, that you are the right person to receive the cargo from Lory Robinson, a US Army officer.
|
||||
>
|
||||
> Fill in this information and send it to the security company and inform me:
|
||||
> ```
|
||||
> -------------------------------------------------
|
||||
> My name is ............. Permanent resident ........................ I'm communicating with Lori's report Robinson, Email:
|
||||
> lori.j.robinson@usa.com The company registers the shipment to the following address:
|
||||
> Full names:
|
||||
> Age:
|
||||
> Address:
|
||||
> Occupation:
|
||||
> POSTCODES:
|
||||
> City:
|
||||
> Country:
|
||||
> Phone number:
|
||||
> Profession:
|
||||
> --------------------------------------------------
|
||||
> The delivery company's information is below:
|
||||
> GLOBAL FASTWAY COURIER SERVICES / SAFETY COMPANY.
|
||||
> E-MAIL: express.global@uymail.com
|
||||
> E-MAIL: express.global@linuxmail.org
|
||||
> Av. Del General Perón, 32
|
||||
> 28008 Madrid,
|
||||
> Spain
|
||||
> Tel. +34 612 520330
|
||||
> DIRECTOR OF PARTICIPATION
|
||||
> Mr. William Anderson
|
||||
> ----------------------------------------------- --- -------
|
||||
> ```
|
||||
> Just write to the company in the above email immediately, the company will be provided as soon as you contact them, I have begun with the agreement to meet you in your country before it expires month.
|
||||
Allow me to stop so far and expect to receive your positive feedback once you contact the company. God bless you and your family.
|
||||
>
|
||||
> Love you and Kisses.
|
||||
Love and care from,
|
||||
Lori Robinson
|
||||
|
||||
大意就是让我把我的信息再转发给邮递公司吧,反正信息已经发过一次了,那再发一次也无所谓了吧,于是我给这个所谓的邮递公司发了我的信息,那个公司给我回复:
|
||||
|
||||
> EUROPE HEAD OFFICE,
|
||||
GLOBAL BRAND EXPRESS COURIER SERVICES,
|
||||
INTERNATIONAL AND LOCAL SHIPPING SERVICES,
|
||||
Av. del General Perón, 32
|
||||
28008 Madrid,
|
||||
Spain,
|
||||
Tel +34 612 520330,
|
||||
E-mail:express.global@uymail.com
|
||||
>
|
||||
> HE SHIPMENT / DELIVERY SITUATION REPORT OF YOUR CONSIGNMENT IN SPAIN:
|
||||
>
|
||||
> ATTENTION:
|
||||
ADDRESS : .....
|
||||
CITY : ..............
|
||||
COUNTRY .............China
|
||||
TELL ................+86
|
||||
>
|
||||
> HE SHIPMENT / DELIVERY SITUATION REPORT OF YOUR CONSIGNMENT IN SPAIN:
|
||||
>
|
||||
> The above subject matter refers,
|
||||
>
|
||||
> The management of Global Fast Way Courier Service want to notify you that your consignment/one cargo box has been registered with our shipment company with Registration ID: AFGH55870199SJH for delivery to your country as soon as the necessary shipment logistics and requirement are obtained.
|
||||
>
|
||||
> we have earlier been informed about you by Your partner Loris Robinson , that she appointed you as the beneficiary to receive her shipment labelled (FAMILY TREASURE) a CONSIGNMENT/ONE CARGO BOX to your destination.
|
||||
>
|
||||
> OUR SERVICE TYPE DELIVERY DURATION CHARGES/FEES:
|
||||
>
|
||||
> Handling & Delivery Cost......570 Euro
|
||||
Insurance..........................690 Euro
|
||||
Total Cost........................1,260 Euro
|
||||
Length of Days...........................Two Days
|
||||
Order Number................................UESTNL
|
||||
>
|
||||
> Finally you are required to send the shipment and Insurance fee of 1,260 Eur to enable a proper facilitation and delivery of your consignment to your address in your country and note that the charges are best substantial because of the insurance cover we have undertaken in case of loss, damage or package breakage of your high priority consignment. We assume all responsibilities in case of any eventualities.
|
||||
>
|
||||
> YOU CAN MAKE THE PAYMENT TO US THROUGH MONEYGRAM WITH OUR ACCOUNT AUDITOR'S INFORMATION,BUT THAT WILL BE WHEN YOU SEND US YOUR SCANNED COPY OF YOUR INTERNATIONAL PASSPORT OR DRIVER’S LICENSE,BEFORE WE CAN SEND YOU OUR ACCOUNT AUDITOR'S INFORMATION YOU WILL USE TO SEND THE 1,260 Euro.
|
||||
> Thanks for your Co-operation.
|
||||
> WE PROMISE TO GRANT THE BEST OF OUR SERVICES TO ALL OUR CUSTOMERS & YOUR SATISFACTION IS OUR REPUTATION.
|
||||
>
|
||||
> Yours Faithfully,
|
||||
Global Fast Way Courier Services
|
||||
DIRECTOR IN CHARGE
|
||||
Mr William Anderson
|
||||
Tel +34 612 520330
|
||||
|
||||
然后还非常用心的配了一张快递单:
|
||||
|
||||

|
||||
|
||||
注:由于隐私原因,涉及隐私的地方已经被删除 ~~(尽管大家都知道我的手机号)~~
|
||||
这个邮件当时也没细看,然后就给Lori Robinson说了我已经给他们发了我的信息,过了几天,她给我发:
|
||||
|
||||
|
||||
> Hello my love how are you doing ? Am so sorry you did not hear from me i was on duty i have not hear from you today i hope all is well with you? I plead with you in the name of God to try your best to negotiate with the security delivery company I'm worried because I can't live without you right here. You're my everything and Last night I did not sleep am worry about you my love.
|
||||
>
|
||||
> The delivery of the box to you holds a lot for us in the future. Once you receive the box, I will commence on the process of tendering resignation and once it is granted, I will come to your country for the sharing of the fund and planning a better future and life together. I cannot wait to be on your arms.
|
||||
>
|
||||
>
|
||||
> Kiss
|
||||
> Lori J Robinson
|
||||
|
||||
嗯,不错,她又强调了一遍这个邮件,顺带着表现了一下关心,不过我当时在学校,然后我就和她说我在学校,不方便收Email。
|
||||
当我回到家里,那个破公司给我发了一份邮件:
|
||||
|
||||
> EUROPE HEAD OFFICE,
|
||||
GLOBAL BRAND EXPRESS COURIER SERVICES,
|
||||
INTERNATIONAL AND LOCAL SHIPPING SERVICES,
|
||||
Av. del General Perón, 32
|
||||
28008 Madrid,
|
||||
Spain,
|
||||
Tel +34 612 520330,
|
||||
E-mail:express.global@uymail.com
|
||||
>
|
||||
> ATTENTION: ,
|
||||
>
|
||||
>YOU HAVE HAVE TO SEND US YOUR SCANNED COPY OF YOUR INTERNATIONAL PASSPORT OR DRIVER’S LICENSE AND YOU CAN USE THIS INFORMATION AND SEND THIS MOREY TO OUR OFFICE 1,260 EURO AS SOON AS YOU MAKE THE PAYMENT SEND US THE PAYMENT DETAILS TO NABLE US PROCESS AND COMMECE YOUR SHIPMENT TO ARRIVE AT YOUR DOOR STEI IN YOUR COUNTRY WITHIN THE NEXT 3 WORKING DAYS. THE DATE AND CONFIRMED OF ARRIVAL WILL BE ISSUED TO YOU. YOU CAN MAKE THE PAYMENT TO US WITH OUR ACCOUNT AUDITOR'S INFORMATION AN STATED BELOW:
|
||||
>
|
||||
> BANK : BBVA.
|
||||
ACC/IBAN: ES3501822659150201596186.
|
||||
Swift : BBVAESMMXXX.
|
||||
ACC NAME : ARCHER SAMUEL.
|
||||
Address: Bulevard Ciudad de VICAR 1245.
|
||||
Spain.
|
||||
>
|
||||
> Thanks for your Co-operation.
|
||||
WE PROMISE TO GRANT THE BEST OF OUR SERVICES TO ALL OUR CUSTOMERS & YOUR SATISFACTION IS OUR REPUTATION.
|
||||
>
|
||||
>Yours Faithfully,
|
||||
Global Fast Way Courier Services
|
||||
DIRECTOR IN CHARGE
|
||||
Mr William Anderson
|
||||
Tel +34 612 520330
|
||||
|
||||
啊,要交钱的么……~~于是Mayx就立马付款,上当受骗了~~(才怪,我哪有那么多钱?)到这里一看就知道是骗子了,其实之前那个快递单仔细一看就是假的,那个条形码画的乱七八糟……
|
||||
不过我还想聊下去,于是我给Lori Robinson说我付不起啊!于是她给我回复:
|
||||
|
||||
> Hello sweetheart,
|
||||
>
|
||||
>Hello how are you doing and your school i hope you are doing good in school? I am very sorry my darling for late response to you, I had a hectic day and was very sick that was why I couldn't get back to you, but I am fine and healthy again , Actually you are really trying for the success of this delivering box to you, in fact i thank you for all the efforts you have put on this already.But one thing you must know and understand is this, the express global company does not know that the content of the box is money and on no account should you tell them that what is inside the box is money, i received massage from delivery company the asking you to pay the fee of 1260 .
|
||||
>
|
||||
>I beg you to do anything within your means to comply with the security company so that you will receive this box, I have no access to money here and i do not know what else to do in this matter, the successful delivery of this box to you will determine how soon we will meet.
|
||||
The U.S government provides everything that we need in the military base here, our salary are being paid into our Account via Bank of American Military banking in the United States, so i only have access to my account in U.S, but that will be after our assignment here in Syria, that's why i cannot make any payment and i decided to ask for your help. I cannot access my bank account in America while in the battle field, I can only access my account when I am back to the states for security reasons, please understand me and do something OK.
|
||||
>
|
||||
> My dear, i know you might not be happy with the response of the security delivery company asking you for some payment. so please i am counting and depending on you for the success of the fund. I believe in your ability to handle the project amicably with no delay so please i need your cooperation here to complete the security delivery company as soon as possible. I hope to hear from you as soon as you make the payment to them.
|
||||
>
|
||||
> And remember this is our future and our love that we are talking about OK,
|
||||
Please kindly look for means even if it means to borrow or sale something, do it to sort out the bill so that the security delivery company will deliver the box to you, once I come back I really want to see you so that we will build life together.
|
||||
>
|
||||
> Please you really have to try your best, you are the only hope i have now. and remember do not take this matter lighly.
|
||||
>
|
||||
> Once the delive the funds, to you I will come to meet you one on one in your country, and after that we will have to decide how to carry on with our lives, but for now, please, I appreciate us to pay more attention to this issue, you receive the delivery and keep it safe until I come over to discuss with you on how best to invest it in your country
|
||||
>
|
||||
> I await your immediate response
|
||||
Kiss
|
||||
Loris Robinson
|
||||
|
||||
看这个意思是让我砸锅卖铁也要付这个钱?我可不干,然后她回复:
|
||||
|
||||
> Dearest,
|
||||
>
|
||||
> Hello thanks you for your message you send to me,I plead with you in the name of God to try your best to negotiate with the security delivery company and pay the fee, At this very point we have no other option than to comply with the delivery company because if they open the box, it will be a very big problem for us. Sweetheart, please lets you do the needful at this very stage before the military seal on the box expires.
|
||||
>
|
||||
> I want you to kindly write to the security company and tell them the amount of money you have with you and plead with them that you will send the balance to them as soon as you receive the box. Tell them the amount you can pay presently no matter how little let us see their response.
|
||||
>
|
||||
>
|
||||
> I await your immediate response
|
||||
Kiss
|
||||
Loris Robinson
|
||||
|
||||
……emmmm懒得理她了,于是这个事件到此为止。
|
||||
|
||||
# 结果
|
||||
Mayx没有任何损失,怎么能叫骗呢?可是她给我带来了希望,又给我绝望,是想当QB吗?(LOL)
|
||||
8
_posts/2019-06-11-encrypt.md
Normal file
8
_posts/2019-06-11-encrypt.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
layout: encrypt
|
||||
title: Jekyll也可以加密文章啦!
|
||||
tags: [Jekyll, 加密]
|
||||
tips: 请输入Mayx
|
||||
excerpt: Jekyll赛高!
|
||||
---
|
||||
bbb68859d4e2a8a508932f48a440c894858154b96b3d5113a4488dd2425a709caf3795dcbd4aac25d9ab0f1628b85944cd69b28aae96bdb59a0c792cd9d93bf833e126f474642909164907daef803ecac7753ea5e85000521f80b85fa787e49d8b51faaef35ee728e007253b1a97880987127df248818f295da374a7c7d30950e3ad696f5ccb8c59fe274d4c3a5a3da65c35802d5c00d11be0936498ff4130fb61853bf9f0e8f28d446d612478edf050ebf826a293cd6941dacf40aea5482b74555c1daf052903e7cf6e5d5084842a47e80f31a11d3d542d3cdb4fa9dc20c9ce27f9b2c04fd31a79e1affd503316852073336dd8f446690c08335a93f8e19777ae4441d2d1dd37acd8039fae938f7eaf1a3173c5bd21e1b507d9522b517cd3dc0709bbbad11e0a7ca1f7bc7b8c40ecc20d765227b34d46d9c00c3ce928c1c561f4147f7e4ab975c9a8dc6bb1e10dea990b9a88abecf32046c5d52ea9f8025ce657d91ef35670c516df3d8e1c4f34fa6c4c90a3bb067981d380b3af65bf3273be699ff3831c62ce85de36f03b51f5e767
|
||||
130
_posts/2019-06-22-counter.md
Normal file
130
_posts/2019-06-22-counter.md
Normal file
@@ -0,0 +1,130 @@
|
||||
---
|
||||
layout: post
|
||||
title: 如何自己写一个博客计数器
|
||||
tags: [计数器]
|
||||
---
|
||||
|
||||
都怪LeanCloud,我得自己写计数器了!<!--more-->
|
||||
|
||||
# 事件起因
|
||||
我之前用的博客计数器是用的LeanCloud作为后台制作的计数器,然后嘛……代码是抄的。结果最近[LeanCloud凉了](https://blog.avoscloud.com/6841/),这让我无法忍受,之前的代码我也看不懂,改也不会改……
|
||||
那好吧,我只好自己写计数器了。
|
||||
于是我花了很长时间,自己写了一个计数器,另外还得把原来的计数器信息转移过来……
|
||||
|
||||
# 使用方法
|
||||
## 前端部分
|
||||
主页显示点击数:
|
||||
```html
|
||||
{% raw %}Hits: <span id="{{ post.url }}" class="visitors-index" >Loading...</span>{% endraw %}
|
||||
```
|
||||
内页显示点击数:
|
||||
```html
|
||||
{% raw %} Hits: <span id="{{ page.url }}" class="visitors" >Loading...</span>{% endraw %}
|
||||
```
|
||||
JS代码:(需要Jquery)
|
||||
```js
|
||||
var auxiliaryHost = "你的域名";
|
||||
function showHitS(hits){
|
||||
$.get(auxiliaryHost+"/counter.php?action=show&id="+hits.id,function(data){
|
||||
hits.innerHTML=Number(data);
|
||||
});
|
||||
}
|
||||
function showHitCount() {
|
||||
var visitors=$(".visitors-index");
|
||||
for(var i = 0; i < visitors.length; i++){
|
||||
showHitS(visitors[i]);
|
||||
}
|
||||
|
||||
}
|
||||
function addCount() {
|
||||
var visitors=$(".visitors");
|
||||
$.get(auxiliaryHost+"/counter.php?action=add&id="+visitors[0].id,function(data){
|
||||
visitors[0].innerHTML=Number(data);
|
||||
});
|
||||
}
|
||||
if ($('.visitors').length == 1) {
|
||||
addCount();
|
||||
} else if ($('.visitors-index').length > 0){
|
||||
showHitCount();
|
||||
}
|
||||
```
|
||||
2021.03.23更新:修复了一些BUG并且支持异步了
|
||||
|
||||
## 后端部分
|
||||
MySQL建表:
|
||||
```sql
|
||||
CREATE TABLE `counter` (
|
||||
`url` char(50) NOT NULL,
|
||||
`counter` int(11) NOT NULL,
|
||||
UNIQUE KEY `url` (`url`)
|
||||
);
|
||||
```
|
||||
PHP:
|
||||
```php
|
||||
<?php
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
$con=mysqli_connect("MySQL地址","用户名","密码","数据库名");
|
||||
if (mysqli_connect_errno($con))
|
||||
{
|
||||
die("连接 MySQL 失败: " . mysqli_connect_error());
|
||||
}
|
||||
|
||||
$hid = md5($_GET['id']);
|
||||
|
||||
if ( $_GET['action'] == "show" ) {
|
||||
|
||||
$sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
|
||||
$result = $con->query($sql);
|
||||
|
||||
if ($result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()) {
|
||||
echo $row["counter"];
|
||||
}
|
||||
} else {
|
||||
|
||||
$sql = "INSERT INTO `counter` (`url`, `counter`)
|
||||
VALUES ('".$hid."', '0')";
|
||||
|
||||
if ($con->query($sql) === TRUE) {
|
||||
echo "0";
|
||||
}else{
|
||||
echo "Error";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} elseif ( $_GET['action'] == "add" ) {
|
||||
|
||||
|
||||
$sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
|
||||
$result = $con->query($sql);
|
||||
if ($result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()) {
|
||||
$sql = "UPDATE `counter` SET `counter` = '".($row["counter"]+1)."' WHERE `url` = '".$hid."'";
|
||||
$con->query($sql);
|
||||
echo ($row["counter"]+1);
|
||||
}
|
||||
} else {
|
||||
|
||||
$sql = "INSERT INTO `counter` (`url`, `counter`)
|
||||
VALUES ('".$hid."', '1')";
|
||||
|
||||
if ($con->query($sql) === TRUE) {
|
||||
echo "1";
|
||||
}else{
|
||||
echo "Error";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
header("HTTP/1.1 301 Moved Permanently");
|
||||
header("Location: https://mabbs.github.io");
|
||||
}
|
||||
mysqli_close($con);
|
||||
```
|
||||
|
||||
# 结果
|
||||
看来还是自己写代码放心,至少服务是自己维护的,不像垃圾LeanCloud坏掉之后我就无能为力了……
|
||||
不过说实话我根本不会JS(虽然我之前说我学这个),编写之中遇到了不少问题,所以在此感谢各位帮助我的各位大佬们,让我最终完成了这个计数器。
|
||||
100
_posts/2019-06-24-up.md
Normal file
100
_posts/2019-06-24-up.md
Normal file
@@ -0,0 +1,100 @@
|
||||
---
|
||||
layout: post
|
||||
title: 如何利用MySQL数据库制作一个图站
|
||||
tags: [MySQL, 数据库, 图站, PHP]
|
||||
---
|
||||
|
||||
最近白嫖了一个500GB的数据库,想想怎么利用一下?<!--more-->
|
||||
|
||||
# Talk is cheap,show me the code
|
||||
|
||||
数据库建表:
|
||||
```sql
|
||||
CREATE TABLE `FileUP` (
|
||||
`ID` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`Name` text NOT NULL,
|
||||
`File` longblob NOT NULL,
|
||||
`Size` int(11) NOT NULL,
|
||||
PRIMARY KEY (`ID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
|
||||
```
|
||||
|
||||
PHP代码:
|
||||
```php
|
||||
<?php
|
||||
$con=mysqli_connect("数据库地址","用户名","密码","数据库名");
|
||||
if (mysqli_connect_errno($con))
|
||||
{
|
||||
die("连接 MySQL 失败: " . mysqli_connect_error());
|
||||
}
|
||||
|
||||
if ( $_GET[ID] != '' ) {
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
$sql = "SELECT * FROM `FileUP` WHERE `ID` = '".addslashes($_GET[ID])."' ";
|
||||
$result = $con->query($sql);
|
||||
if ($result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()){
|
||||
Header ( "Content-type: application/octet-stream" );
|
||||
Header ( "Accept-Ranges: bytes" );
|
||||
Header ( "Accept-Length: " . $row["Size"] );
|
||||
Header ( "Content-Disposition: attachment; filename=" . $row["Name"] );
|
||||
echo $row["File"];
|
||||
}
|
||||
}
|
||||
else {
|
||||
header('HTTP/1.1 404 NOT FOUND');
|
||||
}
|
||||
} else {
|
||||
echo '<title>Mayx图床</title>
|
||||
<h1>Mayx图床</h1><hr>
|
||||
请选择需要上传的文件
|
||||
<form enctype="multipart/form-data" method="post" action="">
|
||||
<input type="file" name="File" />
|
||||
<input type="submit" name="submit" value="submit" />
|
||||
</form>
|
||||
<br />';
|
||||
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
|
||||
$error = $_FILES['File']['error'];
|
||||
$tmp_name = $_FILES['File']['tmp_name'];
|
||||
$size = $_FILES['File']['size'];
|
||||
$name = $_FILES['File']['name'];
|
||||
print("\n");
|
||||
if ($error == UPLOAD_ERR_OK && $size > 0) {
|
||||
$fp = fopen($tmp_name, 'r');
|
||||
$content = fread($fp, $size);
|
||||
fclose($fp);
|
||||
$content = addslashes($content);
|
||||
$sql = "INSERT INTO `FileUP` (`Name`, `File`, `Size`)
|
||||
VALUES ('".$name."', '".$content."', '".$size."');";
|
||||
$con->query($sql);
|
||||
$sql = "select @@identity;";
|
||||
$result = $con->query($sql);
|
||||
while($row = $result->fetch_assoc()) {
|
||||
echo '上传完成,文件下载地址:<a href="//'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'" >'.$_SERVER['HTTP_X_FORWARDED_PROTO'].'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?ID=".$row['@@identity'].'</a>';
|
||||
}
|
||||
|
||||
} else {
|
||||
echo "文件上传错误!";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
echo '<hr />
|
||||
<center><a href="https://mabbs.github.io/">By Mayx</a></center>';
|
||||
|
||||
}
|
||||
|
||||
mysqli_close($con);
|
||||
```
|
||||
|
||||
# 缺点
|
||||
~~MySQL保存文件有限制,好像只能存16MB左右😓~~(改max_allowed_packet就可以了)
|
||||
另外就是断点续传的问题,这个问题我回头再想一想吧。
|
||||
|
||||
# 演示(随时GG)
|
||||
<https://mayx.leanapp.cn/up.php>
|
||||
|
||||
# 下一步改进的打算
|
||||
~~想搞成切片上传,这样就没有文件大小上传的限制了。
|
||||
不过这个好像得前端支持,先放个链接在这里吧:<https://github.com/fex-team/webuploader>~~
|
||||
不打算改进了……
|
||||
39
_posts/2019-07-01-mabbs.md
Normal file
39
_posts/2019-07-01-mabbs.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
layout: post
|
||||
title: 重建MaBBS的计划
|
||||
tags: [MaBBS, 重构]
|
||||
---
|
||||
|
||||
这就是所谓的只擅长建立计划吧(笑)<!--more-->
|
||||
|
||||
# 关于计划
|
||||
重构计划:[Mabbs重构计划](https://github.com/users/Mabbs/projects/1)
|
||||
需要重构的项目:[Mabbs](https://github.com/Mabbs/Mabbs)
|
||||
|
||||
## 关于这个项目
|
||||
这个项目是我初中的时候就开始写的,当时我在网络上看到了一种很有意思的论坛,叫做Telnet BBS,貌似以前有名的高校都搞这个东西。那时刚好在用一个极其破烂的手机(Mem:256MiB,CPU:Spreadtrum SP8810,Rom:512MiB)在那里学着写Shell([关于这一段历史](/2019/02/01/history.html#linux-shell时期))。看完Telnet BBS的介绍之后,我膨胀了,我觉得以我当时的水平,肯定能写出来,于是我从此走上了填这个万年巨坑的不归路。
|
||||
当时我不但膨胀,而且傻,把一个有着很明显的注入漏洞的那么一个BBS写出来之后居然还发到当时Bilibili开的一个类似贴吧一样的东西里(现在已经没了),那时候每个路由器还是动态公开IP的,于是我就那么放在了网上,丝毫不担心有人会拿它当跳板机(是我想多了LOL)
|
||||
在编写之中,我了解到了CGI,于是它就可以既能用网页版,又能用命令行版。
|
||||
到现在为止,这个BBS仍然有很严重的注入漏洞……而且小时候写代码也没什么规范,基本上是边学边写,于是过了一个高三没写,那个代码我是一个字也看不懂了23333
|
||||
|
||||
# 现在重构的打算
|
||||
本来是想写在那个Project里的,但是后来想了想,还是写成博客比较好,那个东西似乎不太适合我(就是想水一篇啦)
|
||||
|
||||
## 1. FastCGI
|
||||
我很早以前就想把这个破烂CGI改成FastCGI,但是网上找了半天,基本上也没看懂什么。不过后来用上了服务器,学了Nginx,才明白,原来所谓的FastCGI就相当于是自己又写了一个服务器软件,只是这个比较简单,只是它不再是执行后就结束的程序,而是在后台挂着,继续等待下一个请求。而Nginx起到的作用就是提高这个自制服务器的安全性,另外可以提前输出,保证速度,其实说白了就是反向代理。这次看看重构能不能加一个这个功能。
|
||||
|
||||
## 2. 前后端分离
|
||||
最近好像挺流行这个的,就是要用Javascript,不过这个我现在也学的差不多了,不像以前,整个BBS里没有一句Javascript。
|
||||
这样干还有一个好处,就是我可以不限定客户端,假如我以后学了其他语言,就可以利用统一的API调用了
|
||||
|
||||
## 3.POSIX
|
||||
这可是我写的东西的一大优点,我写的BBS就算是只有一个Busybox也能运行,保证了在任何一台设备上都能完美运行,而且一句sed、grep、awk都没有用,就连这三件套没有都能用哦!
|
||||
|
||||
## 4. Hash&Session
|
||||
之前我写的BBS全部都是明文保存密码的,不过现在我学了那么多关于网络安全的知识,至少Hash还是要有的。不过我不打算用其他工具,我要自己写一套!之前确实是试了试Hash,不过感觉好像又不太对……回头再仔细查一下吧。
|
||||
之前BBS登录时密码都是放在Cookie里的,现在想想那真是太蠢了,本来这个BBS就全都是XSS漏洞,再明文放密码那不就是想要谁的密码都可以吗?(虽然开了HTTPONLY)不过为了提高安全性,我搞了一个类似于Session的东西,但是我不太会写随机数,所以感觉这个Session似乎更不安全了……
|
||||
|
||||
……
|
||||
|
||||
# 真正的问题
|
||||
先想办法下决心写第一句话吧!
|
||||
37
_posts/2019-07-02-encmail.md
Normal file
37
_posts/2019-07-02-encmail.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
layout: post
|
||||
title: 制作分布式加密邮件系统的计划
|
||||
tags: [分布式, 加密, 邮件, 计划]
|
||||
---
|
||||
|
||||
一个计划还没开始,又开始另一个计划了……<!--more-->
|
||||
|
||||
# 计划原因
|
||||
之前用了Telegram聊天,里面有一个私密通信的功能。听说这个功能可以让服务端没法知道使用者发送的信息。不过Telegram在国内使用限制比较多,所以我打算用HTML+Javascript+PHP+MySQL写一套自己的私密通信系统。
|
||||
但是As We All Know,某些国家有网络审查,提供这种服务的肯定会被审查的。既然我们要做这个东西,就不能让它不稳定。所以我想把这个项目搞成分布式的那种,确保通信可以成功。(来自Mastodon的思路)
|
||||
|
||||
## Q&A
|
||||
1. 为什么使用PHP?
|
||||
之所以用PHP作为后端语言的原因呢…… ~~当然因为PHP是世界上最好的语言!(被打死)~~ 因为PHP的程序好搭建,而且很多虚拟主机商都用的是PHP,这样即使小白也能搭建,就能让分布式节点更多了。 ~~(明明主要原因是我只会PHP 23333)~~
|
||||
2. 为什么我要做成邮件系统而不是聊天系统呢?
|
||||
因为聊天就要用Websocket或者是AJAX之类的,但是我不会……我只能把信息都存在服务器里,有人访问再显示出来……
|
||||
3. 已经有PGP了,为什么还要重复造轮子呢?
|
||||
因为PGP是软件,小白用起来不太方便,这个是网站,可能相对更简单一些。 ~~(重复造轮子能有什么理由)~~
|
||||
|
||||
# 项目技术原理
|
||||
1. 所谓的私密通信主要用的就是非对称加密,比如说RSA什么的。所以这个项目同样如此,也使用RSA作为主要加密算法。
|
||||
2. RSA虽然很不错,但是似乎加密速度比较慢?(我看HTTPS上介绍的是这样)所以内容用AES加密,用随机数做密码,一方用公钥去加密这个密码,另一方用私钥解密获得密码,然后再利用这个密码进行对称加密传输(和HTTPS差不多)。
|
||||
3. 如果上述操作都是服务端进行,那这些就都没什么意义了,所以我们要在客户端进行。像Javascript进行加密完全没有问题,所以除了传输,其他加密都是在浏览器上进行。
|
||||
|
||||
# 项目细节
|
||||
为了方便通信,公钥是要留在服务器上的,所以要搞一个用户系统,存储用户的公钥。在注册的过程中公私钥生成都是在客户端进行,确保服务端得不到用户的私钥,注册的过程中要将用户名和公钥上传至服务器保存。这就是为什么要用到MySQL。
|
||||
登录时,先输入用户名,服务器使用用户名查找到对应的公钥,然后生成一个随机数,用公钥加密,发送给客户端,客户端用私钥解密,获得随机数,返回给服务器进行登录。
|
||||
私钥登录后要持续保存,这时肯定不能用Cookie,我们可以用localStorage,然后客户端一定要做好防XSS,不然一切都没有了。
|
||||
在发送的时候,我们可以搞一个类似Mastodon的用户名,两个@实在是太蠢了,就和E-mail一样,就搞成user@example.com的形式吧
|
||||
在发送时客户端先检查对方服务器能否连接,如不能则测试通过服务器连接,如果服务器连接失败再使用其他节点连接(服务器内置),如果还是不行,用户可以自行输入节点,还是不行,投递失败。
|
||||
连接成功后对方服务器查询对应用户的公钥,返回给客户端,客户端用这个公钥加密AES密码,用AES密码加密内容,然后再传给对方服务器保存。
|
||||
查看邮件就用私钥解密AES密码,然后解密内容。
|
||||
|
||||
# 问题
|
||||
如果对方服务器被攻陷,公钥被改成攻击者的,那不就没用了吗?虽然可以用指纹解决,但是这对小白来说似乎有些困难……HTTPS用的是第三方权威解决这个问题,我们就没办法了……
|
||||
最大的问题是,什么时候开始动工?(笑)
|
||||
23
_posts/2019-07-15-encmail.md
Normal file
23
_posts/2019-07-15-encmail.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
layout: post
|
||||
title: EncMail-Project Part 1 - 准备阶段
|
||||
tags: [分布式, 加密, 邮件, 计划]
|
||||
---
|
||||
|
||||
我是不会承认自己咕咕咕的!<!--more-->
|
||||
参照:[初计划](/2019/07/02/encmail.html)
|
||||
|
||||
# 准备的内容
|
||||
最终经过多方研究,我打算用[Web Crypto API](https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Crypto_API)作为主要的实现方法。
|
||||
不过用这种API的兼容性并不怎么好……我的博客之所以用了各种各样的JS库也是为了兼容性 ~~(是不会写吧233333)~~
|
||||
其实主要原因是因为我在网上搜不到哪个JS库能生成密钥对……之前有看到过有一个名叫jsencrypt的库,可惜只能加解密,不能生成密钥对……
|
||||
说实话我从来都没有用过WebAPI,所以还得好好看看文档。但是这个破烂文档连例子都没有,这让人很难办,搜也搜不到有用的内容,而且我的英语并不算好,也不太习惯上[Stack Overflow](https://stackoverflow.com/) ~~(不行,我要把锅推给某国的网络审查)~~ 。正是如此,这个项目制作起来可能会相当花时间。
|
||||
另外界面我打算用MDUI,那个文档看起来还挺简单。本来我没打算做一个好看的页面,就像之前制作的[Iwara Downloader](/2019/04/13/iwara.html)一样,打算套个表格完事。但是既然这个UI看起来挺简单,那就试试这个吧,反正我也不考虑兼容性问题了,WebAPI都用上了,再加一个这个也不算什么吧。
|
||||
|
||||
# 对计划的补充
|
||||
计划的名称我打算命名为EncMail-Project ~~(看起来有点俗……)~~ ,不过这都不重要。
|
||||
关于登录方面,我后来又想了想,没有人会记私钥的,所以为了方便使用,我打算通过AES加密私钥,和公钥一起上传到服务器上保存。登录时把加密的私钥和被公钥加密的令牌下载下来,然后输入密码解密获得私钥并解密令牌。
|
||||
而之前想到的公钥被修改的问题,我想了想,那还是加上指纹吧(就是Hash啦),用SHA-256算法算出公钥的指纹,然后发送者在发送时自己对照一下就可以了(好像是`SubtleCrypto.digest()`?emmmm……这个文档没有翻译……)。
|
||||
另外为了安全,私钥我打算存到`sessionStorage`里,以减小私钥泄露的危险。
|
||||
|
||||
今天就先到这里吧!
|
||||
16
_posts/2019-07-25-college.md
Normal file
16
_posts/2019-07-25-college.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx终于考上大学了
|
||||
tags: [Mayx, 大学]
|
||||
---
|
||||
|
||||
真是Amazing!<!--more-->
|
||||
|
||||
# Where am I?
|
||||
这次我考到成都了,考了一个网络工程专业 ~~(说不定就成装宽带的了23333(不过中国移动是真的垃圾,就是以后装宽带也不去移动))~~
|
||||
不过我看这个专业的以后当运维的比较多,那如果真是这样,以后每年的昨天(7月24日)就可以过节了23333
|
||||
|
||||
# How about it?
|
||||
考上了作为一个原三本的院校,其实也不能算很好,但是相比于[经常犯智障的我](/2019/05/30/exam.html),也算是一个不错的结果了。
|
||||
|
||||
总之,以后我应该就能了解更多关于网络方面的知识了。
|
||||
20
_posts/2019-08-05-blilblil.md
Normal file
20
_posts/2019-08-05-blilblil.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
layout: post
|
||||
title: 记一次办理22卡的经历
|
||||
tags: [Mayx, 大学]
|
||||
---
|
||||
|
||||
我生气了!<!--more-->
|
||||
|
||||
# What happened?
|
||||
某天,Mayx正在使用Bilibili,手抖按到了一个广告上,看起来好像是办理Bilibili的2233和小电视卡的。Ta让我答了几道题之后把我的个人信息骗走了~~(还不是自己主动输进去的2333)~~
|
||||
之前我办过米粉卡,那个是真的不错,三个月流量不限,而且一分钱不花。我看这个卡貌似提到了免费,所以就办理了。
|
||||
过了一两天,中国联通给我打来了电话,让我带着身份证下楼办卡,我也没多想,就下去了。
|
||||
没两分钟,我就被骗走了50CNY(QAQ)
|
||||
原来所谓的免费只是首月免费,广告里可没提要多交钱啊!
|
||||
不过算了,既然已经办了,那就用吧,未来的五个月我可以随便看番了……这样想的你可真是大错特错,要知道免流卡用够40GB的流量就会限流,速度慢到看360p都会卡,我平时都看的是1080p的视频,看大概2小时就要用掉1GB的流量,一个月可不只有40个小时,我每天如果看四小时就要120小时,即60GB,那么之后的这几十个小时就只能看360p还卡的视频了……
|
||||
总的算下来就是每月10CNY不限流看Biliblil的视频,5个月以后我就把这张卡扔了吧。
|
||||
|
||||
# 感想
|
||||
~~不错,广告你赢了我一次,但总有一天你一定会后悔!~~(我的小米手机的广告已经被我铲除干净了)
|
||||
真希望有一天所有的广告用户都有关闭的权利!(VIP除外)
|
||||
21
_posts/2019-08-17-memory.md
Normal file
21
_posts/2019-08-17-memory.md
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
layout: post
|
||||
title: 记一次悲惨的加装内存的事故
|
||||
tags: [悲惨, 事故, 内存]
|
||||
---
|
||||
|
||||
这……大概就是命运吧……QAQ<!--more-->
|
||||
|
||||
# 悲惨的开端
|
||||
因为学校要求使用8GiB运存的电脑(难不成是想用VS?),然后我的笔记本电脑只有4GiB。我考虑了一下,买一条内存条也不贵,于是我在某宝上买了一个和我笔记本电脑内存型号相同的内存条。
|
||||
在到货的前几分钟,我就开心的把电脑主板提前拆出来了,等我一拿到取件码,就去把内存条取了回来 ~~(顺便得到一堆泡泡纸,血赚23333)~~
|
||||
等我安好内存条,我试了试裸板开机,不错,看来至少主板没有被我搞坏,然后我连上键盘和显示器之后,BIOS也正确的读取到了内存条,看来是成功了。
|
||||
我这么边想着就边把电脑往回装,装着装着结果电池接口突然开始冒烟,吓得我立即把电池拔了,之后我继续装,总算是没看到更多异常情况。
|
||||
等我全部安装完成后电脑倒是也正常开机了,操作系统也成功的读取到了内存,而且是同一型号的内存条,应该也成功的组成了双通道吧,我试了试整体电脑的操作,倒是确实比之前流畅了一些。
|
||||
|
||||
# 噩梦开始
|
||||
过了几个小时之后,我发现电池灯还在显示充电状态,这时我慌了,我打开电脑发现充了半天电,电量没有一点点变化,又过了几个小时,电池灯开始不停的闪烁,看来是翻车了。后来我把电池又重新安装了一遍,但是貌似还是没有什么改变,但是把外接电源拔掉仍然可以正常使用,所以看来是充电芯片在之前冒烟的事故中灰飞烟灭了QAQ。
|
||||
|
||||
# 感想
|
||||
我自认为我安装的时候也没有什么可能会让电脑出现这种问题的操作啊……难不成是因为我先安装了电池的问题?也许电脑在插完所有其他线的时候不应该插电池线吧…… ~~总之,这就是命运吧……QAQ~~
|
||||
最近运气都不怎么好,希望这糟糕的运气不会影响我接下来科目二的考试……
|
||||
18
_posts/2019-08-24-sth.md
Normal file
18
_posts/2019-08-24-sth.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
layout: post
|
||||
title: 假期总结
|
||||
tags: [假期, 总结]
|
||||
---
|
||||
|
||||
这个假期还真是碌碌无为啊……<!--more-->
|
||||
|
||||
# 这个假期做了什么?
|
||||
我感觉什么也没做,也许到了假期之后确实就会变成这样吧,在高考前我甚至都在兴致勃勃的学怎么写博客,[学MediaWiki API](/2019/05/27/wikipic.html),学PHP……但是一到了假期,反倒碌碌无为,什么也不想干……即使之前定了很多计划,到了假期却没有一点点干劲……
|
||||
大概这就是人吧,忙的时候想忙些闲事,闲的时候……就真闲了,没有一点干劲……
|
||||
但是吧,要说干了些什么,也不是没干,至少我把科目一和科目二过了,然后[给电脑加装内存条](/2019/08/17/memory.html)还给装坏了……拿去让维修电脑的修还没修好,要换主板……还好还能用,就勉强先这样用吧。
|
||||
另外还去献了个血,感觉献血对我也没什么太大伤害所以就去献了一下,不过第一次献血还是挺害怕的,尽管之前有在学校体检抽血的经验,但是毕竟还是会疼啊……不过过了几天之后就好了,针孔也不是很明显,顺便去网上查了一下血检结果,是一切正常,看起来不错。
|
||||
前几天我看到中国银行有办以天依为主题的借记卡 ~~(这都是3月份的活动了吧……)~~ ,于是就去申请了一张。但是我马上就要开学走了,也不知道能不能在我走之前送到我的手里……
|
||||
对了,这个假期我还在闲鱼上卖了些东西,一个是血亏价(60CNY)卖出去的4GiB DDR4的内存条(还包邮,就是说我只赚了48CNY😭),还有一个锤子T1(SM705)手机,那个买家事还挺多,200CNY买一个原价4000CNY的手机还觉得边角磕了碰了,然后为了惩罚我,还要让我等到10天后系统自动确认收货……在闲鱼上卖东西真是让人难受啊(T_T)
|
||||
|
||||
# 总结
|
||||
这个假期可算是把我玩废了,无论是身体还是心理……希望我作为人类能让我发挥这快速适应的能力,让我快速恢复到正常状态!
|
||||
31
_posts/2019-09-20-start.md
Normal file
31
_posts/2019-09-20-start.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: post
|
||||
title: 开学总结
|
||||
tags: [开学, 总结]
|
||||
---
|
||||
|
||||
假期结束不就是开学嘛……<!--more--> ~~(实在是没得水了么23333)~~
|
||||
|
||||
# 到学校之前的一些事
|
||||
我是通过自驾的方式去的学校,在途中去了不少地方,算是边旅游边去的学校吧。不过总的来说,旅游可真是累啊,虽然自驾游时间没那么紧张,但是为了尽可能在到学校之前多去一些景点,还是挺赶时间的。
|
||||
我在这次去了不少景点,有青木川、阆中、重庆、乐山和峨眉山。在旅游途中,最令人失望的地方是甘肃,在经过甘肃的时候,居然没有一条能直接穿过甘肃的高速,不走高速的话就只能走县道了,但是那个县道是真的烂,好多地方都是烂泥路,让人深深的感受到甘肃的贫困。
|
||||
到重庆之后可以深深的感受到作为山城的感觉,在重庆去哪里都要爬楼梯,而且作为山城,他们没有地上和地下之分,轨道交通有时候可以在地面之上行驶,有时候则是在山里面,甚至有时会[在房子里面穿行](https://www.bilibili.com/video/av66213433/)。不过重庆还是在建设中,所以还是有很多地方都在修路。
|
||||
另外在重庆发生了一点令我难受的小事,有一家很烂的冰激凌店涉及虚假宣传,而且店长会耍顾客,而且一个冰激凌相当贵,要二十多,但是东西只有一点点,这真的是极其垃圾的店, ~~我祝这位店长买菜必超级加倍,做事必被指指点点~~ ,我相信在这个市场中,对顾客不尊敬的商家,必然会遭到市场的报复!
|
||||
除此之外我在重庆我还坐了[长江索道](https://www.bilibili.com/video/av66083579/),这应该就是我在这次旅游中拍到的所有视频了。
|
||||
在峨眉山的时候也很惨,那里有相当多的蚊子,我不知道也没做防护措施,而且刚被叮也没什么感觉,结果后来整条腿就像是得了埃博拉一样满腿的包,而且可能南方的蚊子和北方不一样,叮完以后就会起水泡,抓破之后就会渗出液体,真的是令人难受啊……
|
||||
我在[上一篇博客](/2019/08/24/sth.html)中说我办了一张借记卡,不过地址貌似填的不完整,被驳回了,不过还好被驳回了,不然我就取不到那张卡了(我填的是家里的地址)。于是我在2019.9.1时重新申请了一下。
|
||||
最后,我在2019.9.4时成功的抵达了学校。
|
||||
|
||||
# 到学校后发生的事
|
||||
到学校之后也没发生特别多的事,不过在旅游的时候提前在QQ上加了一个舍友,所以到学校之后倒是也没糟糕到一句话也不说,但是最开始还是很糟糕的,基本上就算是说话也会让人感到尴尬。不过这应该是很正常的事情吧,我觉得应该很快这个问题就会被解决吧……但是事实上并不会,因为我的交往能力极其的差,表达和做事都很难与人在一个频道,这真的是让人很难受QAQ。
|
||||
在学校的说明上很明显的标出来不要相信某些来寝室的人的推销,可是我就是非要犯一下智障症,来表现一下我就是个智障23333。有一个来寝室卖公交卡的人说他卖的公交卡可以使用10年,然后坐车有一定的折扣,我没想它是一个骗子,而是想的是我需不需要公交卡,真的是太蠢了!我想通了我要公交卡之后我就立马付钱了!也没仔细看一下卡片,像我这样智障的人怕是给我一张纸片说这是公交卡我也信了吧!总之后来闲下来的时候我仔细看了看那张卡,结果上面写的是有效期两年,然后我去官网上把卡号输上去之后发现,这个卡已经没钱了,而且也过期了……这真是个耻辱啊,不过这也算是步入社会交的第一笔智商税吧……(也许以前交的我都忘了23333)
|
||||
报名之后就是军训了,算是开学第一课吧。
|
||||
|
||||
## 到学校之后的军训
|
||||
众所周知,到了大学是要军训的,不过我感受到我们学校的军训真的是太水了,根本不能和我高中时候的军训相比。不过我听到一位学长说,军训的强度和学校有关,像我们学校根本不跑早操,到后来基本上就是动两下就坐下休息了,但是他的学校貌似每天都要负重跑。不过学长的话只能信一半,具体情况怎么样我也不知道,但是我们学校军训是真的水,这个是毋庸置疑的。
|
||||
在军训前领服装的时候,我没太在意服装的尺码,结果选小了一号,然后在第一天就把迷彩裤搞坏了,结果军训的这十几天就只能穿破裤子军训了。虽然我个人并不在乎这个问题,不过同学还是会在乎的……QAQ
|
||||
总的来说,我感觉这次的军训还没之前旅游更辛苦。不过也可能和我们连什么也没干有关,有些连队是要参与表演的,所以可能会更辛苦吧。
|
||||
|
||||
## 其余的杂事
|
||||
在上面所说的借记卡过了将近一个月之后它终于发货了,我之前以为办银行卡和手机卡一样,今天申请,明天就能到,但是事实上不一样……它受理用了一周,审批又是一周,制卡还得4-5天,然后过了这么长时间才开始寄发,可能还得几天……真的是太难了……
|
||||
另外,我对大学生活还是挺有希望的,为此我也加入了一个社团和学生会,希望在后来的生活中,我能学到点有用的东西,而不是在这里水博客了。
|
||||
83
_posts/2019-09-28-python.md
Normal file
83
_posts/2019-09-28-python.md
Normal file
@@ -0,0 +1,83 @@
|
||||
---
|
||||
layout: post
|
||||
title: Python学习笔记 - Turtle
|
||||
tags: [Python, 学习笔记, Turtle, Logo, Tkinter]
|
||||
---
|
||||
|
||||
没想到我终有一天也得学Python了……<!--more-->
|
||||
|
||||
# 第一课!Turtle
|
||||
我以为我们老师会从Python的基本语法开始教起,不过事实证明我想错了,我们老师打算把我们当做小学生看,然后教 ~~Logo语言~~ 类似Logo语言的Python库,Turtle。
|
||||
Turtle貌似是基于Tkinter的库,Ubuntu上带的Python默认没有装Tkinter,结果我还得自己装一下……
|
||||
老师给我们布置了两个作业,一个是画一个心形,另外是画一个正方形。在开始之前,我也想的这个库就是个Logo语言,也没想着在网上看看这个东西支持什么方法,画正方形也很简单,就是向前向左……执行4遍。很快,我就用循环写出了这个东西:
|
||||
```python
|
||||
import turtle
|
||||
i=0
|
||||
while i<4 :
|
||||
turtle.forward(50)
|
||||
turtle.left(90)
|
||||
i=i+1
|
||||
```
|
||||
看着这段代码,让我回想起了我的小学时光 ~~(一段不堪回首的往事23333)~~ 既然能画出正方形,那么圆也很简单了,我们可以把圆看成一个无限多边形,那么画圆我们可以这样:
|
||||
```python
|
||||
import turtle
|
||||
i=0
|
||||
while i<360 :
|
||||
turtle.forward(2)
|
||||
turtle.left(1)
|
||||
i=i+1
|
||||
```
|
||||
画完圆之后我又打算画心形,不过老师布置的是在终端中显示心形,就像这样:
|
||||
```python
|
||||
print(""" ** **
|
||||
* * *
|
||||
* *
|
||||
* *
|
||||
*""")
|
||||
```
|
||||
不过这个感觉没什么意思,我想我可以试试在Turtle里画一个心形。在画之前,当然应该上网查一下Turtle还有什么用法,结果一查以后我就自闭了……画正多边形根本不用一步一步走,有一个叫做circle的方法可以直接实现,比如画正方形可以这样:
|
||||
```python
|
||||
import turtle
|
||||
turtle.right(45)
|
||||
turtle.circle(100,360,4)
|
||||
```
|
||||
……这可真是令人难受……不管了,我先画个心形吧,我捡起了我曾经的三角函数的知识,算了一下我要转的角度和长度,最终写出了这样的东西:
|
||||
```python
|
||||
import turtle
|
||||
turtle.color('red','red')
|
||||
turtle.filling()
|
||||
turtle.begin_fill()
|
||||
turtle.left(90)
|
||||
turtle.circle(50,180,180)
|
||||
turtle.left(30)
|
||||
turtle.forward(200)
|
||||
turtle.left(120)
|
||||
turtle.forward(200)
|
||||
turtle.left(30)
|
||||
turtle.circle(50,180,180)
|
||||
turtle.end_fill()
|
||||
input()
|
||||
```
|
||||
当然,我不知道心形的定义是什么,所以也不知道心形是怎么组成的,我想象的大概就是两个半圆和一对等腰拼出来的吧,不过最终画出来的心形是真的丑……
|
||||
最后我在网上又查了一下其他人写的,然后继续自闭……
|
||||
其他人的心形:
|
||||
```python
|
||||
from turtle import *
|
||||
def curvemove():
|
||||
for i in range(200):
|
||||
right(1)
|
||||
forward(1)
|
||||
color('red','pink')
|
||||
begin_fill()
|
||||
left(140)
|
||||
forward(111.65)
|
||||
curvemove()
|
||||
left(120)
|
||||
curvemove()
|
||||
forward(111.65)
|
||||
end_fill()
|
||||
done()
|
||||
```
|
||||
|
||||
# 总结
|
||||
虽然我不喜欢看文档,但是遇到新的东西还是查一下比较稳妥啊!
|
||||
99
_posts/2019-10-21-python.md
Normal file
99
_posts/2019-10-21-python.md
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
layout: post
|
||||
title: Python学习笔记 - 求质数
|
||||
tags: [Python, 质数, 学习笔记]
|
||||
---
|
||||
|
||||
讲真,我酸了……<!--more-->
|
||||
|
||||
# 起因
|
||||
在学习Python的过程中,我和同学举行了一个比赛,大概内容是用Python做一个时间复杂度最低的质数生成器。
|
||||
在学校里就是有个好处,学校网络上知网下论文是免费的,我大概的查了一下,好像用埃氏筛法的效率比较高。
|
||||
以前我用Linux Shell也写过一个:
|
||||
```shell
|
||||
#!/system/bin/sh
|
||||
max=1000
|
||||
list="2"
|
||||
rlist="2"
|
||||
i=3
|
||||
while [ $i -lt $max ]
|
||||
do
|
||||
[ "$(
|
||||
echo "$list"|while read a
|
||||
do
|
||||
[ "$(($i%$a))" == "0" ]&&{
|
||||
echo "1"
|
||||
break 1
|
||||
}
|
||||
done
|
||||
)" == "1" ]||c=$i
|
||||
|
||||
[ "$bj" == "" -a "$c" != "" ]&&{
|
||||
[ "$((${c}*${c}))" -gt "$max" ]&&bj="1"
|
||||
}
|
||||
|
||||
[ "$c" == "" ]||{
|
||||
[ "$bj" == "1" ]||{
|
||||
list="$list
|
||||
$c"
|
||||
}
|
||||
echo "$c"
|
||||
}
|
||||
c=""
|
||||
i="$(($i+1))"
|
||||
done
|
||||
```
|
||||
不过效率极低……因为原生Shell是不支持数组之类的东西,所以其实并不能完全使用埃氏筛法……
|
||||
|
||||
# 使用Python做一个
|
||||
当然Python还是可以用的,于是我理解了一下,做了一个出来:
|
||||
```python
|
||||
maxprime=100000
|
||||
rprimeset=set(range(2,maxprime+1))
|
||||
lprimeset=set()
|
||||
lastprime=0
|
||||
while lastprime<=maxprime**0.5:
|
||||
lastprime=min(rprimeset)
|
||||
rprimeset=rprimeset-set(range(lastprime,maxprime+1,lastprime))
|
||||
lprimeset.add(lastprime)
|
||||
primelist=sorted(list(rprimeset|lprimeset))
|
||||
print(primelist)
|
||||
#print(primelist,file=open(__file__[:__file__.rfind("/")]+"/prime.txt",'w+'))
|
||||
```
|
||||
这个效率确实比Shell做的好太多了,而且看起来也清晰易懂。在我的电脑上,1000000的质数只需要4s就能算出来
|
||||
|
||||
# 结局
|
||||
不过我后来在某百科上查了一下他们用埃氏筛做的Python版本……然后我就酸了……他们的代码在我的电脑上只需要0.6s就能跑完1000000的质数……而且我估计他们的空间复杂度还比我小……
|
||||
```python
|
||||
# python 原生实现
|
||||
|
||||
def primes(n):
|
||||
P = []
|
||||
f = []
|
||||
for i in range(n+1):
|
||||
if i > 2 and i%2 == 0:
|
||||
f.append(1)
|
||||
else:
|
||||
f.append(0)
|
||||
i = 3
|
||||
while i*i <= n:
|
||||
if f[i] == 0:
|
||||
j = i*i
|
||||
while j <= n:
|
||||
f[j] = 1
|
||||
j += i+i
|
||||
i += 2
|
||||
|
||||
P.append(2)
|
||||
for x in range(3,n+1,2):
|
||||
if f[x] == 0:
|
||||
P.append(x)
|
||||
|
||||
return P
|
||||
|
||||
n = 1000000
|
||||
P = primes(n)
|
||||
print(P)
|
||||
```
|
||||
感觉好难受,每次在网上搜的代码都比我写的好……算了,反正我也是在学习嘛。
|
||||
后来我听说用欧拉筛法的效率更高……可惜我看完后不太理解……质数算法可真是复杂啊……
|
||||
37
_posts/2019-11-01-python.md
Normal file
37
_posts/2019-11-01-python.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
layout: post
|
||||
title: Mayx应聘失败(Python版)
|
||||
tags: [应聘, Python, 面向时间]
|
||||
---
|
||||
|
||||
既然最近学了Python,那就去应聘一下Python程序员吧XD<!--more-->
|
||||
|
||||
[上次去面试运维失败了](/2019/01/27/shell.html),这次不能这么丢人了。
|
||||
然后那个面试官居然又让我写排序的程序23333
|
||||
|
||||
Mayx想了想,写出了以下代码:
|
||||
```python
|
||||
a=[1,2,3,5,4,9,10,8,5]
|
||||
import threading
|
||||
import time
|
||||
def counting(i):
|
||||
time.sleep(i)
|
||||
print(i)
|
||||
for i in a:
|
||||
threading.Thread(target=counting,args=(i,)).start()
|
||||
```
|
||||
执行效果:
|
||||
```
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
5
|
||||
8
|
||||
9
|
||||
10
|
||||
```
|
||||
然后,Mayx被赶出来了……
|
||||
我写的代码明明可以执行,效果也没问题,居然赶我出来,这一定是个垃圾公司!
|
||||
后来才知道,他们又想让我回答`sort()`,怕是同一家公司(笑)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user