From 2b8ca93fab6aaac4056924d02818b5f8a49cf2aa Mon Sep 17 00:00:00 2001 From: Dave Dietrick Date: Fri, 10 Jan 2025 16:02:46 -0500 Subject: [PATCH] Some updates to python and rust from reference project, started java section and go rpc/grpc sections --- docs/.vitepress/cache/deps/@theme_index.js | 46 +++++++++++----------- docs/.vitepress/cache/deps/_metadata.json | 16 ++++---- docs/.vitepress/config.js | 1 + docs/go/advanced/grpc.md | 0 docs/go/advanced/rpc.md | 0 docs/go/sidebar.json | 6 ++- docs/java/index.md | 1 + docs/java/sidebar.json | 9 +++++ docs/languages.md | 2 + docs/python/advanced/webscraping.md | 27 +++++++++++++ docs/python/sidebar.json | 1 + docs/rust/advanced/tests.md | 31 ++++++++++++++- docs/rust/advanced/traits.md | 2 +- docs/rust/basics/controlflow.md | 26 ++++++++++-- docs/rust/basics/types.md | 15 +++++++ 15 files changed, 145 insertions(+), 38 deletions(-) create mode 100644 docs/go/advanced/grpc.md create mode 100644 docs/go/advanced/rpc.md create mode 100644 docs/java/index.md create mode 100644 docs/java/sidebar.json create mode 100644 docs/python/advanced/webscraping.md diff --git a/docs/.vitepress/cache/deps/@theme_index.js b/docs/.vitepress/cache/deps/@theme_index.js index 810a187..a44d743 100644 --- a/docs/.vitepress/cache/deps/@theme_index.js +++ b/docs/.vitepress/cache/deps/@theme_index.js @@ -9,31 +9,31 @@ import { } from "./chunk-3YS4HNIT.js"; // node_modules/vitepress/dist/client/theme-default/index.js -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; // node_modules/vitepress/dist/client/theme-default/without-fonts.js -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; -import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; -import VPBadge from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import Layout from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue"; -import { default as default2 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import { default as default3 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; -import { default as default4 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; -import { default as default5 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; -import { default as default6 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; -import { default as default7 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; -import { default as default8 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; -import { default as default9 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; -import { default as default10 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; -import { default as default11 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; -import { default as default12 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; -import { default as default13 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; +import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; +import VPBadge from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import Layout from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue"; +import { default as default2 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import { default as default3 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; +import { default as default4 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; +import { default as default5 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; +import { default as default6 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; +import { default as default7 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; +import { default as default8 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; +import { default as default9 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; +import { default as default10 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; +import { default as default11 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; +import { default as default12 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; +import { default as default13 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; // node_modules/vitepress/dist/client/shared.js var inBrowser = typeof document !== "undefined"; diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 1ac42fd..5961167 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,31 +1,31 @@ { - "hash": "b31dd5f2", - "configHash": "9af315cb", - "lockfileHash": "951d497c", - "browserHash": "14d9b0dd", + "hash": "3c715ca3", + "configHash": "9ebaad5b", + "lockfileHash": "ebeae15b", + "browserHash": "0b0ad317", "optimized": { "vue": { "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "9f6650f2", + "fileHash": "7cf78117", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "87d887f1", + "fileHash": "98f5c738", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../../node_modules/@vueuse/core/index.mjs", "file": "vitepress___@vueuse_core.js", - "fileHash": "3179a954", + "fileHash": "2d266902", "needsInterop": false }, "@theme/index": { "src": "../../../../node_modules/vitepress/dist/client/theme-default/index.js", "file": "@theme_index.js", - "fileHash": "1bd77338", + "fileHash": "2eb1f2ce", "needsInterop": false } }, diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js index 930ca57..51b8d46 100644 --- a/docs/.vitepress/config.js +++ b/docs/.vitepress/config.js @@ -17,6 +17,7 @@ export default { "/aws/": require("../aws/sidebar.json"), "/go": require("../go/sidebar.json"), "/react": require("../react/sidebar.json"), + "/java": require("../java/sidebar.json"), "/": [ { text: "Home", diff --git a/docs/go/advanced/grpc.md b/docs/go/advanced/grpc.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/go/advanced/rpc.md b/docs/go/advanced/rpc.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/go/sidebar.json b/docs/go/sidebar.json index c093a4f..4eeb7d0 100644 --- a/docs/go/sidebar.json +++ b/docs/go/sidebar.json @@ -15,6 +15,10 @@ }, { "text": "Go Advanced", - "items": [{ "text": "Testing", "link": "/go/advanced/testing" }] + "items": [ + { "text": "Testing", "link": "/go/advanced/testing" }, + {"text": "RPC", "link": "/go/advanced/rpc"}, + {"text": "gRPC", "link": "/go/advanced/grpc"} + ] } ] diff --git a/docs/java/index.md b/docs/java/index.md new file mode 100644 index 0000000..526e9b1 --- /dev/null +++ b/docs/java/index.md @@ -0,0 +1 @@ +# Java \ No newline at end of file diff --git a/docs/java/sidebar.json b/docs/java/sidebar.json new file mode 100644 index 0000000..32bf35d --- /dev/null +++ b/docs/java/sidebar.json @@ -0,0 +1,9 @@ +[ + { + "text": "Basics", + "items": [ + { "text": "Introduction", "link": "/java/" } + ] + } + ] + \ No newline at end of file diff --git a/docs/languages.md b/docs/languages.md index b485998..f88a2d6 100644 --- a/docs/languages.md +++ b/docs/languages.md @@ -5,3 +5,5 @@ [Rust](/rust/) [Go](/go/) + +[Java](/java/) \ No newline at end of file diff --git a/docs/python/advanced/webscraping.md b/docs/python/advanced/webscraping.md new file mode 100644 index 0000000..ce10482 --- /dev/null +++ b/docs/python/advanced/webscraping.md @@ -0,0 +1,27 @@ +# Webscraping + +Python is an amazing language to use for webscraping purposes. One of the ways to do this is with the BeautifulSoup (or bs4) package. + +```python +import requests +import bs4 + +result = requests.get('https://en.wikipedia.org/wiki/Jonas_Salk') + +soup = bs4.BeautifulSoup(result.text,"lxml") + +print(soup.select('title')[0].getText()) +# soup.select('.some_class') +# soup.select('#some_id') + +# Images +pic_element = soup.select('.thumbimage')[0] +print(pic_element['src']) + +image_link = requests.get('http:' + pic_element['src']) + +# Write image to file +f = open('my_img.jpg', 'wb') +f.write(image_link.content) +f.close() +``` \ No newline at end of file diff --git a/docs/python/sidebar.json b/docs/python/sidebar.json index b0eacb4..4a7833b 100644 --- a/docs/python/sidebar.json +++ b/docs/python/sidebar.json @@ -25,6 +25,7 @@ {"text": "Regex", "link": "/python/advanced/regex"}, {"text": "Testing", "link": "/python/advanced/tests"}, {"text": "Timing", "link": "/python/advanced/timing"}, + {"text": "Webscraping", "link": "/python/advanced/webscraping"}, {"text": "Zipping", "link": "/python/advanced/zip"} ] } diff --git a/docs/rust/advanced/tests.md b/docs/rust/advanced/tests.md index 6ad15b4..bb72c89 100644 --- a/docs/rust/advanced/tests.md +++ b/docs/rust/advanced/tests.md @@ -7,6 +7,11 @@ Test functions are defined with the `#[test]` attribute. Within the tests, we u For unit tests, its best to write your tests in the file that it is testing but contain it with a `mod tests` with the `cfg(test)` attribute. This will exclude it from the final executable or library. Unit tests also allow you to test private functions, meaning ones that are not `pub`. ```rust +#[allow(dead_code)] +pub fn greeting(_name: &str) -> String { + String::from("Hello!") +} + #[cfg(test)] mod tests { use super::*; // Use this to call functions in the current file @@ -33,7 +38,31 @@ mod tests { #[test] #[should_panic] fn greater_than_100() { - // Something illegal + panic!("I'm supposed to panic") + } + + #[test] + #[should_panic(expected = "Expected text")] + fn expect_panic_message() { + panic!("Expected text"); + } + + // Ignore test + // Can still be run on demand + #[test] + #[ignore] + fn expensive_test() { + // code that takes an hour to run + } + + // Return a result to allow for the ? operator to be used to cause test failures + #[test] + fn result_test() -> Result<(), String> { + if 2 + 2 == 4 { + Ok(()) + } else { + Err(String::from("two plus two does not equal four")) + } } } ``` diff --git a/docs/rust/advanced/traits.md b/docs/rust/advanced/traits.md index 351cc65..c7878e9 100644 --- a/docs/rust/advanced/traits.md +++ b/docs/rust/advanced/traits.md @@ -91,7 +91,7 @@ fn some_function(t: &T, u: &U) -> i32 ## Returning types that implement traits -You can only use a trait as a return value if you are returning a single type. +You can only use a trait as a return value if you are returning a single type. For example, you can not have one path that returns a NewsArticle and one that returns a Tweet. ```rust fn returns_summarizable() -> impl Summary { diff --git a/docs/rust/basics/controlflow.md b/docs/rust/basics/controlflow.md index a045ef0..993e0ab 100644 --- a/docs/rust/basics/controlflow.md +++ b/docs/rust/basics/controlflow.md @@ -17,8 +17,11 @@ if num < 3 { ```rust let config_max = Some(3u8); +let age: Result = "34".parse(); if let Some(max) = config_max { println!("The maximum is configured to be {}", max); +} else if let Ok(age) = age { + println!("Age is {}", age); } ``` @@ -107,10 +110,25 @@ fn value_in_cents(coin: Coin) -> u8 { } fn plus_one(x: Option) -> Option { - match x { - None => None, - Some(i) => Some(i + 1), - } + match x { + None => None, + Some(i) => Some(i + 1), } +} + +// Or +let x = 1; +match x { + 1 | 2 => println!("one or two"), + 3 => println!("three"), + _ => println!("anything"), +} + +// Range +let x = 5; +match x { + 1..=5 => println!("one through five"), + _ => println!("something else"), +} ``` \ No newline at end of file diff --git a/docs/rust/basics/types.md b/docs/rust/basics/types.md index 79f1228..2c21454 100644 --- a/docs/rust/basics/types.md +++ b/docs/rust/basics/types.md @@ -82,6 +82,21 @@ let _two = b[1]; // let n = a[10]; ``` +## Result + +Results allow you to handle when something returns either a value or error. If it has a valid value, it will be of type `Ok`, otherwise it will be of type `Err`. See the `errors` section for more into on Results. + +## Option + +Options are similar to Results in that they can contain a conditional type. It can be either of type `None` or type `Some`. + +```rust +enum Option { + None, + Some(T), +} +``` + ## Type Aliases ```rust