[{"data":1,"prerenderedAt":2977},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex":3,"content-page-quiz:none":1489,"content-navigation-index":1501},{"id":4,"title":5,"audience":6,"body":7,"contentType":1475,"course":1476,"description":1477,"estimateBasis":1478,"estimatedDiscussionMinutes":1479,"estimatedLiveMinutes":1480,"estimatedTotalMinutes":1481,"extension":1482,"meta":1483,"module":1485,"navigation":1486,"order":1479,"path":1487,"presentationRole":1488,"promptAssist":1484,"revision":1489,"semester":1489,"seo":1490,"status":1491,"stem":1492,"syllabus":1489,"tags":1493,"updated":1489,"videoDuration":1496,"videoId":1497,"videoLink":1498,"videoTitle":1499,"week":1485,"__hash__":1500},"content\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex.md","Intro To Regex","student",{"type":8,"value":9,"toc":1446},"minimark",[10,45,125,192,217,236,378,519,634,743,777,789,854,973,996,1020,1049,1067,1099,1199,1218,1241,1267,1314,1398],[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",{},"Regex describes a text pattern",[24,25,26,30,33,36,39,42],"ul",{},[27,28,29],"li",{},"Use regex when the rule is about the characters and shape of a value",[27,31,32],{},"Read patterns from left to right in small pieces",[27,34,35],{},"Use anchors when the whole submitted value must match",[27,37,38],{},"Escape regex metacharacters when you need the literal character",[27,40,41],{},"Test valid, invalid, and boundary values before trusting the pattern",[27,43,44],{},"Write user-facing messages in plain language, not raw regex",[11,46,48,51,54,122],{"id":47,"level":14},"where-regex-fits",[16,49,50],{"id":47},"Where Regex Fits",[20,52,53],{},"Regex is one validation tool, not the whole validation system.",[55,56,57,70],"table",{},[58,59,60],"thead",{},[61,62,63,67],"tr",{},[64,65,66],"th",{},"Situation",[64,68,69],{},"Better Tool",[71,72,73,86,96,106,114],"tbody",{},[61,74,75,79],{},[76,77,78],"td",{},"Required value",[76,80,81,85],{},[82,83,84],"code",{},"trim(...)"," and empty check",[61,87,88,91],{},[76,89,90],{},"Email shape",[76,92,93],{},[82,94,95],{},"filter_var(..., FILTER_VALIDATE_EMAIL)",[61,97,98,101],{},[76,99,100],{},"Minimum password length",[76,102,103],{},[82,104,105],{},"strlen(...)",[61,107,108,111],{},[76,109,110],{},"Username shape",[76,112,113],{},"Regex",[61,115,116,119],{},[76,117,118],{},"Matching database record",[76,120,121],{},"SQL query with placeholders",[20,123,124],{},"If a normal string or filter check is clearer, use the clearer check.",[11,126,128,131],{"id":127,"level":14},"regex-basics",[16,129,130],{"id":127},"Regex Basics",[24,132,133,139,170,189],{},[27,134,135,136],{},"Regex patterns are usually written between delimiter characters such as ",[82,137,138],{},"\u002F...\u002F",[27,140,141,142],{},"A plain pattern can match part of a larger string\n",[24,143,144,161],{},[27,145,146,149,150,153,154,157,158],{},[82,147,148],{},"\u002Fworld\u002F"," matches ",[82,151,152],{},"world",", ",[82,155,156],{},"worlds",", and ",[82,159,160],{},"worldwide",[27,162,163,165,166,169],{},[82,164,148],{}," does not match ",[82,167,168],{},"World"," unless the pattern is made case-insensitive",[27,171,172,173],{},"Characters placed next to each other must appear in that order\n",[24,174,175,182],{},[27,176,177,149,180],{},[82,178,179],{},"\u002Fwo\u002F",[82,181,152],{},[27,183,184,165,186],{},[82,185,179],{},[82,187,188],{},"w or o",[27,190,191],{},"Regex is case-sensitive by default",[11,193,196,199,202,207,214],{"id":194,"level":195},"special-characters","3",[16,197,198],{"id":194},"Special Characters",[20,200,201],{},"Some characters have regex meaning:",[203,204],"code-snippet",{"language":205,"src":206},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fspecial-characters-08.txt",[20,208,209,210,213],{},"To match one of those characters literally, escape it with ",[82,211,212],{},"\\",".",[203,215],{"language":205,"src":216},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fescape-special-characters-09.txt",[11,218,220,223,230,233],{"id":219,"level":195},"alternation",[16,221,222],{"id":219},"Alternation",[20,224,225,226,229],{},"The pipe character ",[82,227,228],{},"|"," means \"or\".",[203,231],{"language":205,"src":232},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Falternation-10.txt",[20,234,235],{},"Use parentheses when the choice is only part of a larger pattern.",[11,237,239,243],{"id":238,"level":14},"common-regex-pieces",[16,240,242],{"id":241},"common-tokens","Common Tokens",[55,244,245,258],{},[58,246,247],{},[61,248,249,252,255],{},[64,250,251],{},"Piece",[64,253,254],{},"Meaning",[64,256,257],{},"Example",[71,259,260,281,303,321,340,359],{},[61,261,262,266,269],{},[76,263,264],{},[82,265,213],{},[76,267,268],{},"Any character except newline",[76,270,271,149,274,277,278],{},[82,272,273],{},"\u002Fz.p\u002F",[82,275,276],{},"zip"," and ",[82,279,280],{},"z9p",[61,282,283,288,291],{},[76,284,285],{},[82,286,287],{},"\\d",[76,289,290],{},"Digit",[76,292,293,149,296,299,300],{},[82,294,295],{},"\u002F\\d+\u002F",[82,297,298],{},"123"," in ",[82,301,302],{},"abc123",[61,304,305,310,313],{},[76,306,307],{},[82,308,309],{},"\\w",[76,311,312],{},"Word character: letter, digit, underscore",[76,314,315,149,318],{},[82,316,317],{},"\u002F\\w+\u002F",[82,319,320],{},"word_1",[61,322,323,328,331],{},[76,324,325],{},[82,326,327],{},"\\s",[76,329,330],{},"Whitespace",[76,332,333,336,337],{},[82,334,335],{},"\u002F\\s\u002F"," matches the space in ",[82,338,339],{},"a b",[61,341,342,347,350],{},[76,343,344],{},[82,345,346],{},"\\S",[76,348,349],{},"Non-whitespace",[76,351,352,355,356],{},[82,353,354],{},"\u002F\\S\u002F"," matches \"x\" in ",[82,357,358],{}," x",[61,360,361,366,369],{},[76,362,363],{},[82,364,365],{},"\\b",[76,367,368],{},"Word boundary",[76,370,371,149,374,377],{},[82,372,373],{},"\u002F\\bcat\\b\u002F",[82,375,376],{},"cat"," as a word",[11,379,381,384,387],{"id":380,"level":195},"quantifiers",[16,382,383],{"id":380},"Quantifiers",[20,385,386],{},"Quantifiers say how many times the previous piece may repeat.",[55,388,389,399],{},[58,390,391],{},[61,392,393,395,397],{},[64,394,251],{},[64,396,254],{},[64,398,257],{},[71,400,401,425,444,465,483,503],{},[61,402,403,408,411],{},[76,404,405],{},[82,406,407],{},"*",[76,409,410],{},"Zero or more",[76,412,413,149,416,153,419,153,422],{},[82,414,415],{},"\u002Flo*l\u002F",[82,417,418],{},"ll",[82,420,421],{},"lol",[82,423,424],{},"lool",[61,426,427,432,435],{},[76,428,429],{},[82,430,431],{},"+",[76,433,434],{},"One or more",[76,436,437,149,440,153,442],{},[82,438,439],{},"\u002Flo+l\u002F",[82,441,421],{},[82,443,424],{},[61,445,446,451,454],{},[76,447,448],{},[82,449,450],{},"?",[76,452,453],{},"Zero or one",[76,455,456,149,459,277,462],{},[82,457,458],{},"\u002Fcolou?r\u002F",[82,460,461],{},"color",[82,463,464],{},"colour",[61,466,467,472,475],{},[76,468,469],{},[82,470,471],{},"{3}",[76,473,474],{},"Exactly 3",[76,476,477,149,480],{},[82,478,479],{},"\u002Fz{3}\u002F",[82,481,482],{},"zzz",[61,484,485,490,493],{},[76,486,487],{},[82,488,489],{},"{3,}",[76,491,492],{},"3 or more",[76,494,495,149,498,153,500],{},[82,496,497],{},"\u002Fz{3,}\u002F",[82,499,482],{},[82,501,502],{},"zzzz",[61,504,505,510,513],{},[76,506,507],{},[82,508,509],{},"{3,6}",[76,511,512],{},"Between 3 and 6",[76,514,515,518],{},[82,516,517],{},"\u002Fz{3,6}\u002F"," matches 3 to 6 \"z\" characters",[11,520,522,525,528],{"id":521,"level":195},"character-classes",[16,523,524],{"id":521},"Character Classes",[20,526,527],{},"Character classes match one character from a set or range.",[55,529,530,541],{},[58,531,532],{},[61,533,534,537,539],{},[64,535,536],{},"Pattern",[64,538,254],{},[64,540,257],{},[71,542,543,561,580,598,616],{},[61,544,545,550,553],{},[76,546,547],{},[82,548,549],{},"[xyz]",[76,551,552],{},"One character: \"x\", \"y\", or \"z\"",[76,554,555,355,558],{},[82,556,557],{},"\u002F[xyz]\u002F",[82,559,560],{},"fox",[61,562,563,568,571],{},[76,564,565],{},[82,566,567],{},"[^xyz]",[76,569,570],{},"One character except \"x\", \"y\", or \"z\"",[76,572,573,576,577],{},[82,574,575],{},"\u002F[^xyz]\u002F"," matches \"d\" in ",[82,578,579],{},"dog",[61,581,582,587,590],{},[76,583,584],{},[82,585,586],{},"[a-z]",[76,588,589],{},"One lowercase letter",[76,591,592,149,595],{},[82,593,594],{},"\u002F[a-z]\u002F",[82,596,597],{},"h",[61,599,600,605,608],{},[76,601,602],{},[82,603,604],{},"[^a-z]",[76,606,607],{},"One non-lowercase-letter",[76,609,610,149,613],{},[82,611,612],{},"\u002F[^a-z]\u002F",[82,614,615],{},"1",[61,617,618,623,626],{},[76,619,620],{},[82,621,622],{},"[a-zA-Z]",[76,624,625],{},"One lowercase or uppercase letter",[76,627,628,149,631],{},[82,629,630],{},"\u002F[a-zA-Z]\u002F",[82,632,633],{},"A",[11,635,637,640],{"id":636,"level":195},"whitespace-and-boundaries",[16,638,639],{"id":636},"Whitespace And Boundaries",[55,641,642,653],{},[58,643,644],{},[61,645,646,649,651],{},[64,647,648],{},"Token",[64,650,254],{},[64,652,257],{},[71,654,655,667,680,693,706,723],{},[61,656,657,661,664],{},[76,658,659],{},[82,660,327],{},[76,662,663],{},"Any whitespace character",[76,665,666],{},"Space, tab, or newline",[61,668,669,674,677],{},[76,670,671],{},[82,672,673],{},"\\t",[76,675,676],{},"Tab",[76,678,679],{},"Matches a tab character",[61,681,682,687,690],{},[76,683,684],{},[82,685,686],{},"\\n",[76,688,689],{},"Newline",[76,691,692],{},"Matches a line break",[61,694,695,700,703],{},[76,696,697],{},[82,698,699],{},"\\r",[76,701,702],{},"Carriage return",[76,704,705],{},"Appears in some line endings",[61,707,708,712,714],{},[76,709,710],{},[82,711,365],{},[76,713,368],{},[76,715,716,149,718,299,720],{},[82,717,373],{},[82,719,376],{},[82,721,722],{},"a cat b",[61,724,725,730,733],{},[76,726,727],{},[82,728,729],{},"\\B",[76,731,732],{},"Non-word boundary",[76,734,735,149,738,299,740],{},[82,736,737],{},"\u002F\\Bcat\\B\u002F",[82,739,376],{},[82,741,742],{},"educate",[11,744,746,749,752,756],{"id":745,"level":14},"anchors-matter",[16,747,748],{"id":745},"Anchors Matter",[20,750,751],{},"Anchors decide whether part of the value can match or the whole value must match.",[203,753],{"language":754,"src":755},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fanchors-matter-03.php",[24,757,758,768,771,774],{},[27,759,760,761,277,764,767],{},"With ",[82,762,763],{},"^",[82,765,766],{},"$",", the entire submitted value must match",[27,769,770],{},"Without anchors, a valid-looking piece inside a bad value can pass",[27,772,773],{},"Field validation usually wants anchors",[27,775,776],{},"See the slide below for the accidental match",[11,778,780,783,786],{"id":779,"level":195},"without-anchors",[16,781,782],{"id":779},"Without Anchors",[203,784],{"language":205,"src":785},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fwithout-anchors-04.txt",[20,787,788],{},"The bad value contains a valid-looking username inside it, so the unanchored pattern can still match.",[11,790,792,795,798,847],{"id":791,"level":14},"grouping",[16,793,794],{"id":791},"Grouping",[20,796,797],{},"Parentheses group part of a pattern:",[24,799,800,816,827],{},[27,801,802,805,806,808,809,811],{},[82,803,804],{},"(cat|dog)"," matches and captures ",[82,807,376],{}," or ",[82,810,579],{},[24,812,813],{},[27,814,815],{},"Useful if code needs the matched word later",[27,817,818,821,822],{},[82,819,820],{},"(?:cat|dog)"," matches without capturing the group\n",[24,823,824],{},[27,825,826],{},"Useful when grouping only controls the pattern",[27,828,829,832,833],{},[82,830,831],{},"(\\d{3})-(\\d{4})"," captures phone-number pieces\n",[24,834,835],{},[27,836,837,838,277,840,843,844],{},"Captures ",[82,839,298],{},[82,841,842],{},"4567"," from ",[82,845,846],{},"123-4567",[20,848,849,850,853],{},"Most simple validation patterns only need grouping for ",[82,851,852],{},"or"," choices.",[11,855,857,860,863],{"id":856,"level":14},"modifier-flags",[16,858,859],{"id":856},"Modifier Flags",[20,861,862],{},"Flags change how a pattern is interpreted.",[55,864,865,876],{},[58,866,867],{},[61,868,869,872,874],{},[64,870,871],{},"Flag",[64,873,254],{},[64,875,257],{},[71,877,878,902,919,934,947,960],{},[61,879,880,885,888],{},[76,881,882],{},[82,883,884],{},"flag i",[76,886,887],{},"Case-insensitive",[76,889,890,149,893,153,896,157,899],{},[82,891,892],{},"\u002Fcat\u002Fi",[82,894,895],{},"Cat",[82,897,898],{},"cAt",[82,900,901],{},"CAT",[61,903,904,909,912],{},[76,905,906],{},[82,907,908],{},"m",[76,910,911],{},"Multiline anchors",[76,913,914,277,916,918],{},[82,915,763],{},[82,917,766],{}," can match each line",[61,920,921,926,929],{},[76,922,923],{},[82,924,925],{},"s",[76,927,928],{},"Dotall",[76,930,931,933],{},[82,932,213],{}," can match a newline",[61,935,936,941,944],{},[76,937,938],{},[82,939,940],{},"x",[76,942,943],{},"Extended",[76,945,946],{},"Allows spacing and comments in complex patterns",[61,948,949,954,957],{},[76,950,951],{},[82,952,953],{},"flag u",[76,955,956],{},"Unicode mode",[76,958,959],{},"Helps with Unicode character matching",[61,961,962,967,970],{},[76,963,964],{},[82,965,966],{},"U",[76,968,969],{},"Ungreedy",[76,971,972],{},"Quantifiers prefer shorter matches",[11,974,976,979,986,989],{"id":975,"level":195},"global-matching-note",[16,977,978],{"id":975},"Global Matching Note",[20,980,981,982,985],{},"JavaScript often uses a ",[82,983,984],{},"g"," flag for global matches.",[203,987],{"language":754,"src":988},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fglobal-matching-note-11.php",[20,990,991,992,995],{},"In PHP, use ",[82,993,994],{},"preg_match_all(...)"," when you need every match instead of the first match.",[11,997,999,1003,1006],{"id":998,"level":14},"regex-use-cases",[16,1000,1002],{"id":1001},"what-regex-can-do","What Regex Can Do",[203,1004],{"language":754,"src":1005},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fregex-use-cases-12.php",[24,1007,1008,1011,1014,1017],{},[27,1009,1010],{},"Match: decide whether a pattern appears",[27,1012,1013],{},"Extract: collect one or more matched values",[27,1015,1016],{},"Replace: swap matched text with safer or cleaner text",[27,1018,1019],{},"Validate: reject a submitted value when the whole value does not match",[11,1021,1023,1026,1029,1032],{"id":1022,"level":14},"username-example",[16,1024,1025],{"id":1022},"Username Example",[20,1027,1028],{},"This pattern accepts 3 to 30 lowercase letters, numbers, underscores, or hyphens.",[203,1030],{"language":754,"src":1031},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fusername-example-01.php",[24,1033,1034,1037,1043,1046],{},[27,1035,1036],{},"The slashes mark the start and end of the PHP regex pattern",[27,1038,1039,1042],{},[82,1040,1041],{},"!preg_match(...)"," catches values that do not match the pattern",[27,1044,1045],{},"The rule is strict enough for usernames but not useful for emails or passwords",[27,1047,1048],{},"See the slide below for the pattern pieces",[11,1050,1052,1055,1058,1061],{"id":1051,"level":195},"read-the-pattern",[16,1053,1054],{"id":1051},"Read The Pattern",[203,1056],{"language":205,"src":1057},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fread-the-pattern-02.txt",[20,1059,1060],{},"Read it as:",[1062,1063,1064],"blockquote",{},[20,1065,1066],{},"From start to end, accept only lowercase letters, numbers, underscores, or hyphens, with 3 to 30 total characters.",[11,1068,1070,1077,1080],{"id":1069,"level":14},"php-preg-match",[16,1071,1073,1074],{"id":1072},"php-preg_match","PHP ",[82,1075,1076],{},"preg_match",[203,1078],{"language":754,"src":1079},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fphp-preg-match-05.php",[24,1081,1082,1088,1093,1096],{},[27,1083,1084,1087],{},[82,1085,1086],{},"preg_match(...)"," returns a truthy value for a match",[27,1089,1090,1092],{},[82,1091,1041],{}," treats no match or a regex error as failed validation",[27,1094,1095],{},"Store the pattern in a variable when that makes the rule easier to read",[27,1097,1098],{},"Keep the user-facing error message separate from the regex",[11,1100,1102,1105,1108],{"id":1101,"level":14},"test-the-pattern",[16,1103,1104],{"id":1101},"Test The Pattern",[20,1106,1107],{},"Test examples that should pass and examples that should fail.",[55,1109,1110,1123],{},[58,1111,1112],{},[61,1113,1114,1117,1120],{},[64,1115,1116],{},"Value",[64,1118,1119],{},"Expected",[64,1121,1122],{},"Why",[71,1124,1125,1138,1150,1163,1175,1187],{},[61,1126,1127,1132,1135],{},[76,1128,1129],{},[82,1130,1131],{},"mtoegel",[76,1133,1134],{},"Valid",[76,1136,1137],{},"Lowercase letters",[61,1139,1140,1145,1147],{},[76,1141,1142],{},[82,1143,1144],{},"m_toegel2",[76,1146,1134],{},[76,1148,1149],{},"Underscore and number allowed",[61,1151,1152,1157,1160],{},[76,1153,1154],{},[82,1155,1156],{},"mt",[76,1158,1159],{},"Invalid",[76,1161,1162],{},"Too short",[61,1164,1165,1170,1172],{},[76,1166,1167],{},[82,1168,1169],{},"Matt",[76,1171,1159],{},[76,1173,1174],{},"Uppercase letter",[61,1176,1177,1182,1184],{},[76,1178,1179],{},[82,1180,1181],{},"matt toegel",[76,1183,1159],{},[76,1185,1186],{},"Space",[61,1188,1189,1194,1196],{},[76,1190,1191],{},[82,1192,1193],{},"matt!",[76,1195,1159],{},[76,1197,1198],{},"Exclamation point",[11,1200,1202,1205,1212,1215],{"id":1201,"level":195},"boundary-tests",[16,1203,1204],{"id":1201},"Boundary Tests",[20,1206,1207,1208,1211],{},"For a ",[82,1209,1210],{},"{3,30}"," rule, test the edges.",[203,1213],{"language":205,"src":1214},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fboundary-tests-06.txt",[20,1216,1217],{},"Boundary tests catch off-by-one mistakes before users find them.",[11,1219,1221,1224,1227,1230],{"id":1220,"level":14},"plain-error-messages",[16,1222,1223],{"id":1220},"Plain Error Messages",[20,1225,1226],{},"Do not show the regex pattern as the main error message.",[203,1228],{"language":754,"src":1229},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex\u002Fplain-error-messages-07.php",[24,1231,1232,1235,1238],{},[27,1233,1234],{},"The pattern is for the developer",[27,1236,1237],{},"The message is for the user",[27,1239,1240],{},"A useful message names the allowed characters and length",[11,1242,1244,1247],{"id":1243,"level":14},"common-mistakes",[16,1245,1246],{"id":1243},"Common Mistakes",[24,1248,1249,1255,1258,1261,1264],{},[27,1250,1251,1252,1254],{},"Using regex when a simple ",[82,1253,105],{}," check would be clearer",[27,1256,1257],{},"Forgetting anchors during full-field validation",[27,1259,1260],{},"Letting the database be the first place bad text is rejected",[27,1262,1263],{},"Showing raw regex in the browser as the only explanation",[27,1265,1266],{},"Testing only one valid value and no invalid values",[11,1268,1270,1273],{"id":1269,"level":14},"knowledge-check",[16,1271,1272],{"id":1269},"Knowledge Check",[24,1274,1275,1278,1285,1292,1297,1303,1306],{},[27,1276,1277],{},"When is regex a good fit for validation?",[27,1279,1280,1281,277,1283,450],{},"Why does the username pattern use ",[82,1282,763],{},[82,1284,766],{},[27,1286,1287,1288,1291],{},"What does ",[82,1289,1290],{},"[a-z0-9_-]"," allow?",[27,1293,1287,1294,1296],{},[82,1295,1210],{}," enforce?",[27,1298,1299,1300,1302],{},"Why is ",[82,1301,1041],{}," useful for validation failure checks?",[27,1304,1305],{},"Why should the browser error message avoid raw regex?",[27,1307,1308,1309,1311,1312,450],{},"When would ",[82,1310,994],{}," be more appropriate than ",[82,1313,1086],{},[11,1315,1317,1321],{"id":1316,"level":14},"further-learning",[16,1318,1320],{"id":1319},"key-terms-and-further-learning","Key Terms And Further Learning",[1322,1323,1326,1353],"two-col",{"gap":1324,"left-width":1325,"right-width":1325},"lg","1fr",[1327,1328,1330,1335,1341,1347],"template",{"v-slot:left":1329},"",[1331,1332,1334],"h3",{"id":1333},"key-terms","Key Terms",[20,1336,1337,1340],{},[1338,1339,113],"strong",{}," - A pattern language for matching text",[20,1342,1343,1346],{},[1338,1344,1345],{},"Anchor"," - A symbol that marks the start or end of a match",[20,1348,1349,1352],{},[1338,1350,1351],{},"Character class"," - A bracketed set or range of allowed characters",[1327,1354,1355,1358],{"v-slot:right":1329},[1331,1356,1357],{"id":1316},"Further Learning",[24,1359,1360,1369,1376,1384,1391],{},[27,1361,1362],{},[1363,1364,1368],"a",{"href":1365,"rel":1366},"https:\u002F\u002Fregex101.com\u002F",[1367],"nofollow","Regex101 tester",[27,1370,1371],{},[1363,1372,1375],{"href":1373,"rel":1374},"https:\u002F\u002Fdigitalfortress.tech\u002Fjs\u002Ftop-15-commonly-used-regex\u002F",[1367],"15 common regex examples",[27,1377,1378],{},[1363,1379,1073,1382],{"href":1380,"rel":1381},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Ffunction.preg-match.php",[1367],[82,1383,1076],{},[27,1385,1386],{},[1363,1387,1390],{"href":1388,"rel":1389},"https:\u002F\u002Fwww.php.net\u002Fmanual\u002Fen\u002Freference.pcre.pattern.syntax.php",[1367],"PHP PCRE patterns",[27,1392,1393],{},[1363,1394,1397],{"href":1395,"rel":1396},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FGuide\u002FRegular_expressions",[1367],"MDN JavaScript regular expressions",[11,1399,1401,1404],{"id":1400,"level":14},"summary",[16,1402,1403],{"id":1400},"Summary",[24,1405,1406,1409,1412,1415,1418,1421,1424,1427,1430,1435,1440,1443],{},[27,1407,1408],{},"Regex is useful when a field must follow a specific text shape",[27,1410,1411],{},"Use clearer tools for email validation, length checks, and database lookups",[27,1413,1414],{},"Anchors make the whole submitted value match the pattern",[27,1416,1417],{},"Character classes define allowed characters",[27,1419,1420],{},"Quantifiers define how many characters are allowed",[27,1422,1423],{},"Grouping handles choices or captured pieces",[27,1425,1426],{},"Flags change case sensitivity, multiline behavior, Unicode handling, and more",[27,1428,1429],{},"Regex can match, extract, replace, and validate text",[27,1431,1432,1434],{},[82,1433,1041],{}," is a clear PHP check for a failed validation match",[27,1436,1437,1439],{},[82,1438,994],{}," is the PHP choice when you need every match",[27,1441,1442],{},"Test valid, invalid, and boundary values",[27,1444,1445],{},"Show users a plain-language rule, not the raw regex",{"title":1329,"searchDepth":1447,"depth":1447,"links":1448},2,[1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1468,1469,1470,1471,1472,1473,1474],{"id":13,"depth":1447,"text":18},{"id":47,"depth":1447,"text":50},{"id":127,"depth":1447,"text":130},{"id":194,"depth":1447,"text":198},{"id":219,"depth":1447,"text":222},{"id":241,"depth":1447,"text":242},{"id":380,"depth":1447,"text":383},{"id":521,"depth":1447,"text":524},{"id":636,"depth":1447,"text":639},{"id":745,"depth":1447,"text":748},{"id":779,"depth":1447,"text":782},{"id":791,"depth":1447,"text":794},{"id":856,"depth":1447,"text":859},{"id":975,"depth":1447,"text":978},{"id":1001,"depth":1447,"text":1002},{"id":1022,"depth":1447,"text":1025},{"id":1051,"depth":1447,"text":1054},{"id":1072,"depth":1447,"text":1467},"PHP preg_match",{"id":1101,"depth":1447,"text":1104},{"id":1201,"depth":1447,"text":1204},{"id":1220,"depth":1447,"text":1223},{"id":1243,"depth":1447,"text":1246},{"id":1269,"depth":1447,"text":1272},{"id":1319,"depth":1447,"text":1320},{"id":1400,"depth":1447,"text":1403},"presentation","Internet Applications","Read and test regular expressions for focused text-pattern validation.","Face-to-face class of about 40 students; includes examples, pattern reading, short tests, and questions.","10","45","55","md",{"requiresLessonBranchCheckpoint":1484},false,"5",true,"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Core",null,{"title":5,"description":1477},"published","internet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",[1494,1495,754],"validation","regex","48:48","-9TIIyZ6MmI","https:\u002F\u002Fyoutu.be\u002F-9TIIyZ6MmI","Intro to Regex","E-vHO_Y77Rb1kaG09c5f2Xqjr45AurwDNss9Z5uSU-Y",[1502,1505,1509,1512,1516,1519,1522,1525,1529,1532,1535,1539,1543,1546,1550,1553,1556,1560,1563,1566,1569,1571,1573,1575,1577,1579,1581,1583,1586,1589,1592,1595,1598,1600,1603,1606,1610,1614,1618,1622,1625,1628,1631,1635,1639,1642,1645,1648,1651,1655,1659,1662,1664,1667,1670,1673,1676,1679,1682,1685,1688,1692,1696,1700,1704,1707,1710,1713,1716,1719,1722,1725,1728,1731,1733,1736,1739,1742,1745,1748,1751,1755,1758,1761,1764,1767,1770,1773,1776,1779,1782,1785,1789,1792,1795,1798,1801,1804,1807,1810,1813,1816,1819,1822,1825,1828,1831,1834,1837,1840,1843,1846,1849,1852,1855,1858,1861,1864,1867,1870,1873,1876,1879,1882,1885,1888,1891,1894,1897,1900,1903,1906,1909,1912,1915,1918,1921,1924,1927,1930,1933,1936,1939,1942,1945,1948,1951,1954,1957,1960,1963,1966,1969,1972,1975,1978,1981,1984,1987,1990,1993,1996,1999,2002,2005,2008,2011,2014,2017,2020,2023,2026,2029,2032,2035,2038,2041,2044,2047,2050,2053,2056,2059,2062,2065,2068,2071,2074,2077,2080,2083,2086,2089,2092,2095,2098,2101,2104,2107,2110,2113,2116,2119,2122,2125,2128,2131,2134,2137,2140,2143,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,2240,2243,2246,2249,2252,2255,2258,2261,2264,2267,2270,2273,2276,2279,2282,2285,2288,2291,2294,2297,2300,2303,2306,2309,2312,2315,2318,2321,2324,2327,2330,2333,2336,2339,2342,2345,2348,2351,2354,2357,2360,2363,2366,2369,2372,2375,2378,2381,2384,2387,2390,2393,2396,2399,2402,2405,2408,2411,2414,2417,2420,2423,2426,2429,2432,2435,2438,2441,2444,2447,2450,2453,2456,2459,2462,2465,2468,2471,2474,2477,2480,2483,2486,2489,2492,2495,2498,2501,2504,2507,2510,2513,2516,2519,2522,2525,2528,2532,2535,2538,2541,2544,2547,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2591,2593,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2630,2634,2638,2641,2645,2649,2652,2655,2658,2661,2664,2667,2671,2674,2677,2680,2683,2685,2687,2689,2691,2694,2697,2700,2703,2706,2709,2712,2715,2718,2721,2724,2727,2730,2733,2736,2739,2742,2745,2748,2751,2754,2757,2760,2763,2766,2769,2772,2775,2778,2781,2784,2787,2790,2793,2796,2799,2802,2805,2808,2811,2814,2817,2820,2823,2826,2829,2832,2835,2838,2841,2844,2847,2850,2853,2856,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2940,2943,2946,2949,2952,2954,2956,2959,2962,2965,2968,2971,2974],{"path":1503,"title":1504,"order":1489,"module":1489,"status":1489},"\u002Fabout","About Content Version 3",{"path":1506,"title":1507,"order":1485,"module":615,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","draft",{"path":1510,"title":1511,"order":1479,"module":615,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":1513,"title":1514,"order":1515,"module":615,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?","20",{"path":1517,"title":1518,"order":1479,"module":14,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":1520,"title":1521,"order":1479,"module":195,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":1523,"title":1524,"order":1515,"module":195,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":1526,"title":1527,"order":1479,"module":1528,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics","4",{"path":1530,"title":1531,"order":1515,"module":1528,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":1533,"title":1534,"order":1479,"module":1485,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":1536,"title":1537,"order":1515,"module":1538,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":1540,"title":1541,"order":1479,"module":1542,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design","8",{"path":1544,"title":1545,"order":1515,"module":1542,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":1547,"title":1548,"order":1479,"module":1549,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":1551,"title":1552,"order":1479,"module":1479,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":1554,"title":1555,"order":1515,"module":1479,"status":1508},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":1557,"title":1558,"order":615,"module":1559,"status":1491},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design","0",{"path":1561,"title":1562,"order":615,"module":1559,"status":1508},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":1564,"title":1565,"order":1489,"module":1489,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":1567,"title":1568,"order":1489,"module":1489,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":1570,"title":1511,"order":1479,"module":615,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":1572,"title":1514,"order":1515,"module":615,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":1574,"title":1518,"order":1479,"module":14,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":1576,"title":1521,"order":1479,"module":195,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":1578,"title":1524,"order":1515,"module":195,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":1580,"title":1527,"order":1479,"module":1528,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":1582,"title":1531,"order":1515,"module":1528,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":1584,"title":1585,"order":1479,"module":1485,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":1587,"title":1588,"order":1479,"module":1538,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":1590,"title":1591,"order":1515,"module":1538,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":1593,"title":1594,"order":1479,"module":1542,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":1596,"title":1597,"order":1515,"module":1542,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":1599,"title":1548,"order":1479,"module":1549,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":1601,"title":1602,"order":1479,"module":1479,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":1604,"title":1605,"order":1515,"module":1479,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":1607,"title":1608,"order":1479,"module":1609,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":1611,"title":1612,"order":1479,"module":1613,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":1615,"title":1616,"order":1479,"module":1617,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":1619,"title":1620,"order":1479,"module":1621,"status":1508},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":1623,"title":1624,"order":615,"module":1559,"status":1508},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":1626,"title":1627,"order":1479,"module":1559,"status":1508},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":1629,"title":1630,"order":1515,"module":1559,"status":1508},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":1632,"title":1633,"order":1634,"module":1559,"status":1508},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":1636,"title":1637,"order":1638,"module":1559,"status":1508},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":1640,"title":1641,"order":1479,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":1643,"title":1644,"order":1515,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":1646,"title":1647,"order":1638,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":1649,"title":1650,"order":1634,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":1652,"title":1653,"order":1654,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions","50",{"path":1656,"title":1657,"order":1658,"module":615,"status":1508},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations","60",{"path":1660,"title":1661,"order":1489,"module":1489,"status":1489},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":1663,"title":1661,"order":1479,"module":615,"status":1489},"\u002Fgeneral\u002Fbasic-command-line",{"path":1665,"title":1666,"order":1489,"module":1489,"status":1491},"\u002F","Ethereal Lab Course Materials",{"path":1668,"title":1669,"order":1559,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":1671,"title":1672,"order":1479,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":1674,"title":1675,"order":1515,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":1677,"title":1678,"order":1638,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":1680,"title":1681,"order":1634,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":1683,"title":1684,"order":1654,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":1686,"title":1687,"order":1658,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":1689,"title":1690,"order":1691,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":1693,"title":1694,"order":1695,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":1697,"title":1698,"order":1699,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox","90",{"path":1701,"title":1702,"order":1703,"module":615,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware","100",{"path":1705,"title":1706,"order":1479,"module":14,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":1708,"title":1709,"order":1515,"module":14,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":1711,"title":1712,"order":1479,"module":195,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":1714,"title":1715,"order":1515,"module":195,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":1717,"title":1718,"order":1638,"module":195,"status":1508},"\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":1720,"title":1721,"order":1479,"module":1528,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":1723,"title":1724,"order":1515,"module":1528,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":1726,"title":1727,"order":1638,"module":1528,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":1729,"title":1730,"order":1634,"module":1528,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":1732,"title":5,"order":1479,"module":1485,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":1734,"title":1735,"order":1515,"module":1485,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":1737,"title":1738,"order":1638,"module":1485,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":1740,"title":1741,"order":1634,"module":1485,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":1743,"title":1744,"order":1479,"module":1538,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":1746,"title":1747,"order":1515,"module":1538,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":1749,"title":1750,"order":1638,"module":1538,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":1752,"title":1753,"order":1479,"module":1754,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":1756,"title":1757,"order":1515,"module":1754,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":1759,"title":1760,"order":1638,"module":1754,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":1762,"title":1763,"order":1479,"module":1542,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Milestone 2 Bootstrap And Reusability",{"path":1765,"title":1766,"order":1515,"module":1542,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":1768,"title":1769,"order":1638,"module":1542,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":1771,"title":1772,"order":1479,"module":1549,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":1774,"title":1775,"order":1515,"module":1549,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":1777,"title":1778,"order":1479,"module":1479,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":1780,"title":1781,"order":1515,"module":1479,"status":1508},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":1783,"title":1784,"order":615,"module":1559,"status":1491},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":1786,"title":1787,"order":1634,"module":1479,"status":1788},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":1790,"title":1791,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":1793,"title":1794,"order":1515,"module":1542,"status":1788},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":1796,"title":1797,"order":1638,"module":1549,"status":1788},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":1799,"title":1800,"order":1485,"module":1528,"status":1491},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":1802,"title":1803,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":1805,"title":1806,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":1808,"title":1809,"order":1489,"module":1489,"status":1489},"\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":1811,"title":1812,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":1814,"title":1815,"order":1489,"module":1489,"status":1489},"\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":1817,"title":1818,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":1820,"title":1821,"order":1489,"module":1489,"status":1489},"\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":1823,"title":1824,"order":1489,"module":1489,"status":1489},"\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":1826,"title":1827,"order":1489,"module":1489,"status":1489},"\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":1829,"title":1830,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":1832,"title":1833,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":1835,"title":1836,"order":1489,"module":1489,"status":1489},"\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":1838,"title":1839,"order":1489,"module":1489,"status":1489},"\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":1841,"title":1842,"order":1489,"module":1489,"status":1489},"\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":1844,"title":1845,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":1847,"title":1848,"order":1489,"module":1489,"status":1489},"\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":1850,"title":1851,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":1853,"title":1854,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":1856,"title":1857,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":1859,"title":1860,"order":1489,"module":1489,"status":1489},"\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":1862,"title":1863,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":1865,"title":1866,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":1868,"title":1869,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":1871,"title":1872,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":1874,"title":1875,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":1877,"title":1878,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":1880,"title":1881,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":1883,"title":1884,"order":1489,"module":1489,"status":1489},"\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":1886,"title":1887,"order":1489,"module":1489,"status":1489},"\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":1889,"title":1890,"order":1489,"module":1489,"status":1489},"\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":1892,"title":1893,"order":1489,"module":1489,"status":1489},"\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":1895,"title":1896,"order":1489,"module":1489,"status":1489},"\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":1898,"title":1899,"order":1489,"module":1489,"status":1489},"\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":1901,"title":1902,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":1904,"title":1905,"order":1489,"module":1489,"status":1489},"\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":1907,"title":1908,"order":1489,"module":1489,"status":1489},"\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":1910,"title":1911,"order":1489,"module":1489,"status":1489},"\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":1913,"title":1914,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":1916,"title":1917,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":1919,"title":1920,"order":1489,"module":1489,"status":1489},"\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":1922,"title":1923,"order":1489,"module":1489,"status":1489},"\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":1925,"title":1926,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":1928,"title":1929,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":1931,"title":1932,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":1934,"title":1935,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":1937,"title":1938,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":1940,"title":1941,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":1943,"title":1944,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":1946,"title":1947,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":1949,"title":1950,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":1952,"title":1953,"order":1489,"module":1489,"status":1489},"\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":1955,"title":1956,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":1958,"title":1959,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":1961,"title":1962,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":1964,"title":1965,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":1967,"title":1968,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":1970,"title":1971,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":1973,"title":1974,"order":1489,"module":1489,"status":1489},"\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":1976,"title":1977,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":1979,"title":1980,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":1982,"title":1983,"order":1489,"module":1489,"status":1489},"\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":1985,"title":1986,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":1988,"title":1989,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":1991,"title":1992,"order":1489,"module":1489,"status":1489},"\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":1994,"title":1995,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":1997,"title":1998,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":2000,"title":2001,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":2003,"title":2004,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":2006,"title":2007,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":2009,"title":2010,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":2012,"title":2013,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":2015,"title":2016,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":2018,"title":2019,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":2021,"title":2022,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":2024,"title":2025,"order":1489,"module":1489,"status":1489},"\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":2027,"title":2028,"order":1489,"module":1489,"status":1489},"\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":2030,"title":2031,"order":1489,"module":1489,"status":1489},"\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":2033,"title":2034,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":2036,"title":2037,"order":1489,"module":1489,"status":1489},"\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":2039,"title":2040,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":2042,"title":2043,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":2045,"title":2046,"order":1489,"module":1489,"status":1489},"\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":2048,"title":2049,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":2051,"title":2052,"order":1489,"module":1489,"status":1489},"\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":2054,"title":2055,"order":1489,"module":1489,"status":1489},"\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":2057,"title":2058,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":2060,"title":2061,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":2063,"title":2064,"order":1489,"module":1489,"status":1489},"\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":2066,"title":2067,"order":1489,"module":1489,"status":1489},"\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":2069,"title":2070,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":2072,"title":2073,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":2075,"title":2076,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":2078,"title":2079,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":2081,"title":2082,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":2084,"title":2085,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":2087,"title":2088,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":2090,"title":2091,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":2093,"title":2094,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":2096,"title":2097,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":2099,"title":2100,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":2102,"title":2103,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":2105,"title":2106,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":2108,"title":2109,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":2111,"title":2112,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":2114,"title":2115,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":2117,"title":2118,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":2120,"title":2121,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":2123,"title":2124,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":2126,"title":2127,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":2129,"title":2130,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":2132,"title":2133,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":2135,"title":2136,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":2138,"title":2139,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":2141,"title":2142,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":2144,"title":2145,"order":1489,"module":1489,"status":2146},"\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":2148,"title":2149,"order":1489,"module":1489,"status":2146},"\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":2151,"title":2152,"order":1489,"module":1489,"status":2146},"\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":2154,"title":2155,"order":1489,"module":1489,"status":2146},"\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":2157,"title":2158,"order":1489,"module":1489,"status":2146},"\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":2160,"title":2161,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":2163,"title":2164,"order":1489,"module":1489,"status":2146},"\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":2166,"title":2167,"order":1489,"module":1489,"status":2146},"\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":2169,"title":2170,"order":1489,"module":1489,"status":2146},"\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":2172,"title":2173,"order":1489,"module":1489,"status":2146},"\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":2175,"title":2176,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":2178,"title":2179,"order":1489,"module":1489,"status":2146},"\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":2181,"title":2182,"order":1489,"module":1489,"status":2146},"\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":2184,"title":2185,"order":1489,"module":1489,"status":1489},"\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":2187,"title":2188,"order":1489,"module":1489,"status":2146},"\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":2190,"title":2191,"order":1489,"module":1489,"status":2146},"\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":2193,"title":2194,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":2196,"title":2197,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":2199,"title":2200,"order":1489,"module":1489,"status":1489},"\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":2202,"title":2203,"order":1489,"module":1489,"status":1489},"\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":2205,"title":2206,"order":1489,"module":1489,"status":2146},"\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":2208,"title":2209,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":2211,"title":2212,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":2214,"title":2215,"order":1489,"module":1489,"status":1489},"\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":2217,"title":2218,"order":1489,"module":1489,"status":2146},"\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":2220,"title":2221,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":2223,"title":2224,"order":1489,"module":1489,"status":2146},"\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":2226,"title":2227,"order":1489,"module":1489,"status":2146},"\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":2229,"title":2230,"order":1489,"module":1489,"status":1489},"\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":2232,"title":2233,"order":1489,"module":1489,"status":2146},"\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":2235,"title":2236,"order":1489,"module":1489,"status":2146},"\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":2238,"title":2239,"order":1489,"module":1489,"status":1489},"\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":2241,"title":2242,"order":1489,"module":1489,"status":1489},"\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":2244,"title":2245,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":2247,"title":2248,"order":1489,"module":1489,"status":2146},"\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":2250,"title":2251,"order":1489,"module":1489,"status":2146},"\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":2253,"title":2254,"order":1489,"module":1489,"status":2146},"\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":2256,"title":2257,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":2259,"title":2260,"order":1489,"module":1489,"status":2146},"\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":2262,"title":2263,"order":1489,"module":1489,"status":1489},"\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":2265,"title":2266,"order":1489,"module":1489,"status":1489},"\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":2268,"title":2269,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":2271,"title":2272,"order":1489,"module":1489,"status":2146},"\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":2274,"title":2275,"order":1489,"module":1489,"status":2146},"\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":2277,"title":2278,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":2280,"title":2281,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":2283,"title":2284,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":2286,"title":2287,"order":1489,"module":1489,"status":1489},"\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":2289,"title":2290,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":2292,"title":2293,"order":1489,"module":1489,"status":2146},"\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":2295,"title":2296,"order":1489,"module":1489,"status":2146},"\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":2298,"title":2299,"order":1489,"module":1489,"status":2146},"\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":2301,"title":2302,"order":1489,"module":1489,"status":2146},"\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":2304,"title":2305,"order":1489,"module":1489,"status":2146},"\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":2307,"title":2308,"order":1489,"module":1489,"status":2146},"\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":2310,"title":2311,"order":1489,"module":1489,"status":2146},"\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":2313,"title":2314,"order":1489,"module":1489,"status":2146},"\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":2316,"title":2317,"order":1489,"module":1489,"status":2146},"\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":2319,"title":2320,"order":1489,"module":1489,"status":2146},"\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":2322,"title":2323,"order":1489,"module":1489,"status":2146},"\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":2325,"title":2326,"order":1489,"module":1489,"status":1489},"\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":2328,"title":2329,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":2331,"title":2332,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":2334,"title":2335,"order":1489,"module":1489,"status":2146},"\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":2337,"title":2338,"order":1489,"module":1489,"status":2146},"\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":2340,"title":2341,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":2343,"title":2344,"order":1489,"module":1489,"status":2146},"\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":2346,"title":2347,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":2349,"title":2350,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":2352,"title":2353,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":2355,"title":2356,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":2358,"title":2359,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":2361,"title":2362,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":2364,"title":2365,"order":1489,"module":1489,"status":2146},"\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":2367,"title":2368,"order":1489,"module":1489,"status":2146},"\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":2370,"title":2371,"order":1489,"module":1489,"status":2146},"\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":2373,"title":2374,"order":1489,"module":1489,"status":2146},"\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":2376,"title":2377,"order":1489,"module":1489,"status":2146},"\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":2379,"title":2380,"order":1489,"module":1489,"status":2146},"\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":2382,"title":2383,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":2385,"title":2386,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":2388,"title":2389,"order":1489,"module":1489,"status":2146},"\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":2391,"title":2392,"order":1489,"module":1489,"status":2146},"\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":2394,"title":2395,"order":1489,"module":1489,"status":2146},"\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":2397,"title":2398,"order":1489,"module":1489,"status":2146},"\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":2400,"title":2401,"order":1489,"module":1489,"status":1489},"\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":2403,"title":2404,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":2406,"title":2407,"order":1489,"module":1489,"status":1489},"\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":2409,"title":2410,"order":1489,"module":1489,"status":2146},"\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":2412,"title":2413,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":2415,"title":2416,"order":1489,"module":1489,"status":2146},"\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":2418,"title":2419,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":2421,"title":2422,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":2424,"title":2425,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":2427,"title":2428,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":2430,"title":2431,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":2433,"title":2434,"order":1489,"module":1489,"status":2146},"\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":2436,"title":2437,"order":1489,"module":1489,"status":2146},"\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":2439,"title":2440,"order":1489,"module":1489,"status":2146},"\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":2442,"title":2443,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":2445,"title":2446,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":2448,"title":2449,"order":1489,"module":1489,"status":1489},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":2451,"title":2452,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":2454,"title":2455,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":2457,"title":2458,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":2460,"title":2461,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":2463,"title":2464,"order":1489,"module":1489,"status":2146},"\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":2466,"title":2467,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":2469,"title":2470,"order":1489,"module":1489,"status":2146},"\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":2472,"title":2473,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":2475,"title":2476,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":2478,"title":2479,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":2481,"title":2482,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":2484,"title":2485,"order":1489,"module":1489,"status":2146},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":2487,"title":2488,"order":615,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":2490,"title":2491,"order":14,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":2493,"title":2494,"order":195,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":2496,"title":2497,"order":1528,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":2499,"title":2500,"order":1485,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":2502,"title":2503,"order":1538,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":2505,"title":2506,"order":1754,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":2508,"title":2509,"order":1559,"module":1559,"status":1508},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":2511,"title":2512,"order":1479,"module":615,"status":1508},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":2514,"title":2515,"order":1515,"module":14,"status":1508},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":2517,"title":2518,"order":1638,"module":195,"status":1508},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":2520,"title":2521,"order":1634,"module":1528,"status":1508},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":2523,"title":2524,"order":1654,"module":1485,"status":1508},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":2526,"title":2527,"order":1658,"module":1538,"status":1508},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":2529,"title":2530,"order":2531,"module":1538,"status":1508},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":2533,"title":2534,"order":1691,"module":1754,"status":1508},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":2536,"title":2537,"order":1695,"module":1542,"status":1508},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":2539,"title":2540,"order":1699,"module":1549,"status":1508},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":2542,"title":2543,"order":1703,"module":1479,"status":1508},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":2545,"title":2546,"order":1489,"module":1489,"status":1508},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":2548,"title":2549,"order":1489,"module":1489,"status":1508},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":2551,"title":1669,"order":1559,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":2553,"title":1672,"order":1479,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":2555,"title":1675,"order":1515,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":2557,"title":1678,"order":1638,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":2559,"title":1681,"order":1634,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":2561,"title":1684,"order":1654,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":2563,"title":1687,"order":1658,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":2565,"title":1690,"order":1691,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":2567,"title":1694,"order":1695,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":2569,"title":1698,"order":1699,"module":615,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":2571,"title":1702,"order":1703,"module":615,"status":1508},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":2573,"title":1706,"order":1479,"module":14,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":2575,"title":1709,"order":1515,"module":14,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":2577,"title":1712,"order":1479,"module":195,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":2579,"title":1715,"order":1515,"module":195,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":2581,"title":1718,"order":1638,"module":195,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":2583,"title":1721,"order":1479,"module":1528,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":2585,"title":1724,"order":1515,"module":1528,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":2587,"title":1727,"order":1638,"module":1528,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":2589,"title":1730,"order":1634,"module":1528,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":1487,"title":5,"order":1479,"module":1485,"status":1491},{"path":2592,"title":1735,"order":1515,"module":1485,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":2594,"title":2595,"order":1638,"module":1485,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":2597,"title":1741,"order":1634,"module":1485,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":2599,"title":1744,"order":1479,"module":1538,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":2601,"title":1747,"order":1515,"module":1538,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":2603,"title":1750,"order":1638,"module":1538,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":2605,"title":1753,"order":1479,"module":1754,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":2607,"title":1757,"order":1515,"module":1754,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":2609,"title":1760,"order":1638,"module":1754,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":2611,"title":1763,"order":1479,"module":1542,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":2613,"title":1766,"order":1515,"module":1542,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":2615,"title":1769,"order":1638,"module":1542,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":2617,"title":1772,"order":1479,"module":1549,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":2619,"title":1775,"order":1515,"module":1549,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":2621,"title":1778,"order":1479,"module":1479,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":2623,"title":1781,"order":1515,"module":1479,"status":1491},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":2625,"title":1784,"order":615,"module":1559,"status":1491},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":2627,"title":2628,"order":2629,"module":1479,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":2631,"title":2632,"order":2633,"module":1538,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":2635,"title":2636,"order":2637,"module":1538,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":2639,"title":2640,"order":2629,"module":1538,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":2642,"title":2643,"order":2644,"module":1542,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":2646,"title":2647,"order":2648,"module":1549,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":2650,"title":2651,"order":1479,"module":615,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":2653,"title":2654,"order":1515,"module":14,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":2656,"title":2657,"order":1638,"module":195,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":2659,"title":2660,"order":1634,"module":1528,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":2662,"title":2663,"order":1654,"module":1485,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":2665,"title":2666,"order":1658,"module":1538,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":2668,"title":2669,"order":2670,"module":1538,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":2672,"title":2673,"order":1691,"module":1754,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":2675,"title":2676,"order":1695,"module":1542,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":2678,"title":2679,"order":1699,"module":1549,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":2681,"title":2682,"order":1703,"module":1479,"status":1508},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":2684,"title":1672,"order":1479,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2686,"title":1675,"order":1515,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2688,"title":1678,"order":1638,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2690,"title":1681,"order":1634,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2692,"title":2693,"order":1654,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":2695,"title":2696,"order":1658,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":2698,"title":2699,"order":1479,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":2701,"title":2702,"order":1515,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":2704,"title":2705,"order":1638,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":2707,"title":2708,"order":1634,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":2710,"title":2711,"order":1479,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":2713,"title":2714,"order":1515,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":2716,"title":2717,"order":1638,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":2719,"title":2720,"order":1634,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":2722,"title":2723,"order":1479,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":2725,"title":2726,"order":1515,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":2728,"title":2729,"order":1638,"module":1528,"status":1508},"\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":2731,"title":2732,"order":1479,"module":1485,"status":1508},"\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":2734,"title":2735,"order":1515,"module":1538,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":2737,"title":2738,"order":1638,"module":1538,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":2740,"title":2741,"order":1479,"module":1754,"status":1508},"\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":2743,"title":2744,"order":1515,"module":1754,"status":1508},"\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":2746,"title":2747,"order":1638,"module":1754,"status":1508},"\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":2749,"title":2750,"order":1634,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":2752,"title":2753,"order":1654,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":2755,"title":2756,"order":1479,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":2758,"title":2759,"order":1515,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":2761,"title":2762,"order":1638,"module":1542,"status":1508},"\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":2764,"title":2765,"order":1634,"module":1542,"status":1508},"\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":2767,"title":2768,"order":1654,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":2770,"title":2771,"order":1479,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":2773,"title":2774,"order":1515,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":2776,"title":2777,"order":1638,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":2779,"title":2780,"order":1634,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":2782,"title":2783,"order":1654,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":2785,"title":2786,"order":1658,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":2788,"title":2789,"order":1479,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":2791,"title":2792,"order":1515,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":2794,"title":2795,"order":1638,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":2797,"title":2798,"order":615,"module":1559,"status":1491},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":2800,"title":2801,"order":1479,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":2803,"title":2804,"order":1515,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":2806,"title":2807,"order":1638,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":2809,"title":2810,"order":1479,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":2812,"title":2813,"order":1515,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":2815,"title":2816,"order":1638,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":2818,"title":2819,"order":1479,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":2821,"title":2822,"order":1515,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":2824,"title":2825,"order":1638,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":2827,"title":2828,"order":1634,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":2830,"title":2831,"order":1479,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":2833,"title":2834,"order":1515,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":2836,"title":2837,"order":1638,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":2839,"title":2840,"order":1479,"module":1485,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":2842,"title":2843,"order":1515,"module":1485,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":2845,"title":2846,"order":1638,"module":1485,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":2848,"title":2849,"order":1559,"module":1559,"status":1508},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":2851,"title":2852,"order":1489,"module":1489,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":2854,"title":2855,"order":1489,"module":1489,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":2857,"title":1672,"order":1479,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":2859,"title":1675,"order":1515,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":2861,"title":1678,"order":1638,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":2863,"title":1681,"order":1634,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":2865,"title":2693,"order":1654,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":2867,"title":2696,"order":1658,"module":615,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":2869,"title":2699,"order":1479,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":2871,"title":2702,"order":1515,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":2873,"title":2705,"order":1638,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":2875,"title":2708,"order":1634,"module":14,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":2877,"title":2711,"order":1479,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":2879,"title":2714,"order":1515,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":2881,"title":2717,"order":1638,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":2883,"title":2720,"order":1634,"module":195,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":2885,"title":2723,"order":1479,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":2887,"title":2726,"order":1515,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":2889,"title":2729,"order":1638,"module":1528,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":2891,"title":2732,"order":1479,"module":1485,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":2893,"title":2894,"order":1479,"module":1538,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":2896,"title":2735,"order":1515,"module":1538,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":2898,"title":2738,"order":1638,"module":1538,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":2900,"title":2741,"order":1479,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":2902,"title":2744,"order":1515,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":2904,"title":2747,"order":1638,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":2906,"title":2750,"order":1634,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":2908,"title":2753,"order":1654,"module":1754,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":2910,"title":2756,"order":1479,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":2912,"title":2759,"order":1515,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":2914,"title":2762,"order":1638,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":2916,"title":2765,"order":1634,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":2918,"title":2768,"order":1654,"module":1542,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":2920,"title":2771,"order":1479,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":2922,"title":2774,"order":1515,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":2924,"title":2777,"order":1638,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":2926,"title":2780,"order":1634,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":2928,"title":2783,"order":1654,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":2930,"title":2786,"order":1658,"module":1549,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":2932,"title":2789,"order":1479,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":2934,"title":2792,"order":1515,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":2936,"title":2795,"order":1638,"module":1479,"status":1508},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":2938,"title":2939,"order":1479,"module":615,"status":1508},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":2941,"title":2942,"order":615,"module":1559,"status":1491},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":2944,"title":2945,"order":615,"module":1559,"status":1491},"\u002Fsystems-integration","Systems Integration",{"path":2947,"title":2948,"order":1489,"module":1489,"status":1508},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":2950,"title":2951,"order":1489,"module":1489,"status":1508},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":2953,"title":2939,"order":1479,"module":615,"status":1491},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":2955,"title":2942,"order":615,"module":1559,"status":1491},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":2957,"title":2958,"order":1489,"module":1489,"status":1489},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":2960,"title":2961,"order":1489,"module":1489,"status":1489},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":2963,"title":2964,"order":1489,"module":1489,"status":1489},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":2966,"title":2967,"order":1489,"module":1489,"status":1489},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":2969,"title":2970,"order":1515,"module":1559,"status":1508},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":2972,"title":2973,"order":1638,"module":1559,"status":1508},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":2975,"title":2976,"order":1479,"module":1559,"status":1508},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086375]