rust-trondheim / .github

Suggestions and ideas goes here!
1 stars 0 forks source link

Nyårs bug-hunt meetup #2

Closed eirikblekesaune closed 1 year ago

eirikblekesaune commented 1 year ago

Forslag om å holde en litt mer intro-aktig workshop for å sparke i gang nyåret. Som @cbrevik nevnte så er det sikkert flere som brenner inne med nyttårsforsetter om å lære seg nye ting.

Her tar vi for oss de de mer "særegne" aspektene ved Rust. Vi lager en samling Rust programmer med klassiske Rust-kompilasjonsfeil, som vi løser i felleskap.

Noen forslag til tematitler😎 (m. fare for ordspill og rim av generelt 'varierende' kvalitet...):

eirikblekesaune commented 1 year ago

Forslag til dato for workshop: 15. Februar Tror dere det kan funke @cbrevik og @AndersNS ?

cbrevik commented 1 year ago

Haha, denne er fantastisk! Jeg skal sjekke kalenderen, men ser ut som Varianthuset er ledig 15. februar ja. Kommer tilbake sporenstreks på den.

cbrevik commented 1 year ago

Ser ut som det er opptatt til kl 17 den 15. februar. Så evt. kan vi pushe det til kl 17, eller ta det en annen dag hvis vi ønsker tidligere klokkeslett.

Ville du ta denne selv @eirikblekesaune eller interessert i å dele den opp så blir det ikke mye å bite over? Er du interessert i å være med @AndersNS? Tenkte så vi kan bytte på å presentere/fasilitere?

eirikblekesaune commented 1 year ago

For meg funker det jo fint å ta det fra 17:00 egentlig. Hva med dere?

Vi kunne jo feks laget et par-tre slike ødelagte programmer hver? De titlene ovenfor var bare forslag altså, så jeg har ikke noen klar tanke med det hele egentlig.

eirikblekesaune commented 1 year ago

Lagde et repo hvor vi kan legge inn ødelagte programmer, så ser vi bare hvor vi ender opp. https://github.com/rust-trondheim/programmer-med-feil

Hva tenker dere om strukturen i repoet?

En mulig løsning er å legge inn programmene i separate mapper, også lage et workspace av hovedmappa. Så kan for eksempel hver mappe ha en README.md, hvor man kan gjemme løsningsforlag med details/summary https://gist.github.com/scmx/eca72d44afee0113ceb0349dd54a84a2

Dette er feil:

let x = "fd;
:see_no_evil: Slik fikser du det:

let x = "fd";

Btw, jeg fikk ikke syntax coloring til å funke med <pre>-tags, men de nødvendige inne i <details>(?) Vet dere om et triks?

cbrevik commented 1 year ago

For meg funker det jo fint å ta det fra 17:00 egentlig. Hva med dere?

For min del er det vanligvis greit at det er tidlig på grunn av legging av unger, men jeg kan evt. runde av litt tidligere selv! Fikk melding nå om at det er kanskje tilgjengelig før kl 17 også den dagen så kan være det ordner seg læll.

Liker tanken på at vi kan gjemme løsningsforslag som du sier. En annen måte hadde vært å ha en git branch for oppgave og en for løsning. Men fort mareritt å holde de oppdatert med hverandre ved endringer/tillegg 🙈

Klarte heller ikke å få til syntax highlighting inni details, alternativt så kunne vi lenke til en markdown-fil med løsning ved siden av README.md som vi lenker til? Ikke like smud kanskje. Men tenker kanskje med mindre løsningene er veldig omfattende så er det ikke krise om det ikke er highlighting?

Støtter separate mapper i hvert fall :+1: - åpner for å kunne lage noen kule problemstillinger fremfor at hele greia må "henge sammen".

Jeg jobber ikke med Rust daglig, så tar gjerne noen av de "enklere" problemstillingene 😂

eirikblekesaune commented 1 year ago

Ah, jeg ser at man faktisk kan bruke trippel backticks. Sist jeg prøvde det funka det ikke, men grunnen til det var at jeg hadde ikke tom linje over og under selve trippel-backticks delen. Hvis du sammenligner under:

Oppgave: Lag et program i Rust som skriver "Hello, World!" til terminalen.
<details><summary>🙈 Løsningsforslag</summary>
```rust
fn main() {
  println!("Hello, World!");
}

blir til:

Oppgave: Lag et program i Rust som skriver "Hello, World!" til terminalen.
<details><summary>🙈 Løsningsforslag</summary>
```rust
fn main() {
  println!("Hello, World!");
}

mens dette:

Oppgave: Lag et program i Rust som skriver "Hello, World!" til terminalen.
<details><summary>🙈 Løsningsforslag</summary>

```rust
fn main() {
  println!("Hello, World!");
}

Blir til dette:

Oppgave: Lag et program i Rust som skriver "Hello, World!" til terminalen.
<details><summary>🙈 Løsningsforslag</summary>

```rust
fn main() {
  println!("Hello, World!");
}

eirikblekesaune commented 1 year ago

Jeg jobber ikke med Rust daglig, så tar gjerne noen av de "enklere" problemstillingene :joy:

Ja, det samme gjelder meg også. Men jeg tenker at den beste måten å lære seg noe er å prøve å lære det bort, eller hvertfall sette i gang en kollektiv læringsprosess.

eirikblekesaune commented 1 year ago

For min del er det vanligvis greit at det er tidlig på grunn av legging av unger, men jeg kan evt. runde av litt tidligere selv! Fikk melding nå om at det er kanskje tilgjengelig før kl 17 også den dagen så kan være det ordner seg læll.

Supert at du lagde event på Meetup.com. Teksten ser helt super ut. Når vi får avklart endelig starttidspunkt så kan vi jo bare publisere det eller?

Jeg tenkte på varigheten på 2 timer. Er det evt. mulig å holde på litt lengre hvis det skulle være flere som fikk fot? Om vi hadde f.eks. satt det til 3 timer, så kan vi jo runde av når det passer?

cbrevik commented 1 year ago

Men jeg tenker at den beste måten å lære seg noe er å prøve å lære det bort

Helt enig!

Når vi får avklart endelig starttidspunkt så kan vi jo bare publisere det eller?

Jeg lagde en draft så dere kan gi tilbakemelding, tror 16:30 kan være greit. Noen andre bruker rommet til kl 16, så da får vi tid til å sette opp bord osv, ordne med mat. Tenker jeg publiserer under lunsjen nå.

Om vi hadde f.eks. satt det til 3 timer, så kan vi jo runde av når det passer?

Ja kan godt utvide. 🎯 Var litt tilfeldig at jeg satte to timer egentlig.

eirikblekesaune commented 1 year ago

Sjekket ChatGPT om hvilke temaer som oftest er utfordrende for for nye Rust programmerere. Her er svaret:


There are several common programming errors that Rust programmers may encounter, some of them are:

It's important to note that Rust is a new programming language and it has a steep learning curve. These common errors are not unique to Rust, but rather a reflection of the complexity of programming in general. With experience, and a good understanding of the language's features and best practices, many of these errors can be avoided.


Så har vi jo et utgangspunkt for å sette temaer. ;-)

eirikblekesaune commented 1 year ago

Fordeling av temaer

1 - Anders

Ownership Borrowing Lifetimes, bruke Drop trait til å vise lifetime, forskjell mellom GC språk og Rust

2 - Eirik

Iteratorer Closures Pattern/String matching

3 - Christian

C# bakgrunn, mapping av Exceptions Result, Error, håndtering Trait objects

eirikblekesaune commented 1 year ago

Her er noen forslag til organisering av cargo oppsett. Hvis vi samler de individuelle programmene våre i egne cargo packages, dvs. lage egne mapper som har egne Cargo.toml, og bruker rotmappa til å liste opp disse pakkene som members under en [workspace] header, får vi et virtuelt workspace. Dette kan gjøre at de indivuelle pakkene ikke er avhengige av hverandre i så stor grad.

Slik @cbrevik har lagt det opp er fint tror jeg. Det eneste som er nyttig å legge til er å definere binaries i underpakkenes Cargo.toml filer. F.eks. for pakken som ligger i mappen bug_07_result, så kan man legge inn to binaries slik:

[[bin]]
name = "divider"
path = "src/divider.rs"
[[bin]]
name = "file_reader"
path = "src/file_reader.rs"

Man kan da kjøre testene slik: cargo test -- bin divider Navnet på binaries er jo valgfritt. Kanskje det er lurt å prepende bug_07 slik at det blir bug_07_divider.

Hvis programmet har en main funksjon så kan man kjøre binary med: cargo run --bin divider

En annen fordel med dette er jo at vi kan ha så mange binaries i hver underpakke som vi trenger.

cbrevik commented 1 year ago

Satt og tenkte litt på dette nå, en mulighet kan være å navngi testene på en sånn måte at en kan kjøre de som en enkelt test suite.

F. eks. hvis jeg navngir de for divide-funksjonen som divider_valid_args_should_return_ok_result og divider_divide_by_zero_should_return_err (mao starter test-navnet med divider), så vil cargo test divider kun kjøre de testene som har divider i navnet.

Vil det løse problemet? Merker også at den vil ikke kjøre testene som ikke kompilerer, så vurderer egentlig bare kommentere ut tester som ikke bygger.

eirikblekesaune commented 1 year ago

Du kan kansksje legge til en #[ignore] over de som ikke skal kompileres, så fjerner du #[ignore] for hver test du aktiverer?

vis du trenger å kjøre kun én av testene så tror jeg syntaksen er cargo test --bin divider::valid_args_should_return_ok_result

eirikblekesaune commented 1 year ago

Det lukter vel litt av at vi skal få til en cargo relatert meetup etterhver..? Er mye å lære der som jeg absolutt ikke har oversikt over.

cbrevik commented 1 year ago

Så absolutt hadde vært verdifullt det ja

cbrevik commented 1 year ago

Prøvde ignore nå, men ser ut som de fortsatt blir forsøkt bygd, virker til at ignore bare påvirker om den kjøres eller ikke etter at den har blitt bygd

eirikblekesaune commented 1 year ago

Ah, du skal bruke en #[cfg(test)] sak før testene dine. Da kompileres ikke testene med resten av koden.