jwinters
Members-
Posts
27 -
Joined
-
Last visited
Content Type
Forums
News
20th
EduGeek EDIT Conference
Blogs
Everything posted by jwinters
-
Thank you. ;-) Feeding a single lesson relocation back into the MIS would depend very much on the capabilities of the MIS. The ones which I've experienced can generally store the school timetable, but they don't usually cope with the idea of minor transient amendments. This is one of the big reasons for Scheduler to exist. It gives you a quick way of finding out where little johnny actually is - not where he would be if this were a normal school day but where he actually is today. It is generally far faster simply to ask Scheduler the question than it is to log in to your MIS and try to get it from there. Users tend to keep it open in a tab in their browser, and it then takes a very few keystrokes to pull up the schedule for any pupil or staff member (or room, or facility, or...)
-
Thanks. The text of the links was right, but the editor seems to have mangled them in each case by adding the first word of the next line to the URL. I think I've fixed them now. Adding an importer for a new MIS is probably not a task for a beginner, but I'd be very interested in cooperating with someone who wanted to do it. The data importer is modular - it has a core section which is MIS-agnostic, then plug-in modules for each individual MIS. You're right - this should all be documented. One of my big ideas for the autumn is to write a lot more documentation. Addition a few hours later - after I've thought about it a bit more. I now think this is a really good idea and so thanks for it again. It isn't actually that big a job to write the extra modules necessary to add import for a different MIS, and it's the sort of thing which really should be documented. I will put it high on my list of upcoming work.
-
(Not sure this is quite the right sub-forum, but it seems the best match.) For the last few years, I've been developing an Open Source (GPL) software package for schools called Scheduler. Its purpose is to provide a unified store recording all the multitudinous things happening from day to day in a given school. At first sight it looks a bit like Google Calendar, but with one major difference - it stores its event information in a structured fashion. Rather than having dozens or hundreds of different calendars as you would with Google Calendar, with Scheduler you have just the one store and then you choose what you want to see from it. It can thus store your entire academic timetable, your extra-curricular activities, homework timetable, invigilation, cover, public calendars (General, Sport, Music, Drama etc.) in one place, making it quick and easy to extract the exact information which you want, and automatically identifying clashes. It can feed personalised schedules to hand-held devices (phones etc.) for both staff and pupils. It can identify exactly who will be missing from your lessons because of a trip. It can facilitate re-location of lessons - either individually or in bulk. Scheduler doesn't aim to replace your MIS. It's solely concerned with schedule information - what is happening, where, when and with whom. It doesn't require double-entry of information - anything relevant which is already in your MIS it can extract automatically and import. It can handle data exported from SchoolBase, WCBS/Pass and iSAMS. It takes all that data and unifies it - making it far easier for staff and pupils to get just the information which they need. It tells them not what would be happening if this were a normal week, but what is actually happening this week - there's often a big difference. It is in use in a number of schools and has been very well received by the staff. "Why didn't this package exist years ago?" is a not uncommon reaction. Anyway - to the point of this post. Development is still ongoing and I'm looking for new ideas. If you can spare the time to take a look at the documentation and/or demo and come up with comments along the line of, "Yes, but why doesn't it do ...?", or "Well, it would be useful if only ..." then I would be most appreciative. Documentation is at https://xronos.uk/ Demonstration system at https://schedulerdemo.xronos.uk/ Entire source is at https://github.com/XronosSchedulingLtd/scheduler The software is free - as in both beer and speech.Thanks in advance for any feedback. John Winters (Incidentally, that initial X in Xronos should be seen as a Greek Chi character - it's pronounced Chronos.)
-
Automatically extracting timetable data from WCBS PASS
jwinters replied to jwinters's topic in MIS Systems
To load into a school calendaring program - https://github.com/XronosSchedulingLtd/scheduler -
Automatically extracting timetable data from WCBS PASS
jwinters replied to jwinters's topic in MIS Systems
So you're saying to go direct to the database, rather than trying to use any extraction facilities provided by the MIS? John -
I'm completely new to WCBS PASS but I'm quite familiar with other school MISs. I'm looking for a way to extract the whole school timetable (not just individual timetables) from PASS in a machine-readable form. This is something which I've done in the past from SchoolBase (using direct database access) and iSAMS (using a combination of the API, and then direct database access where the API was deficient) and I'm now hoping to do the same for a school which uses PASS. Can anyone with PASS experience offer me any pointers about what approach would be best on PASS? I don't want to start off doing it one way, only to find out down the line that there was a much better way to do it. Many thanks
-
Migrating from SchoolBase to iSAMS? Free utility offered.
jwinters replied to jwinters's topic in MIS Systems
Glad it's of use to someone. Feel free to PM me if you need any assistance. Cheers, John -
If you want specifically to develop web applications, then I'd strongly suggest using some sort of framework rather than starting again from scratch. There are quite a few to choose from. Django is one option if you Python appeals to you, or Rails if you like Ruby. HTH John
-
Migrating from SchoolBase to iSAMS? Free utility offered.
jwinters replied to jwinters's topic in MIS Systems
OK - it's there. https://github.com/jhwinters/extractor There is still some school-specific stuff in there, like the mapping of their pupil sanctions in SB to the corresponding areas in iSAMS, but no personal or confidential information. Anyone wanting to use it will need to sort out their own mappings for, for instance, report grades, rewards and sanctions, medical conditions, etc. but the vast bulk of it should work as it stands. -
Migrating from SchoolBase to iSAMS? Free utility offered.
jwinters replied to jwinters's topic in MIS Systems
Good idea. I'll just need to treble-check that there is no school-specific confidential information embedded in the code before I do that. I'm pretty confident there isn't, but... -
Excellent news! Congratulations on your persistence. Cheers, John
-
Honestly, they do... As a bit of general advice, it will help a lot if you get into the habit of getting the formatting right first. It is an active aid to helping you see what is wrong with your program. I'm reminded of advice which I once saw in a "Beginning Programming" book somewhere, which advocated switching off compiler warnings until later in the development process. Said advice was quite insane. I think your problem in the above quoted code is that you are expecting the initTrue = 1; bit to be conditional on the preceding else. At least, you've indented it as if it were. Unfortunately it isn't and will be executed unconditionally, which is probably why the result is surprising you. Cheers, John
-
I think it's time for you to show us your code as it currently stands again. Difficult to give advice without knowing the current state of play. Cheers, John
-
Several people have asked me about this recently, so I might as well mention it publicly. Earlier this year I was involved in migrating a school from using SchoolBase as their MIS to using iSAMS. The school is now up and running on iSAMS and are very happy with it, but the migration process was not without its pain. (I presume this would be true for any migration from A to B, regardless of which A and B are involved.) To move a whole school's data into iSAMS, they expect the school to do the vast majority of the heavy lifting. The old MIS's database must be dumped, interpreted, and then all the re-formatting work needs to be done by the school ready for iSAMS to load it. Effectively you need to build their database table contents for them. To achieve this I wrote a utility (about 10,000 lines of modularised code) which does the job. Having used it and now having no further need of it, the school in question have very generously agreed to put it under an Open Source licence which means it is free for anyone else to use, although obviously it carries no warranty of any kind. You will definitely need to tweak it in the fine detail to suit your particular school's needs, but it should nonetheless save you a serious amount of time. It could potentially do 90% of the work for you. If you are interested, drop me a PM and I can give you access to the source. Please note - this post is not intended to be seen as an endorsement of iSAMS, or of any other MIS. I don't know enough about them to be able to make any kind of informed comparison. I was not involved in this school's decision process - I was simply presented with a job, "We've decided to move all our data from SchoolBase to iSAMS. Please make it happen." So I did. Given the amount of effort involved in writing a utility to do all the necessary work, it seems a shame that it should be used only once. If its functionality happens to align with what you want to do, then I hope it will be of use. Cheers, John
-
Actually, having thought about it a bit further, the logic in that section is quite out of order. (As in, wrongly ordered, not the other meaning.) The test which returns false is being done too soon, meaning you never get far enough to return true. bool won(void) { int counter; counter = 1; // Iterate through numbers, checking them for (row = 0; row < d; row++) { for (col = 0; col < d; col++) { if ((counter == (d*d)) && (board[row][col] == 0)) { return true; } if (board[row][col] != counter) { return false; } counter++; } } return true; } John
-
That counter++ will never be reached because it's immediately after a return instruction. Put it outside the if clause, like this: if (board[row][col] != counter) { return false; } counter++; John
-
I'd add some more debugging printfs. Straight after the printf("Working on row %d\n", row); I'd add: printf ("Tile is %d\n", tile); printf ("Value at (%d, %d) is %d\n", row, col, board[row][col]); and keep drilling in like that until you find out which of your assumptions is wrong. Cheers, John
-
Hi Joanne, I hope you mean you're on the edge of success, and not on the edge of giving up. Looking at your code I can't see immediately why it's not giving you the results which you expect, but it shouldn't be too far from being right. My first suggestion would be to add some debug logging code inside the function. Like this: [color=#333333] for (col = 0; col < d; col+) { printf("Working on column %d\n", col); ... [/color] A few of those would let you see exactly how your logic is working out. Check exactly which row and column you expect it to succeed on, and then check whether it does. HTH John
-
But surely you don't need a whole second array in which to store said location? A couple of variables would do. E.g. rename my wanted_row and wanted_col from above as: int blank_cell_row; int blank_cell_col; initialise them as previously discussed, and then just update them each time the blank cell changes. That way you have immediate knowledge of where the blank cell is all the time. Cheers, John
-
Assuming that's inside a loop like this: for (row = 0; row < SIZE; row++) { for (col = 0; col < SIZE; col++) { blankTile[row][col] = (grid[row][col] == 0); } } then yes, that's going to put values into a second 2D array such that all of them are false, except for the one corresponding to the blank cell, which will be true. However I'm not sure that helps you if what you're trying to do is get the coordinates of the blank cell. You now need to do another search of your new array looking for the "true" value. Assuming I've guessed your objective correctly, how about this? for (row = 0; row < SIZE; row++) { for (col = 0; col < SIZE; col++) { if (grid[row][col] == 0) { wanted_row = row; wanted_col = col; } } } It would be nicer if C included a primitive like break which would break you out of both loops, but unfortunately it doesn't. Given the small size of the array you're dealing with, it's not too bad to let the loops run to completion. Hope this helps. John
-
Not sure what you mean by a Decimal - that isn't a C type. The choice is between various sizes of int and two sizes of float. Both can be used to store decimal numbers - and indeed binary numbers or hexadecimal numbers. The difference between decimal, hexadecimal and binary is merely one of presentation. Yes, financial calculations have nothing to do with this post, but it's a good example of where people use floats when they shouldn't. Another good example of where you shouldn't use floats/doubles is in a calculation like Joanne's. floats/doubles are really very specialist items and you practically never use them for ordinary programming. Certainly not when solving a problem like the one presented in this thread. One very often does division using ints. Obviously, you need to be clear on what you're trying to achieve, and be aware of the rules of the language for how the answer will be rounded. Here's an example which I wrote recently for interfacing with iSAMS. The iSAMS system uses a non-standard week numbering system for deciding which week of the year it is so you can't use the standard cweek() function. The calculation which is required is: (date.yday - date.wday + 12) / 7 and yes, that is integer division and it very deliberately rounds the answer. This is a very similar example to what Jo's trying to do, because it's a question of calculating the index into an array. I'm not sure that the thread has been de-railed. Jo asked for programming help and some very useful and relevant help has been given. It's good to be warned off using floats inappropriately before you get bitten by them. Cheers, John
-
Ah, yes - you'd expect it to be implemented like that but alas it isn't and it's an area which often catches out beginner programmers. You expect floats to be just the same as real numbers, but the underlying implementation means they are in fact only an approximation. Any integer can be represented exactly as a float, but most non-integers are only approximate. This leads to really surprising results like: 1.0 - 0.87 != 0.13 (Incidentally, I'm not saying that that particular calculation will show the issue, but it is a real issue and you need to be aware of it when programming with floating point numbers.) A classic mistake is to think that financial values should be stored in floats because they appear to have two digits after the decimal point. Their intrinsic imprecision then leads to wrong answers. The correct approach is to store your amounts of money as integer numbers of pence, and then add the decimal point at the presentation stage. Some years ago I did some work interfacing to the London Stock Exchange, who required all values to be reported exactly to 8 decimal places. Naive attempts to do this using floats or doubles were doomed to fail. What you actually had to do was use 64 bit ints and use them to store values x 10^-8 As a general rule when programming, avoid the use of floats and double unless you actively need the imprecision they provide - e.g. for statistics calculations. Definitely never for anything like calculating indices into arrays.
-
To a programmer, that line reads very oddly. Floats are intrinsically imprecise and are specialist things. You definitely don't want one here.
-
For some years, I've been working on an open-source scheduling program, intended specifically for schools. It pulls together all the different types of thing happening within a school, and displays them in a Google Calendar-like way, but with the structure preserved. Thus you can choose to see all upcoming events (timetable, cover, invigilation, activities, trips, external events, public events, school calendar duties, etc.) for any selected individual, location, category etc. It detects and flags certain types of clashes, and the development plan would have it doing more of this in the future. It's currently in use in one school (over 1000 pupils, several hundred staff) and is well thought of. As the intention has always been to make it more generally available under the GPL, I'm looking to open it up further. When the program was first started, the school used its own in-house MIS. The timetable was imported from that. Then they migrated to SchoolBase, and I wrote a utility which ran nightly, pulling over all the necessary scheduling information. The trouble was, it was single 5000 line program - not nice, although it worked fine. When the school migrated to iSAMS, I took the opportunity to re-work the importer. It's now thoroughly modular, and split into three areas: General code iSAMS-specific code School-specific code Of course, how well I've done this won't be tested until it's used in another school, ideally one using a different MIS. Would anyone be interested in cooperating on that all-important second installation? I'm not looking for any money to change hands (in either direction) but it would call for some cooperation time. You'd get a rather nice unified scheduling program for your school; I'd get the means to polish it further. The scheduling program itself is a Rails-based web application, which works with any modern web browser. It also provides feeds so that staff and pupils can get their full unified schedule (not just their timetable) on their mobile devices. Cheers, John
-
SIMS to iSAMS: How to run SQL scripts to extract data
jwinters replied to dumontict's topic in MIS Systems
Having just done the same moving from SchoolBase to iSAMS, I'm intrigued to know what iSAMS provided in the way of SQL scripts for a similar SIMS => iSAMS migration. There are something like 150 spreadsheets in the iSAMS Excel data import workbooks, and for a SchoolBase => iSAMS migration they provided sample SQL for about 6 of them. It provided a few useful pointers, but there were lots of bugs and omissions in it. I ended up writing about 9000 lines of code to effect the data extraction from SchoolBase. I'd be very interested to know if their SIMS data extraction material is any more complete.
