[{"id":9497,"date":"2024-03-24T10:00:04","date_gmt":"2024-03-24T15:00:04","guid":{"rendered":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-17\/"},"modified":"2024-03-24T10:00:04","modified_gmt":"2024-03-24T15:00:04","slug":"weekly-web-harvest-for-2024-03-17","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-17\/","title":{"rendered":"Weekly Web Harvest for 2024-03-17"},"content":{"rendered":"
For the past few decades, scientists studying candidate antidepressant drugs have had a convenient animal test: how long a rodent dropped in water keeps swimming. Invented in 1977, the forced swim test (FST) hinged on the idea that a depressed animal would give up quickly. It seemed to work: Antidepressants and electroconvulsive therapy often made the animal try harder. The test remains popular, appearing in about 600 papers per year.<\/p>\n
<\/span><\/li>\n
<\/span><\/li>\n
<\/span><\/li>\n
Pressure grows to ditch controversial forced swim test in rodent studies of depression | Science | AAAS—Nemo missed a great advertising tie in . . . just keep swimming, just keep swimming For the past few decades, scientists studying candidate antidepressant drugs have had a convenient animal test: how long a rodent dropped in water […]<\/p>\n
Read More… from Weekly Web Harvest for 2024-03-17<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[601],"tags":[],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["8"],"word_count":["307"],"URL_array":["a:8:{i:0;a:2:{i:0;s:113:\"\"https:\/\/www.science.org\/content\/article\/pressure-grows-to-ditch-controversial-rodent-test-in-depression-studies\"\";i:1;s:103:\"www.science.org\/content\/article\/pressure-grows-to-ditch-controversial-rodent-test-in-depression-studies\";}i:1;a:2:{i:0;s:34:\"\"https:\/\/www.jerthorp.me\/learning\"\";i:1;s:24:\"www.jerthorp.me\/learning\";}i:2;a:2:{i:0;s:110:\"\"https:\/\/commons.wikimedia.org\/wiki\/Category:Careless_talk_..._series_of_WWII_posters_from_the_United_States#\"\";i:1;s:100:\"commons.wikimedia.org\/wiki\/Category:Careless_talk_..._series_of_WWII_posters_from_the_United_States#\";}i:3;a:2:{i:0;s:86:\"\"https:\/\/commons.wikimedia.org\/wiki\/File:%22No_room_for_rumors%22_-_NARA_-_515079.jpg\"\";i:1;s:76:\"commons.wikimedia.org\/wiki\/File:%22No_room_for_rumors%22_-_NARA_-_515079.jpg\";}i:4;a:2:{i:0;s:32:\"\"https:\/\/ciechanow.ski\/airfoil\/\"\";i:1;s:22:\"ciechanow.ski\/airfoil\/\";}i:5;a:2:{i:0;s:30:\"\"https:\/\/yearofai.utexas.edu\/\"\";i:1;s:20:\"yearofai.utexas.edu\/\";}i:6;a:2:{i:0;s:98:\"\"https:\/\/www.msn.com\/en-us\/money\/companies\/one-mans-quest-for-the-perfect-marshmallow\/ar-BB1jfy4p\"\";i:1;s:88:\"www.msn.com\/en-us\/money\/companies\/one-mans-quest-for-the-perfect-marshmallow\/ar-BB1jfy4p\";}i:7;a:2:{i:0;s:22:\"\"https:\/\/openqda.org\/\"\";i:1;s:12:\"openqda.org\/\";}}"],"rest_api_enabler":{"URL_count":"8","word_count":"307","URL_array":"a:8:{i:0;a:2:{i:0;s:113:\"\"https:\/\/www.science.org\/content\/article\/pressure-grows-to-ditch-controversial-rodent-test-in-depression-studies\"\";i:1;s:103:\"www.science.org\/content\/article\/pressure-grows-to-ditch-controversial-rodent-test-in-depression-studies\";}i:1;a:2:{i:0;s:34:\"\"https:\/\/www.jerthorp.me\/learning\"\";i:1;s:24:\"www.jerthorp.me\/learning\";}i:2;a:2:{i:0;s:110:\"\"https:\/\/commons.wikimedia.org\/wiki\/Category:Careless_talk_..._series_of_WWII_posters_from_the_United_States#\"\";i:1;s:100:\"commons.wikimedia.org\/wiki\/Category:Careless_talk_..._series_of_WWII_posters_from_the_United_States#\";}i:3;a:2:{i:0;s:86:\"\"https:\/\/commons.wikimedia.org\/wiki\/File:%22No_room_for_rumors%22_-_NARA_-_515079.jpg\"\";i:1;s:76:\"commons.wikimedia.org\/wiki\/File:%22No_room_for_rumors%22_-_NARA_-_515079.jpg\";}i:4;a:2:{i:0;s:32:\"\"https:\/\/ciechanow.ski\/airfoil\/\"\";i:1;s:22:\"ciechanow.ski\/airfoil\/\";}i:5;a:2:{i:0;s:30:\"\"https:\/\/yearofai.utexas.edu\/\"\";i:1;s:20:\"yearofai.utexas.edu\/\";}i:6;a:2:{i:0;s:98:\"\"https:\/\/www.msn.com\/en-us\/money\/companies\/one-mans-quest-for-the-perfect-marshmallow\/ar-BB1jfy4p\"\";i:1;s:88:\"www.msn.com\/en-us\/money\/companies\/one-mans-quest-for-the-perfect-marshmallow\/ar-BB1jfy4p\";}i:7;a:2:{i:0;s:22:\"\"https:\/\/openqda.org\/\"\";i:1;s:12:\"openqda.org\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9497"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9497"}],"version-history":[{"count":0,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9497\/revisions"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9490,"date":"2024-03-21T10:21:09","date_gmt":"2024-03-21T15:21:09","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9490"},"modified":"2024-03-21T10:21:09","modified_gmt":"2024-03-21T15:21:09","slug":"add-media-storage-amount-to-wpms-sites-view","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/add-media-storage-amount-to-wpms-sites-view\/","title":{"rendered":"Add media storage amount to wpms sites view"},"content":{"rendered":" For one of our multisites, I wanted an easy way to see show people the media storage usage per site. <\/p>\n I did a bit of Googling and got a couple functions to get the size of a directory using PHP.1<\/a><\/sup><\/p>\n Then I just appended it to the column I’d already customized to show the posts and page count. <\/p>\n Seems to work pretty well but it hasn’t been tested on a big multisite. It’d be easy enough to tie it to individual sites and run it on media library change, then store the data rather than call it live for the network sites view. <\/p>\n Here are the WP functions.<\/p>\n 1<\/a><\/sup> Thinking about it now, there has to be some WP function that does something like this in order to restrict total storage in multisite.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":" For one of our multisites, I wanted an easy way to see show people the media storage usage per site. I did a bit of Googling and got a couple functions to get the size of a directory using PHP.1 Then I just appended it to the column I’d already customized to show the posts […]<\/p>\n Read More… from Add media storage amount to wpms sites view<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[1015,1014,712,1013],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["2"],"word_count":["348"],"URL_array":["a:2:{i:0;a:2:{i:0;s:68:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_upload_dir\/\"\";i:1;s:58:\"developer.wordpress.org\/reference\/functions\/wp_upload_dir\/\";}i:1;a:2:{i:0;s:69:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/switch_to_blog\/\"\";i:1;s:59:\"developer.wordpress.org\/reference\/functions\/switch_to_blog\/\";}}"],"rest_api_enabler":{"URL_count":"2","word_count":"348","URL_array":"a:2:{i:0;a:2:{i:0;s:68:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_upload_dir\/\"\";i:1;s:58:\"developer.wordpress.org\/reference\/functions\/wp_upload_dir\/\";}i:1;a:2:{i:0;s:69:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/switch_to_blog\/\"\";i:1;s:59:\"developer.wordpress.org\/reference\/functions\/switch_to_blog\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9490"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9490"}],"version-history":[{"count":1,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9490\/revisions"}],"predecessor-version":[{"id":9491,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9490\/revisions\/9491"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9490"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9490"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9490"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9485,"date":"2024-03-17T10:00:06","date_gmt":"2024-03-17T15:00:06","guid":{"rendered":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-10\/"},"modified":"2024-03-17T10:00:06","modified_gmt":"2024-03-17T15:00:06","slug":"weekly-web-harvest-for-2024-03-10","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-10\/","title":{"rendered":"Weekly Web Harvest for 2024-03-10"},"content":{"rendered":" –There ought to be a Lessig Law . . . where the initial problem is eventually recognized as a symptom and the cause gets traced back to capitalism. <\/span><\/li>\n How (and Why) the University of Michigan Built Its Own Closed Generative AI Tools | EDUCAUSE Reviewh\/t D’Arcy Action Scheduler – Background Processing Job Queue for WordPress | Action Scheduler – Job Queue for WordPressA scalable, traceable job queue for background processing large queues of tasks in WordPress. Designed for distribution in WordPress plugins – […]<\/p>\n Read More… from Weekly Web Harvest for 2024-03-10<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[601],"tags":[],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["7"],"word_count":["180"],"URL_array":["a:7:{i:0;a:2:{i:0;s:121:\"\"https:\/\/er.educause.edu\/articles\/2024\/2\/how-and-why-the-university-of-michigan-built-its-own-closed-generative-ai-tools\"\";i:1;s:111:\"er.educause.edu\/articles\/2024\/2\/how-and-why-the-university-of-michigan-built-its-own-closed-generative-ai-tools\";}i:1;a:2:{i:0;s:30:\"\"https:\/\/actionscheduler.org\/\"\";i:1;s:20:\"actionscheduler.org\/\";}i:2;a:2:{i:0;s:119:\"\"https:\/\/www.cavfutures.com\/cavfutures-announces-partnership-between-uva-freshman-linebacker-kam-robinson-and-hilldrup\"\";i:1;s:109:\"www.cavfutures.com\/cavfutures-announces-partnership-between-uva-freshman-linebacker-kam-robinson-and-hilldrup\";}i:3;a:2:{i:0;s:27:\"\"https:\/\/www.stashpad.com\/\"\";i:1;s:17:\"www.stashpad.com\/\";}i:4;a:2:{i:0;s:372:\"\"https:\/\/www.bloomberg.com\/graphics\/2024-openai-gpt-hiring-racial-discrimination\/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE0OCwiZXhwIjoxNzEwNDYwOTQ4LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI2NDU1MEM3NkRFMkU0QkM1OEI0OTI5QjBDQkIzRDlCRCJ9.MdkSGC3HMwwUYtltWq6WxWg3vULNeCTJcjacB-DNi8k\"\";i:1;s:362:\"www.bloomberg.com\/graphics\/2024-openai-gpt-hiring-racial-discrimination\/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE0OCwiZXhwIjoxNzEwNDYwOTQ4LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI2NDU1MEM3NkRFMkU0QkM1OEI0OTI5QjBDQkIzRDlCRCJ9.MdkSGC3HMwwUYtltWq6WxWg3vULNeCTJcjacB-DNi8k\";}i:5;a:2:{i:0;s:64:\"\"https:\/\/hillheat.news\/p\/the-murderous-energy-suck-of-universal\"\";i:1;s:54:\"hillheat.news\/p\/the-murderous-energy-suck-of-universal\";}i:6;a:2:{i:0;s:56:\"\"https:\/\/www.decisionproblem.com\/paperclips\/index2.html\"\";i:1;s:46:\"www.decisionproblem.com\/paperclips\/index2.html\";}}"],"rest_api_enabler":{"URL_count":"7","word_count":"180","URL_array":"a:7:{i:0;a:2:{i:0;s:121:\"\"https:\/\/er.educause.edu\/articles\/2024\/2\/how-and-why-the-university-of-michigan-built-its-own-closed-generative-ai-tools\"\";i:1;s:111:\"er.educause.edu\/articles\/2024\/2\/how-and-why-the-university-of-michigan-built-its-own-closed-generative-ai-tools\";}i:1;a:2:{i:0;s:30:\"\"https:\/\/actionscheduler.org\/\"\";i:1;s:20:\"actionscheduler.org\/\";}i:2;a:2:{i:0;s:119:\"\"https:\/\/www.cavfutures.com\/cavfutures-announces-partnership-between-uva-freshman-linebacker-kam-robinson-and-hilldrup\"\";i:1;s:109:\"www.cavfutures.com\/cavfutures-announces-partnership-between-uva-freshman-linebacker-kam-robinson-and-hilldrup\";}i:3;a:2:{i:0;s:27:\"\"https:\/\/www.stashpad.com\/\"\";i:1;s:17:\"www.stashpad.com\/\";}i:4;a:2:{i:0;s:372:\"\"https:\/\/www.bloomberg.com\/graphics\/2024-openai-gpt-hiring-racial-discrimination\/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE0OCwiZXhwIjoxNzEwNDYwOTQ4LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI2NDU1MEM3NkRFMkU0QkM1OEI0OTI5QjBDQkIzRDlCRCJ9.MdkSGC3HMwwUYtltWq6WxWg3vULNeCTJcjacB-DNi8k\"\";i:1;s:362:\"www.bloomberg.com\/graphics\/2024-openai-gpt-hiring-racial-discrimination\/?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTcwOTg1NjE0OCwiZXhwIjoxNzEwNDYwOTQ4LCJhcnRpY2xlSWQiOiJTQTA1Q1FUMEFGQjQwMCIsImJjb25uZWN0SWQiOiI2NDU1MEM3NkRFMkU0QkM1OEI0OTI5QjBDQkIzRDlCRCJ9.MdkSGC3HMwwUYtltWq6WxWg3vULNeCTJcjacB-DNi8k\";}i:5;a:2:{i:0;s:64:\"\"https:\/\/hillheat.news\/p\/the-murderous-energy-suck-of-universal\"\";i:1;s:54:\"hillheat.news\/p\/the-murderous-energy-suck-of-universal\";}i:6;a:2:{i:0;s:56:\"\"https:\/\/www.decisionproblem.com\/paperclips\/index2.html\"\";i:1;s:46:\"www.decisionproblem.com\/paperclips\/index2.html\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9485"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9485"}],"version-history":[{"count":0,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9485\/revisions"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9482,"date":"2024-03-16T09:05:57","date_gmt":"2024-03-16T14:05:57","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9482"},"modified":"2024-03-16T09:05:57","modified_gmt":"2024-03-16T14:05:57","slug":"sending-reminder-emails","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/sending-reminder-emails\/","title":{"rendered":"Sending Reminder Emails"},"content":{"rendered":" So what I’m doing here is sending an email the day before an event someone registered for via a Gravity Forms process I set up.<\/p>\n This is kind of an interesting pattern because it moves back and forth from the Gravity Forms API and uses a mix of Events Calendar functions, in addition to basic WP and PHP functions. This is one piece of a much larger registration pattern that I’ll have to document at some point.1<\/a><\/sup><\/p>\n Gravity Forms has a reservations plugin but it felt really complex to me compared to what we2<\/a><\/sup> wanted and it didn’t quite do what we wanted in some other ways. I want simplicity. I want to avoid a lot of options. Reminder emails are just standard reminder emails. They don’t need to be beautiful bespoke creations.<\/p>\n This function will run once a day via wp_cron<\/a> and will be looking to alert people about what happens tomorrow. The first thing we’ve got to do to know what events are happening tomorrow is to figure out where we are in time today. We’ll do that using the PHP date<\/a> function and we’ll add 86400 seconds to get tomorrow.<\/p>\n We want to find all the events that occur on that day between 12:01AM and 11:59PM.\u00a0 The events are created through the Events Calendar and that give us access to a custom function called tribe_get_events<\/a> which takes start_date and end_date as variables. So this chunk gets us all of the events and start and end tomorrow.3<\/a><\/sup> <\/p>\n I want to scoop up all the IDs of the events that meet these search parameters and put them in an array. Because I log that when people register via Gravity Forms, I’ll be able to filter the Gravity Forms entries for that form by the Event ID. <\/p>\n Now we’re in the Gravity Forms API and using their GFAPI:get_entries <\/a>function.<\/p>\n These two little functions just break apart a couple of the pieces regarding email sending so that thing doesn’t get totally out of control. <\/p>\n To test this as I went through various iterations and a million changes, I added a little shortcode so I could var_dump everything to a page. I’d turn off the final mail function and just dump whatever variables I needed to see. I could also write it to a log but this usually feels a bit easier. I’ll just throw this shortcode on a page and refresh that page to run the function and see what’s what. <\/p>\n Two other things were important in troubleshooting something like this locally. One is that Local WP<\/a> has a built in mail tool that lets you see all the emails zooming around regardless of whether they’re real or not. That’s pretty key. They also just moved from MailHog to MailPen. MailHog had an issue with email subjects not showing if they were UTF-8 encoded and over a certain number of characters<\/a>. That led to me wasting a chunk of time thinking I needed to encode the subject differently. I eventually found out it was a bug on their end thanks to GitHub comments. As I went to figure out how to switch email clients in Local, I found the newest version did it already. That was a nice surprise. <\/p>\n The next piece was working through cron stuff in WordPress.4<\/a><\/sup> The WP Crontrol plugin<\/a> was really key for this. It’s a John Blackbourn<\/a> creation. He’s done so many good things over the years that I actually remember his name when I see it on plugins.<\/p>\n Finally, we’ll set the wp_cron to run this every day at 8AM. I think we get enough traffic that it’ll be fine and it really doesn’t matter as long as runs at some point during the day. If it gets to be a problem, there’s a much more serious way to do this that I found<\/a>.<\/p>\n 1<\/a><\/sup> Or should document at some point . . . if God’s willing and the blogging creek doesn’t rise.<\/p>\n 2<\/a><\/sup> We might be a stretch here. At least, compared to what I wanted.<\/p>\n 3<\/a><\/sup> We don’t run any <\/p>\n 4<\/a><\/sup> It also led to a small commenting side quest on the CogDogBlog<\/a>. I tend to check out Alan’s site when I’m contemplating something like this just to see if he’s already done something similar. 99% of the time he has. The other 1% tends to tell me it’s a bad idea.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":" So what I’m doing here is sending an email the day before an event someone registered for via a Gravity Forms process I set up. This is kind of an interesting pattern because it moves back and forth from the Gravity Forms API and uses a mix of Events Calendar functions, in addition to basic […]<\/p>\n Read More… from Sending Reminder Emails<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[733,354,317,351],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["10"],"word_count":["1198"],"URL_array":["a:10:{i:0;a:2:{i:0;s:62:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_cron\/\"\";i:1;s:52:\"developer.wordpress.org\/reference\/functions\/wp_cron\/\";}i:1;a:2:{i:0;s:49:\"\"https:\/\/www.php.net\/manual\/en\/function.date.php\"\";i:1;s:39:\"www.php.net\/manual\/en\/function.date.php\";}i:2;a:2:{i:0;s:69:\"\"https:\/\/theeventscalendar.com\/knowledgebase\/using-tribe_get_events\/\"\";i:1;s:59:\"theeventscalendar.com\/knowledgebase\/using-tribe_get_events\/\";}i:3;a:2:{i:0;s:77:\"\"https:\/\/docs.gravityforms.com\/searching-and-getting-entries-with-the-gfapi\/\"\";i:1;s:67:\"docs.gravityforms.com\/searching-and-getting-entries-with-the-gfapi\/\";}i:4;a:2:{i:0;s:22:\"\"https:\/\/localwp.com\/\"\";i:1;s:12:\"localwp.com\/\";}i:5;a:2:{i:0;s:47:\"\"https:\/\/github.com\/mailhog\/MailHog\/issues\/282\"\";i:1;s:37:\"github.com\/mailhog\/MailHog\/issues\/282\";}i:6;a:2:{i:0;s:70:\"\"https:\/\/cogdogblog.com\/2020\/01\/open-source-hair-loss\/comment-page-1\/\"\";i:1;s:60:\"cogdogblog.com\/2020\/01\/open-source-hair-loss\/comment-page-1\/\";}i:7;a:2:{i:0;s:44:\"\"https:\/\/wordpress.org\/plugins\/wp-crontrol\/\"\";i:1;s:34:\"wordpress.org\/plugins\/wp-crontrol\/\";}i:8;a:2:{i:0;s:49:\"\"https:\/\/github.com\/johnbillion?tab=repositories\"\";i:1;s:39:\"github.com\/johnbillion?tab=repositories\";}i:9;a:2:{i:0;s:30:\"\"https:\/\/actionscheduler.org\/\"\";i:1;s:20:\"actionscheduler.org\/\";}}"],"rest_api_enabler":{"URL_count":"10","word_count":"1198","URL_array":"a:10:{i:0;a:2:{i:0;s:62:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_cron\/\"\";i:1;s:52:\"developer.wordpress.org\/reference\/functions\/wp_cron\/\";}i:1;a:2:{i:0;s:49:\"\"https:\/\/www.php.net\/manual\/en\/function.date.php\"\";i:1;s:39:\"www.php.net\/manual\/en\/function.date.php\";}i:2;a:2:{i:0;s:69:\"\"https:\/\/theeventscalendar.com\/knowledgebase\/using-tribe_get_events\/\"\";i:1;s:59:\"theeventscalendar.com\/knowledgebase\/using-tribe_get_events\/\";}i:3;a:2:{i:0;s:77:\"\"https:\/\/docs.gravityforms.com\/searching-and-getting-entries-with-the-gfapi\/\"\";i:1;s:67:\"docs.gravityforms.com\/searching-and-getting-entries-with-the-gfapi\/\";}i:4;a:2:{i:0;s:22:\"\"https:\/\/localwp.com\/\"\";i:1;s:12:\"localwp.com\/\";}i:5;a:2:{i:0;s:47:\"\"https:\/\/github.com\/mailhog\/MailHog\/issues\/282\"\";i:1;s:37:\"github.com\/mailhog\/MailHog\/issues\/282\";}i:6;a:2:{i:0;s:70:\"\"https:\/\/cogdogblog.com\/2020\/01\/open-source-hair-loss\/comment-page-1\/\"\";i:1;s:60:\"cogdogblog.com\/2020\/01\/open-source-hair-loss\/comment-page-1\/\";}i:7;a:2:{i:0;s:44:\"\"https:\/\/wordpress.org\/plugins\/wp-crontrol\/\"\";i:1;s:34:\"wordpress.org\/plugins\/wp-crontrol\/\";}i:8;a:2:{i:0;s:49:\"\"https:\/\/github.com\/johnbillion?tab=repositories\"\";i:1;s:39:\"github.com\/johnbillion?tab=repositories\";}i:9;a:2:{i:0;s:30:\"\"https:\/\/actionscheduler.org\/\"\";i:1;s:20:\"actionscheduler.org\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9482"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9482"}],"version-history":[{"count":2,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9482\/revisions"}],"predecessor-version":[{"id":9484,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9482\/revisions\/9484"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9480,"date":"2024-03-14T13:42:51","date_gmt":"2024-03-14T18:42:51","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9480"},"modified":"2024-03-14T13:42:51","modified_gmt":"2024-03-14T18:42:51","slug":"list-all-my-wp-multisite-blogs-shortcode","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/list-all-my-wp-multisite-blogs-shortcode\/","title":{"rendered":"List all my WP multisite blogs shortcode"},"content":{"rendered":" Just a little function with a shortcode to list all your sites in a WP Multisite scenario. It gives you a link to the front end and the dashboard. Simple and easy to tweak.<\/p>\n This function uses three WP functions. You can check out the links for more details.<footnote>This is actually kind of a neat pattern to think about automating for the WP posts. I’ll have to think about how to do this. <\/footnote><\/p>\n Just a little function with a shortcode to list all your sites in a WP Multisite scenario. It gives you a link to the front end and the dashboard. Simple and easy to tweak. This function uses three WP functions. You can check out the links for more details.<footnote>This is actually kind of a neat […]<\/p>\n Read More… from List all my WP multisite blogs shortcode<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[66],"tags":[712],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["3"],"word_count":["211"],"URL_array":["a:3:{i:0;a:2:{i:0;s:72:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/is_user_logged_in\/\"\";i:1;s:62:\"developer.wordpress.org\/reference\/functions\/is_user_logged_in\/\";}i:1;a:2:{i:0;s:74:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/get_current_user_id\/\"\";i:1;s:64:\"developer.wordpress.org\/reference\/functions\/get_current_user_id\/\";}i:2;a:2:{i:0;s:72:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/get_blogs_of_user\/\"\";i:1;s:62:\"developer.wordpress.org\/reference\/functions\/get_blogs_of_user\/\";}}"],"rest_api_enabler":{"URL_count":"3","word_count":"211","URL_array":"a:3:{i:0;a:2:{i:0;s:72:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/is_user_logged_in\/\"\";i:1;s:62:\"developer.wordpress.org\/reference\/functions\/is_user_logged_in\/\";}i:1;a:2:{i:0;s:74:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/get_current_user_id\/\"\";i:1;s:64:\"developer.wordpress.org\/reference\/functions\/get_current_user_id\/\";}i:2;a:2:{i:0;s:72:\"\"https:\/\/developer.wordpress.org\/reference\/functions\/get_blogs_of_user\/\"\";i:1;s:62:\"developer.wordpress.org\/reference\/functions\/get_blogs_of_user\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9480"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9480"}],"version-history":[{"count":1,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9480\/revisions"}],"predecessor-version":[{"id":9481,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9480\/revisions\/9481"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9473,"date":"2024-03-11T09:56:45","date_gmt":"2024-03-11T14:56:45","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9473"},"modified":"2024-03-11T09:56:45","modified_gmt":"2024-03-11T14:56:45","slug":"categorizing-institutional-ai-use","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/categorizing-institutional-ai-use\/","title":{"rendered":"Categorizing institutional AI use"},"content":{"rendered":" I feel like we’re in a weird place with AI. I imagine most institutions are. We’ve had AI in various products for quite some time and haven’t really thought too much about it. If we’re going to think about AI across the institution, it’s important that we include the older stuff, the stuff that might not be an LLM but is still AI. We don’t necessarily have to treat it all the same way. We will need to say why we’re treating it differently.<\/p>\n I am currently thinking about this along three basic levels. I think the levels of choice are useful for talking through the impact of AI integrations and how to communicate to people about them.<\/p>\n It’s also important to realize that the vendor (or the organization) may make decisions that move products between these levels at any time. I suspect moves towards more choice will be rare.<\/p>\n There’s also something to think about regarding whether the person is<\/p>\n Likely, it’ll be some combination of the three.<\/p>\n There are some things in our system where AI is going to happen. People have no choice.<\/p>\n In our case, we have things like Site Improve’s analysis of our main website. Anything on there is analyzed with AI. Any scanning done on our printer\/scanners is going to have OCR applied.<footnote>There may be a way out of that. I don’t actually know . . . and that’s part of the point. <\/footnote><\/p>\n This type of integration needs to reach the highest bar of review and agreement. We’re requiring its use and the more widely-used the system is, the more important we get understanding and agreement that this is the right thing to do.<\/p>\n These are things that are turned on by default.\u00a0 They happen unless you know that you can<\/strong> opt out and how<\/strong> to do it.<\/p>\n One example for us is automatic transcription for videos in Panopto. You can turn that off at the folder level. The auto-completion\/smart compose<\/a> feature of Google Docs is another example. I didn’t know that you could turn that off until I started writing this. I didn’t really think about it. Things like chatbots will likely fall into this category if you can get to the same content through other means, but as systems optimize towards AI-first interactions it’s likely non-AI interaction options will degrade significantly over time.\u00a0 Why work on website navigation improvements if 90% of your audience uses the chat interaction?<\/p>\n These are AI integrations that require you to do something to activate. I’d consider anything that’s “off” by default to also fall into this group.<\/p>\n An example would be turning on transcriptions in Zoom.\u00a0 Another example is opting to use answer grouping in Gradescope or using UDOIT to analyze a Canvas site for accessibility.<\/p>\n These are AI integration we are actively preventing.<\/p>\n Like things we require, we need to make sure we know why were doing this and that we communicate it effectively. Turning things off tends to drive people to outside systems where we often have no influence and a myriad of other problems occur. It’s a tricky line to walk.<\/p>\n I am not trying to qualify these things (neither AI, nor the choices around its use) as good or bad. I’m trying to get a structure that lets us describe what is already happening. Then we cab\u00a0 analyze how it lines up with institutional beliefs and opinions. It’s important we do that with what’s already in place. That will give us a foundation for the onslaught of new AI-complications we’re going to be facing in the near future\/present.<\/p>\n It’s not going to be easy in many cases.<\/p>\n You end up with questions like . . . Is machine-generated captioning better than no captions? Is it better than nothing? How much would it cost to provide higher quality captions? If we correct transcriptions, does the corporation’s AI benefit from our labor? If so, is that ok? etc. etc.<\/p>\n","protected":false},"excerpt":{"rendered":" I feel like we’re in a weird place with AI. I imagine most institutions are. We’ve had AI in various products for quite some time and haven’t really thought too much about it. If we’re going to think about AI across the institution, it’s important that we include the older stuff, the stuff that might […]<\/p>\n Read More… from Categorizing institutional AI use<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[995,1008,1012],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["1"],"word_count":["700"],"URL_array":["a:1:{i:0;a:2:{i:0;s:48:\"\"https:\/\/support.google.com\/docs\/answer\/9643962\"\";i:1;s:38:\"support.google.com\/docs\/answer\/9643962\";}}"],"rest_api_enabler":{"URL_count":"1","word_count":"700","URL_array":"a:1:{i:0;a:2:{i:0;s:48:\"\"https:\/\/support.google.com\/docs\/answer\/9643962\"\";i:1;s:38:\"support.google.com\/docs\/answer\/9643962\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9473"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9473"}],"version-history":[{"count":1,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9473\/revisions"}],"predecessor-version":[{"id":9474,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9473\/revisions\/9474"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9472,"date":"2024-03-10T10:00:06","date_gmt":"2024-03-10T15:00:06","guid":{"rendered":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-03\/"},"modified":"2024-03-10T10:00:06","modified_gmt":"2024-03-10T15:00:06","slug":"weekly-web-harvest-for-2024-03-03","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-03-03\/","title":{"rendered":"Weekly Web Harvest for 2024-03-03"},"content":{"rendered":" Open source no-code business automation \u00b7 Zapier open source alternative \u00b7 Activepieces Explore – Fra MauroNice explorable historic world map ambient.gardenh\/t Grant Potter […]<\/p>\n Read More… from Weekly Web Harvest for 2024-03-03<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[601],"tags":[],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["3"],"word_count":["21"],"URL_array":["a:3:{i:0;a:2:{i:0;s:31:\"\"https:\/\/www.activepieces.com\/\"\";i:1;s:21:\"www.activepieces.com\/\";}i:1;a:2:{i:0;s:81:\"\"https:\/\/mostre.museogalileo.it\/framauro\/en\/interactive-exploration\/explore.html\"\";i:1;s:71:\"mostre.museogalileo.it\/framauro\/en\/interactive-exploration\/explore.html\";}i:2;a:2:{i:0;s:25:\"\"https:\/\/ambient.garden\/\"\";i:1;s:15:\"ambient.garden\/\";}}"],"rest_api_enabler":{"URL_count":"3","word_count":"21","URL_array":"a:3:{i:0;a:2:{i:0;s:31:\"\"https:\/\/www.activepieces.com\/\"\";i:1;s:21:\"www.activepieces.com\/\";}i:1;a:2:{i:0;s:81:\"\"https:\/\/mostre.museogalileo.it\/framauro\/en\/interactive-exploration\/explore.html\"\";i:1;s:71:\"mostre.museogalileo.it\/framauro\/en\/interactive-exploration\/explore.html\";}i:2;a:2:{i:0;s:25:\"\"https:\/\/ambient.garden\/\"\";i:1;s:15:\"ambient.garden\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9472"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9472"}],"version-history":[{"count":0,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9472\/revisions"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9472"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9470,"date":"2024-03-03T10:00:04","date_gmt":"2024-03-03T15:00:04","guid":{"rendered":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-02-25\/"},"modified":"2024-03-03T10:00:04","modified_gmt":"2024-03-03T15:00:04","slug":"weekly-web-harvest-for-2024-02-25","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/weekly-web-harvest-for-2024-02-25\/","title":{"rendered":"Weekly Web Harvest for 2024-02-25"},"content":{"rendered":" <\/span><\/li>\n Everywhere, at any hour of the day, people can be seen quite shamelessly poring over the checker-board diagrams, cudgelling their brains for a four-letter word meaning “molten rock” or a six-letter word meaning “idler,” or what not: in trains and trams, or omnibuses, in subways, in private offices and counting-rooms, in factories and homes, and even – although as yet rarely – with hymnals for camouflage, in church.<\/span><\/li>\n How the Memory of a Song Reunited Two Women Separated by the Trans-Atlantic Slave Trade | History | Smithsonian MagazineThe breakthrough came when Koroma recognized a word from the song as a Mende dialect from southern Sierra Leone. In 1990, the researchers traveled around the country\u2019s Pujehun District, playing the song for villagers in hopes […]<\/p>\n Read More… from Weekly Web Harvest for 2024-02-25<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[601],"tags":[],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["5"],"word_count":["313"],"URL_array":["a:5:{i:0;a:2:{i:0;s:139:\"\"https:\/\/www.smithsonianmag.com\/history\/how-the-memory-of-a-song-reunited-two-women-separated-by-the-trans-atlantic-slave-trade-180983864\/\"\";i:1;s:129:\"www.smithsonianmag.com\/history\/how-the-memory-of-a-song-reunited-two-women-separated-by-the-trans-atlantic-slave-trade-180983864\/\";}i:1;a:2:{i:0;s:59:\"\"https:\/\/twitter.com\/mjandersen\/status\/1752349174849282290\"\";i:1;s:49:\"twitter.com\/mjandersen\/status\/1752349174849282290\";}i:2;a:2:{i:0;s:94:\"\"https:\/\/www.theguardian.com\/crosswords\/crossword-blog\/2011\/dec\/15\/crosswords-meow-meow-1920s\"\";i:1;s:84:\"www.theguardian.com\/crosswords\/crossword-blog\/2011\/dec\/15\/crosswords-meow-meow-1920s\";}i:3;a:2:{i:0;s:74:\"\"https:\/\/plugintests.com\/plugins\/wporg\/limit-login-attempts-reloaded\/tips\"\";i:1;s:64:\"plugintests.com\/plugins\/wporg\/limit-login-attempts-reloaded\/tips\";}i:4;a:2:{i:0;s:40:\"\"https:\/\/1x.com\/magazine\/permalink\/7822\"\";i:1;s:30:\"1x.com\/magazine\/permalink\/7822\";}}"],"rest_api_enabler":{"URL_count":"5","word_count":"313","URL_array":"a:5:{i:0;a:2:{i:0;s:139:\"\"https:\/\/www.smithsonianmag.com\/history\/how-the-memory-of-a-song-reunited-two-women-separated-by-the-trans-atlantic-slave-trade-180983864\/\"\";i:1;s:129:\"www.smithsonianmag.com\/history\/how-the-memory-of-a-song-reunited-two-women-separated-by-the-trans-atlantic-slave-trade-180983864\/\";}i:1;a:2:{i:0;s:59:\"\"https:\/\/twitter.com\/mjandersen\/status\/1752349174849282290\"\";i:1;s:49:\"twitter.com\/mjandersen\/status\/1752349174849282290\";}i:2;a:2:{i:0;s:94:\"\"https:\/\/www.theguardian.com\/crosswords\/crossword-blog\/2011\/dec\/15\/crosswords-meow-meow-1920s\"\";i:1;s:84:\"www.theguardian.com\/crosswords\/crossword-blog\/2011\/dec\/15\/crosswords-meow-meow-1920s\";}i:3;a:2:{i:0;s:74:\"\"https:\/\/plugintests.com\/plugins\/wporg\/limit-login-attempts-reloaded\/tips\"\";i:1;s:64:\"plugintests.com\/plugins\/wporg\/limit-login-attempts-reloaded\/tips\";}i:4;a:2:{i:0;s:40:\"\"https:\/\/1x.com\/magazine\/permalink\/7822\"\";i:1;s:30:\"1x.com\/magazine\/permalink\/7822\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9470"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9470"}],"version-history":[{"count":0,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9470\/revisions"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9470"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9470"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9470"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9468,"date":"2024-03-03T09:34:41","date_gmt":"2024-03-03T14:34:41","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9468"},"modified":"2024-03-03T09:34:41","modified_gmt":"2024-03-03T14:34:41","slug":"roughing-out-some-ai-thoughts","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/roughing-out-some-ai-thoughts\/","title":{"rendered":"Roughing out some AI thoughts"},"content":{"rendered":" I’m starting to rough out some things we’ll need to try to get right about AI . . .<\/p>\n Obviously these are just notes and aren’t meant to be anything other than stuff I’m trying to shape into coherent thoughts. I do intend to get the AI initiatives by various edu institutions into something more coherent. If you know of some I should look at, please let me know.<\/p>\n There is no feasible way to avoid increased use of AI at Middlebury. Depending on your definition, there’s a fair amount that’s already here in various products.<\/p>\n Existing software is integrating AI rapidly. This will require ongoing evaluation and communication to the community. These changes will impact both instruction and organizational workflows. It will bring up concerns around privacy as well as what is allowed by who and in what scenarios.<\/p>\n Faculty, staff, and students will be pursuing new tools and discipline-specific possibilities (in addition to trying to detect and prevent them). This will impact everyday teaching and learning as well as research and learning objectives. This will increase the need for guidance, expertise, policy, and infrastructure to support new use cases and to deal with repercussions.<\/p>\n Given the pace of change, evaluation, documentation, and communication will need to be rapid and ongoing. Security and privacy evaluation will be a challenge. We will have to decide to what degree we wish to develop internal expertise and technological capacity and to what degree we wish to outsource it.<\/p>\n It will be helpful to have clearly articulated support statements for each level.<\/p>\n Given the Energy 2028 goals<\/a>, we will want to think through through energy usage and environmental impact.<\/p>\n There are big questions about intellectual property, ethics, and bias that will remain contentious for the foreseeable future.<\/p>\n Most, if not all, of our existing labs and employee laptops more than a year or two old will be poorly provisioned to run AI on the machine. That will increase the need to run AI as a service or drive renewal of personal and lab computers. It may be that the pace of change in AI ends up overtaking this issue with more efficient models that don\u2019t rely as much on GPUs or particular processors.<\/p>\n It\u2019s unclear how AI would work in our virtualized spaces or on the high performance computing cluster.<\/p>\n We will need to be aware of how AI is being integrated into the centrally-supported software that we already use.<\/p>\n That integration will need to be evaluated, documented, and communicated.<\/p>\n We will need a process for choosing whether to enable AI when it is optional and a mechanism for informing the community when AI becomes available (by choice or by fiat).<\/p>\n Microsoft, Google, Zoom, and Team Dynamics will be likely initial sources for consideration.<\/p>\n AI as a service<\/p>\n We have existing relationships with a number of AI SaaS vendors. It will be important to understand what access we have, to what functionality, and at what cost.<\/p>\n While AI is an inclusive term, it\u2019s important to realize that it\u2019s composed of many very specific functions. Large language models are one aspect, but there are entire services dedicated to specific types of AI that meet much more specific academic and organizational needs.<\/p>\n There will be challenges around account management and the complexity of usage-based and process-specific charge models.<\/p>\n https:\/\/cloud.google.com\/products\/ai<\/a><\/p>\n https:\/\/azure.microsoft.com\/en-us\/products\/ai-services<\/a><\/p>\n https:\/\/openai.com\/pricing<\/a><\/p>\n Assess current infrastructure. What kinds of processing do we have and how does it related to the needs for AI (GPU vs CPU)? Look at Google\u2019s MLOps pipeline<\/a> for possible guidance.<\/p>\n What, if anything, do we provide through Apporto? Are other ways we provide virtualized spaces for AI work?<\/p>\n Partner: Microsoft<\/p>\n Roadmap<\/a><\/p>\n Pricing<\/a><\/p>\n Three tiers.<\/p>\n Partner: OpenAI<\/p>\n \u201cmulti-cloud, model-agnostic strategy, leveraging the capabilities of major cloud providers. It allows us to adapt components as new technologies and innovations emerge while providing the flexibility to incorporate emerging providers.\u201d<\/p>\n VITRA process<\/a><\/p>\n AI tools<\/a><\/p>\n Support infrastructure<\/p>\n Contest<\/a> – AI innovation challenge<\/p>\n I’m starting to rough out some things we’ll need to try to get right about AI . . . Obviously these are just notes and aren’t meant to be anything other than stuff I’m trying to shape into coherent thoughts. I do intend to get the AI initiatives by various edu institutions into something more […]<\/p>\n Read More… from Roughing out some AI thoughts<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[995],"better_featured_image":null,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","URL_count":["19"],"word_count":["1073"],"URL_array":["a:19:{i:0;a:2:{i:0;s:39:\"\"https:\/\/www.middlebury.edu\/energy2028\"\";i:1;s:29:\"www.middlebury.edu\/energy2028\";}i:1;a:2:{i:0;s:38:\"\"https:\/\/cloud.google.com\/products\/ai\"\";i:1;s:28:\"cloud.google.com\/products\/ai\";}i:2;a:2:{i:0;s:56:\"\"https:\/\/azure.microsoft.com\/en-us\/products\/ai-services\"\";i:1;s:46:\"azure.microsoft.com\/en-us\/products\/ai-services\";}i:3;a:2:{i:0;s:28:\"\"https:\/\/openai.com\/pricing\"\";i:1;s:18:\"openai.com\/pricing\";}i:4;a:2:{i:0;s:110:\"\"https:\/\/cloud.google.com\/architecture\/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning\"\";i:1;s:100:\"cloud.google.com\/architecture\/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning\";}i:5;a:2:{i:0;s:36:\"\"https:\/\/its.umich.edu\/computing\/ai\"\";i:1;s:26:\"its.umich.edu\/computing\/ai\";}i:6;a:2:{i:0;s:46:\"\"https:\/\/its.umich.edu\/computing\/ai#AIRoadmap\"\";i:1;s:36:\"its.umich.edu\/computing\/ai#AIRoadmap\";}i:7;a:2:{i:0;s:44:\"\"https:\/\/its.umich.edu\/computing\/ai\/pricing\"\";i:1;s:34:\"its.umich.edu\/computing\/ai\/pricing\";}i:8;a:2:{i:0;s:41:\"\"https:\/\/ai.asu.edu\/technical-foundation\"\";i:1;s:31:\"ai.asu.edu\/technical-foundation\";}i:9;a:2:{i:0;s:66:\"\"https:\/\/getprotected.asu.edu\/services\/vendor-it-risk-assessments\"\";i:1;s:56:\"getprotected.asu.edu\/services\/vendor-it-risk-assessments\";}i:10;a:2:{i:0;s:40:\"\"https:\/\/ai.asu.edu\/generative-ai-tools\"\";i:1;s:30:\"ai.asu.edu\/generative-ai-tools\";}i:11;a:2:{i:0;s:50:\"\"https:\/\/teachonline.asu.edu\/asu-online-ai-tools\/\"\";i:1;s:40:\"teachonline.asu.edu\/asu-online-ai-tools\/\";}i:12;a:2:{i:0;s:60:\"\"https:\/\/teachonline.asu.edu\/assessment-question-generator\/\"\";i:1;s:50:\"teachonline.asu.edu\/assessment-question-generator\/\";}i:13;a:2:{i:0;s:61:\"\"https:\/\/www.zoom.com\/en\/ai-assistant\/?creative=672941391962\"\";i:1;s:51:\"www.zoom.com\/en\/ai-assistant\/?creative=672941391962\";}i:14;a:2:{i:0;s:27:\"\"https:\/\/ai.asu.edu\/openAI\"\";i:1;s:17:\"ai.asu.edu\/openAI\";}i:15;a:2:{i:0;s:23:\"\"https:\/\/streamlit.io\/\"\";i:1;s:13:\"streamlit.io\/\";}i:16;a:2:{i:0;s:27:\"\"https:\/\/ai.asu.edu\/openAI\"\";i:1;s:17:\"ai.asu.edu\/openAI\";}i:17;a:2:{i:0;s:66:\"\"https:\/\/new.nsf.gov\/news\/nsf-announces-7-new-national-artificial\"\";i:1;s:56:\"new.nsf.gov\/news\/nsf-announces-7-new-national-artificial\";}i:18;a:2:{i:0;s:24:\"\"https:\/\/bridge2ai.org\/\"\";i:1;s:14:\"bridge2ai.org\/\";}}"],"rest_api_enabler":{"URL_count":"19","word_count":"1073","URL_array":"a:19:{i:0;a:2:{i:0;s:39:\"\"https:\/\/www.middlebury.edu\/energy2028\"\";i:1;s:29:\"www.middlebury.edu\/energy2028\";}i:1;a:2:{i:0;s:38:\"\"https:\/\/cloud.google.com\/products\/ai\"\";i:1;s:28:\"cloud.google.com\/products\/ai\";}i:2;a:2:{i:0;s:56:\"\"https:\/\/azure.microsoft.com\/en-us\/products\/ai-services\"\";i:1;s:46:\"azure.microsoft.com\/en-us\/products\/ai-services\";}i:3;a:2:{i:0;s:28:\"\"https:\/\/openai.com\/pricing\"\";i:1;s:18:\"openai.com\/pricing\";}i:4;a:2:{i:0;s:110:\"\"https:\/\/cloud.google.com\/architecture\/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning\"\";i:1;s:100:\"cloud.google.com\/architecture\/mlops-continuous-delivery-and-automation-pipelines-in-machine-learning\";}i:5;a:2:{i:0;s:36:\"\"https:\/\/its.umich.edu\/computing\/ai\"\";i:1;s:26:\"its.umich.edu\/computing\/ai\";}i:6;a:2:{i:0;s:46:\"\"https:\/\/its.umich.edu\/computing\/ai#AIRoadmap\"\";i:1;s:36:\"its.umich.edu\/computing\/ai#AIRoadmap\";}i:7;a:2:{i:0;s:44:\"\"https:\/\/its.umich.edu\/computing\/ai\/pricing\"\";i:1;s:34:\"its.umich.edu\/computing\/ai\/pricing\";}i:8;a:2:{i:0;s:41:\"\"https:\/\/ai.asu.edu\/technical-foundation\"\";i:1;s:31:\"ai.asu.edu\/technical-foundation\";}i:9;a:2:{i:0;s:66:\"\"https:\/\/getprotected.asu.edu\/services\/vendor-it-risk-assessments\"\";i:1;s:56:\"getprotected.asu.edu\/services\/vendor-it-risk-assessments\";}i:10;a:2:{i:0;s:40:\"\"https:\/\/ai.asu.edu\/generative-ai-tools\"\";i:1;s:30:\"ai.asu.edu\/generative-ai-tools\";}i:11;a:2:{i:0;s:50:\"\"https:\/\/teachonline.asu.edu\/asu-online-ai-tools\/\"\";i:1;s:40:\"teachonline.asu.edu\/asu-online-ai-tools\/\";}i:12;a:2:{i:0;s:60:\"\"https:\/\/teachonline.asu.edu\/assessment-question-generator\/\"\";i:1;s:50:\"teachonline.asu.edu\/assessment-question-generator\/\";}i:13;a:2:{i:0;s:61:\"\"https:\/\/www.zoom.com\/en\/ai-assistant\/?creative=672941391962\"\";i:1;s:51:\"www.zoom.com\/en\/ai-assistant\/?creative=672941391962\";}i:14;a:2:{i:0;s:27:\"\"https:\/\/ai.asu.edu\/openAI\"\";i:1;s:17:\"ai.asu.edu\/openAI\";}i:15;a:2:{i:0;s:23:\"\"https:\/\/streamlit.io\/\"\";i:1;s:13:\"streamlit.io\/\";}i:16;a:2:{i:0;s:27:\"\"https:\/\/ai.asu.edu\/openAI\"\";i:1;s:17:\"ai.asu.edu\/openAI\";}i:17;a:2:{i:0;s:66:\"\"https:\/\/new.nsf.gov\/news\/nsf-announces-7-new-national-artificial\"\";i:1;s:56:\"new.nsf.gov\/news\/nsf-announces-7-new-national-artificial\";}i:18;a:2:{i:0;s:24:\"\"https:\/\/bridge2ai.org\/\"\";i:1;s:14:\"bridge2ai.org\/\";}}"},"_links":{"self":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9468"}],"collection":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/comments?post=9468"}],"version-history":[{"count":1,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9468\/revisions"}],"predecessor-version":[{"id":9469,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/posts\/9468\/revisions\/9469"}],"wp:attachment":[{"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/media?parent=9468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/categories?post=9468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bionicteaching.com\/wp-json\/wp\/v2\/tags?post=9468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":9465,"date":"2024-03-03T09:17:48","date_gmt":"2024-03-03T14:17:48","guid":{"rendered":"https:\/\/bionicteaching.com\/?p=9465"},"modified":"2024-03-03T09:17:48","modified_gmt":"2024-03-03T14:17:48","slug":"revisiting-minimal-wordpress","status":"publish","type":"post","link":"https:\/\/bionicteaching.com\/revisiting-minimal-wordpress\/","title":{"rendered":"Revisiting Minimal WordPress"},"content":{"rendered":" I’ve blogged a number of times over the years about minimizing the complexity that’s exposed in WordPress’s dashboard. I’ve done that in a couple different ways. The Gravity Forms-driven front end where you avoid WP’s dashboard entirely is one path. The other way was to just remove stuff that’s like irrelevant to different groups. I think I first did that way back in the ANTH101 days<\/a> with Mike Wesch and Ryan K. That’s circa 2017 if you’re counting. I have to think that either it keeps coming up because it’s a good idea or that I have limited ideas that I recycle consistently. It may be a bit of both. <\/p>\n\n
\r\n\/\/ Hook to manage column data on network sites listing\r\nadd_action( 'manage_sites_custom_column', 'rampages_sites_custom_column', 10, 2 );\r\n\r\n\/**\r\n* Show page post\/page count and file storage\r\n*\r\n* @param string\r\n* @param integer\r\n*\r\n* @return void\r\n*\/\r\nfunction rampages_sites_custom_column($column_name, $blog_id)\r\n{\r\n if ( $column_name == 'content' ) {\r\n switch_to_blog($blog_id);\r\n $full_media_path = wp_upload_dir()['path'];\/\/get upload directory path\r\n if($blog_id === 1){\r\n $media_folder_top = $full_media_path;\r\n } else {\r\n $media_folder_top = substr($full_media_path,0,strlen($full_media_path)-7);\r\n }\r\n \r\n $file_size = human_filesize(GetDirectorySize($media_folder_top),0);\r\n $pages = wp_count_posts('page','publish')->publish;\r\n $posts = wp_count_posts('post', 'publish')->publish;\r\n restore_current_blog();\r\n \r\n if ($posts < 1){\r\n $posts = 0;\r\n }\r\nif ($pages < 1){\r\n $pages = 0;\r\n }\r\n echo $posts . '\/' . $pages . '\/' . $file_size;\r\n }\r\n}\r\n\r\n\/\/make size human\r\n\/\/https:\/\/stackoverflow.com\/questions\/15188033\/human-readable-file-size\r\nfunction human_filesize($bytes, $decimals = 2) {\r\n $factor = floor((strlen($bytes) - 1) \/ 3);\r\n if ($factor > 0) $sz = 'KMGT';\r\n return sprintf("%.{$decimals}f", $bytes \/ pow(1024, $factor)) . @$sz[$factor - 1] . 'B';\r\n}\r\n\r\n\/\/get size\r\n\/\/https:\/\/stackoverflow.com\/a\/21409562\/3390935\r\nfunction GetDirectorySize($path){\r\n $bytestotal = 0;\r\n $path = realpath($path);\r\n if($path!==false && $path!='' && file_exists($path)){\r\n foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)) as $object){\r\n $bytestotal += $object->getSize();\r\n }\r\n }\r\n return $bytestotal;\r\n}\r\n<\/pre>\n
\n\n
h\/t D’Arcy<\/span><\/li>\n
A scalable, traceable job queue for background processing large queues of tasks in WordPress. Designed for distribution in WordPress plugins – no server access required.
\n<\/span><\/li>\n
The land of NIL is strange<\/span><\/li>\n
Pretty nice option although I pin it mainly because I like the concept. <\/span><\/li>\n
<\/span><\/li>\n
As Charles Stross and others have pointed out, the AI-paperclip maximizer is already here, in the form of the modern corporation. A corporation, Stross notes, is a \u201chive organism\u201d which \u201cpursues the three corporate objectives of growth, profitability, and pain avoidance,\u201d with \u201ca sociopathic lack of empathy.\u201d\n
Welcome!<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"Where are we in time?<\/h2>\n
\r\n\r\n $tomorrow = date("Y-m-d", time() + 86400);\r\n\r\n<\/pre>\n
Get the Events<\/h2>\n
\r\n\r\n \/\/get current date and add 86400 seconds\r\n\t$tomorrow = date("Y-m-d", time() + 86400);\r\n\t$start = $tomorrow . ' 00:01';\r\n\t$end = $tomorrow . ' 23:59';\r\n\r\n\t\/\/get Modern Tribe events that occur on current date +24 hrs from the events calendar\r\n\t$coming_events = tribe_get_events( [\r\n\t\t\t\t\t 'start_date' => $start,\r\n\t\t\t\t\t 'end_date' => $end,\r\n\t\t\t\t\t] );\r\n<\/pre>\n
\r\n$event_ids = [];\r\n\tif($coming_events){\t\t\r\n\t\tforeach ($coming_events as $key => $event) {\t\t\r\n\t\t\t\tarray_push($event_ids, $event->ID);\r\n\t\t}\r\n\t}\r\n<\/pre>\n
Get the registrants<\/h2>\n
\r\n\/\/if we have event ids, let's get our dear registrants\r\n\tif($event_ids){\r\n\t\tforeach ($event_ids as $key => $event_id) {\r\n\t\t\t\/\/get the reservations from Gravity forms where the event ID matches\r\n\t\t\t$search_criteria = array(\r\n\t\t\t\t\t 'status' => 'active',\r\n\t\t\t\t\t 'field_filters' => array(\r\n\t\t\t\t\t 'mode' => 'any',\r\n\t\t\t\t\t array(\r\n\t\t\t\t\t 'key' => '6',\r\n\t\t\t\t\t 'value' => $event_id\r\n\t\t\t\t\t )\r\n\t\t\t\t\t )\r\n\t\t\t\t\t);\r\n\t\t\t$event_name = get_the_title($event_id);\/\/get title from the event\r\n\t\t\t$event_date = tribe_get_start_date($event_id, TRUE, null, TRUE);\/\/get start date\/time from the event\r\n\t\t\t$location = dlinq_event_email_location($event_id);\/\/get the location if in person and\/or online\r\n\t\t\t\r\n\t\t\t$reservations = GFAPI::get_entries($gf_workshop_registration_id, $search_criteria);\r\n\t\t\tforeach ($reservations as $key => $reservation) {\r\n\t\t\t\t$to_email = $reservation[3];\r\n\t\t\t\t$delete_key = $reservation[11];\r\n\t\t\t\t$delete_url = get_permalink($event_id).'?delete='.$delete_key;\r\n\t\t\t\t$delete_block = "<p>Use this link to cancel your reservation <a href='{$delete_url}'>{$delete_url}<\/a><\/p>";\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\tdlinq_send_reminder_email($to_email, $event_name, $event_date, $location, $delete_block);\r\n\t\t\t}\r\n\t\t}\t\r\n<\/pre>\n
\r\nfunction dlinq_send_reminder_email($to_email, $event_name, $event_date, $location, $delete_block){\r\n\t$to = $to_email;\r\n\t$subject = "Reminder: You registered for {$event_name} on {$event_date}";\r\n\t$headers = array('Content-Type: text\/html; charset=UTF-8','From: DLINQ <dlinq@middlebury.edu>');\t\r\n\t$message = 'We look forward to seeing you! ' . $location . $delete_block;\r\n\twp_mail( $to, $subject, $message, $headers);\r\n}\r\n\r\nfunction dlinq_event_email_location($event_id){\r\n\t$location = '';\r\n\tif(get_field('zoom_link',$event_id)){\r\n\t\t$zoom_link = get_field('zoom_link',$event_id);\r\n\t\t$location = "<br><br><p>Online at:<\/p><br><a href='{$zoom_link}'>{$zoom_link}<\/a>";\r\n\t} if (tribe_get_full_address($event_id)) {\t\t\r\n\t\t$location .= "<br><br><p>In person at:<\/p><br>" . tribe_get_full_address($event_id);\r\n\t}\r\n\treturn $location;\r\n}\r\n<\/pre>\n
Testing Tips<\/h2>\n
\r\nadd_shortcode( 'test', 'dlinq_reminder_email' );\r\n<\/pre>\n
Cron timer<\/h2>\n
\r\n\/\/set the cron to run reminder emails function\r\nif ( ! wp_next_scheduled( 'dlinq_reminder_email' ) ) {\r\n wp_schedule_event( strtotime('08:00:00'), 'daily', 'dlinq_reminder_email' );\r\n}\r\n\r\nadd_action( 'dlinq_reminder_email', 'dlinq_reminder_email' );\r\n\r\n\r\n<\/pre>\n
\n\n
\r\n\r\n\r\nfunction wpls_list_all_the_sites(){\r\n if(is_user_logged_in()){\/\/are you logged in?\r\n $user_id = get_current_user_id();\/\/what's your id?\r\n $sites = get_blogs_of_user($user_id);\/\/what are your sites?\r\n $html = '';\r\n foreach ($sites as $key => $site) {\/\/for each site . . . do this\r\n \/\/ code...\r\n $title = $site->blogname;\r\n $url = $site->siteurl;\r\n $html .= "<li><a href='{$url}'>{$title}<\/a> - <a href='{$url}\/wp-admin\/'>dashboard<\/a><\/li>";\r\n }\r\n return "<ul id='site-list'>{$html}<\/ul>";\/\/spit it back\r\n }\r\n}\r\n\r\nadd_shortcode( 'list-sites', 'wpls_list_all_the_sites' );\/\/create the shortcode [list-sites]\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"
Levels of choice<\/h2>\n
\n
Required<\/h3>\n
On by default (but opt out-able)<\/h3>\n
Opt in<\/h3>\n
Turned off<\/h3>\n
Tough conversations<\/h2>\n
\n
\u00b7 Zapier open source alternative \u00b7 Activepieces<\/span><\/li>\n
Nice explorable historic world map<\/span><\/li>\n
h\/t Grant Potter<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"\n
The breakthrough came when Koroma recognized a word from the song as a Mende dialect from southern Sierra Leone. In 1990, the researchers traveled around the country\u2019s Pujehun District, playing the song for villagers in hopes of finding someone who recognized the words. Schmidt says she and her colleagues acknowledged that this was a \u201cremote possibility,\u201d but after many weeks, they found a small village, Senehun Ngola, and a woman named Baindu Jabati who astonished them by singing a nearly identical version of the song.\n
<\/span><\/li>\n
The papers had for a while been terrifying readers with tales of the mayhem wreaked by crosswords across the Atlantic. “CROSS-WORD PUZZLES. AN ENSLAVED AMERICA”, howls the Tamworth Herald in 1924. The crossword, the piece explains, “has grown from the pastime of a few ingenious idlers into a national institution: a menace because it is making devastating inroads on the working hours of every rank of society.”\n
This could be handy for people.<\/span><\/li>\n
<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"Reality<\/h1>\n
Big questions<\/h1>\n
Now<\/h1>\n
Existing Hardware<\/h2>\n
Existing software<\/h2>\n
Primary vendors (existing)<\/h2>\n
Google<\/h3>\n
Microsoft<\/h3>\n
Likely new vendors<\/h2>\n
OpenAI<\/h3>\n
Computing cycles\/High performance computing clusterInternal hardware<\/h1>\n
Virtualization<\/h2>\n
Notes<\/h1>\n
Michigan AI services<\/a><\/h2>\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
ASU AI Services<\/a><\/h2>\n
\n
\n
\n
\n
\n
Groups, grants, etc.<\/h2>\n
\n
\n
\n
\n
\n
\n
\n
\n