Compare commits

...

99 Commits

Author SHA1 Message Date
474050ff6d increase dot grid size to be less distracting 2025-09-07 18:32:52 +01:00
1b95f46544 add note on cloudwatch event rules via ansible 2025-02-12 14:09:35 +00:00
a4b13fb71e always dark mode 2024-12-25 19:45:11 +00:00
d512ff1c73 use dotgrid module 2024-12-25 19:34:14 +00:00
b7c38ddc89 fix title cuasing issues with gronk 2024-08-09 21:03:58 +01:00
9d602fede7 cadence license manager issues 2024-08-09 20:57:19 +01:00
a21898048c update readmes 2024-04-16 18:47:33 +01:00
5e3bdbe2f6 how to install droidcam on jetson nano 2024-04-16 18:42:24 +01:00
1e90d6c8a9 comic mono 2024-04-14 16:05:13 +01:00
b6c9129fa5 update readme 2024-04-13 21:03:16 +01:00
00b08276a2 add realistic date 2024-04-13 21:01:33 +01:00
47bfb4ac20 update blog readme 2024-04-13 20:58:25 +01:00
1055f83d3a fix images 2024-04-13 20:54:16 +01:00
a9cb29989d fix metadata 2024-04-13 20:52:42 +01:00
ce04f5dd57 add old posts 2024-04-13 20:44:27 +01:00
ef43740721 update readme 2024-04-13 20:18:04 +01:00
b94dba3163 add base_url 2024-04-13 20:06:50 +01:00
816896537d start move blog to gronk 2024-04-13 20:02:11 +01:00
ad7096bca2 explain xed value 2024-03-02 14:28:24 +00:00
37618fe7eb cross elastic demand 2024-03-02 14:25:31 +00:00
8c16a0d537 update flashcards 2024-02-29 12:56:56 +00:00
e203b294c5 update flashcards 2024-02-25 13:02:36 +00:00
91e7c9701a update flashcards 2024-02-23 19:16:29 +00:00
9e12734c5f update readme 2024-02-21 15:08:29 +00:00
524465453a update flashcards (corrections) 2024-02-21 15:06:30 +00:00
dec593c503 management 2024-02-16 12:34:28 +00:00
56d55a6617 update readme to include errata 2024-02-13 09:45:57 +00:00
15cec82789 add resources on mmme3081 2024-02-13 09:39:33 +00:00
8185cd14e4 mmme3049 2024-02-02 12:36:25 +00:00
e4a0ef25e1 help i think my device shut down after deleting the current kernel and before installing the second (no entries in systemd-boot/grub/<bootloader>) 2024-01-29 15:38:10 +00:00
5f5e43e54e update readme 2024-01-23 16:31:12 +00:00
a24eb028a9 add code for solutions for exam papers 2024-01-23 16:28:16 +00:00
996700bec9 add exercise sheet 8 solution plotter script 2024-01-17 15:50:25 +00:00
4369e246bd update folder name 2024-01-07 16:14:15 +00:00
a42bfcc814 add errata for exercise sheets 2024-01-07 16:06:29 +00:00
3de79c2111 formatting 2024-01-02 20:15:44 +00:00
da516f5160 add page no issues with logging into email 2024-01-02 20:14:13 +00:00
0489963eda update gohookr.sh 2024-01-02 19:04:05 +00:00
8981e9b9c4 update readmes 2024-01-02 18:48:48 +00:00
dd35b48def add flask project example 2024-01-02 02:15:24 +00:00
0ceb20bcf1 add computer engineering slides 2023-12-28 20:18:17 +00:00
f266085c4e add mechatronics lecture slides 2023-12-28 20:16:19 +00:00
5b64235c97 add past papers 2023-12-28 20:13:00 +00:00
b3d42c30d9 add lecture slides, lectur notes 2023-12-28 20:12:23 +00:00
a84913e3f5 add exercise sheets 2023-12-28 19:49:08 +00:00
557bad8387 add exam cheatsheets 2023-11-06 12:56:52 +00:00
0f29002415 add mmme3085 mechatronics week 4 lecture slides 2023-11-06 12:55:42 +00:00
11cd8df774 correct lecture_notes folder name 2023-11-06 12:54:53 +00:00
a92f99dae8 add fea lecture slides 2023-11-06 12:54:10 +00:00
7f7955fc4f add fea exercise sheets 2023-11-06 12:53:52 +00:00
a4d8d95d74 add .n2w config 2023-10-31 16:04:01 +00:00
bec5809694 add notes, slides, lecture notes on fea 2023-10-31 16:03:40 +00:00
4e51f23dca move lecture notes and slides into subfolders 2023-10-31 14:35:05 +00:00
212cfd6e4c add lecture notes, lecture slides for lecture 4, 5 2023-10-23 17:08:35 +01:00
c58e7b2f94 add computer engineering slides, separate computer engineering and mechatronics into subfolders 2023-10-23 17:08:00 +01:00
307c4f366d remove unnecessary frontmatter 2023-10-18 18:33:54 +01:00
3b0d086ea0 update labs.md 2023-10-18 18:33:16 +01:00
4b59dcaa8b mmmme3085 move labs to own page 2023-10-18 18:32:52 +01:00
55b75039bf add lecture notes, lecture slides, exercise sheets for lectures 2,3 2023-10-18 18:32:09 +01:00
cde7a3c7f9 add courseworks page for cmt 2023-10-18 18:31:32 +01:00
b0f8043db0 format tables 2023-10-15 16:14:53 +01:00
6e748d46b2 add exerices sheets, worked example matlab scripts 2023-10-15 16:12:48 +01:00
f2e94c592f add index.md for mmme3085 2023-10-15 15:50:56 +01:00
f8785c4fd2 mmme3085 add week 2 mechatronics lecture slides 2023-10-12 09:59:20 +01:00
56282d75af initial resources for 3085, 3086 2023-10-05 11:01:12 +01:00
ed7af09a55 2nd year fin 2023-06-15 00:33:56 +01:00
917a47caf9 rename mmme2049 flashcard apkg 2023-06-07 13:41:14 +01:00
57507d4c34 finish mmme2049 2023-06-07 13:40:09 +01:00
d61c94880c done with 2047 2023-05-22 22:14:01 +01:00
9b694732bd mmme2053 beam bending dicontinuiutity functions 2023-05-19 23:50:26 +01:00
160418816f add past papers 2023-05-08 18:55:48 +01:00
d505de5ac1 add exercise sheets, lecture notes, lecture slides 2023-05-08 17:30:28 +01:00
868fac25cf add, organise exam papers 2023-05-08 17:30:08 +01:00
c90147635a explain variable in nusselt number 2023-05-08 17:29:40 +01:00
c0c565a104 add errata for bearings 2023-04-30 16:21:21 +01:00
fb21e1012f add MMME2044 anki flashcards 2023-04-28 20:43:40 +01:00
015149b341 update notes on bearings, add past papers 2023-04-28 20:42:43 +01:00
bc73ac4e09 update heading sizes 2023-04-28 18:10:08 +01:00
6357ba4fdb mmme2049 add lecture slides, exercise sheet 1 2023-04-26 00:05:28 +01:00
b262977263 mmme2046 add exercise sheets, control lecture notes 2023-04-26 00:04:18 +01:00
486774e0d6 add exercise sheets 2023-04-26 00:02:38 +01:00
3eed68e1b3 updaet digital electronics 2023-04-26 00:02:21 +01:00
826ea4690f fix error in flip flop output table 2023-04-25 20:20:50 +01:00
07466ce8a9 notes on ac motors 2023-04-24 22:55:25 +01:00
9b1346f8f0 add errata, fix typos 2023-04-23 19:13:58 +01:00
6ec65bd5ec fix typos in turbomachinery notes 2023-04-23 17:09:25 +01:00
519d3e37f0 update notes on heat transfer 2023-04-22 14:38:33 +01:00
5d580557ec fix typo 2023-04-18 13:54:16 +01:00
bb4ba0ff66 fix typos 2023-04-11 15:52:22 +01:00
249a2f30d2 typo in piezoelectrics notes 2023-04-09 14:42:53 +01:00
a07f63de81 mmme2051 notes on dc motors 2023-03-30 11:35:23 +01:00
f3580ea182 mmme2051 boolean algebra 2023-03-30 11:15:49 +01:00
572d86e60f mmme2053 note on elastic instability (buckling) 2023-03-24 15:37:43 +00:00
7d9ad8cbf0 notes on thick walled cylinders 2023-03-23 15:49:05 +00:00
7166aecc6f mmme2053 empty notes on thick walled cylinders, elastic instability (buckling) 2023-03-23 14:33:46 +00:00
274c643b09 notes on diodes 2023-03-23 12:17:45 +00:00
5d4ec5ab36 add note about exclusion of efficiency from transformer equation 2023-03-23 11:54:24 +00:00
acb42fb8c6 mmme2051 add formula sheet 2023-03-23 11:26:58 +00:00
ebb8ad0350 add notes on transformers 2023-03-23 11:26:34 +00:00
436 changed files with 61408 additions and 38 deletions

11
blog/first_post.md Executable file
View File

@@ -0,0 +1,11 @@
---
author: Akbar Rahman
pub_date: Fri, 31 Jul 2020 19:52:52 +0100
title: first post
tags: []
uuid: fd338dc9-ae5f-48f4-9fc6-e02e88ab4ce5
---
# first post
this is my first post

182
blog/g27_pedals.md Executable file
View File

@@ -0,0 +1,182 @@
---
author: Akbar Rahman
pub_date: Tue, 04 Aug 2020 15:20:13 +0100
title: Repurposing Racing Wheel Pedals
tags: [ g27, sim_racing ]
uuid: 0f09200e-fd50-451b-aae1-1117a8a704db
---
<h1>Repurposing Racing Wheel Pedals</h1>
<p>I have a Logitech G27 I don't use much. I wondered if I could use it for anything else. I could. </p>
<h2> The Pinout of the Connector </h2>
<p>The first thing I had to do was figure out what each pin did on the DE-9 connector, and which
ones I should care about.
This was done easily after I took off the top plastic casing thing by poking the three 100k Ohm
potentiometers and the connector in the right places at the right times:
</p>
<style> #pinout_table tr td:first-child { text-align: right } </style>
<img src="./images/repurposing-racing-wheel-pedals-g27-pinout.svg" class="centered" style="width: 10em;">
<table id="pinout_table">
<tr> <th>pin</th> <th>function</th></tr>
<tr> <td>1,4</td> <td>ground</td></tr>
<tr> <td>6</td> <td>clutch pedal</td></tr>
<tr> <td>7</td> <td>brake pedal</td></tr>
<tr> <td>8</td> <td>accelerator pedal</td></tr>
<tr> <td>9</td> <td>voltage in</td></tr>
</table>
<h2> Reading the Values of the Pots </h2>
I'm using an Arduino to read the pots and then do something with the values.
I very dirtily wired pin 4 on the pedals to GND on a Arduino Uno, pin 9 to 5V, and
pins 6,7,8 to A0, A1, and A2.
I used a basic sketch to check that everything is good:
<details>
<summary> Show/hide test_sketch.ino </summary>
<pre><code> void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(analogRead(A2));
delay(20);
}
</code></pre>
</details>
I noticed that the minimum and maximum values read by the Uno were quite far off 0 and 1024, like
they should be, and voltage was being lost on the way to and from the potentiometers.
Since the pedals have to be calibrated every time you plug them in, I assume this is normal and
spat out this code:
<details>
<summary> Show/hide sketch_aug02a.ino </summary>
<pre><code>// sensor pins
int sa = A0;
int sb = A1;
int sc = A2;
// minimum values detected by the sensors
int mina = 1025;
int minb = 1025;
int minc = 1025;
// maximum values detected by the sensors
int maxa = 512;
int maxb = 512;
int maxc = 512;
// raw values of the sensors
int rva, rvb, rvc;
// calculated values of the sensors (between 0 and 1, this is the value sent to computer)
float cva, cvb, cvc;
void setup() {
Serial.begin(9600);
}
void loop() {
rva = analogRead(sa);
rvb = analogRead(sb);
rvc = analogRead(sc);
if (rva &lt; mina) mina = rva;
if (rvb &lt; minb) minb = rvb;
if (rvc &lt; minc) minc = rvc;
if (rva &gt; maxa) maxa = rva;
if (rvb &gt; maxb) maxb = rvb;
if (rvc &gt; maxc) maxc = rvc;
cva = (float)(rva-mina)/(float)(maxa-mina);
cvb = (float)(rvb-minb)/(float)(maxb-minb);
cvc = (float)(rvc-minc)/(float)(maxc-minc);
Serial.print('[');
Serial.print(cva); Serial.print(',');
Serial.print(cvb); Serial.print(',');
Serial.print(cvc);
Serial.print(']');
Serial.println();
delay(20);
}
</code></pre>
</details>
<h2> Actually Making the Numbers Do Something </h2>
This is where you can make the pedals do fun things.
I reworked another piece of code I wrote to do a similar thing to quickly create a script that
reads the values sent by the Arduino, and then simulate pressing a key combination.
The only thing I've done with this is set push-to-talk to ctrl-shift-alt-1.
I don't know what else I could use this for, maybe temporarily muting particular things, like music.
<details>
<summary> Show/hide pedalboard.py </summary>
<pre><code> #!/usr/bin/env python3
import sys
import json
import time
from enum import Enum
import keyboard
import serial
class KeyState(Enum):
UP = 0
DOWN = 1
STATES = [KeyState.UP] * 3
THRESHOLD = 0.8
MACROS = ['ctrl+shift+alt+1', 'ctrl+shift+alt+2', 'ctrl+shift+alt+3']
def get_args():
""" Get command line arguments """
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('device')
return parser.parse_args()
def main(args):
""" Entry point for script """
while True:
try:
kb = serial.Serial(port=args.device, baudrate=9600)
while True:
handle(json.loads(kb.readline()))
except serial.serialutil.SerialException as e:
print(e)
print("Failed to connect to device... trying again")
time.sleep(1)
except Exception as e:
print(e)
return 0
def handle(data):
global STATES
states = [KeyState.DOWN if value &gt; THRESHOLD else KeyState.UP for value in data]
r = [handle_state_change(i, states[i]) if states[i] != STATES[i] else None for i in range(len(STATES))]
STATES = states
return r
def handle_state_change(key, newstate):
print(f"{key} {newstate}")
return keyboard.press(MACROS[key]) if newstate == KeyState.DOWN else keyboard.release(MACROS[key])
if __name__ == '__main__':
try:
sys.exit(main(get_args()))
except KeyboardInterrupt:
sys.exit(0)
</code></pre>
</details>

View File

@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.0"
width="68.148842"
height="34.400002"
viewBox="-138.624 -137.291 68.14884 34.400003"
id="Layer_1"
xml:space="preserve"
sodipodi:docname="repurposing-racing-wheel-pedals-g27-pinout.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><title
id="title1416">DE-9 Connector with numbers</title><metadata
id="metadata1308"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>DE-9 Connector with numbers</dc:title><dc:date>2020-08-02</dc:date><dc:creator><cc:Agent><dc:title>alvierahman90</dc:title></cc:Agent></dc:creator><cc:license
rdf:resource="" /><dc:contributor><cc:Agent><dc:title>Original drawing from Mobius (maybe): https://commons.wikimedia.org/wiki/File:DSubminiatures.svg</dc:title></cc:Agent></dc:contributor></cc:Work></rdf:RDF></metadata><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1722"
inkscape:window-height="1060"
id="namedview1306"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="10.44492"
inkscape:cx="27.994898"
inkscape:cy="11.731109"
inkscape:window-x="1056"
inkscape:window-y="1094"
inkscape:window-maximized="0"
inkscape:current-layer="Layer_1" /><defs
id="defs2584">
</defs>
<g
id="g1336"
transform="rotate(180,-104.54958,-120.091)"
style="stroke:#454545;stroke-opacity:1"><g
transform="translate(-193.19312,-267.013)"
id="g2241"
style="stroke:#454545;stroke-opacity:1">
<circle
cx="66.588997"
cy="141.351"
r="2.2409999"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2243" />
<circle
cx="77.617996"
cy="141.351"
r="2.2409999"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2245" />
<circle
cx="88.643997"
cy="141.351"
r="2.2379999"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2247" />
<path
d="m 99.668,139.11 c 1.238,0 2.242,1.004 2.242,2.241 0,1.237 -1.004,2.24 -2.242,2.24 -1.233,0 -2.237,-1.003 -2.237,-2.24 0,-1.237 1.004,-2.241 2.237,-2.241 z"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="path2249"
inkscape:connector-curvature="0" />
<circle
cx="110.697"
cy="141.351"
r="2.2409999"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2251" />
<circle
cx="72.102997"
cy="152.491"
r="2.2390001"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2253" />
<circle
cx="83.130997"
cy="152.491"
r="2.2390001"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2255" />
<path
d="m 94.156,150.252 c 1.237,0 2.238,1.003 2.238,2.237 0,1.237 -1.001,2.241 -2.238,2.241 -1.238,0 -2.242,-1.004 -2.242,-2.241 0,-1.234 1.004,-2.237 2.242,-2.237 z"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="path2257"
inkscape:connector-curvature="0" />
<circle
cx="105.185"
cy="152.491"
r="2.2390001"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="circle2259" />
</g><path
d="m -129.54912,-136.791 c -5.609,0 -9.4,4.518 -8.425,10.042 l 2.354,13.309 c 0.976,5.525 6.366,10.049 11.975,10.049 h 38.191005 c 5.608,0 10.996,-4.523 11.975,-10.049 l 2.354,-13.309 c 0.975,-5.524 -2.813,-10.042 -8.425,-10.042 z"
style="fill:none;stroke:#454545;stroke-opacity:1"
id="path2261"
inkscape:connector-curvature="0" /></g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-123.37334"
y="-129.7538"
id="text1340"><tspan
sodipodi:role="line"
id="tspan1338"
x="-123.37334"
y="-129.7538"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">1</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-112.29854"
y="-129.7538"
id="text1340-3"><tspan
sodipodi:role="line"
id="tspan1338-7"
x="-112.29854"
y="-129.7538"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">2</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-101.2884"
y="-129.7538"
id="text1340-9"><tspan
sodipodi:role="line"
id="tspan1338-8"
x="-101.2884"
y="-129.7538"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">3</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-90.565475"
y="-129.7538"
id="text1340-6"><tspan
sodipodi:role="line"
id="tspan1338-70"
x="-90.565475"
y="-129.7538"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">4</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-129.24457"
y="-105.27687"
id="text1340-4"><tspan
sodipodi:role="line"
id="tspan1338-84"
x="-129.24457"
y="-105.27687"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">5</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-117.9472"
y="-105.27687"
id="text1340-8"><tspan
sodipodi:role="line"
id="tspan1338-1"
x="-117.9472"
y="-105.27687"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">6</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-106.88921"
y="-105.27687"
id="text1340-68"><tspan
sodipodi:role="line"
id="tspan1338-5"
x="-106.88921"
y="-105.27687"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">7</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-94.538704"
y="-105.27687"
id="text1340-2"><tspan
sodipodi:role="line"
id="tspan1338-19"
x="-94.538704"
y="-105.27687"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">8</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.98580647px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#454545;fill-opacity:1;stroke:none;stroke-width:0.17464516;stroke-opacity:1;"
x="-83.91153"
y="-105.27687"
id="text1340-96"><tspan
sodipodi:role="line"
id="tspan1338-0"
x="-83.91153"
y="-105.27687"
style="stroke-width:0.17464516;stroke:none;stroke-opacity:1;fill:#454545;fill-opacity:1;">9</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 8.6 KiB

63
blog/lastfm_bookmarklets.md Executable file
View File

@@ -0,0 +1,63 @@
---
author: Akbar Rahman
pub_date: Mon, 18 Sep 2023 16:25:48 +0100
title: last.fm bookmarklets
tags: [ last.fm, scripts ]
uuid: e54ebf58-4033-4dae-81db-91db344f1311
---
# last.fm bookmarklets
last.fm doesn't let you see how many scrobbled you've made in one day particularly easily.
Here is a bookmarklet to solve that.
<label for="days"> Number of days to view: </label>
<input type="number" value="1" id="days" placeholder="Days"/><br><br>
<label for="offset"> Offset (e.g. 0 to include today, 7 to look at last week): </label>
<input type="number" value="0" id="offset" placeholder="Offset (Days)" /><br><br>
<label for="username"> last.fm username </label>
<input type="text" value="" id="username" placeholder="Username" /><br><br>
<input type="button" id="button" value="Generate bookmarklet"><br>
<p><a style="display: none" href="" id="scriptLink">Bookmark this link</a></p>
When you press generate bookmarklet, the values `OFFSET`, `DAYS`, `USERNAME` will be
subsituted and put into the link above.
It's always best to inspect bookmarklets though.
Inspect the page to view the script used to generate the bookmarklet.
<textarea cols="109" rows="15" readonly id="scriptText">
javascript: (() => {
const MILLESECONDS_PER_DAY = 1000 * 24 * 60 * 60;
const OFFSET;
const DAYS;
const USERNAME;
const currentDate = new Date();
const to = new Date(currentDate - (OFFSET * MILLESECONDS_PER_DAY));
const from = new Date(to - ((DAYS-1) * MILLESECONDS_PER_DAY));
const toDate = to.getFullYear() + "-" + (to.getMonth()+1) + "-" + to.getDate();
const fromDate = from.getFullYear() + "-" + (from.getMonth()+1) + "-" + from.getDate();
document.location = "https://www.last.fm/user/" + USERNAME + "/library?from=" + fromDate + "&to=" + toDate;
})();
</textarea>
<script>
document.getElementById("button").addEventListener("click", () => {
scriptText = document.getElementById("scriptText").value;
offset = document.getElementById("offset").value;
days = document.getElementById("days").value;
username = document.getElementById("username").value;
newscript = scriptText.replace(
"OFFSET", "OFFSET = " + offset
).replace(
"DAYS", "DAYS = " + days
).replace(
"USERNAME", "USERNAME = '" + username + "'"
);
document.getElementById("scriptLink").href = newscript;
document.getElementById("scriptLink").style = "";
});
</script>

13
blog/readme.md Normal file
View File

@@ -0,0 +1,13 @@
---
title: alv's blog
author: Akbar Rahman
pub_date: Fri, 31 Jul 2020 19:50:51 +0100
blog: true
tags: [ alvs_blog, blog ]
uuid: 2d03893a-eb9b-4923-8024-a223ecbe72f7
---
# alv's blog
this is my blog.
i promise i will try to keep things posted here interesting.

View File

@@ -0,0 +1,57 @@
---
author: Akbar Rahman
date: \today
title: "Cadence License Manager Install - `java.lang.IllegalArgumentException: :locationICompSelected: Null parameter - InstallComponent ID`"
tags: [ cadence, license_manager, flexlm, java, errors ]
uuid: a5f46736-1ab8-4da1-8737-95de51c95d50
---
# Error
```
[root@host Downloads]# iscape/bin/iscape.sh -batch majorAction=InstallFromArchive archiveDirectory=$(realpath LCU04.30.000_lnx86.Base) installDirectory=$(realpath target)
Initializing InstallScape using JVM at /home/alvi/Downloads/iscape.04.23-s012/runtime/LNX86/bin/java. This might take some time...
WARNING: The DISPLAY environment variable has not been set.
InstallScape might not initialize.
InstallScape Installer (Batch Mode) - 04.23.s12
:locationICompSelected: Null parameter - InstallComponent ID
java.lang.IllegalArgumentException: :locationICompSelected: Null parameter - InstallComponent ID
at com.khanpur.installerng.ArchiveLocationManager.locationICompSelected(ArchiveLocationManager.java:143)
at com.khanpur.installerng.Installer.archiveLocationICompSelected(Installer.java:1156)
at com.khanpur.installer.gui.batch.BatchInstallfromarchive.execute(BatchInstallfromarchive.java:86)
at com.khanpur.installer.gui.batch.BatchView.initialize(BatchView.java:329)
at com.khanpur.installer.gui.batch.BatchView.<init>(BatchView.java:90)
at com.khanpur.installer.gui.InstallerUINoSplash.showBatch(InstallerUINoSplash.java:325)
at com.khanpur.installer.gui.BatchCommand.execute(BatchCommand.java:78)
at com.khanpur.util.TransactionCommand.execute(TransactionCommand.java:74)
at com.khanpur.util.Commandline.runCommands(Commandline.java:223)
at com.khanpur.installer.gui.InstallerUINoSplash.processCommandLine(InstallerUINoSplash.java:340)
at com.khanpur.installer.gui.InstallerUINoSplash.main(InstallerUINoSplash.java:372)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.khanpur.installer.gui.InstallerUI.main(InstallerUI.java:123)
Failed with InstallScape JVM.
Now loading System JVM...
iscape/bin/iscape.sh: line 222: java: command not found
Error:
/usr/bin/which: no java in (/usr/local/bin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)
Could not use JVM packaged with Installcape. The Java in your path did not work or could not find Java in your path. Ensure that Java 1.6 or later is in your PATH environment variable and restart InstallScape.
```
# Cause
Using the wrong filepath.
The Cadence archives have subfolders to split the software between multiple CDs (a relic of the
past perhaps).
The actual folder to use is the CDs.
# Solution
Use the folder that contains the `.sdx` files (in my case, add `/CDROM1` onto end of
`archiveDirectory`).

View File

@@ -0,0 +1,81 @@
---
author: Akbar Rahman
date: \today
title: Eventbridge Rule (Cloudwatch Rule) Does Not Invoke Lambda When Configured Through Ansible
tags:
- ansible
- aws
- aws_eventbridge
- aws_lambda
- cloudwatch
- eventbridge
- lambda
- permissions
uuid: df3ca083-b6ae-4e35-bb1c-8b3978117c57
---
# Eventbridge Rule (formerly Cloudwatch Rule) Does Not Invoke Lambda When Configured Through Ansible
## Problem
After creating an Eventbridge rule to run a Lambda function with the Ansible module
[`amazon.aws.cloudwatchevent_rule`](https://docs.ansible.com/ansible/latest/collections/amazon/aws/cloudwatchevent_rule_module.html),
the rule does not run Lambda function when it should:
```yaml
- name: "Create lambda function"
register: create_lambda
amazon.aws.lambda:
region: "{{ aws_ec2_region }}"
description: "My Lambda function"
name: "{{ lambda_name }}"
role: "{{ iam_role.iam_role.arn }}"
state: "present"
timeout: 120
vpc_security_group_ids: "{{ sec_group.group_id }}"
vpc_subnet_ids: "{{ subnet_ids }}"
image_uri: "{{ ecr.repository.repositoryUri }}:latest"
- name: "Schedule my Lambda function"
register: lambda_schedule_rule
amazon.aws.cloudwatchevent_rule:
name: "a_unique_rule_name"
region: "{{ aws_ec2_region }}"
schedule_expression: "rate(1 minute)"
state: "present"
targets:
- arn: "{{ create_lambda.configuration.function_arn }}"
id: "a_unique_id"
input: "{{ eventbridge_rule_lambda_event_input }}"
```
Even though creating a seemingly identical setup through the AWS console works fine.
## Cause
The Eventbridge rule is not allowed to invoke this Lambda, as it is not in the Lambda's policy.
## Solution
Use the
[`amazon.aws.lambda_policy`](https://docs.ansible.com/ansible/latest/collections/amazon/aws/lambda_policy_module.html)
module to allow the Eventbridge rule to invoke the Lambda.
Note that, if specifying the Lambda function name to `function_name` (as opposed to the ARN of the
Lambda function), you must specify `version` or otherwise the Lambda function still won't be run!
```yaml
- name: "Allow Eventbridge (Cloudwatch) Rules to invoke lambda"
amazon.aws.lambda_policy:
action: "lambda:InvokeFunction"
function_name: "{{ lambda_name }}"
state: "present"
statement_id: "a_unique_statement_id"
region: "{{ aws_ec2_region }}"
principal: "events.amazonaws.com"
source_arn: "{{ lambda_schedule_rule.rule.arn }}"
version: "{{ create_lambda.configuration.version }}"
```
Solution found thanks to @david-kretch's answer to the same question at
<https://stackoverflow.com/questions/45282939/cloudwatch-event-rule-creation-via-ansible-succeeds-but-not-invoked>.

12
computery_stuff/flask.md Executable file
View File

@@ -0,0 +1,12 @@
---
author: Akbar Rahman
date: \today
title: Flask
tags: [ python, flask, programming, docker ]
uuid: e513ed96-cb19-4d4c-9894-e337c54659e5
---
# Examples
- [alv.cx-glass](https://git.alv.cx/alvierahman90/alv.cx-glass) --- a pretty minimal example, probably not very production ready but has example of how to use in Docker
- <https://flask.palletsprojects.com/> --- official documentation for Flask

17
computery_stuff/jetson_nano.md Executable file
View File

@@ -0,0 +1,17 @@
---
author: Akbar Rahman
date: \today
title: Jetson Nano
tags: [ nvidia, jetson, jetson_nano, droidcam ]
uuid: f312451a-2cd4-468a-9eef-ca9859c7cd1e
---
# installing Droidcam
figured out with help from <https://hizzely.hashnode.dev/instalasi-droidcam-cli-di-jetson-nano> :pray:
0. build and install libjpeg-turbo version 2.1.2 from github (cmake, make, make install)
0. build droidcam (2.1.3 confirmed working) from source (make) and install (./install-client) (may need to set `PKG_CONFIG_PATH` environment varible to whatever libjpeg turbo installed at (for me, `/opt/libjpeg-turbo/lib64/pkgconfig`))
0. install v4l2loopback-dkms with apt
0. run droidcam (you may need to set `LD_LIBRARY_PATH` environment variable to wherever libjpeg-turbo installed to (for me, `/opt/libjpeg-turbo/lib64`))

View File

@@ -20,3 +20,47 @@ usermod -a -G group user
```bash
usermod -g group user
```
# help i think my device shut down after deleting the current kernel and before installing the second (no entries in systemd-boot/grub/<bootloader>)
0. boot into a live usb of current disto
1. mount the root partition to `/mnt` and the boot partition to the appropriate folder (check
fstab which should be in `/mnt/etc/fstab`, if it says `/efi`, mount it to `/mnt/efi`)
2. chroot into the mounted filesystem:
on arch based systems you can simply run:
```
arch-chroot /mnt
```
on non arch based systems[^1]:
```
mount -t proc /proc /mnt/proc/
mount -t sysfs /sys /mnt/ys/
mount --rbind /dev /mnt/dev/
# only if using uefi
mount --rbind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars/
# for internet access
cp /etc/resolv.conf /mnt/etc/resolv.conf
chroot /mnt /bin/bash
```
3. the system can now be force updated/kernel images can be generated
on arch based systems[^2]:
```
# reinstall all current packages
pacman -Qqen > /root/pkgs.txt # list all installed packages
pacman -S $(< /root/pkgs.txt) # reinstall all installed packages
rm /root/pkgs.txt # clean up
# reinstall dependencies (if there are issues)
pacman -Qqdn > /root/deps.txt # list all installed dependencies
pacman -S $(< /root/deps.txt) # reinstall all installed dependencies
rm /root/deps.txt # clean up
```
[^1]: https://wiki.archlinux.org/title/Chroot [wayback machine](https://web.archive.org/web/20240121115548/https://wiki.archlinux.org/title/Chroot)
[^2]: https://bbs.archlinux.org/viewtopic.php?id=193174 [wayback machine](https://web.archive.org/web/20240129153400/https://bbs.archlinux.org/viewtopic.php?id=193174)

View File

@@ -0,0 +1,14 @@
---
author: Akbar Rahman
date: \today
title: University of Nottingham
tags: [ uni ]
uuid: d1b03938-c5b4-48ad-a258-78f96880aa4b
---
### Trying to log into Microsoft 365 sends me to a different organisation's login page
Try one of these links:
- <https://pls.cx/uon_email> (a redirect to the link below)
- <https://outlook.office.com/owa/nottingham.ac.uk>

View File

@@ -6,4 +6,6 @@ cd `dirname $0`
git pull
cd ..
rm -rf notes.alv.cx/*
notes2web.py -o notes.alv.cx notes
cd /root/gronk
git pull
docker compose up --build

10
readme.md Normal file
View File

@@ -0,0 +1,10 @@
---
title: alv's notes
base_url: https://notes.alv.cx
---
# alv's notes
These are my personal notes. Correctness is not guaranteed.
Best viewed at [notes.alv.cx](https://notes.alv.cx).

12
styles.css Normal file
View File

@@ -0,0 +1,12 @@
@import url("https://styles.alv.cx/fonts/comic-mono-font.css");
@import url("https://styles.alv.cx/modules/dotgrid.css");
@import url("https://styles.alv.cx/modules/alwaysdark.css");
:root {
--dotgrid-size: 15em;
--dotgrid-dot-size: 1px;
}
body {
font-family: 'Comic Mono', monospace;
}

View File

@@ -0,0 +1,102 @@
#separator:tab
#html:false
what are plain bearings - a suitable solid material fitted between shaft and support to reduce friction and wear - bearing may be dry rubbing bearing or lubricated
what types of lubrication can be used for plain bearings - hydrodynamic - hydrostatic - solid-film - boundary layer
what is hydrodynamic lubrication the shaft rotating in oil creates the oil pressure to lubricate the shaft
what are ball and roller bearings the rotating load is converted to rolling contact of the balls or rollers
what are the parts of a ball bearing
what is the difference between a journal bearing and a thrust bearing - a journal bearing supports the shaft radially - a thurst bearing supports the shaft axially
when would one use a plain rubbing bearing low load, low speed applications
what is the pV factor and what is it the product of a measure of the bearing's ability to cope with frictional heat generation p- pressure V- speed at contact point
what is the projected area of a radial sliding bearing the area of a journal when looking down from it:
what is the thrust area of an axial bearing area of the bearing that isn't holey [$]\frac\pi4 \left(D^2-d^2\right)[/$]
what is the wear volume of an axial sliding bearing the non holey area multiplied by the distance the bearing can wear down without issue [$]YA_\text{thrust} = Y\frac\pi4\left(D^2-d^2\right)[/$]
what are the main properties of plain rubbing bearings (4) - usually made of polymers - moulded to final shape - dry lubricants added - reinforcements added
what dry lubricants and reinforcements are added to plain rubbing bearings - PTFE lubricant added - glass fibre reinforement added
what limits the pressure and speed a plain bearing can be operated at strength and temperature, respectively
what differentiates oil lubricated porous bearings - manufactured from sintered metal powders - porous and impregnated
how often does lubricant need to be replenished in porous bearings roughly 1000 hours
list some of the lowest coefficient of friction bearing materials and their coefficient range - babbitt metal (0.005 to 0.1) - POM (0.05-0.15) - cast iron and lead bronze with grease (0.05 to 0.15)
list the highest pV bearing materials - babbitt metal (2) - cast iron and lead bronze with grease (1) - porous bronze (1)
what is the equation for wear factor, [$]K[/$] [$]K = \frac{W}{FVt}[/$] where $W$ is wear volume, $F$ is bearing load, $V$ is sliding velocity, and $t$ is elapsed time
what is the main issue with hydrodynamic bearings surfaces touch at low speeds
draw the curve of friction against speed
describe the properties of boundary lubrication continuoous and extensive contactlubricant is smeared across surfacecoefficient of friction 0.05 to 0.2wear take place & limits life
what are the properties of mixed lubrication higher surface speedsintermittent contact between surfacepartial hydrodynamic supportcoefficient of friction of 0.004 to 0.10very high local pressures can create elastic deformation of surfaces
what is elastohydrodynamic lubrication fluid film lubrication where high local pressure create elastic deformation of surfaces
what are the properties of hydrodynamic lubrication high speedsno contact between surfaces---no wearminimum film thickness of 8 to 20 micronsvery good surface finish and tolerances requiredcoefficient of friction between 0.002 to 0.01
what is the Sommerfeld number a dimensionless number describing the relationship between a bearings dimensions, speeds, and fluid properties [$]S = \left( \frac R h\right)^2 \frac{\eta n}{P}[/$] where R is radius, h is clearance, [$]\eta[/$] is viscosity, n is angular speed, and P is bearing pressure
what is the equation for clearance of a bearing [$]h = R_\text{bearing} - R_{shaft}[/$]
what is petroff's equation and what is it used for [$]\mu = 2\pi^2 \frac{\eta n}{P}\frac{R}{h}[/$] used for lightly loaded bearings
equation for hydrodynamic journal bearing capacity [$]F = S\eta V \left(\frac{R}{h}\right)^2[/$]
equation for thrust capacity for hydrodynamic thrust bearing [$]F = 6\eta\left[ \frac{Ln(1+n)}{n^2} - \frac{2}{n(2+n)}\right]\frac{VL^2}{h_\text{min}^2}[/$] where [$]n = \frac{h_\text{max}}{h_\text{min}}-1[/$]
what causes friction between components in relative motion real surfaces have asperities which stick out and make contact with the other facewhen sliding, asperities catch and must be deformed or brokenthe forces required to do so is friction
what are the different rolling element types
what are the types of ball bearings and what are their primary features
what is the equation for static load carrying capacty [$]s_0 = \frac{C_0}{P_0}[/$] where s is the static safety factor, P, is the equivalent static bearing load, and C is the basic static load rating
dynamic load carrying capacity [$]L_{10} = \left(\frac CP \right)^q[/$] where L10 is the basic life rating in millions of revolutions, C is the basic dynamic load rating, P is equivalent dynamic bearing load, q is exponent of life: 3 for balls10/3 for rollers
what are the equations for equivalent dynamic load (4) constant magnitude and direction: P = F axial and radial load: [$]P = XF_r + YF_a[/$] (X and Y from manufacturers data)roller bearings: P = F_rfluctuating loads: [$]F_m = \sqrt[3]{\frac{F_1^3U_1 + \cdots}{U}}[/$]
when would you have adjust life rating (5) low reliabilityhigh temperaturehigh vibrationrisk of water ingressrisk of corrosion
why should a locating bearing be used in conjunction with a floating bearing ensures journal does not slide about axially (i think)
what combinations of bearings can be used to support a shaft (5) 2 angular contact bearings - free sliding housing for axial adjustmentone ball + one roller - roller supports radial, ball supports axial and radial2 taper rollers - both support radial and axial, one bearing adjusted against other to required preload2 balls - radial and axial loads, one clamped axially on both races while other left free2 roller - accepts heavy radial load, some axial, each roller locates axially one in direction
when should you slide fit the inner race with the shaft when the load rotates with the shaft
what is the difference between bolts, screws, and studs bolts have an unthreaded core, and a matching nutscrews are threaded all the way and screw directly into a materialstuds do not have heads
draw a lap joint and the forces they are designed to handle
draw a butt joint and the forces they are designed to handle
what is a rivet a non threaded fastener that is deformed around the parts to be joined
what are the types of rivets (3) solidtubular - have a hole down the axisblind (pop rivets)
what are the advantages of rivets (5) low costrapid assemblypermanentcan join dissimilar materialswide range of shapes and materials
what are the disadvantages of rivits (3) slower than welding and adhesivespoor under tensile loadsjoints leak unless sealed
draw a welded but joint and forces is designed to handle
draw a welded lap joint and the forces it is designed to handle
draw a double fillet t joint
draw a fillet cornet joint
why are bolts pre tensioned stops faces from separatingreduces fluctuating stresses experienced by bolt -> increases fatigue life
what is the recommend preload for non permanent joints [$]F_i = 0.75A_s\sigma_p[/$]
what is the rceommended preload for permanent joints [$]F_i = 0.9A_s\sigma_p[/$]
what is the tensile area of a bolt [$]A_s = \frac{\pi}{16}(d_p+d_r)^2[/$]
what is the pitch diameter of a bolt [$]d_p = d-0.6495p[/$]
what is the minor diameter of a bolt [$]d_r = d-1.0825p[/$]
what can proof strength be approximated to if unavailable [$]\sigma_p = 0.85\sigma_y[/$]
"what does the marking ""MX.Y"" mean on a bolt" X - has tensile strength of X*100 MPa Y - has yield strength of Y*X*10 Mpa
what is the bolt torque pre tension equation [$]T= KF_id[/$] where K is torque coefficient (around 0.2 for most cases), and d is nominal diameter
how can the stiffness of a bolt be reduced (2) reduce cross sectional areaincrease length
what stress reserve factor would you want for reliable materials under controlled conditions and known stresses 1.25 to 1.5
what stress reserve factor would you want for average materials with known loads and stresses 2 to 2.5
what reserve factor would you want for untried materials in average conditions 3 to 3.5
what reserve factor would you want for well known materials in uncertain conditions 3 to 3.5
what are the steps to select a bolt (6) consider permanent vs non permanent, define external load, number of bolts, and reserve factorestimate preload by assuming hard joint (K_c = 3K_b)choose suitable bolt size and determine preload by using table 5 of bs en iso 898-1:2009calculate stiffness of bolts and componentscalculate maximum allowable external loadcalculate reserve factor
why is a pre tensioned bolted joint beneficial for cyclic loading pre tension raises mean stress which increases fatigue life
what must be considered when using helical gears axial load generated
what are the properties of spur gears between parallel shafts (4) cheap to manufacturenoisyfew number number of teeth in contact at any given timesensitive to alignment
what are the properties of helical gears teeth cut at inclined angle to axis of rotationcontact between teeth more progressive and longercarries higher loadsquietercan be mounted at right anglesdouble helical gears (herringbone) can cancel out axial thrust for smoother power transmission at high speeds
what is the pitch circle circle upon which all calculations are based
what is circular pitch the distance between two identical points on adjacent teeth on a gear
what is the module of a gear, m [$]m = \frac d N [/$] where d is pitch diameter, N is number of teeth
what is tooth thickness and width of space [$]t = w = 0.5p[/$] where p is circular pitch
what is the addendum radial distance between pitch circle and top land a = m
what is the dedendum radial distance between pitch circle and bottom land b = 1.25 m
what is the clearance c = 0.25m radial distance between bottom land of gear 1 and top land of gear 2
what is the whole depth of a gear ht = addendum + dedendum = 2.25m
what is the working depth of a gear hk = addendum + dedendum - clearance = 2m
what are the conditions for proper meshing between gears module is samepressure angle is same
what are the common pressure angles 20 degrees14.5 degrees
what is the equation for centre distance betwen two gears [$]C = \frac m 2 (N_1 + N_2)[/$]
what is the minimum number of teeth for standard gears of pressure angle 20 degrees 18
what is a simple gear train each shaft only carries one gear
what is a compound gear train a gear train where at least one shaft carries two or more gears
what is a reverted train a compond train in which the input and shaft are colinear
what is a planetary gear train has a sun gear, planet carrier, and one or more planet gears
what differentiates planetary gear systems it has two degrees of freedomhas very high gear ratios
what are the common forms of gear failure bending fatiguepittingmicropittingscuffing
what is a lower pair joint joint with surface contact (pin in a hole)
what is a higher pair joint a joint with point or line contact, such as a pin in a slot
what is rectilinear translation points in the body move in parallel straight lines
what is curvilinear motion points in the body move along idential curves so the link does not rotate with respect to the ground
what is the equation for degrees of freedom of a mechanism (gruebler's) M = 3L - 2J - 3G
what does it mean if a structure has negative degrees of freedom it's preloaded or overconstrained
what is the grashof condition equation and what does it mean S + L < P + Q: it is a grashof linkage and at least one link can make a full revolutionS + L > P + Q: non grashof and no link capable of making full revolutionS + L = P + Q: special grashof - either double-cranks or crank rockers
what is a limit/toggle test checks if linkage can reach all positions without encountering a limit of toggle positiontoggle positons may be determined by collinearity of two links
what is transmission angle angle between output link and coupler
what is the ideal transmission angle 90 degrees
what is the minimum transmission angle 40 degrees

View File

@@ -4,17 +4,34 @@ date: \today
title: MMME2044 // Bearings
tags: [ bearings ]
uuid: 94cac3fd-c352-4fdd-833d-6129cb484b8a
lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic Bearings 1.pdf ]
lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic Bearings 1.pdf, ./lecture_slides/Lecture 11 - Bearings 2 - Rolling Element Bearings.pdf ]
anki_deck_tags: [ bearings ]
---
> I don't think I ever finished these notes.
# Errata
## Lecture Slides 2 (Lecture 11), slide 18
Static load carrying capacity equation is
$$S_0 = \frac{P_0}{C_0}$$
but should be:
$$S_0 = \frac{C_0}{P_0}$$
If the load applied to a bearing is half of its rated capacity,
then you have a safety factor of 2.
Therefore the equation in the slides must be incorrect.
# Types of Bearings
<details>
<summary>
## Plain Journal Bearings
### Plain Journal Bearings
</summary>
@@ -24,7 +41,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
- the insert provides lower friction and less wear than if just rotating in the support
- the bearing may be dry rubbing or lubricated
### Lubrication
#### Lubrication
- hydrodynamic---a shaft continuously in oil. the load is carried by pressure generated in the oil
as a result of the rotation
@@ -38,7 +55,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
<details>
<summary>
## Ball and Roller Bearings (Rolling Element Bearings)
### Ball and Roller Bearings (Rolling Element Bearings)
</summary>
@@ -54,7 +71,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
<details>
<summary>
## Plain Rubbing Bearings (Dry Sliding)
### Plain Rubbing Bearings (Dry Sliding)
</summary>
@@ -68,7 +85,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
<details>
<summary>
## Oil Lubricated Porous Bearings
### Oil Lubricated Porous Bearings
</summary>
@@ -82,7 +99,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
<details>
<summary>
# Hydrodynamic Bearings
### Hydrodynamic Bearings
</summary>
@@ -94,6 +111,7 @@ lecture_slides: [ ./lecture_slides/Lecture 7 - Bearings 1 Plain Hydrodynamic
![](./images/vimscrot-2022-11-15T17:56:26,739425867+00:00.png)
</details>
# fun graphs that may be useful for bearing selection
@@ -127,7 +145,7 @@ $$p = \frac{F_\text{radial}}{bD}$$
$$V = \omega\frac D2$$
![](./images/vimscrot-2022-11-15T17:48:21,486895199+00:00.png)
![](./images/vimscrot-2023-04-28T18:17:05,184873693+01:00.png)
## Axial Sliding Bearing
@@ -136,7 +154,23 @@ $$p = \frac{4F_\text{axial}}{\pi(D^2-d^2)}$$
$$V = \omega\frac{D+d}{4}$$
![](./images/vimscrot-2022-11-15T17:48:34,860294942+00:00.png)
![](./images/vimscrot-2023-04-28T18:17:16,580658677+01:00.png)
## Plain Rubbing Bearings
- does not rely on liquid lubricaton
- usually made of polymers and moulded to final shape
- dry lubricants like ptfe are added
- reinforcements like glass fibres can be added
- pressure is limited by strength
- speed is limited by temperature
## Oil Lubricated Porous Bearings
- manufactured from sintered metal powders
- porous & oil impregnated
- more porous bearings are weaker but can run at higher speeds
- lubricant needs to be replenished at regular intervals
# Wear

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -226,10 +226,10 @@ design.
Simply multiply the maximum stresses and loads you expect by the safety factor, $n_s$, and assume
that as your maximum stress and load.
$n_s$ | Operational conditions and use of materials
----- | -------------------------------------------
1.25-1.50 | Reliable materials under controlled conditions, known stresses with certainty
1.50-2.00 | Well-known materials under reasonably constant environmental condition, known stresses
2.00-2.50 | Average materials subjected to known loads and stresses and environment (LSE)
2.50-3.00 | Lesser well-known materials under average conditions LSE
3.00-3.40 | Untried materials under average conditions of stresses and environment, or well known materials under uncertain LSE
| $n_s$ | Operational conditions and use of materials |
|-----------|---------------------------------------------------------------------------------------------------------------------|
| 1.25-1.50 | Reliable materials under controlled conditions, known stresses with certainty |
| 1.50-2.00 | Well-known materials under reasonably constant environmental condition, known stresses |
| 2.00-2.50 | Average materials subjected to known loads and stresses and environment (LSE) |
| 2.50-3.00 | Lesser well-known materials under average conditions LSE |
| 3.00-3.40 | Untried materials under average conditions of stresses and environment, or well known materials under uncertain LSE |

View File

@@ -175,7 +175,7 @@ When $\text{Ma} > 0.3$, the flow should be considered compressible.
# Nondimensional Momentum Equation (From Navier-Stokes)
$$\frac{\del \pmb{V*}}{\del t*} + \pmb{V*} \cdot (\Del* \pmb{V*} = -\Del* p* + \frac{1}{\text{Re}}\Del*^2\pmb{V*}$$
$$\frac{\delta \pmb{V^*}}{\delta t^*} + \pmb{V^*} \cdot (\nabla^* \pmb{V^*}) = -\nabla^* p^* + \frac{1}{\text{Re}}\nabla^{*2}\pmb{V^*}$$
Therefore for large values of Reynolds number, the viscous forces become negligible.
@@ -185,7 +185,7 @@ An airfoil model and prototype are geometrically similar, with $1:\alpha$ length
- $x_m = \frac{x_p}{\alpha}$, $y_m = \frac{y_p}{\alpha}$
- $u_m$ at $(x_m, y_m)$ must have the same direction at $u_p$ at $(x_p, y_p)$
- $\frac{u_p}{u_m} = \Beta$ is constant at homologous points
- $\frac{u_p}{u_m} = \beta$ is constant at homologous points
![](./images/vimscrot-2023-02-06T09:46:38,665212789+00:00.png)

View File

@@ -1,2 +1,5 @@
This paper is of the format used before covid and therefore is the full year in two parts.
The length of questions in the part A is appropriate for the January exam, but the content is split between the part A and part B in this exam from 2020. You should be able to answer Questions 1, 2, 4, 7, 10, 11; and you can usefully attempt questions 13, 16b and 17b
The length of questions in the part A is appropriate for the January exam, but the content is split
between the part A and part B in this exam from 2020.
You should be able to answer Questions 1, 2, 4, 7, 10, 11;
and you can usefully attempt questions 13, 16b and 17b

View File

@@ -9,12 +9,24 @@ lecture_notes: [ ./lecture_notes/ConvectHeatTrans2022-2023.pdf ]
exercise_sheets: [ ./exercise_sheets/ExamplesConvectionHeatTransfer.pdf ]
---
# Errata
## Grashof Number (formula booklet, lecture slides p. 24, lecture recording 2, 1:19:30)
The Grashof number formula should be written with $\nu$, not $\mu$,
It is correctly written in lecture notes (p. 8), [Wikipedia](https://en.wikipedia.org/wiki/Grashof_number),
and on this page.
Somehow it is also incorrect in the formula booklet.
You can check which one is correct by checking which results in a dimensionless Grashof number.
# Convection
- conduction and radiation heat transfer can be estimated by calculations and properties
- convection is dependent on fluid properties, flow type, and flow characteristics
The rate of convective heat transfer, $\dot Q$, is given by
The rate of convective heat transfer, $\dot Q$, is given by Newton's law of cooling:
\begin{equation}
\dot Q = hA(T_f-T_w)
@@ -32,4 +44,93 @@ $$\dot Q = \frac{T_f-T_w}{\sum R_\text{thermal}}$$
where $R_\text{thermal} = \frac{1}{hA}$.
In a way this analogous to Ohm's law, specifically with resistors in series ($I = \frac{\Deta V}{\sum R_\text{electrical}}$).
In a way this analogous to Ohm's law, specifically with resistors in series ($I = \frac{\Delta V}{\sum R_\text{electrical}}$).
## Analysis of how Convection Works
At a hot wall, the velocity of the fluid touching it will be zero.
Therefore the heat transfer into the fluid must happen by conduction.
This means that the local heat flux per unit area, $\dot Q''$ (dot for rate, double dash for per
unit area) is given by:
$$\dot Q'' = -k \frac{\delta T}{\delta y}|_{\text{wall}}$$
where $k$ is the conductivity of the wall
![](./images/convection.png)
The heated fluid is carried away by convection, therefore at steady state we can say that:
$$\dot Q'' = -k \frac{\delta T}{\delta y}|_\text{wall} = -h(T_\infty - T_\text{wall})$$
Rearranging allows $h$ to be found.
# Nusselt Number - Relation Between Fluid Conductivity and Convection
Nusselt number is a dimensionless number:
$$\text{Nu} = \frac{hL}{k_f}$$
where $k_f$ is conductivity of the fluid, $L$ is the representative length (e.g. diameter, length,
internal width, etc.), and $h$ is heat transfer coefficient.
Since $h$ is unknown a lot of the time, sometimes Nusselt number must be found through approximating
by other dimensionless numbers: Prandtl, Reynolds, and Grashof.
Nusselt number for a laminar forced flow is around 3.66.
For a turbulent forced flow it is estimated to be:
$$\text{Nu}_x = 0.023\text{Re}_x^{0.8}\text{Pr}^{0.4}$$
For a laminar forced flow over a flat plate:
$$\text{Nu}_x = 0.332\text{Re}_x^{0.5}\text{Pr}^{0.33}$$
For natural convection of a vertical wall:
\begin{align*}
\text{Nu}_x = 0.59(\text{Gr}_x\text{Pr})^{0.25} &\text{ for }10^3 < \text{GrPr} < 10^9 \\
\text{Nu}_x = 0.13(\text{Gr}_x\text{Pr})^{0.25} &\text{ for }10^9 < \text{GrPr} < 10^{12}
\end{align*}
[removing annoying html syntax highlighti]: >
# Prandtl Number
This number relates thickness of velocity boundary layer to thickness of thermal boundary layer:
$$\text{Pr} = \frac{c_p\mu}{k_f} = \frac{\nu}{\alpha}$$
where $\nu$ is the kinematic viscosity and $\alpha$ is the thermal diffusivity (equations given in
lecture notes p. 5).
# Grashof Number
Grashof number compares the buoyancy of the fluid (due to compressibility, $\beta = T^{-1}$,
where $T$ is the film temperature, or average temperature between fluid and wall, in kelvin)
and the viscous resistance to buoyant motion.
$$\text{Gr} = \frac{g\beta L^3\rho^2\Delta T}{\nu^2}$$
where $g$ is acceleration due to gravity, $L$ is the height or length of the tube, $\rho$ is density
of the fluid, $\Delta T = T_\text{wall} - T_\infty$, and $\nu$ is the kinematic viscosity.
# Axisymmetric Shenanigans
Axisymmetric shapes are symmetric about an axis.
$$\dot Q' = -kA\frac{\mathrm dT}{\mathrm dr} = -k2\pi r\frac{\mathrm dT}{\mathrm dr}$$
Note that the single dash on $\dot Q'$ implies *per unit length*.
For any length, $L$, $A = 2\pi rL$.
In this case, the temperature profile is no longer linear, even if $k$ is constant:
$$R_\text{th} = \frac{\ln r_o - \ln r_i}{2\pi kL}$$
# Definitions
- *lagging* - insulation

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Some files were not shown because too many files have changed in this diff Show More