Here’s my own to-do list for the Moose. And the other to-do list.
For Steve: Nagging myself to work on this:
- Weather API bigger paid plan, or switch to Accuweather first.
- BTCpay.com for self-server. BitPay.com use their server 1% fee. https://raison.ai/ in estonia. https://samouraiwallet.com/ for privacy. https://bisq.network/ , https://xcoins.io/ is maybe fast, maybe an identity-check delay. Buying from https://www.coinmama.com/ looks well-explained. But if I want to sell bitcoin into only Euros in a European bank, I can’t. Good teaching article: https://www.buybitcoinworldwide.com/credit-debit-card/ And see https://www.kraken.com/en-us/ it might have a Halifax bank to transfer into.
- Ipstack.com API bigger paid plan. Is info actually being gathered?
- Delete the plugin WebPageRenderer, which is only for example code.
- Use Unicode RegEx for word-break, using Freelancer.
- Add into Creating Plugins, a description of NOT-USING data-setting=, and instead adding an on change handler, saving to resources and doing Plugin.OnChanged().
- “Say Name Plugin”, “iLoveYou”, just need better names, carefully.
- Require() command, used for loading Library stuff, returns true or false. Someone had that failing, I should check for false and do error handling in all plugins.
- A “Next Tip” button in Home.html ( and reset the setTimeout timer.)
- Ivan wants a JSON with translations in it.
- UserInfo has Country. If it’s not in English, the Holidays.js lookup of country code will fail to match. I need at least 3 more languages of lookups. Weather also has a crappy list of countries.
- Ivan has “CPU Performance score”, which could be given a JS function, which could be used by every .html view, to disable background gradient colors on older PCs.
- Weather.js needs translations.
- In Timing section, the Shared “Minutes Channel” should have a dropdown arrow.
- Calendar plugin, when moving some entry up or down, scrolling should stay near that entry.
- Home.js calls Cloud.DisableCloudSettings(); Ask Ivan what is the true status of that feature.
- One-time Timers plugin. Add them, they run and auto-delete, but saved for easy re-creation, like a dropdown of last 10 used.
- A few C++ error messages, translated into 4 languages.
- A plugin to Show UI. A part of “Business Logic” ( A timer triggers, it may need show a custom HTML question for some input. ) It may need a carousel if multiple of these happen ( they will share one plugin View.)
- Radiobuttons to opt-out of receiving emails, in the UserInfo plugin.
- Copy halls.md to new domain.
- A MooseChat.com using Gab Social instance, https://code.gab.com/gab/social/gab-social/blob/develop/docs/server.md
- A Bitcoin capability, for example, bisq.
Must do before Beta test:
Ideas for new plugins:
- A Code Editor. Perhaps using the old ES5 version of CodeMirror on https://github.com/codemirror/CodeMirror/tree/v3 , or perhaps using some cloud-based webpage with an API to receive and send back.
- Fitbit API at https://dev.fitbit.com/build/reference/web-api/ https://dev.fitbit.com/build/reference/web-api/sleep/ Moose could say “You forgot to weight yourself today”.
- Gab.com has an API. https://developers.gab.com/
- Voat also has an API.
- Sunrise/Sunset plugin (https://www.timeanddate.com/services/api/astronomy-api.html)
- Browser. no talking, just a URL entry area, back button, like Chrome.
- High Tide / Low Tide plugin. (https://www.worldtides.info/apidocs)
- Ping plugin. Check if a website is still online.
- Medical terminology pluginhttps://www.health.harvard.edu/a-through-c
- Learn a language. Switch back and forth between voices automatically.
- Space Station plugin,using https://spotthestation.nasa.gov/sightings/view.cfm?country=Canada®ion=Alberta&city=Edmonton#.Wr_muojwYcE
maybe fetching daily summary reports.https://blogs.nasa.gov/stationreport/2018/03/28/iss-daily-summary-report-3282018/ ( but they are too verbose ) - listing applications and games and video players, that will be looked-for, and if they are foreground, then the Moose won’t speak.
- Google Jobs API’s for new job openings.
- Bloomberg financial information. https://intrinio.com/Do my customers actually want this?
- Gmail push notifications, to say “you have mail”.
- Say plugin to replace the green one.
- Would allow auto-translate testing.
- Presskit plugin.
- https://www.bizmavens.com/media-kit-examples/
- https://www.pinterest.com/twelveskip/media-kit-design-examples/
- Social Defense. When open, it shows URLs that I’ve discovered, where users can click the link, go to Reddit or Twitter or whereever, and post a positive rebuttal to negative comments.
- Reviews. Let users input their reviews, have them appear on a website.
- Public Service Announcements. Let people know about useful websites, like Finding lost children.
- Bible. study the app: Bible YouVersion, it has topics to select from. it has community sharing features. Highly popular.
- Proxies. for WebRequests. Maybe on Ivans servers
- For Austism, click picture to speak a word.
- For little kids: Cow goes mooo. Pig goes oink.
- if you itch ( on bodypart) it means (random funny thing.)
- Magic 8-ball concept. Ask question, get random advice.
- Spin wheels like “The Price is Right” to pick silly words to combine into Moose persuasion sentences.
- Spotify API. Play music at certain times. Choose genres.
After Beta starts
- Send Tweet and Send IFTTT plugins need a better warning about lacking a secretKey. The default new user state, show show a message saying to go get a secretKey.
- Add “go negative” to the endings.
- Spread plugin, add more benefits mentioning features of the Moose.
- Timers plugin, toggle button to Nag / No Nag
Unfinished plugins
- Points (waiting for points coding)
Do later
- Go to Bed time, affected by Lateness, influenced by Quiet Hours, is confusing. I should look at FitBit and make it easy to set times.
- Near the Mug, a Share button, that can send an email containing that Last Said.
- Move Sleep out of Weight loss and into the Go to Bed Plugin
- Add more Countries to the Holidays plugin.
Other Notes
- Create a way, for one user to “gift” the Moose to another user, and have the new user be able to download the Moose with the new users name already set.
- Maybe the download link has ?= query parameters for specifying names, which can get written into a special .js file that gets executed by UserInfo.js during New User Detected.
- Last said: but Quiet Hours is On. Use a TweenMax to make it glow red then back to black, when new text arrives for that area.
- Use Web.GetHTMLImageHash() in the Webpages.js plugin, for image area comparisons.
- Force the Spread plugin to remain on, (turn on at Shutdown) for at least a few days.
- Chat.js to use Dialogflow v2 api, waiting for Ivan
- Window frame materials are at:
- Dropbox\UI\Frame\Frame.ai and we have “skinner” app here: \Dropbox\Moose 115.0\DLLs\External\Skinner\Moosey.Controls.Media.Test.exe
- skinner can only edit colors.
- To edit objects, the Adobe Illustrator objects have to be exported to XAML, requring every AI path to be aligned to a frame coordinate system, then Ivan has to do further edits to put them into his COMPILED XAML and C# code, which uses ‘custom WPF controls’ code to provide the drag and click responsiveness. ie, I can’t do it alone.
- Dropbox\UI\Frame\Generic.xaml is the file holding the XAML. see line 231:
- Ivan wants a solid frame with no transparent spots. Learn about what can be done.
- Dropbox\UI\Frame\Frame.ai is the Adobe Illustrator file.
- When Timing switches back to Random, from Shared or Precise, if it’s not Recurring, have an animation to point at it, to help users notice.Learn to create SVG line-drawing of Moose, learn to GreenSock animate them.
- Learn how to edit and alter the League of Le gends window frame.
- Calendar plugin to use Timers.setTimer() and periodically, like very 5 seconds, calls a C# function, which returns the time of the last mouse-move or keypress. This has advantage of being able to be turned off, or easily adjusted, by the user. Give Calendar reminders an optional checkbox for whether to speak it immediately on time, or save it until there is recent user activity.
- Terms of Service / License agreement, issues.
- Ivan wants to delay working on this, thinking we’ll learn something from making Paid Plugins.
- Ivan suggested that paid features and internet content plugins, should only download into the product after License is agreed.
- Maybe C# has a list of these plugins, and over-rides their settings, to force them <isEnabled>false</isEnabled>
- Ivan suggested that C# shows the Licence agreement, before plugins and home start running.
- Ivan, can you use a Green C# window dialog, and re-create the Terms.html approximately?
- Related to Terms of Service, I think we may need a C# function that detects when the Moose seems to be running on a new machine.
- Could be same user just got a new PC, threw out the old one.
- Could be a new user at a new location.
- In both these cases, it’s safest for me, to have them re-agree to the Terms of Service.
- Home.html will use this, in it’s startup <script>, to hide menus and show button for Terms of Service.
- Maybe it’s same user, at same IP address, who have already agreed to Terms of Service, then they get a new PC.
- Do we store a duplicate IP address in the list? Do we store a duplicate user name in the list? Do we store a MAC address too? Does our cloud function check for duplicates, or just store them anyway?
- Lateness (Habits) plugin future ideas
- Do I need 2 shutdown times? one for leaving the office, another for bedtime?
- A timing option available to all plugins, middle of the day, and before shutdown.
- Streams like evening.
- If just 1 plugin on the stream, it fires once.
- If 2 plugins on the stream, it fires one, then later the other.
- Will be able to handle this when Ivan codes Alternate12(), Alternate123().
Ideas that aren’t work items.
- The topic of Distributed Apps, dApps, peer-to-peer.
- urbit. A different peer-to-peer network.
- Use <include> instead of automatic loading of /scripts/This is a big, scary job. To be done gradually. Maybe I should just leave it all alone. The includes js are local, there are getting to be too many plugins to edit them individually anyway.
- Grey-out languages in Translate plugin, which do not have installed voices in the same language. (lowish priority)
- An APIs plugin.Toggle for PUT or POST
Each slot has an On/Off.
Each slot has toggles for TimingOnOff, EventsOnOff, both can be On.Ie, can be triggered by the Timing, or by an Event. Usually not both On.
Choices for setRequestHeader Content-Type, Accept.
A textedit input containing JSON body to send with the PUT/POST
Two types of eval() code depending on how triggered.Triggered by Timing
Triggered by Event
When triggered by Timing, a textedit input containing Javascript that’s eval() to modify the JSON before sending.It could put default values into the JSON using replace()
When triggered by Event, a textedit input containing Javascript that’s eval() to modify the JSON before sending.It could put function parameters into the JSON using replace()
3 or 9 slots, each has a predefined event name like: Events.OnEvent(‘APIs Slot 1’), 2, 3, etc
Each Events.OnEvent function can accept 3 parameters.
Each slot has a textEdit input for javascript code, called by eval() in onreadystatechange.
the onreadystatechange code can trigger an events to fire another API in slot 1-9.This lets the results of one API get sent to the next API.
Or, it could call Moose.Say() (or TranslateAndSay() ).
It can use IF..ELSE.. logic to decide which slot to call next.
When a onreadystatechenge does eval() that has Events.TriggerEvent(‘APIs Slot 2’,result.apiKey,result.apiSecret,result.textSee 3 parameters. If they need more, they have to .join before sending, and .split when receiving the parameter. Luckily, each slot has 2 eval() places, at triggered step, and at result step.
I think this enables multi-step usage, and IF..ELSE logic, using IFTTT, but not paying for multi-step.
I need to think of one useful example, otherwise coding this plugin isn’t worth the effort.
Must have examples, otherwise nobody will use it. Examples could be:A section for Oauth as first step toward using other APIs from Microsoft, Google, etc.
A section for Google APIs as a second step, passing an access_token obtained in the first step.
Maybe examples fill in 2 slots at a time: 1 for Oauth to get a token, 2 to send the token to the actual API
The plugin.js would have a OnWebHook = function(data) {} to receive things coming back from IFTTT via webhooks, which had specified {“target”:”APIs”}