| smohamud has quit (Read error: Connection reset by peer) | 06:11 | |
| dcammue__ has quit (Ping timeout: 480 seconds) | 06:46 | |
| smohamud has quit (Ping timeout: 480 seconds) | 08:29 | |
| smohamud has quit (Ping timeout: 480 seconds) | 09:16 | |
| dcammue has quit (Remote host closed the connection) | 09:45 | |
| jelkner | Hello gabriel_jetro | 10:25 |
|---|---|---|
| jelkner | are you here? | 10:26 |
| gabriel_jetro | Good morning jelkner | 10:26 |
| thomasboimah | Good morning jelkner and gabriel_jetro! | 10:27 |
| jelkner | Good morning! | 10:28 |
| jelkner | lol | 10:29 |
| jelkner | i just tried to call dcammue on signal | 10:29 |
| jelkner | that will be my new way of reaching out when i don't see anyone here ;-) | 10:29 |
| jelkner | thomasboimah, do you have a few minutes to plan? | 10:29 |
| thomasboimah | sure | 10:29 |
| gabriel_jetro | Yes i am here, jelkner, I am sorry you've not seen me online since wednesday, i was rob by knife men's men on wednesday afternoon, they took the phone you give me and i am unable to track it for the past few days now. | 10:29 |
| jelkner | so sorry to hear that gabriel_jetro | 10:30 |
| thomasboimah | dcammue when with jkollie and Fkoikoi to the credit union | 10:30 |
| jelkner | theft has long been a concern | 10:30 |
| jelkner | that's an awful experience | 10:30 |
| jelkner | sorry you had to go through it | 10:31 |
| jelkner | perfect thomasboimah | 10:31 |
| jelkner | ok, thomasboimah, i want to get you and zOnny reconnected | 10:31 |
| jelkner | he is feeling underutilized | 10:31 |
| jelkner | and we are not in a place were we can waste our very limited resources | 10:32 |
| jelkner | especially when there is so much waiting to be done | 10:32 |
| thomasboimah | +1 | 10:32 |
| gabriel_jetro | +1 | 10:32 |
| jelkner | thomasboimah, did you hear about the SJC meeting yesterday? | 10:32 |
| thomasboimah | I did read the log | 10:32 |
| jelkner | nice! | 10:33 |
| jelkner | you rock, thomasboimah | 10:33 |
| thomasboimah | Your guys have three circle now. | 10:33 |
| thomasboimah | *you | 10:33 |
| jelkner | just like our old friend replaceafill, we can count on you to be on top of things | 10:33 |
| jelkner | yes, 3 circles | 10:33 |
| jelkner | but what i wanted to talk to you about was the 4th | 10:34 |
| jelkner | the Mutual Aid circle | 10:34 |
| jelkner | with Care First Liberia as its first project | 10:34 |
| thomasboimah | Nice, btw I and Joseph will be going to the credit union this week | 10:34 |
| jelkner | excellent | 10:34 |
| jelkner | i owe you a donation | 10:35 |
| jelkner | once the banking is set up, we can do that | 10:35 |
| jelkner | ok, here's the other thing i wanted to talk about | 10:35 |
| jelkner | in both SJC and NWD, people are asking for a nice, simple, project management tool we can use to help track what needs to be done | 10:36 |
| thomasboimah | That sound like a work for Jetro :-) | 10:37 |
| jelkner | when we looked into this in the past, cjones and smohamud recommened something called a kanban board | 10:37 |
| jelkner | i've never used it | 10:37 |
| jelkner | but i remember the conversation | 10:37 |
| jelkner | so, here's what i'm pitching to you (hopefully working with zOnny) | 10:37 |
| jelkner | can you look into a Django kanban board we could use? | 10:38 |
| thomasboimah | Sure | 10:38 |
| jelkner | a quick search yielded this: | 10:38 |
| jelkner | https://github.com/misterpoloy/kanban-django | 10:38 |
| thomasboimah | and document all what i can find put it in md and share with you | 10:38 |
| jelkner | nice! | 10:38 |
| jelkner | we want Django! | 10:38 |
| jelkner | we need to build our core skill | 10:39 |
| jelkner | and not get distracted | 10:39 |
| thomasboimah | +1 | 10:39 |
| jelkner | ok, anything else for me? | 10:40 |
| jelkner | i'm going to call zOnny later to see if he can work with you on this | 10:40 |
| thomasboimah | -1 from me | 10:41 |
| jelkner | why? | 10:41 |
| thomasboimah | Okay | 10:41 |
| thomasboimah | the -1 was for the "anything else for me" | 10:41 |
| thomasboimah | lol | 10:41 |
| zOnny has quit (None) | 10:51 | |
| gabriel_jetro | Greetings zonny | 10:52 |
| thomasboimah | Good morning zOnny! | 10:53 |
| zOnny | Good morning comrades | 10:53 |
| smohamud | good morning all | 10:53 |
| thomasboimah | Good morning smohamud! | 10:53 |
| gabriel_jetro | I made a PR one the cjs branch with my branch name feature_claudejones | 10:56 |
| zOnny | jelkner: after our quick conversation | 10:58 |
| zOnny | jelkner: Following up on the kanban board idea: SJC already has a Nextcloud membership, so I think we should start using it before we build anything new. | 10:58 |
| gabriel_jetro | I did Feature #3 - Feature #4 - Feature #8 | 10:58 |
| zOnny | jelkner: Nextcloud includes Deck, a built-in kanban board with boards, lists, cards, assignees, due dates, labels, and comments. It also ties into the rest of Nextcloud, so cards can link to shared files, due dates show up in the calendar, and everything stays under the accounts and permissions we already have. | 10:59 |
| zOnny | jelkner: That means no new tool to build or maintain, no extra cost, and our data stays where it already lives. | 10:59 |
| zOnny | jelkner: I'd suggest we set up one board for a current project and try it for a couple of weeks. If we find real gaps, we can look at what's missing then. | 10:59 |
| jelkner | Yesterday i attended the SJC board meeting | 11:00 |
| jelkner | today i'm working on a project management plan for SJC | 11:00 |
| jelkner | blocking on finding a team at NWD/JWD to work on it | 11:00 |
| zOnny has quit (Remote host closed the connection) | 11:00 | |
| jelkner | ACTION done | 11:01 |
| gabriel_jetro | ACTION done | 11:01 |
| smohamud | gabriel_jetro please share link to that repo here | 11:01 |
| jelkner | great! | 11:01 |
| jelkner | zOnny had to drop off | 11:01 |
| gabriel_jetro | https://gitlab.com/novawebdevelopment/libreorganize-customization/claudiajones.git | 11:02 |
| jelkner | SJC is a May First member | 11:02 |
| jelkner | so it already has access to that infrastructure | 11:02 |
| jelkner | we just need to learn to us it | 11:02 |
| smohamud | Standup - reviewed remaining Google sheets data for NSS, replied email / requested meeting. Replied CJS. Reviewed 2 of Thomas's 11 PRs. | 11:02 |
| thomasboimah | Done with W1-1 through W3-4 of the development road map with the help of the React doc and deepseek. Some of the PR have been review and merge to main and the other PRs is still waiting for reviews. After all the PRs have been review by Smohamud and merge main, Then we can test. Includes: reverse geocode, EXIF GPS, in-app recording, PWA, comment UI polish, public read-only mode, signup approval, expert endorsements, PDF | 11:02 |
| thomasboimah | export, email + in-app notifications, feed filters, PWA install guide, share view tracking, and seed data with endorsements and GPS samples. | 11:02 |
| thomasboimah | ACTION done | 11:02 |
| smohamud | today: read AMS data models, write out process ideas for Rachel. | 11:03 |
| smohamud | done. | 11:03 |
| smohamud | *JS class, too. | 11:03 |
| gabriel_jetro | https://gitlab.com/novawebdevelopment/libreorganize-customization/claudiajones/-/merge_requests/ | 11:03 |
| jelkner | thomasboimah, i have a question for you | 11:03 |
| thomasboimah | shoot | 11:04 |
| smohamud | Thomas, Gabriel please join here: https://prod.liveshare.vsengsaas.visualstudio.com/join?FB4756967B7A67D2657E1A981CB6C6C54A4A | 11:04 |
| jelkner | who would be the next rising Django dev at JWD whom we could get working on a Django project? | 11:04 |
| jelkner | i just got off the phone with smohamud | 11:04 |
| thomasboimah | gabriel_jetro, and Jallah | 11:04 |
| jelkner | he is saying you are crucial to the core customer projects that we are blocking on now | 11:05 |
| jelkner | NS AMS mainly | 11:05 |
| jelkner | We have other projects coming in | 11:05 |
| jelkner | smaller ones | 11:05 |
| jelkner | cjones and i will be customer for one of them | 11:05 |
| jelkner | and cjones and a dc non-profit will be customers on the other | 11:06 |
| jelkner | i want to be able to start those projects with zOnny, a new paid JWD person, and a few of our students | 11:06 |
| jelkner | we can't do two at once | 11:06 |
| jelkner | not enough funding | 11:07 |
| jelkner | thomasboimah, can you speak to gabriel_jetro and Jallah and the rest of the JWD team and decide whom you could put on this? | 11:07 |
| thomasboimah | Okay | 11:07 |
| jelkner | cool | 11:07 |
| thomasboimah | I will do and get back to you on wed. | 11:08 |
| jelkner | +1 | 11:08 |
| jelkner | and i'll be at the meeting on wednesday | 11:08 |
| jelkner | ask the chosen person to show up then too | 11:08 |
| thomasboimah | smohamud, What can i help with on NSS AMS project? | 11:08 |
| jelkner | in fact, if they can't make meetings, don't choose them! ;-) | 11:08 |
| thomasboimah | okay | 11:08 |
| jelkner | great, see you wednesday | 11:09 |
| jelkner | ACTION signs off | 11:09 |
| smohamud | Let's discuss later Thomas, there are several things on our list but we need to priortize. | 11:09 |
| jelkner has quit (Quit: Leaving) | 11:09 | |
| thomasboimah | Dr. Hubbard is not that in hurry for his bro just so I can help with anything now | 11:09 |
| thomasboimah | *not bro, *project | 11:10 |
| thomasboimah | Okay | 11:10 |
| smohamud | Got it. | 11:11 |
| smohamud | Ok, let's get started on class today | 11:11 |
| thomasboimah | alright | 11:11 |
| smohamud | The topic is functions. FIrst, let's do a warmup on control-flow and reading / predicting output of code :) | 11:11 |
| smohamud | Scroll to line 67 | 11:11 |
| smohamud | Read through //Call stack. It's a term for the program's context that tracks all function calls. | 11:12 |
| smohamud | /Dev Tools gives a first hand look. | 11:12 |
| smohamud | const parentFunction = () => { | 11:12 |
| smohamud | console.log("Parent function is executed. Currently top of call stack. Line 61."); | 11:12 |
| smohamud | firstChildFunction() | 11:12 |
| smohamud | console.log("firstChildFunction is done executing. Call stack returned here. Line 63."); | 11:12 |
| smohamud | } | 11:12 |
| smohamud | const firstChildFunction = () => { | 11:12 |
| smohamud | childOfFirstChildFunction() | 11:12 |
| smohamud | console.log("childOfFirstChildFunction is done executing. Call stack returned me here. Line 68."); | 11:12 |
| smohamud | } | 11:12 |
| smohamud | const childOfFirstChildFunction = () => { | 11:12 |
| smohamud | console.log("childOfFirstChildFunction is executing. At the top of call stack. Line 72."); | 11:12 |
| smohamud | } | 11:12 |
| smohamud | function functionDeclaration(){ | 11:12 |
| smohamud | console.log("It is hoisted!") | 11:12 |
| smohamud | } | 11:13 |
| smohamud | parentFunction() | 11:13 |
| smohamud | What is the order of the logs when we call parentFunction? | 11:13 |
| smohamud | Line 82 | 11:13 |
| smohamud | Please write out the expected output if parentFunction is run. | 11:13 |
| smohamud | Of course, do not copy and run it elsewhere and share the output. That defeats the purpose of the exercise. | 11:16 |
| thomasboimah | when parentFunction() is called on line 82, the output will be: Parent function is executed. Currently top of call stack. Line 61. childOfFirstChildFunction is executing. At the top of call stack. Line 72. childOfFirstChildFunction is done executing. Call stack returned me here. Line 68. firstChildFunction is done executing. Call stack returned here. Line 63. | 11:18 |
| gabriel_jetro | The parent function will the the first line of code on line 61 | 11:19 |
| smohamud | Yes, do you want to give the rest a try? | 11:20 |
| gabriel_jetro | const parentFunction = () => { | 11:20 |
| gabriel_jetro | console.log("Parent function is executed. Currently top of call stack. Line 61."); | 11:20 |
| smohamud | Nice, that console.log is the first thing that gets logged. Do you have a prediction for the rest or no? | 11:21 |
| gabriel_jetro | which line should we predict? | 11:22 |
| gabriel_jetro | after parentfunction, the next to be executed will be firstchildfunction called | 11:24 |
| smohamud | Correct. Let's run it. I asked for the "output" so I meant what will show in the console. | 11:25 |
| gabriel_jetro | firstChildFunction() is called (line 3 inside parent): | 11:25 |
| gabriel_jetro | firstChildFunction is pushed onto the call stack (on top of parentFunction). | 11:25 |
| gabriel_jetro | Inside, childOfFirstChildFunction() is called | 11:25 |
| smohamud | But that's okay, you're on the right track :) | 11:25 |
| smohamud | Let's see. | 11:25 |
| gabriel_jetro | childOfFirstChildFunction() is called (line 7 inside firstChild): | 11:25 |
| gabriel_jetro | childOfFirstChildFunction is pushed onto the call stack (on top of firstChildFunction). | 11:25 |
| gabriel_jetro | Logs: "childOfFirstChildFunction is executing. At the top of call stack. Line 72." | 11:25 |
| gabriel_jetro | Function ends → popped off the call stack. | 11:25 |
| smohamud | Parent function is executed. Currently top of call stack. Line 61. | 11:26 |
| smohamud | childOfFirstChildFunction is executing. At the top of call stack. Line 72. | 11:26 |
| smohamud | childOfFirstChildFunction is done executing. Call stack returned me here. Line 68. | 11:26 |
| smohamud | firstChildFunction is done executing. Call stack returned here. Line 63. | 11:26 |
| smohamud | Thomas, excellent job. | 11:27 |
| thomasboimah | smohamud, quick question | 11:27 |
| smohamud | Gabriel, you were on track with the call order but I should've clarified. | 11:27 |
| smohamud | Yes Thomas | 11:27 |
| thomasboimah | What would the logs look like if firstChildFunction logged something before calling childOfFirstChildFunction, would the order change? | 11:27 |
| smohamud | Well, where would the new thing that's logged go? | 11:28 |
| thomasboimah | The new log would go right after Parent function is executed... Line 61 and right before childOfFirstChildFunction is executing... Line 72. (not to sure about this just a try) | 11:30 |
| smohamud | let's run it, I added the log: console.log("New log at firstChildFunction") | 11:31 |
| smohamud | Yes, it comes right after parentFunction executes and since it's logged *before* the other function that logs is called, it logs before it. | 11:32 |
| thomasboimah | Thanks | 11:32 |
| mulbah | Good morning to all | 11:32 |
| smohamud | Functions are just the program as a whole. The functions aren't hoisted within a function scope and executed before the rest of the function definition | 11:32 |
| thomasboimah | Good morning mulbah! | 11:32 |
| smohamud | They're just like* the program. | 11:32 |
| gabriel_jetro | Good morning mulbah | 11:32 |
| smohamud | They'll execute top to bottom. | 11:33 |
| smohamud | Does that help Thomas? | 11:33 |
| smohamud | Hi Mulbah :) | 11:33 |
| thomasboimah | +1 Thanks | 11:33 |
| smohamud | Awesome. So, today, let's focus on *functions* | 11:33 |
| smohamud | /Ecma Script is an organization that writes standards for JavaScript definitions. Makes sure JS is interoperable across browers/clients. | 11:34 |
| smohamud | /ES5 released in 2009 | 11:34 |
| smohamud | /ES6 released in 2015 | 11:34 |
| smohamud | /ES6 introduced let, const, arrow functions and classes | 11:34 |
| smohamud | So, let's get started. | 11:36 |
| smohamud | /Parts of a function: parameters, body. | 11:36 |
| smohamud | /Syntax: Always in curly braces | 11:36 |
| smohamud | line 27 declares jetroBankAccount object | 11:36 |
| smohamud | with one property, "balance" | 11:37 |
| smohamud | we define a function, payBill on line 37 | 11:37 |
| smohamud | It updates bank account information. | 11:37 |
| smohamud | It's a regular function declaration. | 11:38 |
| smohamud | Read paybill and notice it subtracts 100 from the bank account. | 11:39 |
| smohamud | Question: if we run payBill two times, will the balance be 900 or 800 and why? | 11:39 |
| smohamud | jetroBankAccount | 11:40 |
| smohamud | I'll give another minute to answer. Again, no need to be right just say what you think | 11:41 |
| thomasboimah | the code line please. | 11:41 |
| smohamud | That's good information. | 11:41 |
| smohamud | Line 42 | 11:41 |
| smohamud | What's the output of console.log("Bank account after Paybill is run twice: ", jetroBankAccount) | 11:41 |
| thomasboimah | for 30 to 42? | 11:41 |
| thomasboimah | *from | 11:42 |
| smohamud | 27 to 42 | 11:42 |
| smohamud | 1 more min. | 11:42 |
| smohamud | Note that everytime payBill is called, it subtracts 100 from the balance. | 11:42 |
| smohamud | The starting balance is 1000. But, the question is, does it mutate the balance or does it only have that value within the scope? Note that it's declared with const *and* we log the object *after* payBill is run twice | 11:43 |
| thomasboimah | smohamud, is that 10000 or 1000 | 11:43 |
| thomasboimah | in the code | 11:44 |
| thomasboimah | ? | 11:44 |
| smohamud | Apologies, that' 10000 | 11:44 |
| smohamud | will it be 9900 or 9800? | 11:44 |
| smohamud | Thank you Thomas. | 11:44 |
| thomasboimah | it will be 9800 | 11:44 |
| gabriel_jetro | 9800 | 11:45 |
| smohamud | Ok, mulbah do you have an answer? | 11:45 |
| gabriel_jetro | the first time it's call will be 9900 and the second time will be 9800 | 11:45 |
| smohamud | Ok, let's log the balance in between too. | 11:45 |
| smohamud | Correct | 11:47 |
| smohamud | In a few words, who can explain how they knew it would be 9800 and the object would mutate. | 11:47 |
| smohamud | ? | 11:47 |
| mulbah | Sorry, I went to get something. | 11:49 |
| thomasboimah | let me try | 11:49 |
| smohamud | no worries. Go for it Thomas | 11:50 |
| thomasboimah | it's 9800 because payBill mutates the balance property on the shared jetroBankAccount object (not a local copy), and const doesn't stop property mutation only reassignment. And by the way this also give me a hint to the answer (<smohamud> Note that everytime payBill is called, it subtracts 100 from the balance) | 11:50 |
| smohamud | Excellent, Thomas. | 11:52 |
| smohamud | Haha good catch | 11:52 |
| smohamud | Next time I'll be sure to rephrase that. | 11:52 |
| smohamud | Ok, so we have arrow functions and functions declared using the function keyword | 11:53 |
| smohamud | Arrow functions came around in 2015 and they're used regularly. In React codebases, you'll notice it's the vast majority including how components are defined. | 11:54 |
| smohamud | Other frameworks, they're there but more balanced. | 11:54 |
| smohamud | Arrow functions came around and solved a few issues. One is that functions lose scope of something called "this" | 11:55 |
| smohamud | "this" is an object the contains context and is beyond the scope of this class. | 11:56 |
| smohamud | For now, watch as I write an object that has a "function" keyword function property as well as a nested "function" keyword property and an arrow that's also nested. We'll put the nested ones inside of a setTimeout and then log the "this" object from the function definition. | 11:57 |
| smohamud | Sound good? | 11:57 |
| thomasboimah | +1 | 11:59 |
| gabriel_jetro | +1 | 11:59 |
| smohamud | Line 120 I've declared an object with 4 properties | 12:02 |
| smohamud | three are functions. Two of those are nested functions (inside of a setTimeout). | 12:02 |
| smohamud | All of them log the "this" value | 12:02 |
| smohamud | Let's watch the output and see whether "this" is defined for these various functions | 12:02 |
| smohamud | If it's "in their scope" | 12:03 |
| smohamud | Just a min, debugging. Going to replace the setTimeouts because it's leading to weird behavior. | 12:05 |
| smohamud | Making them regular ftns. | 12:05 |
| mulbah has quit (Remote host closed the connection) | 12:09 | |
| smohamud | Comrades, please accept my apologies but I should have made the example prior to class. The rule is that arrow functions, when "this" is called, take the enclosing scope of the closest parent function. | 12:10 |
| smohamud | functions defined with "keyword" only have access to "this" at the level that they're at, so historically, it was required to set the value self = this (or similar way to capture the this value) if there was a nested function | 12:11 |
| smohamud | In this scenario, I expected the enclosing "this" to be the entire object for the arrow function that's defined as "nested" | 12:11 |
| smohamud_ | Sorry about that comrades. | 12:14 |
| smohamud_ | Connection dropped. | 12:14 |
| thomasboimah | No worries | 12:15 |
| smohamud_ | The last important takeaway is that mostly, they're interchangeable. If a function takes a callback function, you can choose between arrow and "function" keyword. | 12:15 |
| smohamud_ | Personally, I like them. They're slightly less boiler plate. No need to write "Function" every time. | 12:15 |
| smohamud_ | functionWithArrow = () => { | 12:16 |
| smohamud_ | } | 12:16 |
| smohamud_ | functionWithoutArrow = function(){} | 12:16 |
| smohamud_ | Any questions for me before we call it a class? | 12:17 |
| thomasboimah | -1 from me | 12:17 |
| gabriel_jetro | -1 for me | 12:17 |
| smohamud_ | Ok, great job today guys. Please bare with me as I try to formalize how the class will be run and finish a curriculum. | 12:17 |
| smohamud_ | I will return the graded homework to everyone by this weekend. | 12:18 |
| smohamud_ | At that point, I will survey the class to see if it there's interest in continued regular assignments. | 12:18 |
| smohamud_ | Have a good rest of your day! | 12:19 |
| thomasboimah | Okay thanks for today! | 12:19 |
| smohamud_ | (Assuming no questions/thoughts) | 12:19 |
| smohamud_ | You're welcome, thank you for excellent participation. | 12:19 |
| smohamud has quit (Ping timeout: 480 seconds) | 12:20 | |
| thomasboimah has quit (Quit: Leaving) | 12:20 | |
| smohamud_ has quit (Read error: Connection reset by peer) | 12:22 | |
| mulbah07_ has quit (Remote host closed the connection) | 12:26 | |
| gabriel_jetro has quit (Ping timeout: 480 seconds) | 12:29 | |
| resl has quit (Remote host closed the connection) | 13:44 | |
| mulbah07_ has quit (Remote host closed the connection) | 15:13 | |
| mulbah07_ has quit (Quit: Leaving) | 17:20 | |
| dcammue has quit (Read error: No route to host) | 18:36 | |
| dcammue has quit (Ping timeout: 480 seconds) | 19:26 | |
| dcammue has quit (Remote host closed the connection) | 20:21 | |
Generated by irclog2html.py 2.17.3 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!