Jump to content
EduGeek EdSec 2026 is Go! 27th Oct in Derby! Join us for a day of EdTech security focused talks, networking, and an evening social ×

dhicks

Members
  • Posts

    8,085
  • Joined

  • Last visited

Everything posted by dhicks

  1. The Python code is, hopefully, fairly generic - a little clunky / step-by-step in the way it does things, but hopefully that makes it easier to read through if you don't generally use Python. This is the kind of thing an AI coding assistant can be very good at helping with - you can probably just copy-and-paste the above into any chatbot asistant and ask it to re-write in the language of your choice. Is "Socs" a section / module in iSAMS? You could, potentially, write medical information back to iSAMS if that is coming from a separate system somewhere. If you're writing pupil records via the iSAMS REST API, be aware that the API writes blank values - if you define a record, write the value you want to a particular field but leave the rest of the fields blank, the API will happily overwrite those blank values to the database. You need to do a GET request first, populate the record with any existing values, make any additions / changes, then do a POST to write back to iSAMS. If the data the staff require is static (I'm guessing a list-of-medical-conditions per child per club / society), I find generating a viewable / printable PDF works quite nicely - you can have a script go through the data, match up pupils with any medical conditions and produce a formatted PDF you can then upload to OneDrive / Googel Drive / etc. Again, the sort of thing (with suitible safeguards for data handling) an AI assistant can pretty much write for you in a few minutes now.
  2. I have secrets (REST API keys, etc, that you get from the iSAMS Control Panel) in a simple JSON file, loadable by a script: # Load the configuration file. config = json.loads(dataLib.readFile("config/config.json")) for requiredConfigParameter in requiredConfigParameters: if not requiredConfigParameter in config.keys(): print("Error - required value " + requiredConfigParameter + " not set in config.json.") sys.exit(1) Something like: { "iSAMSAPIDomain":"exampleschool.isams.cloud", "iSAMSRESTAPIID":"12345678-1234-1234-1234-123456789012", "iSAMSRESTAPISecret":"12345678-1234-1234-1234-123456789012", } Then a couple of functions to call the REST API: # Retrive the cached iSAMS REST API Access Token, or request a new one if needed. def authenticateWithiSAMSRESTAPI(): if os.path.exists("accessToken.txt"): access_token = dataLib.readFile("accessToken.txt").strip() else: print("Authenticating with iSAMSREST API...", flush=True) requestURL = "https://" + config["iSAMSAPIDomain"] + "/auth/connect/token" response = requests.post(requestURL, data={"client_id":config["iSAMSRESTAPIID"],"client_secret":config["iSAMSRESTAPISecret"],"grant_type":"client_credentials","scope":"restapi"}) if not response.status_code == 200: print("Error athenticating with the iSAMS API:") print("URL: " + requestURL) print("Error Code: " + str(response.status_code)) print("Data: " + str(response.content)) sys.exit(1) access_token = json.loads(response.content.decode("utf8"))["access_token"] dataLib.writeFile("accessToken.txt", access_token) return access_token iSAMSAccessToken = authenticateWithiSAMSRESTAPI() # A handy function to do a call to the iSAMS REST API. Uses the global "iSAMSAccessToken" value for authentication - if that access token fails (default expiration is after 1 hour), # it gets a fresh access token and tries again. Only does 2 tries to avoid getting stuck in a loop. def iSAMSRESTAPICall(theMethod, theEndpoint, theData): global iSAMSAccessToken tries = 0 while tries < 2: tries = tries + 1 print("Doing " + theMethod + " to " + theEndpoint + " with data:", flush=True) print(str(theData).encode("utf-8"), flush=True) requestURL = "https://" + config["iSAMSAPIDomain"] + theEndpoint requestHeaders = {"accept":"application/json","authorization":"Bearer " + iSAMSAccessToken, "content-type":"application/json"} if theMethod == "get": response = requests.get(requestURL, data=json.dumps(theData), headers=requestHeaders) elif theMethod == "put": response = requests.put(requestURL, data=json.dumps(theData), headers=requestHeaders) elif theMethod == "patch": response = requests.patch(requestURL, data=json.dumps(theData), headers=requestHeaders) else: print("iSAMSRESTAPICall: Unknown request method: " + theMethod) if response.status_code == 200: return response elif response.status_code == 401 and tries < 2: print("iSAMSRESTAPICall: iSAMS authentication access token expired - retrying.") os.remove("accessToken.txt") iSAMSAccessToken = authenticateWithiSAMSRESTAPI() else: return response Then you can do calls to the REST API: getResponse = iSAMSRESTAPICall("get", "/Main/api/students/" + SchoolId, {}) if getResponse.status_code == 200: pupilData = json.loads(getResponse.text)
  3. This is the kind of thing where AI assistance can work really well, both in explaining how-it-works to you and, if you have a suitible coding agent, writing the code for you. If I remember correctly, iSAMS uses an OpenAPI/Swagger REST API interface - you might have seen other services offer the same thing, where you get a handy documentation and live try-it-out box all in one. You are basically doing HTTP(S) calls to a given endpoint, with defined parameters - the Swagger UI willl let you try out values and show you the URL strings (and even examples in Javascript / Python / etc) as you type. You authenticate via OAuth - I can't remember setting up a REST API with iSAMS, I suspect it was a while ago and I probably had to do a log-in-with-Google step in the browser the first time.
  4. There's a couple of "photos for work" apps that allow you, as an admin, to define where photos taken get synced to. Instead of the user taking a photo and then manually sharing to a location (e.g. somewhere on Googel Drive, for which they need to be logged in with their Google account, etc), the app simply takes the photo and uploads it to a defined cloud / network share. This saves a bunch of messing around, you could have a school-owned mobile device with a big sticker on the back ("Photos Phone 1") with the phoos app set as a kiosk (so it only does photos), any photo taken gets uploaded to a cloud-based folder that staff (maybe pupils) can access.
  5. VeryPC have some rather snazzy laptop stands with integrated USB-C connected docking ports which might be worth looking at.
  6. If you are meeting organistational security standards, you don't generally allow anyone-with-the-link sharing of files / folders to Google Drive / OneDrive any more. We still allow sharing between specific, named users, so a user on our Google Workspace could share a spreadsheet with a named user at the NHS. I could see that becoming a bit tricky to manage at the NHS side as your would have to support direct sharing from all vendors, and I suspect there will be a user limit to how many shares one named user could have, at which point you're probably looking at creating a separate user per school to receive shares. Probably do-able, but I suspect an API endpoint that accepts submissions of data is going to be simpler (and cheaper) to manage at the NHS side.
  7. A simple, well-defined, stable API for schools to be able to submit data to. It could probably be as simple as a single endpoint that accepts a CSV file. Schools could write their own tools to compile and submit data or, more likely, the vendors of common data-processing tools (Salamander, Locker, etc) could support it. You could, of course, also provide a simple submition form for people to upload the CSV file manually if they wanted. As others have pointed out, integrating with Wonde (or Clever, etc) would be ideal for many schools, as it would just be another service to approve on their Wonde dashboard and then that would be done. I understand that, while free for schools, Wonde charges per-customer for data access, so this might take some negotiation / budget allocation to sort - it would probably be the simplest option for a lot of schools, but I can understand there might be difficulties sorting this out at the NHS end if it involves having to pay a third-party vendor.
  8. Not sure if this is a hardware or software question. If it's a simple question of what hardware do we provide, then in our case each group of pupils could use a Chromebook to play music from whatever source was appropriate. Software-wise, you could simply put a bunch of tracks in a shared folder (Google Drive / Classroom, OneDrive, etc) and have the pupils play them from there. I find that a rather clunky system for sound effects and so on if you want things to play exactly on cue, so I have a script that generates a one-page sound effects playback webpage, giving you a handy "play" button for each audio item. Licensing is, of course, a separate issue - ripping tracks from Youtube and storing them in a Google Drive folder and distributing to a class probably doesn't meet whatever licensing requirements you have in place. If you need general background music to fit certain scenes / moods / etc you could probably get an AI system to generate a selection for you that you then store. You could, of course, give each group of pupils a microphone and a looper / vocoder and have them beatbox their own background accompniment.
  9. I'm finding the same. I'm not sure quite how repeatable a pure AI assistant is, the approach I've gone for is to use the AI coding agent to write a script that does what you want, then it's repeatable for subsequent actions. Also cheaper as it doesn't use AI tokens each time, just the first time round. It's interesting watching the agent scan the filesystem and figure stuff out - it does stuff pretty much how I would, just way, way quicker.
  10. That would seem to be what the new Mac Minis are aimed at - local AI processing should be very do-able with a fast processor and 64GB of unified RAM. I did get a very rough price from their website of around £3,000, which might be pricey for an individual workstation but not bad for a central on-site device usable by multiple users. Mac Minis can also, seemingly, be clustered via their Thunderbolt ports, so around £10,000 might get you a 4-node, 256GB AI processing cluster. Not something I know much about or have any current experience in setting up, but I did notice specialised AI servers being sold for £40,000 a few months ago.
  11. Hmm - we have Summer 2024-era 8GB-of-RAM iMacs in our ICT suite, I wonder if it's worth trying to run a local model of some sort on those?
  12. If it's any help, I have a 2011-era iMac running ChromeOS, which of course has a Linux core. It does have problems with the wireless hardware, having no supported driver available for the wireless used in that device, I wonder if your disk problem might be similar - it might manage to get to the initial boot stage, but need some sort of "driver" to get any further. It might, possibly, be instructive to try installing ChromeOS Flex on it and (if that boots) see if that can give you any hints as to how hardware might work.
  13. So, a couple of days and around £20 in AI tokens has produced this: https://www.sansay.co.uk/magooify/demo/ A somewhat specialised application for a specific image editing workflow - useful (hopefully) for the person wanting to use it, but rather niche otherwise. That would seem to be a strength of AI coding tools - I can now make tools for a "market" of one / a few people, and it's affordable and do-able in a reasonable timeframe. Using Go as the implementation language seems to have worked well and has produced an application capable of running on most hardware and with minimal resources - the live version is running on a VM with 2GB of RAM and 80GB of disk space, and that's for the whole system including authenticating proxy server (Pangolin), code to mount cloud file systems and the OpenCode tool for development.
  14. I'm starting to lean slightly towards the opposite view - the education sector (probably similar to other specialised sectors) has some poor software options, some of which it should be quite easy to re-implement quite rapidly with a coding agent. That's still probably a job for a small team rather than individuals in schools, just to keep continuity of development and keep projects / products maintained. A separate company, maybe, or for the larger company / school authority a team of in-house developers.
  15. Good point. And, as with spreadsheets, it's great that end users have the tools to handle their data how they want, but it would be good to have some kind of (auditable) controls on access, correctness, etc. Also, I tend to find the issue with spreadsheets is that they're a bit too easy for people to create a new one, so you wind up with data duplicated in multiple places.
  16. We do seem to be heading quite nicely to a situation where the people who understand the business process part of things (secretaries, PAs, etc) now have a suitable tool (AI coding agents) to allow them to create solutions that fit their problems, we (the IT support end of things) need to figure out how to support and manage that process and, as you point out, try and maintain security, usability, maintainability, etc. Also, to keep a careful eye on the AI credit spend. Some of the cheaper models now available are a couple of orders of magnitude cheaper than the top-performance ones, and for the kind of things I'm guessing our staff (and pupils!) will be doing I suspect the cheaper models might be the better option. Has anyone tried their own on-site AI server yet? I keep seeing various projects to cram versions of the latest models onto the kinds of machines we might be able to afford to run locally, has anyone tried using one of these with a coding agent yet?
  17. We don't use Sharepoint, so this might not be directly relevant to your setup, but I use an authenticating reverse proxy (Pangolin, also Cloudflare Tunnel) that passes the authenticated username through to the application as a simple HTTP header, saving the developer from having to (re)implement OAuth. The Sharepoint setup you describe sounds rather like it might be Microsoft's implementation of a similar process, it does sound reasonable enough. A trick / tip for agentic code development would seem to be to have a clearly-specified AGENTS.md file that gets fed to the model you are using, and to pick a model with what I think people are now calling good "prompt adherence". I've recently tried out OpenCode's "Big Pickle" model (which is, I think, GLM-5.2) which seems to work very well in that aspect.
  18. So, using an AI coding agents, I've managed to create in one day a (small, single-page) app I've been wanting to get around to for a while (user takes photo / uploads image, some processing is done, file gets written to cloud drive). I'm not sure how much of that speed of development is down to my existing knowledge / expertise - I've constrained the agent to only working in a way I can understand (a simple, single-file Go project, a single-page, quite basic web interface using Bootstrap). I am able to describe quite precisely what I want done, and if there's an issue I know how to figure out where the issue is. I've also created the environment the app runs in, which already takes care of some of the functionality (e.g. cloud filesystem mounted as a local file system). It would be interesting to see how, say, a year 10 or so pupil would approach the same problem and what additional tools / capabilities they might need. I'm currently using a couple of terminal windows and a separate browser to test the app, I suspect that might be a bit much for the average pupil (or member of staff) and something nicely all-in-one that runs in a browser would be best.
  19. For the moment, I'm using OpenCode with their "Zen" pay-as-you-go LLM service - still currently on the default free Big Pickle model, I've not had to spend any money there yet. I've started with making a basic image-processing app, for which I've also wound up paying for OpenRouter so I can use their (also pay-as-you-go) API to pass images to for processing. This is all currently on my own infrastructure and accounts (and I am quite impressed you can fit all this into a basic 2GB RAM and 40GB disk VM). Issues that would need addressing for this sort of thing to be usable by staff / pupils: - Some kind of per-user token budget, pretty much exactly like we currently give staff a printer budget. - Some kind of keyword / image filtering for submitted prompts and resources, filtered in the same way we would for search queries and so on. - Clarity on what happens to data sent to an AI service - a school (like any corporate) would need a data-stays-private, doesn't-get-used-for-training guarantee. To me, the above rather implies some kind of local AI API proxy server - something that allows administrators to tightly control budgets and handle filtering. Possibly using Zen / OpenRouter as a backend, but with a further curated set of models that meet school's privacy requirements. Does such an application / service already exist?
  20. Gah! This actually turned out to be a bug in the web server (a small custom Go web server from a separate project of mine). Suitably impressed.
  21. I'm looking at how to handle AI tools and billing for our staff and pupils. We already pay for Google's Gemini, which gives our users access to the web-based chat interface and embedded into GMail and so on, but doesn't seem to include the API to use with coding tools - as you point out, we have to go and set up separate billing in a GCP Project. I can see the costs there starting to get out of hand quite easily if we simply let staff and pupils set coding harnesses and AI assistants running. Is anyone hosting a local AI engine? Looking at the available options, a Mac Mini with 48GB of RAM is around £2,500, which as a central server handling AI processing for a number of users might be a cheaper option that paying for API usage. I'm now trying out OpenCode on my test development environment. It turns out to be more resource-heavy than the Gemini CLI client, needing a bit of poking before it would work inside the 2GB-of-RAM container I've assigned it. It's currently using the (currently free!) Big Pickle engine, which has managed to create a whole Git repository containing a Go application and then got itself in a loop trying to add a simple relative web page link. I might try the Pi coding agent, as seemingly that is less resource-heavy.
  22. Ah, yes, I see what you mean - it looks like I can pick-and-choose models and they have a pay-as-you-go option for what looks like a good selection of the main models, rather than having to sign up for a subscription.
  23. You seem to be able to give it a persistent list of commands it can run (mkdir, rm, git, go, etc), and define folders in which it is supposed to work. I'm not sure how well that holds - don't know if it can do a "rm ../../x.y.z" if it has general "rm" permissions. Hmm - I've also just ran out of credit on my free introductory account, credits refresh in a week. This is after a couple of hours and maybe half a dozen prompts - admittedly asking it to create an entire Git repository, but this does look like a way to go through credit at a fair clip. This is with my own account, not school's - I'm not sure how credit for Antigravity gets applied to our school accounts.
  24. I've set up my own development and hosting environment hosted on a basic OVH VM and am using Pangolin to handle user authentication and proxy-ing. My aim is to have an environment self-hostable by a school so that all data can be kept within the organisation, but with the ability to use cloud-based filesystems and AI engines as wanted. I want to try out Antigravity to see how it works and how our staff and pupils might work with it. At the moment it's asking me for permissions for each command it wants to run, which I think user would find a bit tedious / confusing, so I'm maybe thinking some kind of default config file for a user's development area.
  25. Ah - just having a look at this today, I have a couple of existing projects I'd like to point an AI tool at and see what issues / improvements it can find. I'm aiming to have an "app" that is a self-contained compiled Go executable, complete with functionality, a web-based front-end and API documentation embedded in that executable. Should be self-hostable on any OS / architecture, with the option to be run on a server and handle user authentication via an authenticating reverse proxy (Pangolin, Cloudflare). So far, I've got as far as getting the client installed and authenticated inside my development environment, I'll see how I get on from there.
×
×
  • Create New...