【完结】囚生CYの备忘录(20230628~20230817)
序言
最近一个月,从毕业开题到论文投稿,睡眠不足,精神紧绷到了极点,尽管如此,即便是在黄梅雨季,我依然保持每天的训练量,虽有力不从心(又是觉得自己老了的一天)。25号凌晨三点半投完稿,决心要好好休整两天找回状态,结果又被陈发端拉去搞互联网+(画饼√)大赛,赶DDL做了两天PPT加答辩,总算手头事情告一段落。
眼下是毕业季尾声,对我来说,似乎与平常略无差别,只是眼中多了些许喧嚣,耳边却少了几分摇曳。过客往矣,不属于自己的回忆终究消弥,然而谁又可知晓,当下的交错是否成为未来交响的前奏?
其实依然还是很开心,这三年能获得许多志同道合的朋友,让我知道自己走的路并不孤单。无论科研抑或跑步生涯,这两条路或许潜移默化地成为我前半生、乃至整个一生中最重要的生命线。
写在序言的最后,要接受场上有比你跑得快的人,不自量力地去跟跑只会让你失去节奏,乃至无法坚持完全程,最优的长跑策略永远是渐进,虽然很多人连匀速巡航都很难做到,但也总比没脑子的乱冲好。最近与一些本科生接触得多,明显感觉一届比一届卷,以前我读本科的时候都是GPA不行的去创院谋求出路,现在创院全是专业第一去刷战绩,只为了将来在奖学金、保研、出国的时候多一分筹码。人生像是一场超级马拉松,虽然途中补给点的食物有限,去得晚了就只能喝到一口水,但是吃得多未必就能跑得更快,跑得更远。最重要的永远是跑完全程,至少终点的大门永远是开放的,无非是我们以何种姿态去通过罢了。
文章目录
- 序言
- 20230628
- 20230629
- 20230630~20230701
- 20230702
- 20230703
- 20230704~20230707
- 20230708
- 20230709~20230710
- 20230711
- 20230712
- 20230713
- 20230714~20230715
- 20230716~20230717
- 20230718~20230719
- 20230720
- 20230721~20230722
- 20230723~20230725
- 20230726
- 20230727~20230729
- 20230730~20230731
- 20230817(完)
- 后记
20230628
- 昨天下午五点答辩完,疲累得要昏倒,去新园光速恰五个生煎包,回去洗澡倒头就睡,七点半自然醒,回了半管血,直接去跟嘉伟上一波强度(2000米+3000米+2000米冷身,配速3’52"+4’00"+4’25"),一下子整个人满血满蓝复活,回实验室肝到十二点,下楼时都感觉有使不完的力气,那一瞬,觉得自己的身体确实依然年轻。
- 今天自感状态极佳,不自量力地想要在32℃的夏夜冲一次万米,结果4’03"配速4000米就跑崩,这个气温是无法支撑这个配速的。嘉伟下课来了之后,跟着以3’55"左右的配速硬顶了3000米间歇,跑完浑身又烫又湿,明显比昨天要恶劣得多。
gradio@DataFrame:
import gradio as grdef filter_records(records, gender):return records[records["gender"] == gender]demo = gr.Interface(filter_records,[gr.Dataframe(headers=["name", "age", "gender"],datatype=["str", "number", "str"],row_count=5,col_count=(3, "fixed"),),gr.Dropdown(["M", "F", "O"]),],"dataframe",description="Enter gender as 'M', 'F', or 'O' for other.",
)
if __name__ == "__main__":demo.launch()
20230629
- 再遇AK,他刚从昆明飞回来,下飞机一下子感觉从冬天走到了夏天,暂时有点水土不服,所以晚上胜之不武地拿捏了一下他(我能吹一年,今天才知道AK大二的时候全马就开250了,高原血统名不虚传)。首先是3000米乳酸跑(11’55",近期最好成绩,实话说3’58"的配速跑起来不算吃力,但今晚34℃比昨晚还要热,属实难顶),休息3分钟练5圈变速(3快2慢,快圈配速3’40",慢圈配速5’30"),最后跟卢星雨跳了100个双摇接慢摇5圈冷身,她最近也基本上每天有练,只是时间没撞上,而且她也卷得要死,光今晚零碎加起来就跑了有10km。
- 最近学校半开放,田径场高手很多,基本上都是能开四分配左右的老家伙,有机会必是要跟他们过两招。目前我的状态极好,如果是春秋时分,我觉得自己应该有能力冲击PB,不过今年夏天难得可以和许多高手一起训练,也是极好。
gradio@dropdown
import gradio as grdef sentence_builder(quantity, animal, countries, place, activity_list, morning):return f"""The {quantity} {animal}s from {" and ".join(countries)} went to the {place} where they {" and ".join(activity_list)} until the {"morning" if morning else "night"}"""demo = gr.Interface(sentence_builder,[gr.Slider(2, 20, value=4, label="Count", info="Choose between 2 and 20"),gr.Dropdown(["cat", "dog", "bird"], label="Animal", info="Will add more animals later!"),gr.CheckboxGroup(["USA", "Japan", "Pakistan"], label="Countries", info="Where are they from?"),gr.Radio(["park", "zoo", "road"], label="Location", info="Where did they go?"),gr.Dropdown(["ran", "swam", "ate", "slept"], value=["swam", "slept"], multiselect=True, label="Activity", info="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed auctor, nisl eget ultricies aliquam, nunc nisl aliquet nunc, eget aliquam nisl nunc vel nisl."),gr.Checkbox(label="Morning", info="Did they do it in the morning?"),],"text",examples=[[2, "cat", ["Japan", "Pakistan"], "park", ["ate", "swam"], True],[4, "dog", ["Japan"], "zoo", ["ate", "swam"], False],[10, "bird", ["USA", "Pakistan"], "road", ["ran"], False],[8, "cat", ["Pakistan"], "zoo", ["ate"], True],]
)
if __name__ == "__main__":demo.launch()
20230630~20230701
- 昨天晚饭后5000米慢摇,AK本想过来,但七点半开始下大雨。索性在实验室肝到十二点雨停再回去了。
- 然后今天以全盛状态与AK一起跑,最终结果是我9.06km被拉爆,配速4’13"。虽然7000米处拉爆了一次AK,他下场休息等了我一圈再上,但最终我还是没能坚持到10km,说实话,我还是第一次卡在9000米跑不下去,放在以前无论如何都会坚持完最后一段,但是这次是真的,180+的心率,外加30℃的高温,一想到还有整整两圈半,意志完全崩溃了。
- 但有一说一,以前AK能3’40"的配速在七八月的烈日下连跑35km,他状态确实极差,而且刚从云南过来有点不适应上海的高温,所以今晚严格来说是五五开,我踏马又能吹一年。泳帽泳镜泳裤到手,明天开始早上跟东哥学游泳,准备花一周时间速成。
gradio@File
from zipfile import ZipFileimport gradio as grdef zip_to_json(file_obj):files = []with ZipFile(file_obj.name) as zfile:for zinfo in zfile.infolist():files.append({"name": zinfo.filename,"file_size": zinfo.file_size,"compressed_size": zinfo.compress_size,})return filesdemo = gr.Interface(zip_to_json, "file", "json")if __name__ == "__main__":demo.launch()
20230702
- 游泳上手很快,虽然从高中之后有快十年没下过水,但是现在身体素质也要比之前好很多,而且并不怯水,半小时基本上就能无辅助完成潜水蛙泳腿,而且肺活量7000+,25米的泳池我能从头潜到尾都不用换气。但是后来东哥开始教我换气就不行了,很难协调得好,不是肩膀紧张得蜷缩,就是忘记呼气,而且抬头时总是吸不到气(但是能吸到很多水),有种水下压力太大,挤着肺吸不进去气的感觉。东哥说三节课保证让我游起来,速成一波蛙泳,以后就能去干铁三了。
gradio@Gallery
# This demo needs to be run from the repo folder.
# python demo/fake_gan/run.py
import randomimport gradio as grdef fake_gan():images = [(random.choice(["https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=387&q=80","https://images.unsplash.com/photo-1554151228-14d9def656e4?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=386&q=80","https://images.unsplash.com/photo-1542909168-82c3e7fdca5c?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8aHVtYW4lMjBmYWNlfGVufDB8fDB8fA%3D%3D&w=1000&q=80","https://images.unsplash.com/photo-1546456073-92b9f0a8d413?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=387&q=80","https://images.unsplash.com/photo-1601412436009-d964bd02edbc?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=464&q=80",]), f"label {i}" if i != 0 else "label" * 50)for i in range(3)]return imageswith gr.Blocks() as demo:with gr.Column(variant="panel"):with gr.Row(variant="compact"):text = gr.Textbox(label="Enter your prompt",show_label=False,max_lines=1,placeholder="Enter your prompt",).style(container=False,)btn = gr.Button("Generate image").style(full_width=False)gallery = gr.Gallery(label="Generated images", show_label=False, elem_id="gallery").style(columns=[2], rows=[2], object_fit="contain", height="auto")btn.click(fake_gan, None, gallery)if __name__ == "__main__":demo.launch()
20230703
- 早上已经能把蛙泳上手八成了,现在可以无辅助换三四次气,水喝得也明显少了(主要我发现可以先鼻子呼气,然后头露出水面再吸一大口,如果用嘴呼气就很容易吸气时喝水),可以歪歪扭扭游个十来米,明天最后再练一天,完全掌握蛙泳(其实我感觉自由泳也差不多是触类旁通的,蝶泳可能确实有点难,反正会一个就够了),也算是不枉费这三天时间学游泳。
- 晚上AK继续约我和嘉伟跑步,我提前跟嘉伟说最近AK胯得不行(因为我状态依然全盛,有种来多少量都能跑得下来的),然后今天AK就好好地给我俩上了一课。训练总量为(4000米@4’05"/km)×2+(400米@1’15"~1’20")×4。
- 第一组4000米是我带,相对比较稳,因为4’05"在我的乳酸阈上,对于他俩则相对轻松些。
- 然后AK给我们休息了不到5分钟,开始带第二组4000米,这就开始不当人了,AK明显状态已经恢复了不少,前2000米就带到四分整(不要小看4’05"和4’00"的差距,我练了快两年都无法突破),2000米处我退出(事后嘉伟说他第二个2000米时也感觉不行了,看我下去后,他意志也难以坚持得住,但是他确实还是坚持顶完第二个4000米),等了一圈继续跟上,又跟着跑了1400米,还是坚持不下去(刚好到他们最后200米冲刺,我看根本跟不上他们的冲刺速度,就完全泄气了)。
- 本来以为两组4000米就完了,AK表示还要再来4个400米间歇,嘉伟表示完全不行了(最后嘉伟只带跑了最后一组400米),我因为第二个4000米偷懒,所以还是硬着头皮跟AK跑400米间歇,第一组1’20",第二组1’16",间歇90秒,完全上头,躺在草地上动弹不得,第三组AK独自跑,最后一组我们仨一起上,嘉伟差不多冲到1’08",我和AK压在1’15"。
- 小插曲:
- 第二组4000米最后一圈开始时,AK在前面问,要不要冲一圈,嘉伟在我后面说冲不了!(后来改口说能冲半圈),跑完AK问要不要再来几个400,嘉伟也说跑不了!,第一次从嘉伟嘴里听到这三个字。跑完两个4000米他躺草地上一动不动,像是第一次看到嘉伟的战败CG。
- 第二组4000米我跟在AK身后,AK一旦加速,我就明显呼吸特别沉重,AK听到就会稍微压一下配速,事后跟我说,我的呼吸节奏又快又重,比赛时很容易让身边的人感觉到压力。其实我以前是能做到3步一呼3步一吸的标准呼吸频率的,后来改跑步频从180+掉到175,就感觉呼吸和步频很难对得上,索性就改2步一呼2步一吸,从经济性上来说,这样呼吸确实是比较费力的。
gradio@HTML
import gradio as gr
import os
os.system('python -m spacy download en_core_web_sm')
import spacy
from spacy import displacynlp = spacy.load("en_core_web_sm")def text_analysis(text):doc = nlp(text)html = displacy.render(doc, style="dep", page=True)html = (""+ html+ "")pos_count = {"char_count": len(text),"token_count": 0,}pos_tokens = []for token in doc:pos_tokens.extend([(token.text, token.pos_), (" ", None)])return pos_tokens, pos_count, htmldemo = gr.Interface(text_analysis,gr.Textbox(placeholder="Enter sentence here..."),["highlight", "json", "html"],examples=[["What a beautiful morning for a walk!"],["It was the best of times, it was the worst of times."],],
)demo.launch()
20230704~20230707
- 昨晚跟AK带嘉伟跟我去同济129训练营试训了一次,确实人多一起跑效果是不一样,AK这些天恢复了九成力,精英组的强度对已经不在话下。嘉伟如若巅峰,应该也能跟住精英组,不过他最近有点不在状态(即便如此也要比我强不少),还是跟我一起跑高级组。
- 第一个4k@355不算太艰难,因为人多节奏稳定,355的配速顶十圈勉强能行(虽然我一个人跑大概率3000米就崩了),但是后面300米×10和200米×5就很极限了,尽管配速要求并不高(以我的水平为例,队内400米间歇一般在1’15"~1’20",所以200米42秒并不超纲,而且300米比400米要显著得容易),但是间歇时间短得可怕,300米只给40秒休息,200米甚至只有20秒。嘉伟硬是保质保量完成了所有间歇,我300米过了5组,后面就已经无法完成预定配速要求,后面的200米心肺更是疼得要命,根本冲不起来,20秒的时间怎么可能把心率从接近180的水平降下来,但即便如此,高级组内还有同济的女生跟着练,水平差距可见一斑。
- 今天最后跟东哥学一次游泳,这是第四次课,基本上蹬腿得感觉已经很好了,纠正了一下手和换气的动作,已经能在1.8米的深水区游(深水区换气时沉得太深就明显被压得难受,气憋不住的时候要拉住旁边的泳道线才能稳住,不然溺水的恐惧还是挺可怕的),25米泳池勉强能坚持一个来回(记表25米要一分钟出头,远远不够看)。
gradio@highlightedtext
from difflib import Differimport gradio as grdef diff_texts(text1, text2):d = Differ()return [(token[2:], token[0] if token[0] != " " else None)for token in d.compare(text1, text2)]demo = gr.Interface(diff_texts,[gr.Textbox(label="Text 1",info="Initial text",lines=3,value="The quick brown fox jumped over the lazy dogs.",),gr.Textbox(label="Text 2",info="Text to compare",lines=3,value="The fast brown fox jumps over lazy dogs.",),],gr.HighlightedText(label="Diff",combine_adjacent=True,show_legend=True,).style(color_map={"+": "red", "-": "green"}),theme=gr.themes.Base()
)
if __name__ == "__main__":demo.launch()
20230708
- 晚上约跑AK,刚好商学院的MBA在备赛玄奘之路,AK不愧是圈内名人,商学院练长跑的人可能不知道李奇宽是谁,但是我说出AK一下子就都侧目而视,“跟AK约跑的肯定是高手”。
- AK总量10k(4’25",对他来说已经是很慢了,就算是高手平时也会这样慢跑,跟着跑了10圈),后我跟嘉伟节奏跑4k(4’10"),后面断断续续慢跑了3k,极其湿闷,昨晚下完雨那阵子是真的凉快,今天下完雨还是蒸笼一样,被迫赤膊,以前都会有人来敦促禁止裸露上身,同济就不管这些。
gradio@Image
import gradio as gr
import osdef image_mod(image):return image.rotate(45)demo = gr.Interface(image_mod,gr.Image(type="pil"),"image",flagging_options=["blurry", "incorrect", "other"],examples=[os.path.join(os.path.dirname(__file__), "images/cheetah1.jpg"),os.path.join(os.path.dirname(__file__), "images/lion.jpg"),os.path.join(os.path.dirname(__file__), "images/logo.png"),os.path.join(os.path.dirname(__file__), "images/tower.jpg"),],
)if __name__ == "__main__":demo.launch()
20230709~20230710
- wyl日常提前不到48小时布置任务,又是赶ddl的周末。
- 日常是被AK教育的夜跑,开局说好的诚信有氧4’20",结果抬腿就是3’55"。第一组是5k@353,我跟了3k就崩了,停了一圈又跟了1k,尽力局。休息五分钟,第二组2k@357,这组勉强跟完。第三组2k本来以为是放松跑,结果抬腿又是400,这组只跟了1k,完全力竭,再起不能。
- AK巅峰期全马配速3’43",段位差得不是一星半点,下次争取能跟更久些,这个夏天或许能破开4分配的大关。
gradio@JSON
from zipfile import ZipFileimport gradio as grdef zip_to_json(file_obj):files = []with ZipFile(file_obj.name) as zfile:for zinfo in zfile.infolist():files.append({"name": zinfo.filename,"file_size": zinfo.file_size,"compressed_size": zinfo.compress_size,})return filesdemo = gr.Interface(zip_to_json, "file", "json")if __name__ == "__main__":demo.launch()
20230711
- 真是服了wyl这老六,下午去了两趟办公室都没人,害得我都没睡午觉,晚饭后回去想小眯会儿,然后晚上六点半说七点半开会,一路狂奔回实验室,真是要骂娘了。
- 晚上下会去慢摇了5k(24’23",5分配,最后冲了一圈),今日出梅,夏练三伏,热得要命。
- 后天129跑团在复旦南区操场训练,课表是 ( 1 km fast + 200 m slow ) × k (1\text{km fast}+200\text{m slow})\times k (1km fast+200m slow)×k,精英组要求3’40"配速,共计8组;高级组要求大大降低,配速仅4’00",只要跑7组。之前队里1k×6的间歇能跑到3’45"以内的(间歇5分钟),但是这个间歇太短,200米慢跑最多1分半,相当于是21圈变速,而且超过80%的区间是快跑,加上天气炎热,对我来说高级组还是有些挑战的,对嘉伟就容易多了,但他现在应该无法挑战精英组。
gradio@label
from math import log2, pow
import osimport numpy as np
from scipy.fftpack import fftimport gradio as grA4 = 440
C0 = A4 * pow(2, -4.75)
name = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]def get_pitch(freq):h = round(12 * log2(freq / C0))n = h % 12return name[n]def main_note(audio):rate, y = audioif len(y.shape) == 2:y = y.T[0]N = len(y)T = 1.0 / rateyf = fft(y)yf2 = 2.0 / N * np.abs(yf[0 : N // 2])xf = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)volume_per_pitch = {}total_volume = np.sum(yf2)for freq, volume in zip(xf, yf2):if freq == 0:continuepitch = get_pitch(freq)if pitch not in volume_per_pitch:volume_per_pitch[pitch] = 0volume_per_pitch[pitch] += 1.0 * volume / total_volumevolume_per_pitch = {k: float(v) for k, v in volume_per_pitch.items()}return volume_per_pitchdemo = gr.Interface(main_note,gr.Audio(source="microphone"),gr.Label(num_top_classes=4),examples=[[os.path.join(os.path.dirname(__file__),"audio/recording1.wav")],[os.path.join(os.path.dirname(__file__),"audio/cantina.wav")],],interpretation="default",
)if __name__ == "__main__":demo.launch()
20230712
- 之前每晚一直注意到一个蓝衣男在跑,跑姿经济型很差,上半身像钟摆一样左右摆动,但就是跑得贼快,我穿便服跟过一次,发现竟然配速能在4分配以内,十分震惊。然后今晚我独自练了3000米(12’50",其实状态还好,奈何实在太热)后,恰好他进场,便约定一起跑5圈,他说他刚在外头玩了几天回来,暂时还是恢复跑,结果抬腿就是3’40"的配速,整个要把我拉爆的架势,跟了3圈之后力不能逮,暗暗称奇,除了嘉伟和AK之外,这个学校里竟然还有能拉爆我的人。
- 于是我邀请他一起参加团训,巧的事情来了,他居然也是扬州人,甚至与我一样老家邵伯镇。老乡见面,少不了一番通气,他长我两岁,毕业于邗江中学,目前博二在读,而且他的名字和去年闹得沸沸扬扬的江西失踪高中生(胡鑫宇)一模一样,他说都想去改名,以至于去年辅导员一阵子没联系到他时都去报警了(笑死)。他跑龄至少六年,比我长一倍,平时跑量很大,每周会跑4~5次万米,但是缺少专业指导和力量训练,只是一个人随意的跑,因此跑姿明显很差,但是即便如此,也有曾将万米跑进过40分钟的pb,硬实力确实在我之上。
gradio@Lineplot:
import gradio as gr
from vega_datasets import datastocks = data.stocks()
gapminder = data.gapminder()
gapminder = gapminder.loc[gapminder.country.isin(["Argentina", "Australia", "Afghanistan"])
]
climate = data.climate()
seattle_weather = data.seattle_weather()## Or generate your own fake data, here's an example for stocks:
#
# import pandas as pd
# import random
#
# stocks = pd.DataFrame(
# {
# "symbol": [
# random.choice(
# [
# "MSFT",
# "AAPL",
# "AMZN",
# "IBM",
# "GOOG",
# ]
# )
# for _ in range(120)
# ],
# "date": [
# pd.Timestamp(year=2000 + i, month=j, day=1)
# for i in range(10)
# for j in range(1, 13)
# ],
# "price": [random.randint(10, 200) for _ in range(120)],
# }
# )def line_plot_fn(dataset):if dataset == "stocks":return gr.LinePlot.update(stocks,x="date",y="price",color="symbol",color_legend_position="bottom",title="Stock Prices",tooltip=["date", "price", "symbol"],height=300,width=500,)elif dataset == "climate":return gr.LinePlot.update(climate,x="DATE",y="HLY-TEMP-NORMAL",y_lim=[250, 500],title="Climate",tooltip=["DATE", "HLY-TEMP-NORMAL"],height=300,width=500,)elif dataset == "seattle_weather":return gr.LinePlot.update(seattle_weather,x="date",y="temp_min",tooltip=["weather", "date"],overlay_point=True,title="Seattle Weather",height=300,width=500,)elif dataset == "gapminder":return gr.LinePlot.update(gapminder,x="year",y="life_expect",color="country",title="Life expectancy for countries",stroke_dash="cluster",x_lim=[1950, 2010],tooltip=["country", "life_expect"],stroke_dash_legend_title="Country Cluster",height=300,width=500,)with gr.Blocks() as line_plot:with gr.Row():with gr.Column():dataset = gr.Dropdown(choices=["stocks", "climate", "seattle_weather", "gapminder"],value="stocks",)with gr.Column():plot = gr.LinePlot()dataset.change(line_plot_fn, inputs=dataset, outputs=plot)line_plot.load(fn=line_plot_fn, inputs=dataset, outputs=plot)if __name__ == "__main__":line_plot.launch()
20230713
- 晚上复旦南区129团训,高级组(1k+200米)×7,1k配速4’00",200米过渡慢跑,中间不休息,嘉伟勉强坚持完全程(最后一组掉队),我从第4组开始就只能坚持800米,领队第三组起手带到3’45"的配速,直接拉爆,精英组更是带到3’25"的配速,AK都没坚持完精英组。还是有点小瞧今天这个强度了。
- 总之差距很大,而且最近饮食不太规律,导致消化不良,晚上多吃了点儿,两三个小时都消化不掉,跑得时候撑得很。
gradio@markdown
import gradio as grdef welcome(name):return f"Welcome to Gradio, {name}!"with gr.Blocks() as demo:gr.Markdown("""# Hello World!Start typing below to see the output.""")inp = gr.Textbox(placeholder="What is your name?")out = gr.Textbox()inp.change(welcome, inp, out)if __name__ == "__main__":demo.launch()
20230714~20230715
- 晚上陪胡鑫宇跑,他应该是要比我强,至少也是跟我一个级别,但是今晚可能是他不在状态,跟了我10圈就崩了,而我状态奇佳,也有雨后清爽的加成(虽然极湿而且30℃,但是体感要比前两天好很多),完成近三个月来第一个万米(真的很久不跑长距离,尤其后半程独自顶强度),42’01",配速4’12"。
- 最后2000米是掐着表跑的,很希望能破开42分,却仍未如愿,十分遗憾。但是这样一个雨后湿闷的夏夜,能跑出接近巅峰的水平,实无不满。后嘉伟进场,也只是21分钟慢摇了5000米,不多说,拿捏了【滑稽】。
记一个比较罕见的报错:
File "/nfsshare/apps/anaconda3/lib/python3.7/sre_parse.py", line 1021, in parse_templatethis = chr(ESCAPES[this][1])
KeyError: '\\w'
报错的原因我用一个正则regex_compiler = re.compile("_+")来匹配字符串中若干连续的下划线符号,测试中没有发现问题,但是可能是在个别特殊的字符串上匹配出错。想到应该是缺了正则修饰符:
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
因此修改为regex_compiler = re.compile("_+", re.U)可避免错误。
20230716~20230717
- 昨晚AK到的时候田径场下雨关门,AK提议一起爬实验大楼(他们备赛下个月的越野,经常做爬楼训练,团训一般在复旦光华楼,32层,我们的实验楼从B1到天台一共是上下15层),一共爬了5组(上楼3’00"~3’30",下楼坐电梯,一组上下用时4’30"~5’00"),又顶又热,尤其是夏天,越往上越闷热,顶层热气跟蒸笼似的。
- 晚上嘉伟自测场地万米,用时41分整,对他来说不算很快(嘉伟场地万米pb出自去年十月的高百,用时39’45",而去年市运会前他在跑步机上曾跑出37’30"的10k),前5k略慢用时21分多,我去的稍晚,带他最后4k,把后程配速拉了些上来,用时15’40"(看起来状态尚可,其实我除了5k跑进20分的那次以外,还没把4k跑进16分过)。AK也在,但是没有大跑,只是做了些力量训练,后来一起跳了200个双摇和一组400米全力跑。
- 嘉伟下周课上完就回家了,后天王英林的会议开始,到周六结束,我计划会议结束后也要回去一两周,主要是想调养一下身体,说实话现在越来越觉得规律生活很难,不说睡眠,就算是吃饭,尤其是夏天这么热,不想吃很多,正常午饭一个鸭腿带一个菜,晚上就是新园红豆粥/胡辣汤带生煎/煎饺,但是每天消耗又很大,所以一周总有一两天想放开吃,然后那天就撑得要死,一天只吃一顿,饮食太不合理,以至于明显感觉现在胃消化功能退化,一两个小时都消化不完晚饭,跑步有时会撑,怀念从前一日三餐适当的日子唉,人就是这么搞烂自己身体。
gradio@model3d
import gradio as gr
import osdef load_mesh(mesh_file_name):return mesh_file_namedemo = gr.Interface(fn=load_mesh,inputs=gr.Model3D(),outputs=gr.Model3D(clear_color=[0.0, 0.0, 0.0, 0.0], label="3D Model"),examples=[[os.path.join(os.path.dirname(__file__), "files/Bunny.obj")],[os.path.join(os.path.dirname(__file__), "files/Duck.glb")],[os.path.join(os.path.dirname(__file__), "files/Fox.gltf")],[os.path.join(os.path.dirname(__file__), "files/face.obj")],],
)if __name__ == "__main__":demo.launch()
20230718~20230719
- IEAAIE首日,王英林秉承了他一贯的拖延作风,早上七点还要我到办公室叫醒他,然后看到一个刚睡醒衣冠不整的糟老头子,很难接受这是我导师的现实。不过这次也很难怪他,昨天破事一堆,指定是通宵了。三个学校临时凑了十几个session chair来主持和暖场提问,明月姐顶了上下午两场,一场跟个阿三哥艰难沟通,最后是谁也听不懂谁,我这边的场次还好歪果仁比较少,只有一个超帅的德国佬,英文也比较容易听懂,我说的他也能理解,所以基本上没出啥糗,下午其他三个都是中国学生,说实话中国人为什么要用蹩脚的英文沟通,纯纯画蛇添足,说人话又不会死,死要面子活受罪。这破会要开到周六早上,三天半,整个苦力活,除了能蹭王英林几顿饭(不过说实话,申梦的菜确实很合我们江浙这一带的胃口,而且王英林自己点,也清淡些,没那么油腻),就只有一个不知道到啥时候才能报销出来的千把块劳务费,乐。
- 晚上聚餐后先去操场探个风,昨天我其实还是抽空慢跑了一个万米,配速5’23",真·诚信有氧,今晚也是准备慢跑(衣服鞋子都没带,而且一天没休息,没力气上强度),结果各路大仙都在,AK、嘉伟、胡鑫宇、光头大叔、素食大叔、还有一个第一次见的白衣高手(T恤后面印着“精英跑团”,跑的间歇,配速至少3分20以内,快的惊人,AK也不认识他,嘉伟也啧啧称奇,我跟了200米发现完全跟不上他,确实很强),我一下子就泯然路人,只是24分半慢跑了一个5k,然后跟着嘉伟跑了一会儿,实在是没有精力,而且明天同济团训是1.6k@4’04"×6,间歇90秒,留着点儿精力明天玩儿命,今天就不跟大佬们争了。
gradio@number
import gradio as grdef tax_calculator(income, marital_status, assets):tax_brackets = [(10, 0), (25, 8), (60, 12), (120, 20), (250, 30)]total_deductible = sum(assets["Cost"])taxable_income = income - total_deductibletotal_tax = 0for bracket, rate in tax_brackets:if taxable_income > bracket:total_tax += (taxable_income - bracket) * rate / 100if marital_status == "Married":total_tax *= 0.75elif marital_status == "Divorced":total_tax *= 0.8return round(total_tax)demo = gr.Interface(tax_calculator,["number",gr.Radio(["Single", "Married", "Divorced"]),gr.Dataframe(headers=["Item", "Cost"],datatype=["str", "number"],label="Assets Purchased this Year",),],"number",examples=[[10000, "Married", [["Suit", 5000], ["Laptop", 800], ["Car", 1800]]],[80000, "Single", [["Suit", 800], ["Watch", 1800], ["Car", 800]]],],
)demo.launch()
20230720
- 翌日,清净了许多,不用我chair,划水就完事了,下午roomA全是歪果仁,各个国家都有,口音五花八门,还是阿三哥的最难懂。唉,上下午都是应用相关,所以找的都是业界的来chair,下午的chair是个德国佬,做的自动驾驶,听起来还是挺有趣的,这行肯定在汽车专业特别热门,我们这边就很少涉及。包括昨天的keynote speech是做机械手自动化抓取物件的,也很有意思,需要和物理结合,而且这玩意儿数据集构建特别容易,直接仿真就能得到一堆的数据。实用型的自动化智能确实实在。
- 晚上与嘉伟征战同济129操场,高级组1.6k×6,间歇90秒,原定配速是4’04",但是pacer日常不当人,前三组全部是4分配,后三组已经把均配拉到3’57"的水平。不过这个强度其实不算太高,至少比上周和上上周的都要轻松,我确实的坚持完了六组,只有最后一组的最后一圈没跟上(对嘉伟就太轻松,最后一组把pacer都拉爆了,带到3’50"以内,根本不当人)。差强人意,每次高级组能坚持完全程的也就5~7个人,也得到了129团长的肯定。
今天阿里云天池发布的超热门竞赛SMP 2023 ChatGLM金融大模型挑战赛,商业授权免费使用chatglm-6b和chatglm2-12b,而且奖品相当丰厚,当天发布,参赛队伍就飙升到200以上,不容错过。
gradio@plot
import altair as alt
import gradio as gr
import numpy as np
import pandas as pd
from vega_datasets import datadef make_plot(plot_type):if plot_type == "scatter_plot":cars = data.cars()return alt.Chart(cars).mark_point().encode(x='Horsepower',y='Miles_per_Gallon',color='Origin',)elif plot_type == "heatmap":# Compute x^2 + y^2 across a 2D gridx, y = np.meshgrid(range(-5, 5), range(-5, 5))z = x ** 2 + y ** 2# Convert this grid to columnar data expected by Altairsource = pd.DataFrame({'x': x.ravel(),'y': y.ravel(),'z': z.ravel()})return alt.Chart(source).mark_rect().encode(x='x:O',y='y:O',color='z:Q')elif plot_type == "us_map":states = alt.topo_feature(data.us_10m.url, 'states')source = data.income.urlreturn alt.Chart(source).mark_geoshape().encode(shape='geo:G',color='pct:Q',tooltip=['name:N', 'pct:Q'],facet=alt.Facet('group:N', columns=2),).transform_lookup(lookup='id',from_=alt.LookupData(data=states, key='id'),as_='geo').properties(width=300,height=175,).project(type='albersUsa')elif plot_type == "interactive_barplot":source = data.movies.urlpts = alt.selection(type="single", encodings=['x'])rect = alt.Chart(data.movies.url).mark_rect().encode(alt.X('IMDB_Rating:Q', bin=True),alt.Y('Rotten_Tomatoes_Rating:Q', bin=True),alt.Color('count()',scale=alt.Scale(scheme='greenblue'),legend=alt.Legend(title='Total Records')))circ = rect.mark_point().encode(alt.ColorValue('grey'),alt.Size('count()',legend=alt.Legend(title='Records in Selection'))).transform_filter(pts)bar = alt.Chart(source).mark_bar().encode(x='Major_Genre:N',y='count()',color=alt.condition(pts, alt.ColorValue("steelblue"), alt.ColorValue("grey"))).properties(width=550,height=200).add_selection(pts)plot = alt.vconcat(rect + circ,bar).resolve_legend(color="independent",size="independent")return plotelif plot_type == "radial":source = pd.DataFrame({"values": [12, 23, 47, 6, 52, 19]})base = alt.Chart(source).encode(theta=alt.Theta("values:Q", stack=True),radius=alt.Radius("values", scale=alt.Scale(type="sqrt", zero=True, rangeMin=20)),color="values:N",)c1 = base.mark_arc(innerRadius=20, stroke="#fff")c2 = base.mark_text(radiusOffset=10).encode(text="values:Q")return c1 + c2elif plot_type == "multiline":source = data.stocks()highlight = alt.selection(type='single', on='mouseover',fields=['symbol'], nearest=True)base = alt.Chart(source).encode(x='date:T',y='price:Q',color='symbol:N')points = base.mark_circle().encode(opacity=alt.value(0)).add_selection(highlight).properties(width=600)lines = base.mark_line().encode(size=alt.condition(~highlight, alt.value(1), alt.value(3)))return points + lineswith gr.Blocks() as demo:button = gr.Radio(label="Plot type",choices=['scatter_plot', 'heatmap', 'us_map','interactive_barplot', "radial", "multiline"], value='scatter_plot')plot = gr.Plot(label="Plot")button.change(make_plot, inputs=button, outputs=[plot])demo.load(make_plot, inputs=[button], outputs=[plot])if __name__ == "__main__":demo.launch()
20230721~20230722
- 议程结束,王英林连饭都不管,太不负责任了,今早是一些强化学习相关的,才知道前年就有星际争霸2的公开评测任务,项目在https://github.com/oxwhirl/smac,确实挺有趣的,强化学习还是用在游戏上比较有趣,用在别的地方总感觉太牵强,比如他们有的非要用在推荐上,就很不令人信服。
- 晚上慢跑5k,从5分半配速起跑慢慢加到4分整,用时23’37",早上下大雨,中午又出太阳,闷热得很,中午回去想睡觉还停电,喷花露水吹着手提小风扇才勉强入睡,状态一般,实在是难顶。
- 后天嘉伟就回家了,学校确实也冷清了许多,本来计划也是这两天回去一趟,但最近还要在跟王京搞东西,留在学校方便一些,而且说实话,回去半个月养老回来,好不容易练上来的体能和力量肯定又要回退,难得这个夏天一周都有认真训练五六天,真不想在八月份又被打回原形。
最近找到一个比pypdf2好用的pdf解析库,比langchain内置的也要好,文字自不必说,也可以解析表格,但是单元格内有换行的情况仍然不太行,然后跨页表格解析也仍有问题,需要一些后处理调整。
# 提取pdf文字
import pdfplumber
with pdfplumber.open("1.pdf") as pdf:page01 = pdf.pages[0] #指定页码text = page01.extract_text()#提取文本print(text)# 提取pdf表格
import pdfplumber
with pdfplumber.open("1.pdf") as pdf:page01 = pdf.pages[0] #指定页码table1 = page01.extract_table()#提取单个表格# table2 = page01.extract_tables()#提取多个表格print(table1)
20230723~20230725
- 这两天养生跑,今晚稍微上了点强度,冲了一下四分配。这周129还是在同济,高级组2k@405×2+1k@400×2+800m@3分×2,看起来也不是特别难跑,但是大组间不休息,小组间是400米慢跑过渡,估计跟上上周1k×7的效果差不多,没有间歇休息,难度肯定还是挺大的。
- 但是眼下又被wyl这老六整破事,周五有个横向要汇报,事情自然落在还在学校地冤大头上,就刚好我周六准备回家一下,卡在这节骨眼上,真倒霉。
- AK昨天入职,之前跟我说创业团队突然解散了,就很迷。工作地方离学校这边还挺远,每天八点多才能回来,但还是坚持九点来学校练一会儿。他现在住仁德路上,因为近期他还在备战越野,估计过一阵子可能会搬到浦东去,相聚总是太短暂了,生活也是如此真实。
pdfplumber解析表格问题解决:
目前.extract_tables方法基本上可以解决绝大多数问题,主要存在两个主要问题无法解决:
- 单元格内换行
- 跨页表格
此外就是对空白的处理。目前来说跨页表格处理相对容易,无非是判断上下两个表格是否相连,但是单元格内换行的情况太复杂,虽然需要结合.extract_text_lines提供的每个字符的绝对位置坐标来判断某一行是否是换行得到的,破预处理搞得跟算法设计似的,而且有的表格存在单元格合并的问题这也是挺难识别的。
20230726
- 晚上AK八点半过来,而且第一次看到之前一直跟着跑高级组的那个阿姨(或许叫姐姐合适点儿… 30多岁的样子,但是女人的年龄是不可以妄自猜测的,或许是40多只是保养得比较好…)来财大操场跑步,其实她住在新江湾城那边,较同济而言,离财大还近一些,不过我确实第一次看到她来这儿跑。
- 我跟AK带她跑了15×400米变速,8圈快7圈慢,快圈1’30"以内,慢圈2’30"以内,其实对男性来说这个速度不算太难对付,但是女性能坚持下来的确令人称赞。
- 虽然上周高级组这位阿姨没有跟完(但她一直都是在高级组练的),但是从课表来看,她的水平极大概率在我之上,强得离谱。她说这周六的课表是41分钟跑10km(我自己场地万米PB仅41’30"),而且她今年的目标是全马破三,对于男性来说全马破三足以称为业余精英(以嘉伟的半马成绩1:24:34推测,全马也不足以跑进3小时),女性国家一级运动员线是3小时19分,能破三已是半职业水平。
gradio@radio
import gradio as grdef sentence_builder(quantity, animal, countries, place, activity_list, morning):return f"""The {quantity} {animal}s from {" and ".join(countries)} went to the {place} where they {" and ".join(activity_list)} until the {"morning" if morning else "night"}"""demo = gr.Interface(sentence_builder,[gr.Slider(2, 20, value=4, label="Count", info="Choose between 2 and 20"),gr.Dropdown(["cat", "dog", "bird"], label="Animal", info="Will add more animals later!"),gr.CheckboxGroup(["USA", "Japan", "Pakistan"], label="Countries", info="Where are they from?"),gr.Radio(["park", "zoo", "road"], label="Location", info="Where did they go?"),gr.Dropdown(["ran", "swam", "ate", "slept"], value=["swam", "slept"], multiselect=True, label="Activity", info="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed auctor, nisl eget ultricies aliquam, nunc nisl aliquet nunc, eget aliquam nisl nunc vel nisl."),gr.Checkbox(label="Morning", info="Did they do it in the morning?"),],"text",examples=[[2, "cat", ["Japan", "Pakistan"], "park", ["ate", "swam"], True],[4, "dog", ["Japan"], "zoo", ["ate", "swam"], False],[10, "bird", ["USA", "Pakistan"], "road", ["ran"], False],[8, "cat", ["Pakistan"], "zoo", ["ate"], True],]
)if __name__ == "__main__":demo.launch()
20230727~20230729
- 前天赶ddl,昨天跟王英林去盛亚把破pre给汇报掉,业界的人现在总是异想天开,想把主观性很强的工作给自动化,其实很多事情是需要人来权衡的,跳过了人这一重要环节,结果就并不那么可信了。所以无奈错过了周四最后一次129团训(因为今天已经回扬州),这周是短程变速,正是弱项所在,而高级组是以全马破三为标准在训练,精英组则是250以内,当然我离破三差了十万八千里,手表给我的预测连三个半小时都跑不进(但我猜想应该在320左右)。
- 调养状态,最近饮食作息过于失调了,晚上先试跑6000米的船闸环线,用时25’59",均配4’19",差强人意,最后1k冲到四分配,之前似乎没有把这条线跑进过4’20"的配速,路跑长坡较多,体感跟场地4’10"~4’15"配速接近。
pdf表格处理算法:
def naive_alg(table_dataframe):result_dataframe = {column: list() for column in table_dataframe.columns}columns = table_dataframe.columnsi = 0while i < table_dataframe.shape[0]:column_data_i = {column: table_dataframe.loc[i, column] for column in columns}if not column_data_i[columns[0]] == column_data_i[columns[0]]:# Find NaN at the beginningmemory = {column: [column_data_i[column]] for column in columns}j = icount_nan_above = 1while j < table_dataframe.shape[0] - 1:# Skip NaN until finding textj += 1column_data_j = {column: table_dataframe.loc[j, column] for column in columns}for column in columns:memory[column].append(column_data_j[column])if column_data_j[columns[0]] == column_data_j[columns[0]]:# Finding textbreakelse:# Find NaNcount_nan_above += 1logging.debug(f"count_nan_above: {count_nan_above}")count_nan_below = 0flag_finding_nan = Falsewhile j < table_dataframe.shape[0] - 1:# Skip text until finding NaNj += 1column_data_j = {column: table_dataframe.loc[j, column] for column in columns}if not column_data_j[columns[0]] == column_data_j[columns[0]]:# Finding NaNflag_finding_nan = Truecount_nan_below += 1for column in columns:memory[column].append(column_data_j[column])if count_nan_below == count_nan_above:j += 1breakelse:# Finding textif flag_finding_nan:breakelse:for column in columns:memory[column].append(column_data_j[column])logging.debug(f"memory: {memory}")combined_memory = {column: ''.join(list(map(lambda x: x if x == x else '', memory[column]))) for column in columns}logging.debug(f"combined_memory: {combined_memory}")[result_dataframe[column].append(combined_memory[column]) for column in columns]i = jelse:i += 1[result_dataframe[column].append(column_data_i[column]) for column in columns]columns = [result_dataframe[column][0] for column in table_dataframe.columns]result_dataframe = {key: value[1:] for key, value in result_dataframe.items()}result_dataframe = pandas.DataFrame(result_dataframe)result_dataframe.columns = columns[:]return result_dataframe
20230730~20230731
- 七月的最后两天,两个7k路跑,配速4’46"和4’37",这个月可能是近一年半以来跑量最大的一个月了,光是手表统计的跑量就有135km,算上平时不开表的慢摇,有150k向上。
给老妈的线上课程做了一个自动化听课的脚本,这个课程的特点是视频每隔5分钟左右跳出对话框,上面有两个按钮,分别让你选择是继续听课还是返回学习中心,而且每次按钮的位置都不一样,最重要的是这视频还是用flash player播放的,现在最新的Firefox和Chrome都不支持这种格式的视频了,只有国产浏览器能播放,360自然是不考虑的,只能用QQ浏览器凑合着了。
本来这个问题用selenium写一个监听器WebDriverWait来监听按钮是否出现就完事了,但是试了很久都没能用ChromeDriver驱动起来QQ浏览器,找了很多回答,但都不奏效,比如:
from selenium import webdriver
options = webdriver.ChromeOptions()
#伪装成iPhone手机对网页进行访问,此时访问的页面可能和通过游览器访问的不同,
#但此时可以在页面中解析文本内容,有利于进行信息爬取;
options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3')
options.binary_location = r'D:\QQ游览器\QQBrowser\QQBrowser.exe'#qq游览器的位置
driver = webdriver.Chrome(r'D:\anaconda_64anzhuang\chromedriver.exe', options=options)#chromedriver驱的存放位置
driver.get('https://www.baidu.com/')
最后想了个特别笨的方法:
# -*- coding: utf-8 -*-
# @author: caoyang
# @email: caoyang@163.sufe.edu.cnimport cv2
import time
import numpy
import pyautoguifrom pynput.keyboard import Key, Controller as KeyController
from pynput.mouse import Button, Controller as MouseControllertolerance = 2
color_1 = numpy.array([195, 223, 126])
color_2 = numpy.array([254, 215, 109])print("准备开始 ...")time.sleep(5)while True:image = pyautogui.screenshot()cv2.imwrite(f"screenshot-{time.strftime('%Y%m%d%H%M%S')}.png", image)image = cv2.cvtColor(np.asarray(image), cv2.COLOR_RGB2BGR)flag_1 = (image <= color_1 + tolerance) * (image >= color_1 - tolerance)res_1 = (numpy.sum(flag_1, axis=-1) == 3)res_1 = numpy.where(res_1 == 1)flag_2 = (image <= color_2 + tolerance) * (image >= color_2 - tolerance)res_2 = (numpy.sum(flag_2, axis=-1) == 3)res_2 = numpy.where(res_2 == 1)print(res_1)print(res_2)x0_per = numpy.percentile(res_1[0], [10, 50, 90])y0_per = numpy.percentile(res_1[1], [10, 50, 90])x1_per = numpy.percentile(res_2[0], [10, 50, 90])y1_per = numpy.percentile(res_2[1], [10, 50, 90])print('#' * 64)m = MouseController()pos = m.positionm.move(y1_per[1] - pos[1], x1_per[1] - pos[0])m.press(Button.left)m.release(Button.left)time.sleep(10)
就是每隔10秒,用pyautogui截图,然后color_1 = numpy.array([195, 223, 126]),color_2 = numpy.array([254, 215, 109])是用取色器确定的两个按钮的颜色,最后用flag_1和flag_2判断按钮的位置(因为可能其他地方会有颜色相近的块,所以利用分位数大致确定按钮的中心坐标numpy.percentile),最后模拟点击即可。
20230817(完)
- 又鸽了很久,其实算不上懒,回家的生活确实单调。虽说老妈对我跑步已经是半默许的态度,但是经不住外婆天天唠叨,外婆就希望我养得白白胖胖的,所以后来我都是两天一跑(而且纯慢跑),隔一天用哑铃单臂划船(给129那帮鬼背大叔震惊了,跑步确实要练背),用的6kg的哑铃,一组左右臂各25个,做4组,感觉特别困难,昨天试了一下单杠,不出所料,引体还是一个上不去,练了等于没练。
- 15号赶早返沪,当天晚上去操场溜了一下,人很齐,光头大叔、素食大叔、AK都在,我带素食大叔跑了2km(用时7’35",前半段3’45",后半段3’50"崩溃被反超),其实我之前不知道他这么厉害,我本想拉爆他,结果他越逼越紧,我慌得不行,我本来就半跑休式的养生跑了两周,刚回来就给我上这种强度哪里顶得住。事后才知道他是全马破三的选手,PB2小时56分,他最后是19分钟跑了5km,我竟然企图拉爆能破三的人,是真的飘了。
- 回来第一件事先找个班上,上次菜鸟那个是面向2024留用的,最后没能长久,这次回来刚好看到一个靠谱点儿的,八月底就能上,效率还挺高,昨天投今天就面完了,这个面试官不讲武德,居然偷看我博客,发现我说wyl坏话,我发发牢骚还不行,看来下次写东西得注意点儿了【蚌】。
- 接下来只剩不到两年,从工作到结婚,可能一瞬间就要面对的事。确实也是挺痛苦的。而最令我震惊的是这次回家老妈严肃地跟我讨论了对象和买房的事,又是提醒我很多高中同学在上海工作,又说国庆要去上海看房,别的我不知道,我觉得老妈是真的飘了。
- 我还想能再有精力跑两年,今晚我还是想去同济跑129,正课高级组1.2k@3’45"×6组(间歇4分钟),最后一组自由跑,比队内1k×6的间歇(3’35"~3’45")要难,但是总归在能力范围(回家强度练得太低了,回来不一定一下子顶得上去),珍惜每一次训练的时间,且行且珍惜。
import gradio as gr
from vega_datasets import datacars = data.cars()
iris = data.iris()# # Or generate your own fake data# import pandas as pd
# import random# cars_data = {
# "Name": ["car name " + f" {int(i/10)}" for i in range(400)],
# "Miles_per_Gallon": [random.randint(10, 30) for _ in range(400)],
# "Origin": [random.choice(["USA", "Europe", "Japan"]) for _ in range(400)],
# "Horsepower": [random.randint(50, 250) for _ in range(400)],
# }# iris_data = {
# "petalWidth": [round(random.uniform(0, 2.5), 2) for _ in range(150)],
# "petalLength": [round(random.uniform(0, 7), 2) for _ in range(150)],
# "species": [
# random.choice(["setosa", "versicolor", "virginica"]) for _ in range(150)
# ],
# }# cars = pd.DataFrame(cars_data)
# iris = pd.DataFrame(iris_data)def scatter_plot_fn(dataset):if dataset == "iris":return gr.ScatterPlot.update(value=iris,x="petalWidth",y="petalLength",color="species",title="Iris Dataset",color_legend_title="Species",x_title="Petal Width",y_title="Petal Length",tooltip=["petalWidth", "petalLength", "species"],caption="",)else:return gr.ScatterPlot.update(value=cars,x="Horsepower",y="Miles_per_Gallon",color="Origin",tooltip="Name",title="Car Data",y_title="Miles per Gallon",color_legend_title="Origin of Car",caption="MPG vs Horsepower of various cars",)with gr.Blocks() as scatter_plot:with gr.Row():with gr.Column():dataset = gr.Dropdown(choices=["cars", "iris"], value="cars")with gr.Column():plot = gr.ScatterPlot()dataset.change(scatter_plot_fn, inputs=dataset, outputs=plot)scatter_plot.load(fn=scatter_plot_fn, inputs=dataset, outputs=plot)if __name__ == "__main__":scatter_plot.launch()
后记
后来晚上的训练,1.2k×5间歇4分,细雨淅沥,人来的不多,精英组只有耿益平一人,高级组算上我仅有三人(其他两个都是pacer),而且这两位不讲武德,说是345,每组都带到340,跟了两组心肺就已不支(养生跑了太久,强度尚未适应),第三组想退到中级组,被两个pacer连哄带骗又顶了一组,前三组跑完手表上均配是338,就差把老命交待在一二九操场上了。后面两组跟了中级组(十多人的小团,轻松不少),配速355,虽然只是中级组,聊天才发现也有5k18分19分台的高手,卧虎藏龙。
说起来129确是一个神奇的地方,没有门槛,也没有任何约束,团长蜡烛每次都会提供充足的功能饮料,带队进行充分的拉伸和放松,这里有退休的老爷爷,也有还在念初高中的小朋友,有全马240的顶尖高手,也有入门组开放给新手参加,在当下社会,能有这样一个宽松且包容万象的团体,单纯由兴趣而聚集,很是难得,让人相信光依然是存在的。
就这样结束吧。
END
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!


