Skip to content

A new project for organizing lots of stuff…

I am working on a new project.  Organizing lots of files created by science teachers on two different websites.  First, 4 of the BOCES in our region started a collaborative effort a couple years ago actually.  They are working on lesson plans for new science standards in NY State.  When the state released the new standards, 4 of the BOCES including science teachers from a couple of their districts agreed to work on creating new materials, lessons that satisfy the standards…..bla bla bla.

This is the website –  is open to the public, except when you click on a grade and then a kit, you need a password.  The teachers contributing wanted to password protect the content because the kits are not free.  They are purchased by the district science departments.  If the content was all freely accessible, why would someone pay for it?

As you can see, the site is organized by grade.  The main navigation is grade levels.  That is the primary top  level organization. There is also a massive graphic that consumes most of the top of the homepage of the website.  Its a decent looking graphic, just too big (IMHO)


Each of the pages of the website is actually a post.

Content in the BOCES4Science website is organized by grade level

The lessons plans created are for kindergarden – 5th grade (primary – elementary levels).  This is the way the lesson plan content is organized, by grade.  If you look at the website now, that is how the content is organized, by grade.  Within each grade are different kits.   For example, the wee little kindergardeners have

The collaborating science teachers create lesson plans that end up most often in a PDF form, what else right?  The

Click on a grade level and see the kits available for that level.


Click on a kit title and you are prompted for a password


I am the keeper the passwords, which change annually.  I just changed them last week, start of the new school year in NY State.

I think the big idea is when districts purchase the science kits (which include the lesson planning etc) – then they get access to the site – page – material.  Its like they are purchasing a password to access the kit materials.

Here is a kit that has some things actually in it.  Its not too sexy, but simply provides link to the files (materials – mainly PDFs).  Some of the content, even after purchased is not printable (PDF).  This is probably to discourage a district from purchasing a kit and then distributing among other teachers…..That is my guess, since the page is already password protected from the general public.


It looks like most of the materials created by the science teacher team of 8 end up going to a professional publication firm.  Some very impressive looking PDFs have been generated for the Teacher Guide, Student Journal, Answer key – etc.

Looks like the teachers turn things into the published and the publisher provides then to me and I post them in the appropriate place on the site.  Specifcally, in the WordPress File Manager space and then provide a link to it in the post (page). ;).

Got it?  Get it?  Good…

Well, its a start.  My brain always likes the big picture.  Also to circle around the concept numerous times, each time picking up a little more understanding.  Im sure that is a popular strategy for many others too.

Seems other materials include videos created by professional videographers.  Links to you tube videos, powerpoints.  Where there are files involved, they are mainly uploaded to the wordpress file manager.  Like the ppts, images, PDFs.  Makes sense.  The videos should be on youTube or some other video hosting service.


DBs in general

Ok, I support various DBs in my job.  I support two access DBs.  Support =s updating code in a few places when necessary, Support =s adding new functionality to the system.  New functionality means adding tables, forms, reports, queries.  Also, supporting the DB means fixing data.  Annually, my customers who use the DB create orders.  The orders are the transactional data.  The transactional data is kept in a separate DB from the code that generates it.  Good design.  Linked tables to be specific.  Every year, there are a handful of transactional records that do not process correctly.  Each year, I open the data DB and scrub the data for her, correcting it.  The first year took a while, each successive year a little quicker, familiarity helps, this year, I was able to isolate and update the transactional records in about 15 minutes…..

Which begs the question, why don’t you try to correct the issue with the code that generates the problem.  Treat the problem, not the symptom.  A fine principle indeed.  Last year, I decided to correct the problem and it was so!  Until my customer added more units (science kits) and they are experiencing the same issue that I corrected last year.  HUH?  I don’t really care too much, since I can correct the data (scrub a dub dub).  My customer gives me lots of details about how to see the incorrect record data via the application – “james, click here and then there and then do this and that and there it is….”  I snicker, since I browse into the data DB, open two tables and away I go.

My point here is that while we can know that something is wrong, correcting it is sometimes not any better, since the error often is between the chair and the keyboard.

Know your system, correct problems in code when it makes sense, correct transactional data when appropriate and move on.

School world webmastering stuff….

My customer contacts me today saying, “can I edit the content on page bla bla bla”….. Which probably meant that they tried logging in and did not see where or how to get to the page with the content OR they forgot how to login OR…..

The first thing I had to do was find the page that she was referring to”.  Page bla bla bla did not appear in the quick links or under the main navigation options.   Finding the page turned out to be a little difficult.  I ended up searching on the site home page and finding a page on the site that seemed like the right one.  Using the bread crumb navigation, I was able to find the path to the file in question.

I drilled down to the page hoping I could see there who has editing writes to it.  Makes sense to me.  Find the page – find out who can edit it….. NOPE.  No dice.

Instead, I have to know the persons name, which I found by looking at the content in the page, and open the site admin area (since I am a webmaster, i can do this) – click on the site administrators link, and search the name of the person.

I found the account/person – then looked at the current rights of her account, what areas did her account have access to.  I ended up adding more rights for her.  I navigated down a clumsy path through the content, providing a couple check marks along the way.  When I was done updating the account privileges, I logged into the account to verify that she could now edit the page in question.

Overall, a little clumsy and poorly designed in that I could not find out who had editing rights to a particular page.  Instead, I have to know the person and follow that context/path.

Morals of the story?

  • School World design not real intuitive (for me)
  • Can’t determine who can edit a page by looking at the page
  • Must travel the path of site admin – accounts – rights to determine who can edit what
  • Log into an account after updating to ensure it is what you intended.
  • Bite the bullet and do this work – rather than assigning the account WebMaster privilege.

The day I finally got the expression builder to actually build a useful expression…

I know, a little play on words, but seriously, have you ever tried to use the expression builder found in MS Access?  I have tried it a *few times over the years, without much success.

The other day, my access customer asked me if I could place a message in a report, but only for a specific one.  Ok, sounded reasonable.  Find the form, find the event called on a certain button click, in the event code, find the referenced report, open the report, find the control in the form that is responsible for showing the value asked for, then……figure out how to *ask the question.

The question was this “how do I show this message when ever that kit number shows up in a report?

What I ended up doing was adding a text box to the report in the detail section and building an expression that actually worked.  Once the textbox was in place, I opened the properties to it and clicked the datasource – then the …., which brought up the expression builder.


I actually placed it in the kit_Number footer.  The expression looked like this:

=IIf([Kit_Number]=”ES112″,”a message about this kit….”)

Seems trivial in hindsight, but I have tried to build expressions before with this tool and have failed over and over. 

I guess it took a simple, logic need

If(test,”true”,”false”) is a pretty basic expression, but then again, basic is in the eye of the beholder.

The result is on this report, when that kit number shows up, the report looks like this:


IP based security cameras

I have been supporting this system for a few years, but on occasion, feel like capturing a few points around it.  We have 4 locations in our organization that have security cameras.  They all live in a VLAN, a type of secure network.  Most of the time the system is stable, but from time to time, cameras drop off line in the system.  When this happens, I get to act as the system analysis and help coordinate the resolution of the problems.

I liked this note from my customer the other day, it explained in simple terms a key component of understanding how to look at issues like this.


We have three cameras off line. One at each of the locations (Williamson,Newark,Flint). I went to Flint today and verified camera was working. It can be either vlan or cable. Not sure where closet is in the OLD  CES building. Once you find where it terminates in closet you will be able to find out what port camera is on and check vlan as well. Newark, I have a handle on. I will be heading to Williamson first in the a.m. to look at that camera and will update you and James on that one



Frontrunner Networks

Main point

When a camera is off line or down, the problem is either

a – the camera

b – the network port where the camera is plugged into

c – the network is not speaking to the port.

When I get a report of a camera down, I will log into the Configuration tool and try to bring it back on line.  Usually I cannot, the resolution required either a reclying of the camera (unplug) or a unplugging of the cable in the port (this is done by our network engineers, not me).

What I can do

Succinctly state the problem and ensure it gets to the right people.

1 – whats the problem

2 – whats the solution

3 – who needs to know

One concrete thing I can do is reboot the server where the cameras archive their footage.  Yesterday, all the cameras were down for our warehouse – All the cameras down is indicative of a problem with the archiving server, not the camera or the port or the network.  Sure enough, when I remoted into the archiver (server) and issued a reboot command, it came back on line and all the cameras were back up.


I just left you a voice message regarding the warehouse cameras being down. 

Would you please look into the warehouse cameras for us?




Bob,  I recycled the server and checked via the desktop client and the Warehouse cameras are back on line.



You are correct, sir.

Thank you for a speedy reply… and enjoy your day!


Moral of the story?

Be a good investigator of the problem.  Understand it first, all of it.  Try to resolve the problem yourself, if you cannot, succinctly describe the issue to the people who need to know and help get it resolved.


ASP.NET Web Application Development

I know, I was pretty sure I was done with development work in my illustrious career ;).  Then comes along a new project – I dont know if I have the energy to write good posts around this project.

I am reminded already that writing, especially in the public domain is a good brain activity.  Its something that pushs the envelope a little.  Helps to keep you from complacency, which is a big problem for many people.  Stretches you from your comfort zone.  Challenges!  Yes, good good good. But, its also difficult tedious work.  The kind of work that beats you up, spins you around causes you pain and frustration.

So, ASP.NET it is.  I considered the WAMP environment – which is what all my old moodle blogging was about.  But, I was hoodwinked into using the Microsoft suite of tools, AKA ASP.NET.

Fortunately for me, the concepts and ideas don’t change.  How software works does not change.  How DBs work does not change.  How the internet works (HTML, CSS, Javascript) does not change.

What changes?  The tools, the language(s) of implementation.  That’s what changes.  Tool number 1, the IDE.  Im using Visual Studio community editon – the free one.  VS is open source tool with lots of different things it can do.  Learning the lay of its land, a decent sized hurtle.   So many tools and different ways to do things.

There are many frameworks and packages to work through.  The ASP.NET tools and frameworks that I decided on for my project are:

MVC Entity Framework

Razor view technology – which uses a page type .cshtml.  The pages are html, but with c sharp code snippets embedded in the pages.

I choose the MVC pattern because I have used it before and like it.

In my application space, I have the familiar arrangement of folders, including folders for each layer of the application Model, Controller, View.  Each of the view pages is handled by a matching controller.  the controller communicated to the model layer and the classes in the model layer representative of tables in the DB.

Entities often represent tables in the DB.  The ORM EF “Entity Framework” helps with the frequent or common requests of data in the table, specifically a row.  Common CRUD row requests:

  • create
  • retrieve
  • update
  • delete

I ORM when creating a view page for one of the requests includes the HTML form code and handles the actual work of communication with the DB.  I mostly like this, although in the past, I have created this code and looked down my nose at a framework that would do this for me.

I spend a few hrs a day over a couple weeks playing around with Visual Studio, watching and reading tutorials, creating new projects, trying to figure out how I would build the application (the view side of things).  Then I started looking at my DB and what that would look like and how I would represent that in the model layer of the application.

If you wanna learn about ASP.NET, then you have to start developing in ASP.NET.  Ya wanna learn Java? Ok, then do Java.  Over and over and over.  Make those mistakes, retrace steps, try something else, wash – rinse – repeat.

I can see the application from a conceptual level very well.  I can see the distinct parts of it.  The DB, its tables and data, the view files or interface that users will see, I can see people interacting with it.  I can see the requests in the application running through the controllers and into the model interacting with various entities in the system.  Now getting to that vision is the harder part, the part frout with pitfalls and mistakes.

A user makes a request of the application, “show me all the orders for district a”  The request is sent from the application view layer which passes to a related controller which communicates to a model class entity which interacts with the table in the DB.

Crystal clear…..

Finalsite web site project

As we push into the implementation of our new web site, a few thoughts.

Our design phase is almost over.  Three iterations down and approaching the end, where we will “freeze” the design.  Finalsite will bring in a developer to *build out the site.  BTW, the vendor uses Coldfusion, a language I used to develop in ;).

Our site, even tho not build out, has been available to the site admins.  We have been able to log into the site as site level admins and see the skeleton site.  We provided site maps a while back, so when we log in, we can at least see that.  No real content yet and no real look and feel, that comes from the site build out.

I have been working in the constituent manager, group manager, news manager, calendar manager and the posts module.  There are all key pieces of administrative software.  We populated the site using a data sheet.  The vendor supplied this, along with some directions on how to populate the sheet.  I worked with our HR department and obtained current complete faculty information.  Once the date sheet was completed and uploaded by the vendor, we could start to work more with both the constituent and group managers.

The site has a concept of two different logins.  The first is the portal login.  This is for all the staff who are not admins.  We have 1100 staff, of which about 25 are admins.  Admin means content managers or champions.  Most of the staff will access the website and then login to the portal.  The administrators, content editors, will log into a different location on the site.

  • siteURL/login – for faculty
  • siteURL/admin – for content managers – admins

To create admin accounts, we go into constituent manager, find the account and create a second account, and admin account.  That account is linked to the portal account.  Once the admin account is created, it then joins an admin. group.  Finally, we go to the space of page on the website that the group would manage and change the access property from public to the name of the group.

  • Faculty = portal login
  • Admins = site login
  • Admins have a group
  • A page or space of pages has an assigned group

When a faculty logins in, they land on the portal home page.  The portal space tries to alleviate the public site from any kind of staff related information.  One of the goals is to keep employee information off the public site.  Rather – put that in the portal and do not clutter up your public persona with staff information.

If a staff  member is a content manager, then they have two places to log into.  The portal for staff information and the admin to update content on the relevant part of the public site.

The portal users also can create content on the website using the Posts module.  The site admin has to set up Teacher Boards for their group first, then the staff member when logged into the portal can access their teacher boards there.  A board is a space where the faculty member can create web content by using the post module.   I was able to login as site admin go to the Posts area of Composer and specify per group if they wanted Boards.   I was even able to auto generate the Boards.  For example, we have a education center that has 90 faculty members.  I was able to create en – mass, Boards for every member.  Upon completion of this, each of those staff members could login to the portal and access their Board space from their profile.    I then went to the education center space on the public website and created a faculty list, which included an option to show teacher board links.  The faculty list is publicly accessible.