在之前关于房间介绍的博文里提到过我有个很小的储藏间，与其说它是个储藏间不如说是个嵌在墙里的柜子。这里以前可能真是个可以通往院子的门，靠院子一侧墙的厚度很薄，门上被房东加了泡沫塑料。这里一年四季都能保持在20度以下，但冬天不至于太冷，最低也不会低过10度，关上门里面又是一片漆黑。唯一的缺点是有时候湿度会很高，夏天顶上还发了霉，花了好久才清理干净。各种产品的包装上不都写着阴凉干燥处储存么，要是能解决湿度问题，这简直就是教科书式的储藏环境。说整就整，三十欧不到，搞了台很小的除湿机，拆开看过，里头就一半导体制冷片加风扇。除湿能力当然比不上动辄上千的大干燥机，不过这么小的空间，够用。设备到我手上，自然都是要经过一番改造，让30欧的机器发挥50欧的价值。之前搞了不少单片机的项目，这波就是轻车熟路，直接改成智能储藏间。IMG_1367.jpg祖传OLED显示温湿度，干燥机和LED照明的工作状态。目前显示湿度很高是因为拍照前手摸了传感器。IMG_1368.jpg核心部分是这样，乍一看很乱，实则乱中有序，走线还是尽量的规整。关键问题是这说底还是租的房子没法随便钉钉子，线材都是靠装修胶带固定。上方可以看到群晖的NAS，这里面现在是两个4T的酷狼。仔细看的话，在NAS左边还有个WD的Mybook。这个是黑五入手的12T的盘，本来打算买14T的，然而还在犹豫的时候就缺货了。12T也差不了多少，都是降速的企业级氦气盘。这个超大的硬盘现在用来备份用了快10年的移动硬盘里的数据，直接连在NAS上，非常方便。ScreenShot_2020-12-07_23-27-19.png现在所有盘都恢复了蓝色，非常舒服。NAS右边的白盒子里是镜头和冷储存的硬盘，盒子里放了很多吸水硅胶，常年保持湿度在30左右。墙上就是这套智能硬件的核心，贴在木柱子上的是个DHT22 温湿度传感器，下来是Node MCU版8266，之前用Wemo D1， 今天加了个屏幕，针脚不够了。再往下亮红灯的是双路继电器模块和降压模块，很魔性的被我用热熔胶粘在一起。地面上的插头是WD Mybook的供电，这个不太好看，但还是那个原因，别人的房子，不能乱打洞。立在地上的那玩意儿就是干燥机，真的很小，对吧。IMG_1371.jpg整体的感觉是这样，架子上层是存粮，罐头泡面这些保质期超过一年的我都放在这里，时刻准备开启御宅模式。食物之外的都是工具和DIY的材料，满满当当。单侧贴了LED灯带，这个可以RGB，但最后还是选择了白光，炫彩储藏间就太土嗨了。这个柜子最大的难题是走线，墙上的洞是房东打的，另一侧是个插销。这个洞不大不小，刚好只能通过它这一根线，于是我只能另寻路子了。意外发现门角处有点空隙，线就通过这里走到外面。但他毕竟只是个缝隙，容不得那么多线，光是我着一根CAT7网线就给填上了一大半。我有想过直接弄个插排进来，问题在于最便宜的插排要六欧元，线还特别粗，再改线成本更高。嗯，没错，爷就是不想花这六欧。我的解决方案是这样的，我把干燥机的供电线剪了，获得了一个9V 2.5A的电源，9V电源经过降压模块，输出5V给单片机和继电器供电，两个继电器再分别控制这个9V电源给led灯带还有干燥机。可以明显感觉到开关干燥机LED灯的亮度有区别，好在灯带和干燥机都不是什么精密玩意儿，不用太在意电源的稳定。硬盘就不一样了，里头的数据都是无价之宝，NAS和硬盘盒的线我都没有改造，稳定大过天。在装灯带之前，这个储藏间的照明用的是充电宝加USB灯，每次开门要按一下开关，关灯也要按一下。这个操作对于懒人极不友好，手臂重量少说有个一千克，每次把手举高半米按开关都要消耗5焦耳的能量，太浪费了。这个灯，他必须自动开启。IMG_1369.jpg暂时用原始办法做了个关门检测，已经订购了单簧管模块，到时候就换成磁场检测，更耐用。IMG_1370.jpg另一侧贴了点铝箔，单片机反正只要知道这儿接通了就行。要是就到这儿，那顶多算是个准智能，8266都用上了，自然是要联网。ScreenShot_2020-12-07_23-59-44.png这次这个东西要长期运行，就没有去连数据库，能在本地网络中控制就够了。最上面显示一下温度湿度数据，往下来的两个开关是灯和干燥机，最后一个AUTO是自动控制开启的开关，就是用来实现门和灯的联动，以及干燥机根据湿度的开关。关掉AUTO则可以手动控制，万一需要关门在里头维护的时候不至于灯开不起来，啊，那为什么非要用这个灯维护。好吧，其实还没讲完，为了让其他设备能更好的控制干燥机和灯，这里可以用http的get请求来直接操作，接口都留好了，顺便放个开关呗。30 2 * * * curl -s "http://192.168.233.177/update?output=isauto&state=0" 30 22 * * * curl -s "http://192.168.233.177/update?output=isauto&state=1" 30 3 * * * curl -s "http://192.168.233.177/update?output=isauto&state=1" 30 6 * * * curl -s "http://192.168.233.177/update?output=isauto&state=0" 31 22 * * * curl -s "http://192.168.233.177/update?output=14&state=1" 31 3 * * * curl -s "http://192.168.233.177/update?output=14&state=1" 二级路由我刷了个Padavan，就当小半个服务器来用，设置Crontab命令来定时控制设备开关，就是要这么强行联动。最后还是放上代码，这次代码没有太多需要解释的地方，网页服务器的部分是在是在网上代码的基础上改的，缝合了网页显示传感器数据和网页操作开关的代码。其他是自己写的。#include <Arduino.h> #include <ESP8266WiFi.h> #include <Hash.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Wire.h> #define OLED_RESET 16 //D0 #define OLED_CLK 5 //D1 #define OLED_MOSI 4 //D2 #define OLED_DC 0 //D3 #define OLED_CS 2 //D4 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); const char* ssid = "FKUN_LAB"; const char* password = "bilibili233"; const char* PARAM_INPUT_1 = "output"; const char* PARAM_INPUT_2 = "state"; #define DHTPIN 13 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); float t = 0.0; float h = 0.0; const int relayPin1 = 14; const int relayPin2 = 12; const int doorpin = 15; int isauto = 0; int light = 0; int Dehumidifier = 0; int doorstat = 0; AsyncWebServer server(80); unsigned long previousMillis = 0; const long interval = 2000; const char index_html[] PROGMEM = R"rawliteral( FKUN_Archive_Control Temperature %TEMPERATURE% °C Humidity %HUMIDITY% % %BUTTONPLACEHOLDER% )rawliteral"; String processor(const String& var){ //Serial.println(var); if(var == "BUTTONPLACEHOLDER"){ String buttons = ""; buttons += " Light "; buttons += " Dehumidifier "; buttons += " AUTO "; return buttons; } return String(); //Serial.println(var); if (var == "TEMPERATURE") { return String(t); } else if (var == "HUMIDITY") { return String(h); } return String(); } String outputState(int output){ if(digitalRead(output)){ return ""; } else { return "checked"; } } void setup() { Serial.begin(9600);//串口波特率 dht.begin(); pinMode(relayPin2, OUTPUT); digitalWrite(relayPin2, HIGH); pinMode(relayPin1, OUTPUT); digitalWrite(relayPin1, HIGH); pinMode(doorpin, INPUT); if(!display.begin(SSD1306_SWITCHCAPVCC)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } display.clearDisplay(); Serial.println("OLED Ready"); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 2); display.println(F("FKUN Archive")); display.display(); delay(1000); display.setCursor(0, 15); display.println(F("OLED........Ready!")); display.display(); delay(500); display.setCursor(0, 25); display.println(F("SYSTEM......Ready!")); display.display(); delay(500); display.setCursor(0, 35); display.print(F("WiFi info")); display.display(); delay(100); display.println(F(":")); display.display(); delay(500); display.setCursor(0, 45); display.print(F("SSID:")); display.display(); delay(200); display.println(ssid); display.display(); delay(500); display.setCursor(0, 55); display.print(F("PASSWORD:")); display.display(); delay(200); int cnct=10; while(cnct--) { display.print(F("*")); display.display(); delay(40); } delay(800); Serial.print("Connecting WiFi..."); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 21); display.print(F("Connecting WiFi...")); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED){ display.display(); delay(500); Serial.print("."); display.print(F(".")); } Serial.println(""); Serial.print("WiFi connected"); display.clearDisplay(); display.setTextSize(2); // Draw 2X-scale text display.setTextColor(WHITE); display.setCursor(5, 25); display.print(F("Connected!")); display.display(); delay(300); display.clearDisplay(); display.display(); delay(100); display.clearDisplay(); display.setCursor(5, 25); display.print(F("Connected!")); display.display(); delay(300); display.clearDisplay(); display.display(); delay(100); display.clearDisplay(); display.setTextSize(2); // Draw 2X-scale text display.setTextColor(WHITE); display.setCursor(5, 25); display.print(F("Connected!")); display.display(); delay(1000); display.clearDisplay(); display.display(); delay(300); Serial.print("IP address: "); Serial.println(WiFi.localIP()); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 2); display.println(F("IP address:")); display.display(); delay(500); display.setCursor(0, 15); display.println(WiFi.localIP()); display.display(); delay(1000); server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest * request) { request->send_P(200, "text/plain", String(h).c_str()); }); server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) { String inputMessage1; String inputMessage2; if (request->hasParam(PARAM_INPUT_1) && request->hasParam(PARAM_INPUT_2)) { inputMessage1 = request->getParam(PARAM_INPUT_1)->value(); inputMessage2 = request->getParam(PARAM_INPUT_2)->value(); digitalWrite(inputMessage1.toInt(), inputMessage2.toInt()); } else { inputMessage1 = "No message sent"; inputMessage2 = "No message sent"; } Serial.print("GPIO: "); Serial.print(inputMessage1); Serial.print(" - Set to: "); Serial.println(inputMessage2); if(inputMessage1=="isauto"){ if(inputMessage2=="0"){ isauto = 1; Serial.print(" - is AUTO: "); Serial.println(isauto); }else{ isauto = 0; Serial.print(" - is AUTO: "); Serial.println(isauto); } } request->send(200, "text/plain", "OK"); }); // Start server server.begin(); } void loop() { unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; float newT = dht.readTemperature(); float newH = dht.readHumidity(); if (isnan(newH)) { display.clearDisplay(); Serial.println("Failed to read from DHT sensor!"); display.setCursor(0, 25); display.println(F("DHT Sensor Failed!")); display.display(); } else { display.clearDisplay(); h = newH; t = newT; Serial.println(t); Serial.println(h); display.clearDisplay(); display.setCursor(0, 0); display.print(F("Temperature:")); display.setCursor(0, 10); display.print(t); display.println(F("C")); display.setCursor(0, 20); display.print(F("Humidity:")); display.setCursor(0, 30); display.print(h); display.println(F("%")); display.display(); } light = digitalRead(12); Dehumidifier = digitalRead(14); if(isauto==1){ if(digitalRead(doorpin)== HIGH){ pinMode(relayPin2, OUTPUT); digitalWrite(relayPin2, HIGH); display.setCursor(0, 40); display.print(F("Light:")); display.println(F("OFF (A)")); display.display(); }else{ pinMode(relayPin2, OUTPUT); digitalWrite(relayPin2, LOW); Serial.println("Door Open!"); Serial.println("Light ON"); display.setCursor(0, 40); display.print(F("Light:")); display.println(F("ON (A)")); display.display(); } if(h<45){ pinMode(relayPin1, OUTPUT); digitalWrite(relayPin1, HIGH); display.setCursor(0, 50); display.print(F("Dehumidifier:")); display.println(F("OFF (A)")); display.display(); }else{ pinMode(relayPin1, OUTPUT); digitalWrite(relayPin1, LOW); display.setCursor(0, 50); display.print(F("Dehumidifier:")); display.println(F("ON (A)")); display.display(); } }else{ if(light==0){ display.setCursor(0, 40); display.print(F("Light:")); display.println(F("ON (M)")); display.display(); }else{ display.setCursor(0, 40); display.print(F("Light:")); display.println(F("OFF (M)")); display.display(); } if(Dehumidifier==0){ display.setCursor(0, 50); display.print(F("Dehumidifier:")); display.println(F("ON (M)")); display.display(); }else{ display.setCursor(0, 50); display.print(F("Dehumidifier:")); display.println(F("OFF (M)")); display.display(); } } } }
ScreenShot_2020-11-04_18-56-43.png加入了懒加载，可以自由替换加载动画。ScreenShot_2020-11-04_12-55-42.png这是之前的效果，因为当时后期修图基本不回去动图片比例，然后这边就显得有些太整齐，反而不好看。ScreenShot_2020-11-04_19-14-48.png现在用非常暴力的方法随机输出图片高度，强行制作出参差不齐的效果。后面有附代码，感兴趣的可以去看看。本来还搞得非常精致，把图片的宽高信息弄下来，再前后比较比较。但没想到啊，这个图片信息获取直接搞得网站加载巨慢。没啥其他办法，遇事不决量子力学，直接安排随机数。有一定概率输出很细长的图片，有一定概率输出接近方形的，剩下的就是原始比例。关于实现瀑布流，绕来绕去简直头疼，经常是眼看就要做出最后的效果了，结果因为又因为很小的细节导致需要整体返工。写这个页面我又学了不少新的东西，边查资料边写代码。好的代码不在长，在于巧。有时候发现几句代码就能实现刚才慢慢一屏幕代码的效果，不禁感叹。这次除了和vue框架有关的没有去尝试（看到了很多用vue写的），其他的css，js的实际中实现办法都试了一边。大概和Typecho也有关系，我放在独立的测试页面跑非常正常，放进Typecho就可能会抽风。Typecho模板的那些代码我也不太熟悉，看来看去也没看出问题。最后瞎搞总之是搞出来了。代码顺便放上来了，如果要给自己的博客添加效果可以在根目录添加photo.php文件把代码放进去。图片源当然还是要自己手动去设置一下。<?php /** * Photos * * @package custom * * @author FKUN */ if (!defined('__TYPECHO_ROOT_DIR__')) exit; $setting = $GLOBALS['VOIDSetting']; if (!Utils::isPjax()) { $this->need('includes/head.php'); $this->need('includes/header.php'); } ?> <?php $raw = file_get_contents('https://api.fkun.tech/img/num.php'); $imgnum = (int)$raw; for ($num = 1; $num < $imgnum; $num++) { $imgscr = "https://api.fkun.tech/api/web-" . $num . ".jpg"; echo ''; $randnum = rand(0, 2); if ($randnum == 1) { $url = ' '; } elseif ($randnum == 2) { $url = ' '; } else { $url = ' '; } echo $url; echo ''; } ?> <?php $this->need('includes/footer.php'); ?>
通常出门吃饭，如果不是麦当劳，只会有两种可能。一是周围没有麦当劳，二是跟着朋友出门。周一解决了签证的问题，递交材料的时候，得知了一个情报。在德国本科学生签证理论最长五年，之前也是口口相传，德国大学可以读十年二十学期什么的。也许专业不同，真有极品读了十年本科，但现在很少见了。德国本科学制标准是3年，根据不同专业的毕业要求，可能会因为一些实习模块的时间问题延长到七学期，也就是三年半，医学好像是九学期。总之略微还是有那么一丝丝的紧迫感，只是有那么一丝，目前我的状态不至于担心需要延期毕业。顺便问了毕业后签证的问题，他们建议我可以先报一个Master，读Master的过程中也可以找工作，Master这一来又是五年，之后还可以申请一年半的找工作签证。所以，如果真心想留在这儿，也不算太困难。签证问题解决后立马开始搞驾照的事情，翻译件最后还是没有找ADAC做，找了一个柏林的翻译社，省了十几个欧元。但愿翻译公证件能被这边的车管局接受。德国拿驾照急救课是必须参加的，还得自己掏钱找地方上。我住的城市附近的都被订满了，还得坐一小时火车，到其他城市去上，反正这儿的火车其实跟公交车感觉差不多。急救有九节课，每节45分钟，一天上完。下午从培训中心走出来的时候困得不行，真有回到高中的感觉。疫情期间很多实操都省略了，比如嘴对嘴的人工呼吸，比如一些互动，这倒是正合我意，不用紧张。视力很轻松地过了，前些天从网上找图看，觉得自己好像这几年电脑看多了视力有下降。去实地也是看C字环，但用的是一个显微镜样式的仪器，相比瞪屏幕，更轻松一些。B站的更新准备放缓了，手头压了五个视频，等这阵子大V入驻风波过去了再投。现在投完全就是白给，再好的视频也可能被算法淹没。题文不符的部分说得差不多了，来上图。web-20200904_R3_9321.jpg有同学之前约我今天去杜塞吃日本料理，我来这儿这么多年，还真就没吃过日料，总感觉会好贵。他这么一提，看今年财务状况也比较好，要么就奢侈一下。寿司我看吃不饱，折中一下，吃拉面去，顺便去宜家买个之前碎掉的法压壶。今天我是跟公交系统风水不合，早上出门骑车去车站，要能早30秒问我都能乘上车，结果在空无一人的车站等了一小时。带了相机，在附近拍了些照片。这张是站台贴着的防疫告示。web-20200904_R3_9316.jpg前阵子小火车的售票机也统一成DB的了。web-20200904_R3_9315.jpg刷卡支付的地方被人喷了油漆。web-20200904_R3_9334.jpg铁轨与围栏web-20200904_R3_9331.jpg围栏下的一处枯叶web-20200904_R3_9339.jpg那长长的，长长的坡道……先座小车去大站，在那里转大车去杜塞。宜家在杜塞市郊，需要在转城市里的有轨电车，再坐公交车。以前去的都是去科隆宜家，杜塞这边的头一回来，转公交的时候活生生坐反了，完美错过正确的车，于是又是半小时的等待，中途吃了个麦当劳，有活动五欧两个旗舰汉堡，美滋滋。在买东西的过程中，同学催我快去主火车站碰面，搞得也是慌慌张张。法压壶顺利买到了，回去的车又给错过了一班。这一通下来，少说晚了计划两小时。web-20200904_R3_9382.jpg有轨电车站。web-20200904_R3_9388.jpg电车正通过马路。web-20200904_R3_9406.jpg德国海关的招募广告，原来德国公务员的职位也要贴广告的吗。web-20200904_R3_9392.jpg在市区看到的玻璃回收箱。德国的垃圾分类不像日本那么严格，除了四种基本垃圾外，玻璃，电池，家具需要单独投弃。玻璃根据颜色细分为不同的种类，需要投到对应的铁箱里。这种箱子一个镇可能也就有一个，定期有车过来清空，所以不能像丢日用垃圾那样往院子里的垃圾桶里扔，每次都是攒了一些玻璃瓶，跑两步去镇中心一起丢掉，比较麻烦。可以看到，回收箱顶上放了几个盖子，说明丢垃圾的人做的很仔细，原则上盖子要丢到可回收物中去，但我看还是挺多人连着盖子往里扔的。web-20200904_R3_9409.jpg杜塞的电车年龄可能比我都大。终于可以吃饭了，杜塞尔多夫是欧洲日本人最多的城市，有日本街自然不在话下。整条街都是日料，日本书店，日超等等。随便找了一家拉面店，店内满座，便坐在店外的露天摊上了。或许真的是我太过敏感，一起吃饭的两个同学点菜时的表现让我实在有些尴尬。就座后，有店员拿出菜单。菜单里真正的菜不超过30个，这点也就算是日料中的快餐吧，也刚好是饭点高峰期。过了五分钟，妹子店员出来点单，我点了一碗味增拉面，还有小杯可乐。本以为按这个节奏另外两个兄弟也能接上，结果尴尬的地方来了，他俩使劲来回翻动菜单，中途用中文问我这是什么东西之类的，店员站在一边不说话。我总觉得这样多少有些不礼貌，在给定的时间内没能决定自己要吃的东西，也是浪费了店员的时间。店员是日本人，会德语，但显然不会中文，在交流参与者中有外国人的情况下，非能力问题说别人听不同的语言是非常冒犯的。换位类比一下，俩印度兄弟跟你聊天，他俩突然开始叽里呱啦的说鸟语，你就得在边上看着，啥也听不懂，要他们说完了给你翻译一下大致内容也就算了，要啥也不管继续跟你对话，如果是我，我会有种强烈的被排挤感。好在是几个人一起，对于国人的印象我想也不是一天两天了，随他去吧，以后要避免尴尬就一个人来或者做个东。web-20200904_R3_9414.jpg点菜的票根web-20200904_R3_9417.jpg原味味增拉面，感觉也算不上非常好吃。如果让我在巨无霸和这个面里选，我会选巨无霸。面里放了豆芽和这种甜玉米，一尝就知道是罐头里弄出来的。有两片肉，因为就两片，没吃出啥味道。近来一直素食，偶尔吃肉还有些不习惯了。面有棱角，大概率是用面皮切出来的，真正的日本拉面我也没吃过，咱也不知道，咱也不敢说。web-20200904_R3_9418.jpg同学点的酱油面，跟想象中的酱油面还是有差别，不只味道如何。这家店汤底确实一般，味增的味道不是很明显，能感觉得到，但再一品就被咸味盖过了。web-20200904_R3_9422.jpg一些揚げ物，一小盘要六欧元，性价比有些低。面的价格是10.5欧元，算是……便宜吧，对比德国其他的餐厅。这次就当开了个头，踩了个点。以后自个儿可以来探店，也是不错的视频题材。
[Meting][Music server="netease" id="22728975" type="song"/][/Meting]高中的时候看过一本书，《多重宇宙》，与其说那是本书，不如说是篇很长的论文。对于高中的我来说，文字密度如此之高的书比较少见，实在硬核。书的内容倒是吸收了不少，其实看过命运石之门就会很好理解。多重宇宙可以直接理解成世界线，例如在一个十字路口，被突然的车祸撞死和很正常的通过就形成了两条世界线。世界线的分支不需要以具体的大事件为分界点，而是可以在时间上微分。被车撞死是结果，但实际往前推，出现在可能发生车祸的十字路口本身就有原因，也许是因为出门购物，但如果食物充足就不要出门购物，所以导致结果得原因可能只是自己多吃了一片面包。是不是有蝴蝶效应的味道了，总之，在吃面包的瞬间就已经出现这样的宇宙分支，而在这一瞬间，意识并不会察觉到有什么不同。这牵扯到“我”如何定义，其他宇宙的“我”到底是不是我，书里咋解释的忘了，一番操作后证明，人其实是永生的。多重宇宙在时间维度上未必需要对齐，只要有一个交集即可，一个人在这个宇宙的死，并不会影响到其他宇宙上的继续生活，如果意识，可以那些宇宙分支的瞬间移动，又因为宇宙无穷尽，总有机会找到保持活着的分支。这个理论当时好像还真就让一家子很平静的自杀了。最近，情绪又开始有些不稳定。会有一种想在大雨中尽情奔跑，顺便毫无理由的大哭一场，让大雨彻底吞噬自己。然而，现实里没有这样的机会，只能想想罢了。这两周慢慢的网课开起来了，有些教授用的是视频，有的教授是直播，有些干脆直接放个课件让你自己看。实话说，这学期有些东西我看着头皮就麻。上学期挂了门杀手课，虽然查卷发现仅2分只差，但就是很不爽，居然挂了。这学期的课，现在看着心就凉，还用的是这种佛系上课方法。干坐那儿两小时盯着教材也没盯出什么名堂，有心无力的感觉。视频制作直接被自己死死卡住，计划拍摄一个摄影教程，设备就在眼前，两周后还得把借的一台相机还回去。文案写好了，但就是拍不起来，拖了一整个月。其他的事情也是，我实在没有办法，把要做的事情写在纸上贴在屏幕下。结果一天真正只能完成一件，或者两件，完全不在状态。屏幕下面的纸条越堆越多，焦虑感随之而来。明年，正常情况下我会毕业。我会拿到18个月的过渡签证用来找工作。我曾想去附近的空客，或者是南边的Cern工作。但看起来，本科文凭，更贴近现实的是在一家我现在根本不了解的公司就职。或者更惨一些，我得卷铺盖离开德国。离开德国，要是就像说的这么轻松倒是好了，仔细想想，到时候多少个纸箱把自己的东西打包，用海运寄回国内，和这里的朋友道别，到银行，保险公司办理相关的终止手续…… 这些事只要具体化就让我很头大。在德国正儿八经工作两年，能拿永久居留许可。但这个在留卡如果中途有超过6个月没有返回德国则自动会被注销，一劳永逸的事情并不存在呢。除此之外，日本依然对我有强烈的吸引力，在日本待几年才能消耗掉我对这个国家的好奇心吧。还是像刚才一样，想是想的容易，具体化就很没那么舒服了。在日本待几年目前来看只能以留学为目的，一年语言班加上几年的研究生。姑且不说现在本科就让我吃力，研究生能不能顺利毕业的问题。到时候一把年纪了，还得让家里供着实在是不像话。自给自足和满足好奇心似乎还是存在冲突的。同时，我有些怀疑目前学的专业对我来说的意义是什么。为了走项目顺利出国，当时心里只想到了把考试通过，管他哪个专业，去了再说。第一志愿选了电器工程，结果确实被第二的物理给录了。当时想的只是这东西我善不善长，受益于我对事物原理的好奇，物理看上去一直是我的长项。分数上不一定体现得多么突出，但我觉得只是被试卷限制住了，来个自由表达什么的更适合我。现在物理的内容直接开始量子力学，曾经直到一些基本的原理就可以拿出来装逼的东西，现在需要套公式计算，直接就去世了。最近不是时间多嘛，我就准备去打打工，让生活充实一下。网上看了一下大家的观点，不是刚需，打工意思意思就行了。在便利店打工似乎是不值得写在未来的求职简历上的，反而如果是个视频Up主，很好的经营自己的频道，可以算是个加分项。这就进一步加深了我的自我怀疑，又看了很多摄影学校的东西，我在想我为啥没去个摄影学校，明明可以混的比现在更好。至少努力的方向是清晰的，照片拍的不好就多拍，审美不够就多看。对比之下，这物理，靠，知识就像薛定谔的猫，处于懂和不懂之间不确定态，只有考试才能确定。教材上的写的都是字儿，也都看得懂，但这放到一块，形成奇妙的排列组合，瞬间就给爷整蒙了。话题回到刚开始，如果多重宇宙是存在的。那除了现在，被大家观察到的“我”以外，应该也有走运考上好带学，正挥洒着清纯的“我”，还有直接自闭在带专宿舍打着游戏扣脚的“我”，以及阴差阳错在日本苟延残喘上着学的“我”。这些“我”的生活状态肯定有很大不同，心境，所思所想，也不同。他们会不会在某一刻思考我现在正在思考的这个问题，他们的未来会是如何。随着年龄增长，随心所欲的机会就越来越少。小时候，父母和学校限制了自己的行动。那时候有的是时间，但唯独没有钱，总是憧憬以后赚了钱要买回当时梦寐以求之物。长大了，能赚钱了，限制住自己的竟成了自己本身。有钱，但没时间花钱，或者花钱已经无法得到对应的快乐。这大概也是一种成长吧，曾经觉得自己技能涉猎广泛，可以适应各种工作。现在看来，人家都不一定知道你有啥技能，哪儿就自信的认为可以随便找到工作。作为外国人，语言能力是一道坎，长期缺乏社交，搞得现在超市结账都能紧张一下，这又是一道坎。挨完这两下子，还要别人看到自己的价值，手里的自信还有几分。焦虑情绪导致我漫无目的的消耗时间，突然学习日语，读了几个小时想到未来依然迷茫，马上转头打开学校的课件，好不容易把当周的习题写完上传就感觉自己到极限了，开始看番，看的下去的番也基本看完了，到网上去找番剧推荐，这时候知乎必然蹦出来，接着就是到知乎看各种别人的经历。因为现在学校封闭，一直在家就有完备的条件堕落下去。我唯一清楚的是，如果继续这样下去，我迟早会真的抑郁，认为所有事情都变得可有可无，没有意义。然后躺在床上，一天都不起来。因为停课，也无人察觉，什么都不干的负罪感又会加重抑郁情绪。必须要想办法停止这样的状态。从超市买了很多啤酒，我认为酒在关键时刻就是药，迷迷糊糊的就不会想太多。关于每天的计划，我的执行力并没有下降，只是目标定的不合适。我决定冒着掉粉的风险开启一个新的视频系列，这个系列随意到什么都能做成视频，没有那么高的品控要求，很多本来还在纠结怎么拍的更好的视频就可以直接进入日程了。为什么我会有这种强制调整状态的被动技能我自己也不太清楚，明明日子混着也能过，完全不考虑未来，到了时候自己也不至于饿死。真是奇怪，不过我倒是挺希望这个能力保持下去，活就要活的精彩。之前思考的问题，并没有放弃思考，虽然依然没有答案，但也不需要马上来回答。有些事，就像解方程，已知的量不够，未知的永远解不出来。还有些事，仅凭一己之力恐难完成，现在还没牛逼到那程度，不要自不量力。
这次报考物理的人确实不多，但相比之前的考试，这教授的效率未免太高了。。上午11点开考，下午1点收卷。因为我觉得考的不是很好，甚至要挂的节奏，回家立马打了5把CSGO，升了个段，缓和了一下情绪。快乐水喝多了，晚上没有困意。凌晨三点准备去睡觉，看到手机有短信。凌晨1：30，是物理作业的搭档，一个德国人发来的（德国人也是真能肝）告诉我物理成绩可以查了。然后我，点开网页，用手先遮分的位置。果然，物理3已经出现在屏幕上。把手移开，靠，2分！太尼玛魔幻了。德国考试1分是满分，4分及格。得亏我这学期每周都好好在整课后作业，考试达到及格线，作业可以加一些分。可不，这分数好看了许多。
下载整份代码code.rar传感器到SQL//引入各种库 #include <ESP8266WiFi.h> #include <SPI.h> #include <Wire.h> #include <MySQL_Connection.h> #include <MySQL_Cursor.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> //定义屏幕宽度和高度 #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 //定义屏幕的连线GPIO号 #define OLED_MOSI 13 #define OLED_CLK 12 #define OLED_DC 3 #define OLED_CS 1 #define OLED_RESET 15 #define SEALEVELPRESSURE_HPA (1013.25) //定义QNH海压 方便计算高度 //输入参数到库 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); Adafruit_BME280 bme; IPAddress server_addr(xxxxxxx); //服务器ip char user[] = "8266"; //MySQL 用户名 char password[] = "xxxxx"; //MySQL 密码 char INSERT_SQL[] = "INSERT INTO `8266`.`bmedata` (Temp, Humi, Pres, Device) VALUES (%s, %s, %s, %d)"; char Temp[15];//定义几个字符串 分别是 温度 湿度 气压 char Humi[15]; char Pres[15]; char deviceid[] = "fkun06"; //设备名 方便管理 char ssid[] = "F_KUN"; //WiFi名称 char pass[] = "xxxxx"; //WiFi密码 WiFiClient client; MySQL_Connection conn((Client *)&client); //初始化 void setup() { Serial.begin(9600); //串口波特率 Serial.println(F("Serial Start!")); //串口输出一些内容测试 display.begin(SSD1306_SWITCHCAPVCC); //屏幕相关 bme.begin(); //传感器相关 display.clearDisplay(); //清屏 display.setTextSize(2); //字体大小 display.setTextColor(WHITE); //字体颜色 display.setCursor(30, 20); //位置 display.print(F("Start!")); //屏幕输出一些文字 display.display(); //屏幕输出 delay(1000); //延迟1秒 display.clearDisplay(); //清屏 display.setTextSize(1); //字体大小 display.setTextColor(WHITE); //字体颜色 display.setCursor(0, 0); //位置 display.print(F("WiFi Connecting")); //屏幕输出一些文字 display.display(); Serial.print(F("WiFi Connecting")); //串口输出一些文字 WiFi.mode(WIFI_STA); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { // 如果WiFi没有连接，一直循环打印点 delay(500); Serial.print("."); display.print("."); display.display(); } display.clearDisplay(); display.setTextSize(1); //字体大小 display.setTextColor(WHITE); //字体颜色 display.setCursor(0, 0); //位置 display.print(F("WiFi Connected !!!")); //屏幕输出一些文字 Serial.print(F("WiFi Connected")); //串口输出一些文字 Serial.printf("\nConnected to %s", ssid); Serial.print("\nLocal IP address: "); Serial.print(WiFi.localIP()); // 打印开发板的IP地址 Serial.print("\nDevice MAC:"); Serial.println(WiFi.macAddress()); display.display(); delay(1000); } void getdata() { float h = bme.readHumidity(); //定义浮点数 h等于传感器获取到的湿度数据 下类同 float t = bme.readTemperature(); float p = (bme.readPressure() / 100.0F); dtostrf(h, 1, 2, Humi); //将上面的浮点数保留两位小数输出到最开始定义的几个字符串名下 dtostrf(t, 1, 2, Temp); dtostrf(p, 1, 2, Pres); } void dataprint() { Serial.print(F("Humidity: ")); //串口内输出传感器获取的参数 Serial.print(Humi); Serial.print(F("% Temperature: ")); Serial.print(Temp); Serial.print(F("°C ")); Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); display.setTextSize(1); //屏幕输出传感器参数 display.setTextColor(WHITE); display.setCursor(0, 0); display.clearDisplay(); display.print(F("Humidity: ")); display.print(Humi); display.print(F(" %")); display.setCursor(0, 16); display.print(F("Temperature: ")); display.print(Temp); display.print(F(" *C")); display.setCursor(0, 32); display.print(F("Pressure: ")); display.print(Pres); display.print(F(" hPa")); display.setCursor(0, 48); display.print(F("Altitude: ")); display.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); display.print(F(" m")); display.display(); } void sqldata() { char query[128]; sprintf(query, INSERT_SQL, Temp, Humi, Pres, deviceid); //转化数据格式匹配数据表 Serial.print("Ready to Push: "); Serial.println(query); MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn); cur_mem->execute(query); delete cur_mem; } void pushdata(){ if (WiFi.status() == WL_CONNECTED) { if (conn.connect(server_addr, 3306, user, password)) { // 连接数据库 Serial.print("Start Pushing Data!"); sqldata(); display.clearDisplay(); display.setTextSize(1); //屏幕输出传感器参数 display.setTextColor(WHITE); display.setCursor(15, 30); display.print(F("Data Pushed !")); display.display(); Serial.print("Data Pushed !"); } else { Serial.print("Connection to Server FAILED !!!"); } } } //循环 void loop() { int i = 0; while(i<=10){ //计数小于等于10保持循环 delay(2000); //等待2秒 getdata(); dataprint(); i++; } pushdata(); } PHP文件<?php header("content-type:text/json;charset=utf-8"); $con = mysqli_connect("localhost", "8266", "xxxx"); if (!$con) { die('Could not connect database: ' . mysqli_error()); } $db_selected = mysqli_select_db($con,"8266"); if (!$db_selected) { die ("Can\'t use yxz : " . mysqli_error()); } mysqli_query($con,"SET CHARACTER SET utf8"); $sql = mysqli_query($con,"SELECT * FROM `bmedata` "); $arr = array(); while($row = mysqli_fetch_array($sql)) { $count=count($row);//不能在循环语句中，由于每次删除 row数组长度都减小 for($i=0;$i<$count;$i++){ unset($row[$i]);//删除冗余数据 } array_push($arr,$row); } echo json_encode($arr,JSON_UNESCAPED_UNICODE); mysqli_close($con); ?> HTML页面 温度为例 FKUN SMARTHOME VIEW
面对屏幕，手放在键盘上，刚抬起的手指又缓缓落下，硬是没想出一个让我满意的题目。一晃就是五年，每当年末，总还是会想起那段不可思议的时光。昨日，写完以上两行后，物理专业的学长突然邀请我坐他的车去采购干粮，顺便出去转转。我寻思我从20号到现在都没去购物了，柜子里的粮食，勉强能撑到一月2日商店开业。但既然他能开车带我去购物，那我可以尽情的买些更沉重的果汁回来囤着，何乐而不为。第二天出门前，犹豫了一下，草率的判断三块电池应该够用，于是没带上充电宝。同学很准时的开着他刚租的崭新大众高尔夫运动款出现在我的门口，他的兴致看起来比我高多了。简单的讨论后我便附和他，去比利时的国家森林公园徒步。看得出来，他确实爱开车。只要是高速，必开180。180夜路回归也不例外。路上除了拍摄素材，听音乐，就是考聊天打发时间。他比我大整整一届，人到了大学，看上去都差不多大，说是一届的，估计大家也都信。算上预科，三年，他谈了三个女朋友。真看不出来，文质彬彬的外表下撩妹能力居然这么强，我等发自心底的服。仔细问细节显得不礼貌，我便只是了解了大概的情况，他描述了未来的一些打算以及和现任类似浪子回头般的交往历程。20191230_A6_9642-LR WEB 750.jpg20191230_A6_9660-LR WEB 750.jpg20191230_A6_9678-LR WEB 750.jpg20191230_A6_9688-LR WEB 750.jpg20191230_A6_9695-LR WEB 750.jpg在森林里，我们急于走到水库。于是离开了大路，想办法越过小溪，穿进密林里。地面状况越来越糟糕，杂草坑坑洼洼，凹陷处还暗藏小水坑。断枝横竖散落在地上，也是天然路障。不一会儿，学长同学表示累了，需要休息。看了看手环，一万一千步，心想，看来现充也不是个个体力胜过阿宅的嘛。又走了几个公里，我们停下来休息的次数逐渐增多。好不容易走上了大路，看刚才绕了不少路，决定放弃继续前进，水库还是要去的，开车去。20191230_A6_9743-LR WEB 750.jpg20191230_A6_9752-LR WEB 750.jpg20191230_A6_9758-LR WEB 750.jpg20191230_A6_9769-LR WEB 750.jpg20191230_A6_9806-LR WEB 750.jpg20191230_A6_9826-LR WEB 750.jpg20191230_A6_9831-LR WEB 750.jpg为了快速回到停车的地方，我们再次选择穿越野林。森林里能见到的地形我们都遇到了，不夸张地说，跋山涉水，总算是回到了车上。大家都有些饿，在Aachen采购完粮食，我们去附近的中餐馆吃自助餐。自助餐的奸商除了强制要求消费酒水，另一个套路就是往菜里加糖，让你更快的吃饱。两盘下去，在看着那近乎是用糖浆泡过的炸鸡就头晕犯恶心。剩下的一个小时我开始只吃水果，学长困得不行，昏沉的坐在桌前翻动手机。哎，一会儿还开车呢，这会儿这么困可咋整。我也不是神仙，到家后，坐下就不想起来了。虽然只有两万步，但基本都是一脚深一脚浅的烂路，着实有些累。不过好在多余的精力消耗完毕，自然之气也得到了补充。明晚跨年，学长会开车接上他的女友去科隆看着夜空绽放的烟花，浪漫的一起跨入2020年。而我，大概率早早的睡觉，梦里啥都有。回到标题，此时写文章的的心态已经没有昨天写下标题时那么复杂了。前两天，我躺在床上翻了翻朋友圈的动态，看到了她和他现男友在中国西南部游玩的照片。几年不见，照片上也没看出有什么大变化，还是那个熟悉的风格，还是大红色的围巾。我该不该给她点个赞呢，直接当作没看见略过这样不是更显得自己还在纠结么，要是点下了赞，也许可以从侧面说明我已承认她的新欢，显得自己坦坦荡荡的拿得起放得下。心里是这么想的，点下赞的按钮，心里突然有种赌气的感觉。好像还是无法像给一般的动态点赞那样轻松。朋友圈点赞我一向对事不对人，如果照片或内容确实让我觉得值得点赞，我便会点上去。她的那几张图恰恰符合了我点赞的要求，也就是说，此时必定得点个赞上去。她很少发动态，几个月偶尔见到一次，多数还会把脸码上。毕业以后，真就是一点交流也没了，谢师宴那段时间，我还能最后Turbo boost一下，装一副淡定的样子，仿佛一切都能像毕业相片一样合上书页，和校服一起封印在纸箱中。我想，我已经在以往的博文中多次提及那位，毕竟我的感情经验甚少，谈到了这方面，好像我的选择余地很少，看上去就好像我老是纠结于此。很想用一篇十万字的文章终结这个话题，但实际动起笔来，又不知道改从何说起，从何结束。我觉得整个过程中最难以理解的是，我们为何会逐渐分开。不是大吵一架，然后一方很郑重地表示算逑。我的印象里，她觉得学习比较重要，让我也花更多的心思在学习上。虽然事实证明，投入更多精力到学习上效果并不明显，倒是牺牲了业余爱好的时间挺不舍的。每个人的学习能力不同，准确的说，是每个人学习不同的东西的速度不同。有些东西，我如果能从逻辑层面理解，比如物理，那后续的学习都会很轻松。如果不能，刷再多题也是无济。明知道自己强行向一个并非天赋属性的学科成吨输入时间精力，难受归难受，样子还是要做出来的。不然人家说，试都没试你怎么知道不行。我只能暗示自己，进了学校就像是在监狱，一天除了吃饭睡觉就得坐在教室里，坐着发呆，坐着看课本，坐着写题目。我发现一件多年没有发现而又非常可笑的事，以前我不愿意这么做是因为我知道作用不大，把时间花在其他东西上效益更高，但老师家长好像都不是特别支持。结果现在就跟傻了一样定在教室里，老师赶快给家里反馈，他最近学习可认真啦云云。莫名想到电影《飞越疯人院》的剧情。我想，我都这么假装好好学习了，她应该很满意吧。不料，人家此时开始和隔壁班某男生谈笑风生。我倒不想干扰她正常社交，但好歹理一下我呀。没啥办法，我让人去跟那男的介绍了一下我。年级里我的知名度还挺高的，具备大量非常规技能，而且非常乐意提供各种技术支持。人家听了，感觉我这人还是摸不着底，但也和她稍微保持了距离。很久之后，我从她朋友的口中听说，她似乎在提出学习计划之后的不久就不打算鸟我了。而我这边出现了典型的信息不对称，所以做出了比较憨批的操作。总之整个过程，令我极不舒服的是，没有一个明确的结束时间。我喜欢有始有终，即便是分开，那也最好是有个精确到几点几分的时间点。至少我在封印这些相关物品的时候可以贴上从何时到何时的标签。和她的这个过程，几乎感觉不到收尾。几个月后，我似乎逐渐接受了这个事实，由于发现呆在教室里不动这个方法太过舒服，节约能量，还能不招惹老师。我继续延续了这一做法。除此之外，我开始思考和她的每一件事，是否存在更好的处理办法。这就像下围棋，开始的棋子落下，往往不会有很直接的影响，但在最后，先前的每一步都关系到成败。那时候刚好是Alpha Go的各种对局，我还想着能不能用电脑帮我运算一下。这样的反思是很很有帮助的，每次反思的成果返回去带入到条件，如果我这样做，会不会导致其他的问题。这样的思考，进行了很久，我感觉我都快成感情大师了，期间找了很多当时的旁观者，有她的室友，询问一切相关的话题。有和她经常玩的男生，问问他的看法。最终，我得出的结论，这大概是逻辑方式的问题。换句话说，如果是我主动，那估计只有计算机能够答应了。遇到判断决策，我会在脑中搜索相似的抽象化后的问题模型，并同时回忆当时结果的优劣，然后再类推做出对眼前问题的判断。如果没有足够的模型输入，我的决策正确率就会很低。人的情感最大的问题就在于，它不是理性的，它存在荒谬的突变。也就是说，遇到情感上的问题，没有一个更好，或者更坏的答案。每一次的答案，和最后的结果不能形成映射关系。妹子对决策结果的反应，甚至可以脱离决策本身，转而关注其他无法预料的东西。和学长吃饭的时候，我问，你觉得能力和财力，哪个会对妹子更有吸引力，其中能力包括了才华和各种技能。学长答，能力。恐怕我还是忽略了一些东西，以学长的资质，三年换三个女朋友。我却和弹幕里的各位共享了多年的二次元纸片女友。这么多年，还是很遗憾，没能分析出和妹子的正确相处方式。看着她发的照片，还是有点酸。争取早日把二次元纸片人带到现实世界里吧。
黑五当天居然什么都没买，看到亚马逊还有各大电商居然在黑五反而涨价，看到他们这样窒息的操作我便更不能被当作韭菜收割了。就像当年买5s一样，要想日后得到最佳的保障，那就上官网买！官网黑五前一晚官网直接关闭了购买通道。第二天看到活动出来，和往年一样，不打折，但是送Appstore的充值卡。iPhone的话是50欧呢，可以买好多好多App。一步一步，到最后付款。什么！ Paypal竟然不能用，好，那网银呢？ 啊！也不行。只能信用卡付款，我这个没有信用卡也非常反感信用卡这种提前消费行为的人瞬间就自闭了。盯着屏幕右下角的时间沉默了3秒。不行，我还没凉，我还有机会。13：30，还有机会坐火车去科隆的实体店买。说走就走，到了实体店。体验了一番各种Mac，开始正题。随便抓一个店员，说买手机。确定好型号他就会取货，包括付款，一切都通过他手上的iPhone以及贴在iPhone下方的一个小设备完成。不磨磨蹭蹭的，买完就走。_A6_8742-LR WEB 750.jpg开箱前，继续嘲讽一下上次ebay卖水货的卖家。看一下什么才是苹果的印刷。_A6_8745-LR WEB 750.jpg新版本的包装不再使用塑封，而是这种很薄的塑料膜。_A6_8749-LR WEB 750-2.jpg打开_A6_8750-LR WEB 750.jpgWOW Awesome 这是我独享的Moment!_A6_8753-LR WEB 750.jpg光这包装，300块吧_A6_8756-LR WEB 750.jpg_A6_8760-LR WEB 750.jpg_A6_8762-LR WEB 750.jpg开始先是说明书，这和以前5s不一样，5s是打开就看到手机的_A6_8764-LR WEB 750.jpg好多好多的纸片，似乎比以前更精致了_A6_8769-LR WEB 750.jpg这屏幕几乎占满了整个盒子，凸显出他的大_A6_8772-LR WEB 750.jpg下方是配件_A6_8777-LR WEB 750.jpg适配器和耳机 因为是欧洲购买，给的就是这种细长的头_A6_8780-LR WEB 750.jpg_A6_8784-LR WEB 750.jpg耳机下方是充电线不再是以前的长方形卷法这种正圆形可以防止线变形正版的线就是粗，断了还会看到里面的金属加固层（希望不要断啊）_A6_8787-LR WEB 750.jpg这耳机这么装着，差点当成无线的。。_A6_8788-LR WEB 750.jpg_A6_8790-LR WEB 750.jpg精致的纸盒_A6_8793-LR WEB 750.jpg配合无线充电，使用了玻璃后盖，这质感，绝了！_A6_8796-LR WEB 750.jpg着急的先开个机_A6_8804-LR WEB 750.jpg继续看，摄像头突的没有6那么明显，套上壳刚刚好_A6_8800-LR WEB 750.jpg阿姆斯特丹可以吸（），但我觉得撕膜更爽。_A6_8809-LR WEB 750.jpg孤独的Lightning_A6_8810-LR WEB 750.jpg大部分的产品，开箱使用会给我不错的第一印象，但有些产品，他们的功能，甚至让我的嘴能保持O字形好一阵子。太惊艳了。通过这个很科幻的操作，可以一步复制原来iPhone上所有的设置。没错，就是所有，包括Wifi密码，保持登陆的微信…… 这个功能太赞了，我真的就几乎没花时间在新手机的设置上，壁纸都给你移植过去。_A6_8814-LR WEB 750.jpg_A6_8816-LR WEB 750.jpg_A6_8824-LR WEB 750.jpg_A6_8830-LR WEB 750.jpg小BUG，充电的标志怎么这么奇怪。_A6_8833-LR WEB 750.jpg_A6_8834-LR WEB 750.jpg_A6_8838-LR WEB 750.jpg至此，开箱结束。使用了完整的一天，要我给这手机打分，我直接打10分。下面稍微说些具体的理由。刚拿到手机，一件复制旧机配置的功能非常厉害，真的太节省时间了。手机防水等级IP67，就是初代小米手环的水平，下雨天淋点雨不会有问题，适合户外操作。我钟爱的Home键，8以上就没有这颗Home按键了。所以我说8是我能接受的最后一代苹果。（以后可能打脸）双声道扬声器，他是把顶置的那颗通话用的扬声器也做成了下方的功率。横屏就是左右声道，竖屏声音也会莫名立体。4K60以及1080 240的摄像。特别情况作为备机录制的素材也可用。A11芯片，及其流畅的操作体验。二代指纹芯片，比一代不知道高到哪里去。拾起唤醒，看时间消息什么的很方便，不用按任何按键。气压传感器，终于可以靠气压看海拔了。无线充电 方便快充 半小时充50%iPhone在国内外太过流行，导致各种翻新机，水货横行。我觉得，省几百块，买到的产品达不到该有的性能，反而亏了本。在店里看了新的Macbook也被震撼到了。周边人均iPad Pro，就算自己没有用，特性也基本了解了。要我说，Apple的缺点只有一个。那就是贵。。。不过贵是相对的，以后也许就不觉得它们贵了~看着躺在桌上的手机，不禁想起了小学时代。因为不想写作业或是在学校搞事，被老师叫家长。那时候老师操作很骚，他不用自己手机打，而是让你自己把家长叫来，不叫来不让上课。电话机是有着厚重生铁外壳的插卡式电话，上面有用记号笔和修正液记录的各种字符，浅灰色的漆皮掉的东一块西一块，松动的按键隐约能看清凹刻的数字。插卡电话最烦人的就是要电话卡。30块一张的电话卡对我来说可是添加，找不到好的理由让家里买就一直没说。每次被老师安排的时候，老师总会说一些重话，他们的目标只有一个，让你哭。哭了他们也便不在说了，这是及其可笑的。所以老油条上来直接哭，程序快进，没等老师开口就自动出去借电话卡叫家长了。最怕的就是秋天和冬天，天很冷，还刮风。办公室里有空调，每个老师桌上还有加热垫，甚至脚下还搞点什么电暖炉之类的。和德国不一样，办公室里不是浓浓的咖啡味让人清醒，取而代之的是一种说不出的，只有一群老女人长时间聚在一起才会散发出来的味道。使人头脑发昏，让人窒息。一出办公室的门，冷风首先刺痛的是脸上的泪痕，擦干眼泪，得赶快恢复正常的面容，好去问同学借电话卡。同学们都在上课，站在门口，不知道该如何进去。反复确认自己的脸已擦干净，努力调整呼吸，这是最难的，眼泪很容易止住，但抽泣是很难控制的。在门外越站越冷，手指冻得发僵，关节活动都变慢了。憋一口气，推开门，“报告”，然后再所有人注目下走向最有可能借卡的那个女生，仿佛自己是刚战斗完得勇士一样，冷冷来一句，电话卡借一下。此时对方不需要多问缘由，翻翻书包，从散发着浓浓塑胶味的卡包中取出电话卡递过来。获得道具【电话卡】以后，下一个难题是怎么叫家长。我这三天两头搞出事情的，每次都真叫显然不合适。借到卡以后在办公室前的窗户变来回晃一下，暗示老师自己已经去打电话了。然后走到电话机边上，还是反复插卡拔卡，一副装作电话机坏了的的样子。还可以查查余额，总之就是不打电话。过十分钟左右，老师就会出来看一下情况。走过来强行让我输入电话号码，到这时看似已经万策已尽，其实还有最终绝招。播空号，或者随便播。最常听到的声音就是，“您拨打的电话是空号，请问114。”114到底是什么神秘组织，一直没弄明白。一拖再拖，老师没了耐心，只好把这次的帐算在下次的事儿上。在小学转学前，一直是这样的状态。同学关系搞得不错，但是老师看你就是不爽。那时候天真的我，一直默认学校是个美好的地方，即便是学校做的不好的事，也会强行的美化一下告诉家长。这种美化，大概是我理想中学校的样子吧。为了不破坏这种并不存在的设定，只能忍声吞气的把这些苦头留在心里，你看，过了十几年，我还是记得清清楚楚。要以后我有小孩上学的话，再遇到这种老师，那可不得整的她直到教师资格证被吊销。扯远了，时代在进步，插卡电话机开始不用插卡。用一种叫做201电话卡的东西出现了，拿起电话输入201再输入卡号密码就可以正常拨号了。于是就练就一套速记本领，每次总能吧16位的卡号背下来，还背其他班的，之后借卡只要说一声就行了。再后来，转了学，新学校的老师不会布置那么多作业。事情也变少了，也用不着记下那么多的数字了。初中，手机开始普及，电话卡的时代就这么过去。童年，也许就封存在用过的某张IC电话卡的芯片里。
前两天还在写关于手机的文章，今天这就出事了。暑假之后，我就决定不再带壳贴膜了。想更直接的体会手机本身的质感，做工，还有这心动的厚度。另一方面，由于5S的屏幕卡扣问题，很多机器会出现屏幕右上角弹起的问题。我的当然也不例外，到后来直接发展成整个屏幕可以掀起来，顶上的卡扣彻底失效。弹起不是问题，问题在于弹起可能导致排线松动，最后让触屏失灵。经常性的需要锁屏再解开才能恢复，机器内部进灰，阻挡了红外距离传感器，接听电话也不能正常息屏。总之问题挺多，如果贴了膜，屏幕变得更厚，弹起来的概率会提高，所以就索性放弃贴膜了。四年啊，有感情了。由于屏幕不只是简单的裂开，而是碎了，锋利的玻璃渣子藕断丝连的挂在屏幕上。担心哪天手指被玻璃渣子扎伤那就划不来了，暂时用透明胶带贴住了碎裂的部分。iPhone就是iPhone，屏幕碎了也不影响触屏。该怎么用还是怎么用，打字什么的，跟原来的一样。但这显然不是可以继续使用三四年的状态了，终于要换手机了。曾经就思考过如果换手机换什么好，最后的结论是iPhone8的64G或者128G版本。为何不买新出的手机呢，一个字，丑。用过iPhone，我对其他的手机瞬间无感，系统优势摆在那里。手机很重要的一点就是可靠性，不能在关键时刻突然卡住。另外，我至今无法理解长时间用手机打FPS或者MOBA类游戏的人的想法。手机屏幕小我就不说了，就那操作体验，那画质，简直是对眼睛和大脑的侮辱啊。既然不玩游戏，那手机本身的性能就不需太多考虑。iPhone的系统和机器配置基本是搭配好的，不要跨太远，性能都够用。看书有Kindle，平时手机还真就是用来通讯，偶尔看看B站。续航问题不用太苛刻。对于摄影爱好者，优秀的摄像质量也是很重要的。有4K岂不美哉。新的手机没有了指纹home键，这点我直接崩溃了。如果以后的机器还是没有home键，恐怕我会买上几个iphone8备着。接着我就上网开始找途径购买，官方售价500多欧，有点顶不住，一个镜头的钱啊。其他地方大概400出头能搞到，但还是肉疼。于是我想，为什么这么偏执的追求iPhone8呢，之前似乎粉的是SE。和5S几乎一样的外观，没有突起的摄像头，直来直去的边框，小巧的机身…… 赶快回顾了一下参数，嗯，NFC，嗯，4K，嗯，二代指纹，嗯，livephoto。再一看价格，64G只要200欧。这……还用多想么，于是就这么下单了……
上学经过的小路边的杂草总算是被修平了，野草汁液混合着淡淡的农家肥的味道倒是清新，我却又不敢大口地吸气。感觉吸进了这些分子就和吃了粪一样，老实说，粪我是没吃过，我也不会太好奇粪的味道究竟和闻起来有没有区别。天，倒是好，只是相比前几日冷了些。风会透过拉绒运动服吹在短袖衬衫上，要是车骑快了，手臂不禁凉飕飕的。冷就冷吧，也就这么点路，屋里情况可能更糟一点。开着暖气理当是温暖干燥，大概是圣诞节前夜点起壁炉，映着火光还能烤几个面包留着早上吃。松木燃烧加上酵母味的面包我是最喜欢的。然而我的房间没有松木，只有前天误把做面包用的酵母面粉加到了本用作煎饼的原料里又将错就错胡乱放进烤箱烤出的产物。这东西压根不能吃啊！我能闻到一股洗衣液的味道，洗完的衣服在德国的习惯是在屋里晾干。于是这个小房间就变成了南方的学生宿舍，还没有空调。热而湿，开了窗又是嫌冷。就这么闷着，也不知道多少洗衣液顺着空气渗进这面包里去。包往床上一扔就坐到电脑前打开网页看了看新视频的播放量，又是一阵失望。晚饭实在是没有什么食欲，开始可能有想吃东西的念头，但看看这面包，念头也没有了。直播也没有什么好点子，索性和同学玩了两把游戏。之后又是一阵索然无味，打开正在准备的演讲PPT，对着仅有的前三张幻灯片模拟演讲并计时，发现没有什么收获就关闭了页面。直播间的页面还没有关掉，正打算关掉的时候看到了自己写的简介，看着是愈发的别扭，想换换风格。上网查了查B站对简介的新要求，想起那满屏幕的代码，果断的关了这些页面。 当我开始盘点回家后我到底干了什么的时候我意识到不想做事是因为觉得无聊，这种感觉果然不好受，如果是高中我应该会希望上课以这样的心态度过，时间飞快，一天天就这么过去了，到头来该干嘛还干嘛。毕业以后每当无聊总是有后怕，毕竟无聊也是浪费的自己的时间，转眼20多岁了，我甚至还有些不敢相信，自己已经过了早恋的年龄了。那种见到老师要好好收敛的心情已经很难再体会到了，这其中的原因大概是我也没有什么去收敛的对象，孤零零的一个人，自称技术宅改变世界，全身心的投入折腾，不需要什么陪伴。这样的想法，至少让我不会太悲观，于是我也不会去多考虑什么谈恋爱的事，耗时耗力耗财，没有正收益，牺牲一点满足感倒也能将就。何乐而不为？周边的人渐渐开始成双成对，自己却迟迟找不到任何能提起自己兴趣的人。[Meting][Music server="netease" id="25706282" type="song"/][/Meting][Meting][Music server="netease" id="355992" type="song"/][/Meting]我发呆之时，脑后突然出现了一段熟悉的旋律，虽然网易云又因为欧盟隐私法停止的服务了，下载的几千首歌大致包含了我常听的曲目。在搜索框内凭追梦二字便找到了这回响在脑海里的音乐。追梦赤子心是高一时的起床铃声，可以说这首歌对我们来说意义很深刻了，高中嘛，晚上搞事情，早上谁没个起床困难症。迫于迟离被扣分的压力，每天起床就像和打仗一样。战友们也十分默契，起床铃一共有三首，一首是夜空中最亮的星，一首是追梦赤子心，还有一首是汪峰的一起摇摆。汪峰的歌先被放出来，虽然他的歌是摇滚乐，但还是很难唤醒我们，四人寝室，要是有一人醒了，要是察觉大家都还睡着，就会顺势躺下去再闭一会眼，别看这几分钟，我感觉这几分钟就好像多睡了几个小时一样，再起来就不会困了。真正起床洗漱走出寝室大多都是追梦赤子心作为BGM，这首歌的旋律也就印在脑子里了。重温这首歌，我又会拾起那些年冬天天色破晓前暖和的被窝里的记忆。那时大概天真的认为只要准时上课，不缺勤就能混得下去吧。当然了，就像在地上找到几年前打破的玻璃逃过清扫留下的碎片一样，记忆片段不断涌现。半夜集体与老鼠奋战，早上伴着这首歌收拾桌椅。每周放学那天早上的歌声总是格外轻松。离开寝室时有些同学跟着广播彪高音。这首歌混合了陈旧的中央空调冬日里吹出暖乎乎却有股味道的空气，混合了一年只晒2次的棉被的味道，混合了前晚食堂夜宵里能挤出油的三明治的味道，混合了衣柜打开时的味道。不知不觉单曲循环近一个小时，我担心会听腻，因为这首歌只能让我回味曾经，而没能记录当下。如今的我，该何去何从呢？——Fkun