[{"data":1,"prerenderedAt":2686},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data":3,"content-page-quiz:none":1198,"content-navigation-index":1209},{"id":4,"title":5,"audience":6,"body":7,"contentType":1184,"course":1185,"description":1186,"estimateBasis":1187,"estimatedDiscussionMinutes":1188,"estimatedLiveMinutes":1189,"estimatedTotalMinutes":1190,"extension":1191,"meta":1192,"module":1193,"navigation":1194,"order":1188,"path":1195,"presentationRole":1196,"promptAssist":1197,"revision":1198,"semester":1198,"seo":1199,"status":1200,"stem":1201,"syllabus":1198,"tags":1202,"updated":1198,"videoDuration":1205,"videoId":1206,"videoLink":1207,"videoTitle":5,"week":1193,"__hash__":1208},"content\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data.md","Working With API Data","student",{"type":8,"value":9,"toc":1157},"minimark",[10,42,130,184,262,320,374,404,457,523,592,673,705,753,794,828,864,913,940,975,1009,1035,1076,1126],[11,12,15,19,23],"slide",{"id":13,"level":14},"main-idea","2",[16,17,18],"h2",{"id":13},"Main Idea",[20,21,22],"p",{},"Milestone 2 starts by proving PHP can request external data safely",[24,25,26,30,33,36,39],"ul",{},[27,28,29],"li",{},"PHP calls the API from the server",[27,31,32],{},"API keys stay out of browser JavaScript",[27,34,35],{},"JSON responses are decoded into PHP arrays",[27,37,38],{},"Test pages inspect the API shape before database work",[27,40,41],{},"Saved database rows will become the durable project data later",[11,43,45,48],{"id":44,"level":14},"practice-workspace",[16,46,47],{"id":44},"Practice Workspace",[24,49,50,61,67,76,81,86,99,106,109,120,123],{},[27,51,52,53,57,58],{},"Work in the course project structure: ",[54,55,56],"code",{},"lib\u002F"," and ",[54,59,60],{},"public_html\u002Fproject\u002F",[27,62,63,64],{},"Lesson branch: ",[54,65,66],{},"Milestone2-Part01-Working-With-API-Data",[27,68,69,70,57,73],{},"Create ",[54,71,72],{},"lib\u002Fload_api_keys.php",[54,74,75],{},"lib\u002Fapi_helper.php",[27,77,69,78],{},[54,79,80],{},"public_html\u002Fproject\u002FtestApi-stock.php",[27,82,69,83],{},[54,84,85],{},"public_html\u002Fproject\u002FtestApi-companies.php",[27,87,88,89,92,93,57,96],{},"Keep API keys in ",[54,90,91],{},"lib\u002F.env"," locally and hosting environment variables in ",[54,94,95],{},"qa",[54,97,98],{},"prod",[27,100,101,102,105],{},"Keep the ",[54,103,104],{},"lib"," API helpers as reusable project utilities",[27,107,108],{},"Treat the stock\u002Fcompany test pages as integration guides that students adapt or replace for their own API",[27,110,111,112,119],{},"Use ",[113,114,118],"a",{"href":115,"rel":116},"https:\u002F\u002Frapidapi.com\u002Falphavantage\u002Fapi\u002Falpha-vantage",[117],"nofollow","Alpha Vantage on RapidAPI"," only for the guided stock\u002Fcompany practice in this lesson",[27,121,122],{},"Choose a different API for the project; the course example and its test pages do not count toward the project API-data requirements",[27,124,125,126,129],{},"After a working change: run ",[54,127,128],{},"git status",", stage the changed files, and commit",[11,131,133,137,140],{"id":132,"level":14},"check-curl",[16,134,136],{"id":135},"check-curl-support","Check cURL Support",[20,138,139],{},"Before testing an external HTTPS API, make sure PHP can make outbound requests.",[24,141,142,149,169,175,181],{},[27,143,144,145,148],{},"Run ",[54,146,147],{},"php -m | grep curl"," in the Ubuntu server terminal",[27,150,151,152,155,156],{},"When ",[54,153,154],{},"curl"," is missing, install the current course packages:\n",[24,157,158,163],{},[27,159,160],{},[54,161,162],{},"sudo apt install php-curl ca-certificates",[27,164,165,166],{},"Restart Apache: ",[54,167,168],{},"sudo systemctl restart apache2",[27,170,171,174],{},[54,172,173],{},"php-curl"," provides the PHP functions used in this lesson",[27,176,177,180],{},[54,178,179],{},"ca-certificates"," lets PHP verify HTTPS certificates instead of bypassing TLS checks",[27,182,183],{},"See the slides below for local PHP-server and macOS cURL checks",[11,185,188,192,199],{"id":186,"level":187},"check-curl-local-server","3",[16,189,191],{"id":190},"check-a-local-php-server","Check A Local PHP Server",[20,193,194,195,198],{},"When testing with ",[54,196,197],{},"php -S"," from Git Bash, the PHP command running that server also needs cURL enabled.",[24,200,201,210,215,224,235,241,250,256,259],{},[27,202,144,203,206,207],{},[54,204,205],{},"php --ini"," to locate the active ",[54,208,209],{},"php.ini",[27,211,144,212,214],{},[54,213,147],{}," to confirm the extension is loaded",[27,216,217,218,221,222],{},"When it is missing, enable ",[54,219,220],{},"extension=curl"," in that active ",[54,223,209],{},[27,225,226,227],{},"Download ",[113,228,231,234],{"href":229,"rel":230},"https:\u002F\u002Fcurl.se\u002Fdocs\u002Fcaextract.html",[117],[54,232,233],{},"cacert.pem"," from the cURL CA Extract page",[27,236,237,238],{},"Store it in a stable folder for the same PHP installation, such as ",[54,239,240],{},"C:\u002Fphp\u002Fcerts\u002Fcacert.pem",[27,242,243,244,247,248],{},"Set ",[54,245,246],{},"curl.cainfo = \"C:\u002Fphp\u002Fcerts\u002Fcacert.pem\""," in the active ",[54,249,209],{},[27,251,252,253,255],{},"Stop and restart ",[54,254,197],{}," after changing the PHP configuration",[27,257,258],{},"Use the PHP installation that runs the local server, not an unrelated PHP executable",[27,260,261],{},"Keep HTTPS certificate verification enabled; do not bypass certificate errors during development",[11,263,265,269,275],{"id":264,"level":187},"check-curl-macos",[16,266,268],{"id":267},"check-curl-on-macos","Check cURL On macOS",[20,270,271,272,274],{},"Use the macOS Terminal with the same PHP executable that will run ",[54,273,197],{},".",[24,276,277,282,288,294,300,312],{},[27,278,144,279,281],{},[54,280,147],{}," to confirm the cURL extension is available",[27,283,144,284,287],{},[54,285,286],{},"which php"," to see which PHP installation the terminal will use",[27,289,290,291],{},"When PHP or cURL is missing and Homebrew manages PHP, install it with ",[54,292,293],{},"brew install php",[27,295,296,297,299],{},"Homebrew PHP includes cURL; do not look for a separate ",[54,298,173],{}," formula",[27,301,302,303,305,306,308,309],{},"For a local TLS certificate error, run ",[54,304,205],{},", download ",[54,307,233],{},", and set an absolute path such as ",[54,310,311],{},"curl.cainfo = \"\u002FUsers\u002Fyour-ucid\u002Fcerts\u002Fcacert.pem\"",[27,313,314,315,317,318],{},"Restart ",[54,316,197],{}," after changing ",[54,319,209],{},[11,321,323,326],{"id":322,"level":14},"api-boundary",[16,324,325],{"id":322},"API Boundary",[327,328,331,354],"two-col",{"gap":329,"left-width":330,"right-width":330},"lg","1fr",[332,333,335,340],"template",{"v-slot:left":334},"",[336,337,339],"h3",{"id":338},"browser-javascript","Browser JavaScript",[24,341,342,345,348,351],{},[27,343,344],{},"Good for public endpoints",[27,346,347],{},"Cannot hide secrets",[27,349,350],{},"User can inspect requests",[27,352,353],{},"Useful later for AJAX-style interfaces",[332,355,356,360],{"v-slot:right":334},[336,357,359],{"id":358},"server-side-php","Server-Side PHP",[24,361,362,365,368,371],{},[27,363,364],{},"Can read environment variables",[27,366,367],{},"Can keep API keys private",[27,369,370],{},"Can normalize data before output",[27,372,373],{},"Can store selected fields in MySQL",[11,375,377,381],{"id":376,"level":14},"choose-api",[16,378,380],{"id":379},"choose-an-api","Choose An API",[24,382,383,386,389,392,395,398,401],{},[27,384,385],{},"Prefer stable APIs with free access or a hard free quota",[27,387,388],{},"Prefer endpoints that return useful bounded results",[27,390,391],{},"Avoid endpoints that require repeated dashboard testing",[27,393,394],{},"Read required parameters before writing code",[27,396,397],{},"Know whether the API uses query strings, headers, or both",[27,399,400],{},"Confirm one API entity provides at least three useful fields for the project table, in addition to course metadata and the API\u002Fmanual source column",[27,402,403],{},"The instructor demo uses stock\u002Fcompany examples; project work selects a separate API that fits the student's domain",[11,405,407,411],{"id":406,"level":187},"rapidapi-api-overview",[16,408,410],{"id":409},"api-overview","API Overview",[327,412,414,425],{"gap":329,"left-width":413,"right-width":330},"1.4fr",[332,415,416],{"v-slot:left":334},[20,417,418],{},[419,420],"img",{"alt":421,"max-height":422,"src":423,"variant":424},"Annotated RapidAPI overview showing API identity, trust signals, service indicators, and plan tiers","25rem","\u002Fimages\u002Finternet-applications\u002Frapidapi\u002Frapidapi-api-overview-annotated.png","slide-screenshot",[332,426,427,431,445,449,452],{"v-slot:right":334},[336,428,430],{"id":429},"reliability-signals","Reliability Signals",[24,432,433,436,439,442],{},[27,434,435],{},"Check the service level for recent availability",[27,437,438],{},"Check latency against how responsive the project needs to feel",[27,440,441],{},"Use popularity and ratings as supporting evidence, then read recent reviews or discussions for recurring problems",[27,443,444],{},"Test the required endpoints before committing to the API",[336,446,448],{"id":447},"homework-url","Homework URL",[20,450,451],{},"Paste the direct API overview URL, not a marketplace search or dashboard URL, for example:",[20,453,454],{},[113,455,115],{"href":115,"rel":456},[117],[11,458,460,464],{"id":459,"level":187},"rapidapi-pricing-comparison",[16,461,463],{"id":462},"cost-and-quota","Cost And Quota",[327,465,466,478],{"gap":329,"left-width":330,"right-width":330},[332,467,468,475],{"v-slot:left":334},[20,469,470],{},[419,471],{"alt":472,"max-height":473,"src":474,"variant":424},"Annotated Alpha Vantage plan showing monthly cost, daily request quota, rate limit, and bandwidth terms","29rem","\u002Fimages\u002Finternet-applications\u002Frapidapi\u002Frapidapi-cost-quota-annotated.png",[20,476,477],{},"Subscribe to the API's plan before using its playground to test requests.",[332,479,480,484,502,506],{"v-slot:right":334},[336,481,483],{"id":482},"prefer-hard-limits","Prefer Hard Limits",[24,485,486,496,499],{},[27,487,488,489,492,493],{},"Aim for a free plan with a ",[54,490,491],{},"hard limit"," instead of a ",[54,494,495],{},"soft limit",[27,497,498],{},"A hard limit stops additional requests when the quota is reached; a soft limit may allow billable overages",[27,500,501],{},"Free hard-limit plans often do not require a credit card, but verify card requirements and other metered charges before subscribing",[336,503,505],{"id":504},"rate-versus-quota","Rate Versus Quota",[24,507,508,514,520],{},[27,509,510,511],{},"A request rate controls throughput: how quickly requests may be sent, such as ",[54,512,513],{},"5 requests per minute",[27,515,516,517],{},"A quota controls total usage during a period, such as ",[54,518,519],{},"500 requests per day",[27,521,522],{},"Both restrictions apply at the same time",[11,524,526,530],{"id":525,"level":187},"rapidapi-playground-view",[16,527,529],{"id":528},"rapidapi-playground","RapidAPI Playground",[327,531,533,566],{"gap":329,"left-width":532,"right-width":330},"1.45fr",[332,534,535,541,545],{"v-slot:left":334},[20,536,537],{},[419,538],{"alt":539,"max-height":422,"src":540,"variant":424},"Annotated RapidAPI playground showing endpoints, request parameters, endpoint testing, code examples, and response results","\u002Fimages\u002Finternet-applications\u002Frapidapi\u002Frapidapi-playground-annotated.png",[336,542,544],{"id":543},"request-url","Request URL",[24,546,547,550,560],{},[27,548,549],{},"The URL combines the API host, endpoint path, and parameters",[27,551,552,553,556,557],{},"Query parameters follow ",[54,554,555],{},"?",", such as ",[54,558,559],{},"?keywords=microsoft",[27,561,562,563],{},"Some APIs place values in the path instead, such as ",[54,564,565],{},"\u002Fcompanies\u002FMSFT",[332,567,568,572,580,584],{"v-slot:right":334},[336,569,571],{"id":570},"endpoints","Endpoints",[24,573,574,577],{},[27,575,576],{},"An endpoint is one API operation, identified by an HTTP method and route",[27,578,579],{},"Choose the endpoint that provides the data your project needs",[336,581,583],{"id":582},"parameters","Parameters",[24,585,586,589],{},[27,587,588],{},"Parameters are inputs that change the request",[27,590,591],{},"Check which parameters are required or optional and what values they accept",[11,593,595,598,601],{"id":594,"level":14},"environment-keys",[16,596,597],{"id":594},"Environment Keys",[20,599,600],{},"Use the same variable names in every environment, but store each environment's values separately.",[327,602,603,630],{"gap":329,"left-width":330,"right-width":330},[332,604,605,609,614,619],{"v-slot:left":334},[336,606,608],{"id":607},"local-development","Local Development",[20,610,69,611,613],{},[54,612,91],{},":",[615,616],"code-snippet",{"language":617,"src":618},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fenvironment-keys-01.txt",[24,620,621,624],{},[27,622,623],{},"Replace the sample value with your local API key",[27,625,626,627,629],{},"Keep ",[54,628,91],{}," out of Git and never commit a real API key",[332,631,632,641],{"v-slot:right":334},[336,633,635,636,638,639],{"id":634},"render-qa-and-prod","Render ",[54,637,95],{}," And ",[54,640,98],{},[24,642,643,652,661,667,670],{},[27,644,645,646,648,649],{},"Open the ",[54,647,95],{}," service and choose ",[54,650,651],{},"Environment",[27,653,654,655,57,658],{},"Add ",[54,656,657],{},"STOCK_API_KEY",[54,659,660],{},"STOCK_API_HOST",[27,662,663,664,666],{},"Open the separate ",[54,665,98],{}," service and add the same variable names",[27,668,669],{},"Use the relevant variable names when integrating your chosen project API",[27,671,672],{},"Keep secrets in Render's environment settings, not in PHP files",[11,674,676,680,685],{"id":675,"level":187},"load-environment-keys",[16,677,679],{"id":678},"load-environment-keys-in-php","Load Environment Keys In PHP",[615,681],{"language":682,"src":683,"max-height":684},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fload-api-keys-02.php","19rem",[24,686,687,692,702],{},[27,688,689,690],{},"Create the helper as ",[54,691,72],{},[27,693,694,695,697,698,57,700],{},"It reads local ",[54,696,91],{}," values first, then uses hosting environment variables in ",[54,699,95],{},[54,701,98],{},[27,703,704],{},"Missing settings are logged so the application can show a controlled failure during testing",[11,706,708,711,715,718],{"id":707,"level":14},"api-helper",[16,709,710],{"id":707},"API Helper",[20,712,69,713,274],{},[54,714,75],{},[615,716],{"language":682,"src":717},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fapi-helper-03.php",[24,719,720,726,743,746],{},[27,721,722,725],{},[54,723,724],{},"api_request()"," holds the shared cURL request logic",[27,727,728,731,732,735,736,739,740,742],{},[54,729,730],{},"api_get()"," adds ",[54,733,734],{},"$data"," as query-string parameters; ",[54,737,738],{},"api_post()"," sends ",[54,741,734],{}," as form data",[27,744,745],{},"The helper returns status, transport error details, and body so shared validation can decide what to do next",[27,747,748,749,752],{},"Options support RapidAPI headers, a regular ",[54,750,751],{},"x-api-key"," header, or extra headers required by an API's documentation",[11,754,756,760,770,773],{"id":755,"level":14},"failure-states",[16,757,759],{"id":758},"validate-api-responses","Validate API Responses",[20,761,762,763,57,765,767,768,274],{},"Add these helpers below ",[54,764,730],{},[54,766,738],{}," in ",[54,769,75],{},[615,771],{"language":682,"src":772},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fapi-response-helpers-04.php",[24,774,775,782,785,791],{},[27,776,777,778,781],{},"This follows the Module 5 validator pattern: one helper adds clear messages to the shared ",[54,779,780],{},"$errors"," array",[27,783,784],{},"It handles configuration, transport, HTTP, empty-body, JSON, and optional expected JSON key checks once",[27,786,787,790],{},[54,788,789],{},"api_sample_response()"," gives a cached file the same result shape as a live request",[27,792,793],{},"The test pages decide how to obtain the response and whether the useful data is nested under a JSON key",[11,795,797,801],{"id":796,"level":187},"choose-response-json-key",[16,798,800],{"id":799},"choose-the-expected-json-key","Choose The Expected JSON Key",[24,802,803,809,819,825],{},[27,804,805,806],{},"Pass a JSON key when the useful data is nested: ",[54,807,808],{},"decode_api_response($result, \"bestMatches\", $errors)",[27,810,811,812,815,816],{},"Pass ",[54,813,814],{},"null"," when the useful data is the root JSON array: ",[54,817,818],{},"decode_api_response($result, null, $errors)",[27,820,821,822,824],{},"Passing ",[54,823,814],{}," skips only the named JSON key check; all request, body, and JSON validation still runs",[27,826,827],{},"The helper returns the complete decoded response array in either case",[11,829,831,834,841,844],{"id":830,"level":14},"wire-api-helpers",[16,832,833],{"id":830},"Wire API Helpers",[20,835,836,837,840],{},"Update ",[54,838,839],{},"lib\u002Fapp.php"," so every project page receives the API helpers through the established shared setup file.",[615,842],{"language":682,"src":843},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fwire-api-helpers-05.php",[24,845,846,849,854],{},[27,847,848],{},"Keep all prior imports the same",[27,850,851,852],{},"Add this at the end of the existing helper-import list in ",[54,853,839],{},[27,855,856,859,860,863],{},[54,857,858],{},"api_helper.php"," loads ",[54,861,862],{},"load_api_keys.php"," before declaring the API functions",[11,865,867,871,877,910],{"id":866,"level":14},"cached-sample",[16,868,870],{"id":869},"cached-stock-response","Cached Stock Response",[20,872,873,874,274],{},"After one successful live stock request, create ",[54,875,876],{},"lib\u002Fapi_samples\u002Fstock-quote.json",[327,878,879,886],{"gap":329,"left-width":330,"right-width":330},[332,880,881],{"v-slot:left":334},[615,882],{"language":883,"src":884,"max-height":885},"json","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fcached-sample-06.json","23rem",[332,887,888,892,907],{"v-slot:right":334},[336,889,891],{"id":890},"create-the-sample","Create The Sample",[893,894,895,898,901],"ol",{},[27,896,897],{},"Test the stock endpoint once with a safe demo symbol",[27,899,900],{},"Copy the response from RapidAPI's results panel or temporarily log the live response body",[27,902,903,904],{},"Save the valid JSON response in ",[54,905,906],{},"stock-quote.json",[20,908,909],{},"Creating the sample uses API quota. Reuse it instead of repeating the same live request.",[20,911,912],{},"See the slide below for a cached company-search response.",[11,914,916,919,925,928],{"id":915,"level":187},"cached-company-search",[16,917,918],{"id":915},"Cached Company Search",[20,920,69,921,924],{},[54,922,923],{},"lib\u002Fapi_samples\u002Fcompany-search.json"," after one successful company search.",[615,926],{"language":883,"src":927},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Fcompany-search-sample-09.json",[24,929,930,937],{},[27,931,932,933,936],{},"This file uses the same ",[54,934,935],{},"bestMatches"," JSON key as the live company endpoint",[27,938,939],{},"The search test page can inspect this response without spending another API request",[11,941,943,947,951,954],{"id":942,"level":14},"test-api-stock",[16,944,946],{"id":945},"test-one-entity","Test One Entity",[20,948,69,949,274],{},[54,950,80],{},[615,952],{"language":682,"src":953},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Ftest-api-stock-07.php",[24,955,956,959,962,965,972],{},[27,957,958],{},"The page calls the API only after form submission",[27,960,961],{},"The page shows the decoded array for inspection",[27,963,964],{},"Live and cached results follow the same shared validation path",[27,966,967,968,971],{},"Use a symbol such as ",[54,969,970],{},"IBM"," or another safe demo value",[27,973,974],{},"This test page is a guide, not a required final project page",[11,976,978,982,986,989],{"id":977,"level":14},"test-api-companies",[16,979,981],{"id":980},"test-multiple-entities","Test Multiple Entities",[20,983,69,984,274],{},[54,985,85],{},[615,987],{"language":682,"src":988},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data\u002Ftest-api-companies-08.php",[24,990,991,994,997,1000,1003,1006],{},[27,992,993],{},"The page lets you choose a live search or the cached sample",[27,995,996],{},"Both choices use the same shared response validation helper",[27,998,999],{},"Search endpoints can return zero, one, or many results",[27,1001,1002],{},"Inspect the list shape before designing the table",[27,1004,1005],{},"Limit repeated tests to avoid wasting API quota",[27,1007,1008],{},"Adapt the expected JSON key and form field to the chosen project API",[11,1010,1012,1015],{"id":1011,"level":14},"check-api-output",[16,1013,1014],{"id":1011},"Check API Output",[24,1016,1017,1020,1023,1026,1029,1032],{},[27,1018,1019],{},"Submit the form once",[27,1021,1022],{},"Confirm the live request produces decoded data without an API failure message",[27,1024,1025],{},"Confirm decoded JSON is an array",[27,1027,1028],{},"When using a nested JSON key, confirm that it exists and contains the expected array",[27,1030,1031],{},"Check PHP logs for technical errors",[27,1033,1034],{},"Avoid page reload loops that call the API repeatedly",[11,1036,1038,1041],{"id":1037,"level":14},"knowledge-check",[16,1039,1040],{"id":1037},"Knowledge Check",[24,1042,1043,1046,1054,1060,1070,1073],{},[27,1044,1045],{},"Why does PHP call this API instead of browser JavaScript?",[27,1047,1048,1049,1051,1052,555],{},"Where should API keys be configured for local, ",[54,1050,95],{},", and ",[54,1053,98],{},[27,1055,1056,1057,555],{},"Why decode JSON with ",[54,1058,1059],{},"json_decode($body, true)",[27,1061,1062,1063,1066,1067,1069],{},"When should ",[54,1064,1065],{},"decode_api_response()"," receive ",[54,1068,814],{}," instead of a JSON key?",[27,1071,1072],{},"Why keep a cached sample response during development?",[27,1074,1075],{},"What should happen when the API key is missing?",[11,1077,1079,1083],{"id":1078,"level":14},"finish-lesson-branch",[16,1080,1082],{"id":1081},"finish-the-lesson-branch","Finish The Lesson Branch",[893,1084,1085,1090,1096,1102,1108,1114],{},[27,1086,1087,1088],{},"Check the final file list: ",[54,1089,128],{},[27,1091,1092,1093],{},"Stage the lesson work: ",[54,1094,1095],{},"git add lib\u002F public_html\u002Fproject\u002F",[27,1097,1098,1099],{},"Commit the practice work: ",[54,1100,1101],{},"git commit -m \"Add API test helpers\"",[27,1103,1104,1105],{},"Push the branch: ",[54,1106,1107],{},"git push origin Milestone2-Part01-Working-With-API-Data",[27,1109,1110,1111,1113],{},"On GitHub, open a pull request into ",[54,1112,95],{},", review it, then merge",[27,1115,1116,1117,1119,1120,57,1123],{},"Briefly test ",[54,1118,95],{},", then prepare for the next lesson: ",[54,1121,1122],{},"git checkout qa",[54,1124,1125],{},"git pull origin qa",[11,1127,1129,1132,1149],{"id":1128,"level":14},"summary",[16,1130,1131],{"id":1128},"Summary",[24,1133,1134,1137,1140,1143,1146],{},[27,1135,1136],{},"Server-side PHP API calls protect private API keys",[27,1138,1139],{},"API helpers keep request setup consistent",[27,1141,1142],{},"Shared response helpers keep API failure feedback consistent",[27,1144,1145],{},"Test pages guide API integration and can be replaced by project-specific pages",[27,1147,1148],{},"Cached sample responses help prevent quota waste during development",[20,1150,1151,1152],{},"GitHub reference checkpoint: ",[113,1153,1156],{"href":1154,"rel":1155},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026\u002Ftree\u002FMilestone2-Part01-Working-With-API-Data",[117],"Milestone2-Part01-Working-With-API-Data branch",{"title":334,"searchDepth":1158,"depth":1158,"links":1159},2,[1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183],{"id":13,"depth":1158,"text":18},{"id":44,"depth":1158,"text":47},{"id":135,"depth":1158,"text":136},{"id":190,"depth":1158,"text":191},{"id":267,"depth":1158,"text":268},{"id":322,"depth":1158,"text":325},{"id":379,"depth":1158,"text":380},{"id":409,"depth":1158,"text":410},{"id":462,"depth":1158,"text":463},{"id":528,"depth":1158,"text":529},{"id":594,"depth":1158,"text":597},{"id":678,"depth":1158,"text":679},{"id":707,"depth":1158,"text":710},{"id":758,"depth":1158,"text":759},{"id":799,"depth":1158,"text":800},{"id":830,"depth":1158,"text":833},{"id":869,"depth":1158,"text":870},{"id":915,"depth":1158,"text":918},{"id":945,"depth":1158,"text":946},{"id":980,"depth":1158,"text":981},{"id":1011,"depth":1158,"text":1014},{"id":1037,"depth":1158,"text":1040},{"id":1081,"depth":1158,"text":1082},{"id":1128,"depth":1158,"text":1131},"presentation","Internet Applications","Choose an external API, keep API keys server-side, call the API from PHP, and inspect the returned JSON before storing anything.","Face-to-face class of about 40 students; includes API account\u002Fsetup discussion, typing time, endpoint testing, failure checks, and short questions.","10","65","75","md",{},"7",true,"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Core",false,null,{"title":5,"description":1186},"published","internet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",[1203,682,883,1204],"api","milestone-2","1:02:49","GX4oNRtMD7Y","https:\u002F\u002Fyoutu.be\u002FGX4oNRtMD7Y","krqwIFojcjGCBU1h0iDP8O_-JunTVX2pMqNFWkge4v0",[1210,1213,1219,1222,1226,1229,1232,1235,1239,1242,1245,1249,1253,1256,1260,1263,1266,1270,1273,1276,1279,1281,1283,1285,1287,1289,1291,1293,1296,1299,1302,1305,1308,1310,1313,1316,1320,1324,1328,1332,1335,1338,1341,1345,1349,1352,1355,1358,1361,1365,1369,1372,1374,1377,1380,1383,1386,1389,1392,1395,1398,1402,1406,1410,1414,1417,1420,1423,1426,1429,1432,1435,1438,1441,1444,1447,1450,1453,1456,1459,1462,1464,1467,1470,1473,1476,1479,1482,1485,1488,1491,1494,1498,1501,1504,1507,1510,1513,1516,1519,1522,1525,1528,1531,1534,1537,1540,1543,1546,1549,1552,1555,1558,1561,1564,1567,1570,1573,1576,1579,1582,1585,1588,1591,1594,1597,1600,1603,1606,1609,1612,1615,1618,1621,1624,1627,1630,1633,1636,1639,1642,1645,1648,1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696,1699,1702,1705,1708,1711,1714,1717,1720,1723,1726,1729,1732,1735,1738,1741,1744,1747,1750,1753,1756,1759,1762,1765,1768,1771,1774,1777,1780,1783,1786,1789,1792,1795,1798,1801,1804,1807,1810,1813,1816,1819,1822,1825,1828,1831,1834,1837,1840,1843,1846,1849,1852,1856,1859,1862,1865,1868,1871,1874,1877,1880,1883,1886,1889,1892,1895,1898,1901,1904,1907,1910,1913,1916,1919,1922,1925,1928,1931,1934,1937,1940,1943,1946,1949,1952,1955,1958,1961,1964,1967,1970,1973,1976,1979,1982,1985,1988,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2021,2024,2027,2030,2033,2036,2039,2042,2045,2048,2051,2054,2057,2060,2063,2066,2069,2072,2075,2078,2081,2084,2087,2090,2093,2096,2099,2102,2105,2108,2111,2114,2117,2120,2123,2126,2129,2132,2135,2138,2141,2144,2147,2150,2153,2156,2159,2162,2165,2168,2171,2174,2177,2180,2183,2186,2189,2192,2195,2198,2201,2204,2207,2210,2213,2216,2219,2222,2225,2228,2231,2234,2237,2241,2244,2247,2250,2253,2256,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303,2306,2308,2310,2312,2314,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2339,2343,2347,2350,2354,2358,2361,2364,2367,2370,2373,2376,2380,2383,2386,2389,2392,2394,2396,2398,2400,2403,2406,2409,2412,2415,2418,2421,2424,2427,2430,2433,2436,2439,2442,2445,2448,2451,2454,2457,2460,2463,2466,2469,2472,2475,2478,2481,2484,2487,2490,2493,2496,2499,2502,2505,2508,2511,2514,2517,2520,2523,2526,2529,2532,2535,2538,2541,2544,2547,2550,2553,2556,2559,2562,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2649,2652,2655,2658,2661,2663,2665,2668,2671,2674,2677,2680,2683],{"path":1211,"title":1212,"order":1198,"module":1198,"status":1198},"\u002Fabout","About Content Version 3",{"path":1214,"title":1215,"order":1216,"module":1217,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","5","1","draft",{"path":1220,"title":1221,"order":1188,"module":1217,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":1223,"title":1224,"order":1225,"module":1217,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?","20",{"path":1227,"title":1228,"order":1188,"module":14,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":1230,"title":1231,"order":1188,"module":187,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":1233,"title":1234,"order":1225,"module":187,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":1236,"title":1237,"order":1188,"module":1238,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics","4",{"path":1240,"title":1241,"order":1225,"module":1238,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":1243,"title":1244,"order":1188,"module":1216,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":1246,"title":1247,"order":1225,"module":1248,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":1250,"title":1251,"order":1188,"module":1252,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":1254,"title":1255,"order":1225,"module":1252,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":1257,"title":1258,"order":1188,"module":1259,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":1261,"title":1262,"order":1188,"module":1188,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":1264,"title":1265,"order":1225,"module":1188,"status":1218},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":1267,"title":1268,"order":1217,"module":1269,"status":1200},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design","0",{"path":1271,"title":1272,"order":1217,"module":1269,"status":1218},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":1274,"title":1275,"order":1198,"module":1198,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":1277,"title":1278,"order":1198,"module":1198,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":1280,"title":1221,"order":1188,"module":1217,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":1282,"title":1224,"order":1225,"module":1217,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":1284,"title":1228,"order":1188,"module":14,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":1286,"title":1231,"order":1188,"module":187,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":1288,"title":1234,"order":1225,"module":187,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":1290,"title":1237,"order":1188,"module":1238,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":1292,"title":1241,"order":1225,"module":1238,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":1294,"title":1295,"order":1188,"module":1216,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":1297,"title":1298,"order":1188,"module":1248,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":1300,"title":1301,"order":1225,"module":1248,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":1303,"title":1304,"order":1188,"module":1252,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":1306,"title":1307,"order":1225,"module":1252,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":1309,"title":1258,"order":1188,"module":1259,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":1311,"title":1312,"order":1188,"module":1188,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":1314,"title":1315,"order":1225,"module":1188,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":1317,"title":1318,"order":1188,"module":1319,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":1321,"title":1322,"order":1188,"module":1323,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":1325,"title":1326,"order":1188,"module":1327,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":1329,"title":1330,"order":1188,"module":1331,"status":1218},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":1333,"title":1334,"order":1217,"module":1269,"status":1218},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":1336,"title":1337,"order":1188,"module":1269,"status":1218},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":1339,"title":1340,"order":1225,"module":1269,"status":1218},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":1342,"title":1343,"order":1344,"module":1269,"status":1218},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":1346,"title":1347,"order":1348,"module":1269,"status":1218},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":1350,"title":1351,"order":1188,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":1353,"title":1354,"order":1225,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":1356,"title":1357,"order":1348,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":1359,"title":1360,"order":1344,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":1362,"title":1363,"order":1364,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions","50",{"path":1366,"title":1367,"order":1368,"module":1217,"status":1218},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations","60",{"path":1370,"title":1371,"order":1198,"module":1198,"status":1198},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":1373,"title":1371,"order":1188,"module":1217,"status":1198},"\u002Fgeneral\u002Fbasic-command-line",{"path":1375,"title":1376,"order":1198,"module":1198,"status":1200},"\u002F","Ethereal Lab Course Materials",{"path":1378,"title":1379,"order":1269,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":1381,"title":1382,"order":1188,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":1384,"title":1385,"order":1225,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":1387,"title":1388,"order":1348,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":1390,"title":1391,"order":1344,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":1393,"title":1394,"order":1364,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":1396,"title":1397,"order":1368,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":1399,"title":1400,"order":1401,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":1403,"title":1404,"order":1405,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":1407,"title":1408,"order":1409,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox","90",{"path":1411,"title":1412,"order":1413,"module":1217,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":1415,"title":1416,"order":1188,"module":14,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":1418,"title":1419,"order":1225,"module":14,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":1421,"title":1422,"order":1188,"module":187,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":1424,"title":1425,"order":1225,"module":187,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":1427,"title":1428,"order":1348,"module":187,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates","Understanding CSS\u002FJS Selectors And DOM Updates",{"path":1430,"title":1431,"order":1188,"module":1238,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":1433,"title":1434,"order":1225,"module":1238,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":1436,"title":1437,"order":1348,"module":1238,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":1439,"title":1440,"order":1344,"module":1238,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":1442,"title":1443,"order":1188,"module":1216,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":1445,"title":1446,"order":1225,"module":1216,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":1448,"title":1449,"order":1348,"module":1216,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":1451,"title":1452,"order":1344,"module":1216,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":1454,"title":1455,"order":1188,"module":1248,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":1457,"title":1458,"order":1225,"module":1248,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":1460,"title":1461,"order":1348,"module":1248,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":1463,"title":5,"order":1188,"module":1193,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":1465,"title":1466,"order":1225,"module":1193,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":1468,"title":1469,"order":1348,"module":1193,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":1471,"title":1472,"order":1188,"module":1252,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":1474,"title":1475,"order":1225,"module":1252,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":1477,"title":1478,"order":1348,"module":1252,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":1480,"title":1481,"order":1188,"module":1259,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":1483,"title":1484,"order":1225,"module":1259,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":1486,"title":1487,"order":1188,"module":1188,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":1489,"title":1490,"order":1225,"module":1188,"status":1218},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":1492,"title":1493,"order":1217,"module":1269,"status":1200},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":1495,"title":1496,"order":1344,"module":1188,"status":1497},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":1499,"title":1500,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":1502,"title":1503,"order":1225,"module":1252,"status":1497},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":1505,"title":1506,"order":1348,"module":1259,"status":1497},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":1508,"title":1509,"order":1216,"module":1238,"status":1200},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":1511,"title":1512,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":1514,"title":1515,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":1517,"title":1518,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Basic CLI Commands For Web Development",{"path":1520,"title":1521,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":1523,"title":1524,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Version Control With Git And GitHub",{"path":1526,"title":1527,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":1529,"title":1530,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Starting From A Starter Template",{"path":1532,"title":1533,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Editing Locally And Seeing Changes Run",{"path":1535,"title":1536,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Building A Local Ubuntu Web Server",{"path":1538,"title":1539,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":1541,"title":1542,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":1544,"title":1545,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Your First PHP Page Through Apache",{"path":1547,"title":1548,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","How HTTP Works: Requests And Responses",{"path":1550,"title":1551,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","HTTP Methods: GET, POST, And Status Codes",{"path":1553,"title":1554,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":1556,"title":1557,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","How PHP Runs On The Server",{"path":1559,"title":1560,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":1562,"title":1563,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":1565,"title":1566,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":1568,"title":1569,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Data Types: Strings, Numbers, Booleans, And Null",{"path":1571,"title":1572,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":1574,"title":1575,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":1577,"title":1578,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":1580,"title":1581,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":1583,"title":1584,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":1586,"title":1587,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":1589,"title":1590,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":1592,"title":1593,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Common HTML Elements And Semantic Tags",{"path":1595,"title":1596,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Building Forms: Inputs, Labels, And Buttons",{"path":1598,"title":1599,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","GET Requests And Query String Data",{"path":1601,"title":1602,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","POST Requests And Form Body Data",{"path":1604,"title":1605,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","CSS Fundamentals: Selectors, Properties, And Values",{"path":1607,"title":1608,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","The Box Model: Margin, Border, Padding, And Content",{"path":1610,"title":1611,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":1613,"title":1614,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","CSS Positioning: Fixed Headers And Body Offsets",{"path":1616,"title":1617,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Selecting And Changing Elements With JavaScript",{"path":1619,"title":1620,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Inline Validation And Client-Side Feedback",{"path":1622,"title":1623,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":1625,"title":1626,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":1628,"title":1629,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":1631,"title":1632,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":1634,"title":1635,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":1637,"title":1638,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":1640,"title":1641,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":1643,"title":1644,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":1646,"title":1647,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":1649,"title":1650,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":1652,"title":1653,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":1655,"title":1656,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":1658,"title":1659,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":1661,"title":1662,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Why Client-Side Validation Is Not Enough",{"path":1664,"title":1665,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":1667,"title":1668,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":1670,"title":1671,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":1673,"title":1674,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":1676,"title":1677,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":1679,"title":1680,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":1682,"title":1683,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Allowing Login By Username Or Email",{"path":1685,"title":1686,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":1688,"title":1689,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":1691,"title":1692,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Review: The Full Account System So Far",{"path":1694,"title":1695,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":1697,"title":1698,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":1700,"title":1701,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Protecting A Page With An Access Check",{"path":1703,"title":1704,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":1706,"title":1707,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":1709,"title":1710,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":1712,"title":1713,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":1715,"title":1716,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":1718,"title":1719,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":1721,"title":1722,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":1724,"title":1725,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":1727,"title":1728,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":1730,"title":1731,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":1733,"title":1734,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","JSON: A Common Data Format For The Web",{"path":1736,"title":1737,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Building A PHP Endpoint That Returns JSON",{"path":1739,"title":1740,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Sending Requests From JavaScript With Fetch",{"path":1742,"title":1743,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":1745,"title":1746,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Updating The Page With Returned Data",{"path":1748,"title":1749,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":1751,"title":1752,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":1754,"title":1755,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Making Authenticated API Calls From PHP",{"path":1757,"title":1758,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":1760,"title":1761,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","CORS And Cross-Origin Request Basics",{"path":1763,"title":1764,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Browser DevTools For Web Application Debugging",{"path":1766,"title":1767,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":1769,"title":1770,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":1772,"title":1773,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Responding To Events: Clicks, Inputs, And Submissions",{"path":1775,"title":1776,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Updating The DOM After A User Action",{"path":1778,"title":1779,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":1781,"title":1782,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":1784,"title":1785,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":1787,"title":1788,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":1790,"title":1791,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":1793,"title":1794,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":1796,"title":1797,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":1799,"title":1800,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":1802,"title":1803,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":1805,"title":1806,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":1808,"title":1809,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":1811,"title":1812,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":1814,"title":1815,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":1817,"title":1818,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":1820,"title":1821,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":1823,"title":1824,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":1826,"title":1827,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":1829,"title":1830,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":1832,"title":1833,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":1835,"title":1836,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":1838,"title":1839,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":1841,"title":1842,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":1844,"title":1845,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":1847,"title":1848,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":1850,"title":1851,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":1853,"title":1854,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","Quiz - What Internet Applications Build","ready",{"path":1857,"title":1858,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Quiz - Files, Folders, And Project Structure",{"path":1860,"title":1861,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Quiz - Basic CLI Commands For Web Development",{"path":1863,"title":1864,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Quiz - Install Git And Terminal Tools",{"path":1866,"title":1867,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Quiz - Version Control With Git And GitHub",{"path":1869,"title":1870,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":1872,"title":1873,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Quiz - Starting From A Starter Template",{"path":1875,"title":1876,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Quiz - Editing Locally And Seeing Changes Run",{"path":1878,"title":1879,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Quiz - Building A Local Ubuntu Web Server",{"path":1881,"title":1882,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Quiz - Git Recovery And Common Mistakes",{"path":1884,"title":1885,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":1887,"title":1888,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Quiz - Your First PHP Page Through Apache",{"path":1890,"title":1891,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","Quiz - How HTTP Works: Requests And Responses",{"path":1893,"title":1894,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","Quiz - HTTP Methods: GET, POST, And Status Codes",{"path":1896,"title":1897,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Quiz - Local, QA, And Production Environments",{"path":1899,"title":1900,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","Quiz - How PHP Runs On The Server",{"path":1902,"title":1903,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":1905,"title":1906,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":1908,"title":1909,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Quiz - Variables: Storing And Naming Values",{"path":1911,"title":1912,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Quiz - Data Types: Strings, Numbers, Booleans, And Null",{"path":1914,"title":1915,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Quiz - Arrays: Storing Lists Of Values",{"path":1917,"title":1918,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":1920,"title":1921,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":1923,"title":1924,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Quiz - Functions: Reusable Blocks Of Logic",{"path":1926,"title":1927,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Quiz - Reading And Debugging Error Messages",{"path":1929,"title":1930,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":1932,"title":1933,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Quiz - Writing A Valid HTML Document",{"path":1935,"title":1936,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Quiz - Common HTML Elements And Semantic Tags",{"path":1938,"title":1939,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Quiz - Building Forms: Inputs, Labels, And Buttons",{"path":1941,"title":1942,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","Quiz - GET Requests And Query String Data",{"path":1944,"title":1945,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","Quiz - POST Requests And Form Body Data",{"path":1947,"title":1948,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","Quiz - CSS Fundamentals: Selectors, Properties, And Values",{"path":1950,"title":1951,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","Quiz - The Box Model: Margin, Border, Padding, And Content",{"path":1953,"title":1954,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":1956,"title":1957,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","Quiz - CSS Positioning: Fixed Headers And Body Offsets",{"path":1959,"title":1960,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Quiz - Selecting And Changing Elements With JavaScript",{"path":1962,"title":1963,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Quiz - Inline Validation And Client-Side Feedback",{"path":1965,"title":1966,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":1968,"title":1969,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Quiz - Why Web Applications Need A Database",{"path":1971,"title":1972,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Quiz - Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":1974,"title":1975,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Quiz - Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":1977,"title":1978,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":1980,"title":1981,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Quiz - Connecting PHP To MySQL With PDO",{"path":1983,"title":1984,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Quiz - Parameterized Queries And SQL Injection Prevention",{"path":1986,"title":1987,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":1989,"title":1990,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":1992,"title":1993,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":1995,"title":1996,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Quiz - Sessions: Remembering The Logged-In User",{"path":1998,"title":1999,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":2001,"title":2002,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Quiz - Navigation That Responds To Login State",{"path":2004,"title":2005,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Quiz - Why Client-Side Validation Is Not Enough",{"path":2007,"title":2008,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Quiz - Sanitizing And Escaping User Input",{"path":2010,"title":2011,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Quiz - Required Fields And Length Rules",{"path":2013,"title":2014,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Quiz - Regular Expressions For Pattern Matching",{"path":2016,"title":2017,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Quiz - Server-Side Validation In PHP",{"path":2019,"title":2020,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Quiz - Cross-Site Scripting (XSS) Prevention",{"path":2022,"title":2023,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Quiz - Flash Messages And Persistent Feedback",{"path":2025,"title":2026,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Quiz - Allowing Login By Username Or Email",{"path":2028,"title":2029,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Quiz - Building A Profile Edit Page",{"path":2031,"title":2032,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Quiz - Debugging Account And Authentication Problems",{"path":2034,"title":2035,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Quiz - Review: The Full Account System So Far",{"path":2037,"title":2038,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":2040,"title":2041,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":2043,"title":2044,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Quiz - Protecting A Page With An Access Check",{"path":2046,"title":2047,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Quiz - Safe Redirects After Login And Logout",{"path":2049,"title":2050,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":2052,"title":2053,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Quiz - Creating New Records With A Form",{"path":2055,"title":2056,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":2058,"title":2059,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":2061,"title":2062,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":2064,"title":2065,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":2067,"title":2068,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":2070,"title":2071,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":2073,"title":2074,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","Quiz - What Asynchronous Requests (AJAX) Solve",{"path":2076,"title":2077,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","Quiz - JSON: A Common Data Format For The Web",{"path":2079,"title":2080,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Quiz - Building A PHP Endpoint That Returns JSON",{"path":2082,"title":2083,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Quiz - Sending Requests From JavaScript With Fetch",{"path":2085,"title":2086,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Quiz - Handling Fetch Responses And Errors",{"path":2088,"title":2089,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Quiz - Updating The Page With Returned Data",{"path":2091,"title":2092,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":2094,"title":2095,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":2097,"title":2098,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Quiz - Making Authenticated API Calls From PHP",{"path":2100,"title":2101,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Quiz - Storing And Caching API Responses",{"path":2103,"title":2104,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","Quiz - CORS And Cross-Origin Request Basics",{"path":2106,"title":2107,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Quiz - Browser DevTools For Web Application Debugging",{"path":2109,"title":2110,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","Quiz - jQuery: Simplified DOM And Event Work",{"path":2112,"title":2113,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":2115,"title":2116,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Quiz - Responding To Events: Clicks, Inputs, And Submissions",{"path":2118,"title":2119,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Quiz - Updating The DOM After A User Action",{"path":2121,"title":2122,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":2124,"title":2125,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Quiz - Saving External API Data Through PHP",{"path":2127,"title":2128,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":2130,"title":2131,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":2133,"title":2134,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":2136,"title":2137,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":2139,"title":2140,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":2142,"title":2143,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Quiz - Joining Tables: INNER JOIN, LEFT JOIN",{"path":2145,"title":2146,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","Quiz - User-Owned Records And Access Enforcement",{"path":2148,"title":2149,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Quiz - Connecting API Data To User Records",{"path":2151,"title":2152,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":2154,"title":2155,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":2157,"title":2158,"order":1198,"module":1198,"status":1198},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":2160,"title":2161,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":2163,"title":2164,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":2166,"title":2167,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":2169,"title":2170,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":2172,"title":2173,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Quiz - Refreshing And Expiring External API Data",{"path":2175,"title":2176,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":2178,"title":2179,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Quiz - Cross-Site Request Forgery (CSRF) Protection",{"path":2181,"title":2182,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":2184,"title":2185,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":2187,"title":2188,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":2190,"title":2191,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":2193,"title":2194,"order":1198,"module":1198,"status":1855},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":2196,"title":2197,"order":1217,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":2199,"title":2200,"order":14,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":2202,"title":2203,"order":187,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":2205,"title":2206,"order":1238,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":2208,"title":2209,"order":1216,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":2211,"title":2212,"order":1248,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":2214,"title":2215,"order":1193,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":2217,"title":2218,"order":1269,"module":1269,"status":1218},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":2220,"title":2221,"order":1188,"module":1217,"status":1218},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":2223,"title":2224,"order":1225,"module":14,"status":1218},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":2226,"title":2227,"order":1348,"module":187,"status":1218},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":2229,"title":2230,"order":1344,"module":1238,"status":1218},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":2232,"title":2233,"order":1364,"module":1216,"status":1218},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":2235,"title":2236,"order":1368,"module":1248,"status":1218},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":2238,"title":2239,"order":2240,"module":1248,"status":1218},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":2242,"title":2243,"order":1401,"module":1193,"status":1218},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":2245,"title":2246,"order":1405,"module":1252,"status":1218},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":2248,"title":2249,"order":1409,"module":1259,"status":1218},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":2251,"title":2252,"order":1413,"module":1188,"status":1218},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":2254,"title":2255,"order":1198,"module":1198,"status":1218},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":2257,"title":2258,"order":1198,"module":1198,"status":1218},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":2260,"title":1379,"order":1269,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":2262,"title":1382,"order":1188,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":2264,"title":1385,"order":1225,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":2266,"title":1388,"order":1348,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":2268,"title":1391,"order":1344,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":2270,"title":1394,"order":1364,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":2272,"title":1397,"order":1368,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":2274,"title":1400,"order":1401,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":2276,"title":1404,"order":1405,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":2278,"title":1408,"order":1409,"module":1217,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":2280,"title":1412,"order":1413,"module":1217,"status":1218},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":2282,"title":1416,"order":1188,"module":14,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":2284,"title":1419,"order":1225,"module":14,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":2286,"title":1422,"order":1188,"module":187,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":2288,"title":1425,"order":1225,"module":187,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":2290,"title":1428,"order":1348,"module":187,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":2292,"title":1431,"order":1188,"module":1238,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":2294,"title":1434,"order":1225,"module":1238,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":2296,"title":1437,"order":1348,"module":1238,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":2298,"title":1440,"order":1344,"module":1238,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":2300,"title":1443,"order":1188,"module":1216,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":2302,"title":1446,"order":1225,"module":1216,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":2304,"title":2305,"order":1348,"module":1216,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":2307,"title":1452,"order":1344,"module":1216,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":2309,"title":1455,"order":1188,"module":1248,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":2311,"title":1458,"order":1225,"module":1248,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":2313,"title":1461,"order":1348,"module":1248,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":1195,"title":5,"order":1188,"module":1193,"status":1200},{"path":2316,"title":1466,"order":1225,"module":1193,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":2318,"title":1469,"order":1348,"module":1193,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":2320,"title":1472,"order":1188,"module":1252,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":2322,"title":1475,"order":1225,"module":1252,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":2324,"title":1478,"order":1348,"module":1252,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":2326,"title":1481,"order":1188,"module":1259,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":2328,"title":1484,"order":1225,"module":1259,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":2330,"title":1487,"order":1188,"module":1188,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":2332,"title":1490,"order":1225,"module":1188,"status":1200},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":2334,"title":1493,"order":1217,"module":1269,"status":1200},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":2336,"title":2337,"order":2338,"module":1188,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":2340,"title":2341,"order":2342,"module":1248,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":2344,"title":2345,"order":2346,"module":1248,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":2348,"title":2349,"order":2338,"module":1248,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":2351,"title":2352,"order":2353,"module":1252,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":2355,"title":2356,"order":2357,"module":1259,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":2359,"title":2360,"order":1188,"module":1217,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":2362,"title":2363,"order":1225,"module":14,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":2365,"title":2366,"order":1348,"module":187,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":2368,"title":2369,"order":1344,"module":1238,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":2371,"title":2372,"order":1364,"module":1216,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":2374,"title":2375,"order":1368,"module":1248,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":2377,"title":2378,"order":2379,"module":1248,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":2381,"title":2382,"order":1401,"module":1193,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":2384,"title":2385,"order":1405,"module":1252,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":2387,"title":2388,"order":1409,"module":1259,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":2390,"title":2391,"order":1413,"module":1188,"status":1218},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":2393,"title":1382,"order":1188,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2395,"title":1385,"order":1225,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2397,"title":1388,"order":1348,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2399,"title":1391,"order":1344,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2401,"title":2402,"order":1364,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":2404,"title":2405,"order":1368,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":2407,"title":2408,"order":1188,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":2410,"title":2411,"order":1225,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":2413,"title":2414,"order":1348,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":2416,"title":2417,"order":1344,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":2419,"title":2420,"order":1188,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":2422,"title":2423,"order":1225,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":2425,"title":2426,"order":1348,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":2428,"title":2429,"order":1344,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":2431,"title":2432,"order":1188,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":2434,"title":2435,"order":1225,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":2437,"title":2438,"order":1348,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1","Java Sockets: Multi-Client Chat Server Part 1",{"path":2440,"title":2441,"order":1188,"module":1216,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2","Java Sockets: Multi-Client Chat Server Part 2",{"path":2443,"title":2444,"order":1225,"module":1248,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":2446,"title":2447,"order":1348,"module":1248,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":2449,"title":2450,"order":1188,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check","Java Advanced Programming Milestone 2: GameRooms and Ready Check",{"path":2452,"title":2453,"order":1225,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns","Java Advanced Programming Milestone 2: Turn-based Turns (Round-Robin)",{"path":2455,"title":2456,"order":1348,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns","Java Advanced Programming Milestone 2: Phase-based Turns",{"path":2458,"title":2459,"order":1344,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":2461,"title":2462,"order":1364,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":2464,"title":2465,"order":1188,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":2467,"title":2468,"order":1225,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":2470,"title":2471,"order":1348,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project","Java Advanced Programming Milestone 2: Equals 6 Mini Project",{"path":2473,"title":2474,"order":1344,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin","Java Advanced Programming Milestone 2: Project \"Nice Day For Fishin'\"",{"path":2476,"title":2477,"order":1364,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":2479,"title":2480,"order":1188,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":2482,"title":2483,"order":1225,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":2485,"title":2486,"order":1348,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":2488,"title":2489,"order":1344,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":2491,"title":2492,"order":1364,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":2494,"title":2495,"order":1368,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":2497,"title":2498,"order":1188,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":2500,"title":2501,"order":1225,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":2503,"title":2504,"order":1348,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":2506,"title":2507,"order":1217,"module":1269,"status":1200},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":2509,"title":2510,"order":1188,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":2512,"title":2513,"order":1225,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":2515,"title":2516,"order":1348,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":2518,"title":2519,"order":1188,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":2521,"title":2522,"order":1225,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":2524,"title":2525,"order":1348,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":2527,"title":2528,"order":1188,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":2530,"title":2531,"order":1225,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":2533,"title":2534,"order":1348,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":2536,"title":2537,"order":1344,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":2539,"title":2540,"order":1188,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":2542,"title":2543,"order":1225,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":2545,"title":2546,"order":1348,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":2548,"title":2549,"order":1188,"module":1216,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":2551,"title":2552,"order":1225,"module":1216,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":2554,"title":2555,"order":1348,"module":1216,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":2557,"title":2558,"order":1269,"module":1269,"status":1218},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":2560,"title":2561,"order":1198,"module":1198,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":2563,"title":2564,"order":1198,"module":1198,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":2566,"title":1382,"order":1188,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2568,"title":1385,"order":1225,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2570,"title":1388,"order":1348,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2572,"title":1391,"order":1344,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2574,"title":2402,"order":1364,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":2576,"title":2405,"order":1368,"module":1217,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":2578,"title":2408,"order":1188,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":2580,"title":2411,"order":1225,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":2582,"title":2414,"order":1348,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":2584,"title":2417,"order":1344,"module":14,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":2586,"title":2420,"order":1188,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":2588,"title":2423,"order":1225,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":2590,"title":2426,"order":1348,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":2592,"title":2429,"order":1344,"module":187,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":2594,"title":2432,"order":1188,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":2596,"title":2435,"order":1225,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":2598,"title":2438,"order":1348,"module":1238,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":2600,"title":2441,"order":1188,"module":1216,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":2602,"title":2603,"order":1188,"module":1248,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":2605,"title":2444,"order":1225,"module":1248,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":2607,"title":2447,"order":1348,"module":1248,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":2609,"title":2450,"order":1188,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":2611,"title":2453,"order":1225,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":2613,"title":2456,"order":1348,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":2615,"title":2459,"order":1344,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":2617,"title":2462,"order":1364,"module":1193,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":2619,"title":2465,"order":1188,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":2621,"title":2468,"order":1225,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":2623,"title":2471,"order":1348,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":2625,"title":2474,"order":1344,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":2627,"title":2477,"order":1364,"module":1252,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":2629,"title":2480,"order":1188,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":2631,"title":2483,"order":1225,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":2633,"title":2486,"order":1348,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":2635,"title":2489,"order":1344,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":2637,"title":2492,"order":1364,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":2639,"title":2495,"order":1368,"module":1259,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":2641,"title":2498,"order":1188,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":2643,"title":2501,"order":1225,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":2645,"title":2504,"order":1348,"module":1188,"status":1218},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":2647,"title":2648,"order":1188,"module":1217,"status":1218},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":2650,"title":2651,"order":1217,"module":1269,"status":1200},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":2653,"title":2654,"order":1217,"module":1269,"status":1200},"\u002Fsystems-integration","Systems Integration",{"path":2656,"title":2657,"order":1198,"module":1198,"status":1218},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":2659,"title":2660,"order":1198,"module":1198,"status":1218},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":2662,"title":2648,"order":1188,"module":1217,"status":1200},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":2664,"title":2651,"order":1217,"module":1269,"status":1200},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":2666,"title":2667,"order":1198,"module":1198,"status":1198},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":2669,"title":2670,"order":1198,"module":1198,"status":1198},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":2672,"title":2673,"order":1198,"module":1198,"status":1198},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":2675,"title":2676,"order":1198,"module":1198,"status":1198},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":2678,"title":2679,"order":1225,"module":1269,"status":1218},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":2681,"title":2682,"order":1348,"module":1269,"status":1218},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":2684,"title":2685,"order":1188,"module":1269,"status":1218},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086655]