首页
归档
关于
友情链接
Search
1
clash for windows允许局域网连接,TAP和TUN模式
80,565 阅读
2
使用emby打造个人影视媒体库
16,462 阅读
3
解决kodi的emby插件无法找到文件...相对路径、绝对路径问题
9,680 阅读
4
Ubuntu to go/Linux to go/将linux系统安装到u盘或移动硬盘
6,769 阅读
5
魔改版rclone挂载世纪互联onedrive
4,696 阅读
技术
软件
文章
其他
登录
Search
标签搜索
sql
sqlserver
vps
onedrive
软件
代理
Oracle
magisk
onelist
世纪互联rclone
世界x流大学.com
transmission
Transmission Remote GUI
pt
ftp
emby插件
emby for kodi插件
qBittorrent
emby
nfo
旁逸斜出
累计撰写
33
篇文章
累计收到
85
条评论
首页
栏目
技术
软件
文章
其他
页面
归档
关于
友情链接
搜索到
33
篇与
yan
的结果
2023-10-19
印象中的音乐
音乐对于影视剧的重要程度毋庸置疑,即便像我这种没什么音乐细胞的人,也记得一些场景。娄烨导演的电影《风中有朵雨做的云》,讲述了社会发展过程中,因钱、因权、因情、因恨发生的一桩故事。故事结局,影片中的主人公各自落了个悲催的结果。当片尾歌曲《一场游戏一场梦》兀自响起,观众突然清醒过来:可不就是一场游戏一场嘛,是可悲呢,还是可惜呢,就留给您听着歌自己体会了。 http://music.163.com/song?id=158924台湾电影《大佛普拉斯》非常辛辣和残忍地对比展现了社会贫富的巨大差距。当片尾曲《有无》响起,虽然歌词听不懂,但似乎有一种大佛看透尘世确仍保着对众生地关怀。http://music.163.com/song?id=484056998贾樟柯的电影一直有非常鲜明的时代声音,《三峡好人》当中的小男孩站在船头,扯着嗓子唱《老鼠爱大米》,当时不懂导演想表达什么,确也记忆深刻。上高中时,每天都睡眠不足。下午吃完饭去上晚自习那会儿一天中经常犯困的时间之一,去了会先进行听力练习,广播里每次都会放《Trouble Is A Friend》,每当明快的旋律想起,就会觉得困意消散了很多。直到现在听起这个,总是会想起当初的时光。突然发现这些音乐总是跟具体的事物关联在了一起,好像单纯听音乐这件事也变得不那么纯粹了,哈哈,大概是缺乏音乐细胞并且想象力不足吧。
2023年10月19日
22 阅读
0 评论
0 点赞
2022-11-28
C#AutoResetEvent和ManualResetEvent介绍
AutoResetEvent和ManualResetEvent是c#用来线程同步的。AutoResetEvent参考:https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.autoresetevent?view=net-7.0Set():将事件设置为已发送信号状态,对于AutoResetEvent来说允许一个正在等待的线程继续执行。如果没有线程在等待,将保持无限期有信号状态。WaitOne():处于无信号状态时,阻塞当前线程直到接收到了信号量如果线程在处于信号状态时AutoResetEvent调用WaitOne,则线程不会阻塞。AutoResetEvent立即释放线程并返回到无信号状态。也就是说如果没有线程在WaitOne,先执行了Set,会导致后调用的第一次WaitOne失效不阻塞,第二次调用WaitOne阻塞会生效using System; using System.Threading; namespace AutoResetEvent_Examples { class MyMainClass { const int numIterations = 100; static AutoResetEvent myResetEvent = new AutoResetEvent(false); static int number; static void Main() { //定义线程并启动,MyReadThreadProc方法接收到信号量后读取当前线程的名字和number并打印 Thread myReaderThread = new Thread(new ThreadStart(MyReadThreadProc)); myReaderThread.Name = "ReaderThread"; myReaderThread.Start(); for(int i = 1; i <= numIterations; i++) { Console.WriteLine("Writer thread writing value: {0}", i); number = i; //Signal that a value has been written. //调用Set()后MyReadThreadProc()从WaitOne()继续执行 myResetEvent.Set(); //Give the Reader thread an opportunity to act. Thread.Sleep(1); } //Terminate the reader thread. myReaderThread.Abort(); } static void MyReadThreadProc() { while(true) { //The value will not be read until the writer has written // at least once since the last read. myResetEvent.WaitOne(); Console.WriteLine("{0} reading value: {1}", Thread.CurrentThread.Name, number); } } } }官网拷贝的代码,只有当Main()中的for循环调用myResetEvent.Set(),MyReadThreadProc()才会收到信号来读取当前线程的名字,否则就会一直停在myResetEvent.WaitOne()而不会继续向后执行。ManualResetEvent参考:https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.manualresetevent?view=net-7.0Set():将事件设置为已发送信号状态,对于ManualResetEvent来说允许所有正在等待的线程继续执行Reset():设置事件无信号,使能够继续阻塞线程using System; using System.Threading; public class Example { // mre is used to block and release threads manually. It is // created in the unsignaled state. private static ManualResetEvent mre = new ManualResetEvent(false); static void Main() { Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n"); //定义三个线程 for(int i = 0; i <= 2; i++) { Thread t = new Thread(ThreadProc); t.Name = "Thread_" + i; t.Start(); } Thread.Sleep(500); Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" + "\nto release all the threads.\n"); Console.ReadLine(); //给信号使ThreadProc()中的WaitOne()之后的代码执行 mre.Set(); Thread.Sleep(500); Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" + "\ndo not block. Press Enter to show this.\n"); Console.ReadLine(); for(int i = 3; i <= 4; i++) { Thread t = new Thread(ThreadProc); t.Name = "Thread_" + i; t.Start(); } //ManualResetEvent在调用Set()之后,WaitOne()并不会阻塞线程,要想阻塞线程,需要调用Reset()使没有信号,才能够继续阻塞线程 Thread.Sleep(500); Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" + "\nwhen they call WaitOne().\n"); Console.ReadLine(); //调用Reset()后继续阻塞线程 mre.Reset(); // Start a thread that waits on the ManualResetEvent. Thread t5 = new Thread(ThreadProc); t5.Name = "Thread_5"; t5.Start(); Thread.Sleep(500); Console.WriteLine("\nPress Enter to call Set() and conclude the demo."); Console.ReadLine(); mre.Set(); // If you run this example in Visual Studio, uncomment the following line: Console.ReadLine(); } private static void ThreadProc() { string name = Thread.CurrentThread.Name; Console.WriteLine(name + " starts and calls mre.WaitOne()"); mre.WaitOne(); Console.WriteLine(name + " ends."); } } /* Start 3 named threads that block on a ManualResetEvent: Thread_0 starts and calls mre.WaitOne() Thread_1 starts and calls mre.WaitOne() Thread_2 starts and calls mre.WaitOne() When all three threads have started, press Enter to call Set() to release all the threads. Thread_1 ends. Thread_0 ends. Thread_2 ends. When a ManualResetEvent is signaled, threads that call WaitOne() do not block. Press Enter to show this. Thread_3 starts and calls mre.WaitOne() Thread_3 ends. Thread_4 starts and calls mre.WaitOne() Thread_4 ends. Press Enter to call Reset(), so that threads once again block when they call WaitOne(). Thread_5 starts and calls mre.WaitOne() Press Enter to call Set() and conclude the demo. Thread_5 ends. */ 简单总结一下二者区别:1.AutoResetEvent调用Set只给一个正在WaitOne的线程信号使之继续执行,ManualResetEvent调用Set会给所有正在WaitOne的线程信号使之继续执行2.在调用Set后ManualResetEvent将保持有信号状态,WaitOne将失效,不再进行线程阻塞,需要重新阻塞的话要调用Reset,但AutoResetEvent(在已经有线程WaitOne的情况下)会自动返回到无信号状态。
2022年11月28日
116 阅读
0 评论
0 点赞
2022-08-09
解决Windows环境变量太大问题
解决Windows环境变量太大问题修改系统环境变量时提示如下错误,弹出该窗体环境变量无法编辑: 解决方案下载Rapid Environment Editor,地址:https://www.rapidee.com/en/download 安装好后右键以管理员身份运行,添加或者编辑指定的环境变量即可 参考:https://blog.csdn.net/COCO56/article/details/102425383
2022年08月09日
266 阅读
0 评论
0 点赞
2022-04-01
Android12的Root教程
以前写过一篇刷机教程:https://www.mihu.live/archives/23/,但是后来随着Android12和新的magisk推出,root的方式发生了一些变化,重新写一篇单独root的教程写在最前面:备份!备份!备份!对于安卓12而言,建议使用修补boot的方式安装magisk,步骤依次是:1.解锁2.下载完整包3.提取boot.img文件4.安装magisk Alpha 版本5.在magisk中 选择并修补一个文件6.fastboot刷入修补boot生成的magisk_patched-xxxxx.img文件解锁小米解BL锁官网:http://www.miui.com/unlock/index.html小米解锁帮助:http://www.mi.com/service/support/BL-loc最新版的小米官方解锁工具要是遇到问题,建议下载个老版本解锁即可。 解锁后打开开发者模式,开启usb调试 如果是其它品牌手机,自行寻找方法解锁会清除手机数据,提前备份。下载完整包建议在通过修补boot的方式安装magisk前先安装一次完整包(如果手机出厂就是Android12,也可以跳过这一步,建议不要跳过,下载最新完整包不会清除数据)不管是否安装完整包,下载都是要的以小米为例:安装完整包设置--我的设备--MIUI版本--右上角--下载最新完整包下载完整包但是上面的办法下载完成后会自动解密,手机就无法保存最新的完整包,所以对于只下载而言,有两种办法:1.直接去小米社区对应手机板块下载对应的卡刷包(推荐使用)2.设置--我的设备--MIUI版本--右上角--下载最新完整包,开始下载后打开系统app下载管理中手动暂停--设置中取消下载最新完整包,但是app下载管理中任务还在,继续下载就可以保存完整包提取boot.img文件需要从与当前系统版本一致的完整版安装包中提取东西,将完整版安装包拷到电脑上,安装包里面有一个payload.bin,直接拖出来或者解压后拿出来。安装payload,地址:https://github.com/ssut/payload-dumper-go/releases,解压之后,拖拽payload.bin到payload-dumper-go.exe打开,就会在目录中多出一个文件夹,里面有一个boot.img,后面需要用。安装magisk Alpha 版本手机下载magisk Alpha 版本,地址:https://t.me/s/magiskalpha,这是一个telegram群组,没有app的可以自己在网上寻找magisk Alpha版本,John Wu是magisk的主要开发者之一,但是Alpha版本他不再开发了,所以后来的Alpha版本是另外一个开发者(https://twitter.com/vvb2060) 在开发(包名为io.github.vvb2060.magisk),他没有开源代码。参考:https://twitter.com/topjohnwu/status/1492885858634006528在magisk中 选择并修补一个文件在手机上安装之后打开,在Magisk那一栏点击安装,选择并修补一个文件,选择boot.img,开始,完成后会在Download文件夹生成一个类似于magisk_patched-24305_Yzkiz.img的文件,magisk_patched-[随机字符串].img,将这个文件拷贝到电脑上fastboot刷入修补boot生成的magisk_patched-xxxxx.img文件手机进入fastboot模式(小米是电源键+音量下键,屏幕上会出现fastboot字样),插上电脑(手机要开启usb调试),在电脑上进入adb,键入命令: fastboot flash magisk_patched-24305_Yzkiz.img (注意路径和文件名)重启手机(fastboot rteboot也可以重启)关于adb的使用的简单说明:下载地址:https://developer.android.google.cn/studio/releases/platform-tools下载完解压方法一: 比如我的SDK工具包路径: E:\Program Files(x86)\platform-tools cmd(win+r输入cmd回车)中输入: E: cd Program Files(x86)\platform-tools 进到SDK文件夹后执行: fastboot flash boot magisk_patched-24305_Yzkiz.img fastboot reboot ************************ 方法二: 进入到platform-tools文件夹,在路径栏中输入cmd,与上面的效果一致重启进入magisk可以看到当前的版本,root成功完结!刷完面具之后的ota升级参考:1.升级之前在magisk中点击 卸载Magisk , 还原原厂映像 2.正常进行ota升级,到100%后不要立即重启手机,在magisk中点击 安装 、 安装到未使用的槽位(OTA后) ,安装后重启手机参考:https://magiskcn.com/https://sspai.com/post/53075
2022年04月01日
1,703 阅读
1 评论
0 点赞
2021-12-26
Mssql数据库日期格式处理
基本格式系统时间 select GETDATE(); 格式转换字符串转日期select convert(datetime,'2021-02-27 15:52:15') --2021-02-27 15:52:15.000 select convert(datetime,'2021-02-27 15:52:15',20) --2021-02-27 15:52:15.000 select convert(datetime,'2021/02/27 15:52:15',111) --2021-02-27 15:52:15.000 select convert(datetime,'2020',20) --2020-01-01 00:00:00.000日期转字符串select CONVERT(VARCHAR(20),GETDATE(),120) --12 26 2021 6:47PM select CONVERT(VARCHAR(20),GETDATE()) --2021-12-26 18:47:46 select CONVERT(VARCHAR(32),GETDATE(),111) --2021/12/26CONVERT(data_type(length),data_to_be_converted,style)data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。{collapse}{collapse-item label="style值对应的格式" open}参考:https://www.w3school.com.cn/sql/func_convert.asp Style ID Style 格式100 或者 0 mon dd yyyy hh:miAM (或者 PM)101 mm/dd/yy102 yy.mm.dd103 dd/mm/yy104 dd.mm.yy105 dd-mm-yy106 dd mon yy107 Mon dd, yy108 hh:mm:ss109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)110 mm-dd-yy111 yy/mm/dd112 yymmdd113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)114 hh:mi:ss:mmm(24h)120 或者 20 yyyy-mm-dd hh:mi:ss(24h)121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)130 dd mon yyyy hh:mi:ss:mmmAM131 dd/mm/yy hh:mi:ss:mmmAM{/collapse-item}{/collapse}其他计算命令计算本年天数 select datediff(d,t.curr_year,dateadd(yy,1,t.curr_year)) from (select dateadd(d,-datepart(dy,getdate())+1,getdate()) curr_year) t select datediff(d,t.curr_year,dateadd(yy,1,t.curr_year)) from (select dateadd(d,-datepart(dy,convert(datetime,'2020',20))+1,convert(datetime,'2020',20)) curr_year) t 也可以用下面判断闰年的方法返回天数 DATEDIFF() 函数返回两个日期之间的时间 DATEADD() 函数在日期中添加或减去指定的时间间隔 DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等判断闰年 select case when(YEAR(GETDATE())%4=0 and YEAR(GETDATE())%100<>0 or YEAR(GETDATE())%400=0) then '闰年' else '平年' end某月的第一天,最后一天 select dateadd(m, datediff(m,0,getdate()),0) select dateadd(day ,-1, dateadd(m, datediff(m,0,getdate())+1,0)) 附: Oracle日期转换
2021年12月26日
139 阅读
1 评论
0 点赞
1
2
...
7