1 --- Log opened Sat Aug 03 15:12:13 2013
3 15:12 -!- Irssi: #mctxuwa_softdev: Total of 3 nicks [0 ops, 0 halfops, 0 voices, 3 normal]
4 15:12 -!- Irssi: Join to #mctxuwa_softdev was synced in 2 secs
5 15:12 < matches> Good idea with the IRC channel
6 15:12 < matches> I'm Sam Moore by the way
7 15:14 < Callum_> Hey. Finally someone else
8 15:19 < Callum_> Hmm should probably close the app so my phone has enough battery to get me home.
9 15:21 -!- Callum_ [
[email protected]] has quit ["AndroIRC - Android IRC Client ( http://www.androirc.com )"]
11 15:51 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
13 --- Log closed Sat Aug 03 15:51:28 2013
14 --- Log opened Sat Aug 03 15:51:51 2013
16 15:51 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
17 15:51 -!- Irssi: Join to #mctxuwa_softdev was synced in 2 secs
18 15:52 -!- matches changed the topic of #mctxuwa_softdev to: MCTX3420 UWA
19 15:52 -!- matches changed the topic of #mctxuwa_softdev to: MCTX3420 UWA - Team 4 (Software, Firmware, GUI)
20 16:40 -!- matches changed the topic of #mctxuwa_softdev to: MCTX3420 UWA - Team 4 (Software and stuff)
22 16:54 -!- You're now known as sam__
24 16:54 -!- You're now known as sam_moore
25 16:55 < sam_moore> That works
26 16:55 < james__> Yuck?
27 16:55 < james__> Oh right
28 16:55 < james__> all the underscores?
29 16:55 < sam_moore> Yeah
30 16:55 < james__> its a bit of a pain
31 17:01 < sam_moore> I think you might be able to comment on changes if you use github
32 17:01 < sam_moore> I'll see if I can copy the repository there
33 17:01 < james__> you should be able to
34 17:01 < sam_moore> It does seem useful
35 17:01 < james__> its what it waas designed for really
36 17:01 < sam_moore> Yeah, gitweb is a bit more limited
37 17:02 < james__> Yeah. Or at least the features aren't as easily accesible as in github
38 17:10 < sam_moore> I'll clone the repository into github now
39 17:24 < james__> Need to be logged in but it looks like you can comment
42 22:01 -!- james__ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 22.0/20130618035212]"]
43 22:15 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
44 --- Day changed Sun Aug 04 2013
46 10:47 < Callum> morning
48 10:52 < Callum> What is there we need to get done? i haven't really done anything yet
49 10:53 < sam_moore> We need to write a progress report on what we need to get done :P
50 10:53 < Callum> Thats the other thing i wanted to know, is the progress report per person or per group?
51 10:53 < sam_moore> It's per group, and it only has to be one page
52 10:54 < Callum> I'v had a quick look through the stuff online and only thing i can see is the example but it looks like its per person in that
53 10:54 < Callum> ok, that makes things a lot easier then
54 10:54 < sam_moore> We are meant to have our own technical diaries with handwritten notes
55 10:54 < Callum> yea saw that as well
56 10:55 < sam_moore> So, at the meeting we sort of worked out a vague idea of what systems we'll need
57 10:55 < Callum> yea had a read through the meeting notes
58 10:56 < Callum> seemed like a solid start
59 10:56 < sam_moore> Yes, I think I'll do a block diagram about it
60 10:56 < sam_moore> Since I actually have a raspberry pi I've been playing with it
61 10:57 < sam_moore> No one's really done that much though, to be fair our group was only completely formed by Friday
62 10:57 < Callum> Well, I'm the guy that moved into the group :p
63 10:58 < sam_moore> Is there anything in particular you'd like to work on?
64 10:59 < Callum> Il have another look through the meeting notes, but i don't really have any experience working with this hardware. Just mainly C + Java, but i pick stuff up pretty quick
65 10:59 < Callum> well, any hardware other than what we did in embedded
66 11:02 < sam_moore> We need to learn more about the actual requirements of the system I think, not sure how much we can work out without talking to all the other groups
67 11:03 < Callum> Yea true. Might have a play around with git sometime soon to get used to it
68 11:03 < sam_moore> Oh, something I listed in an email was image processing, that will be important
69 11:05 < sam_moore> Anyway, if you can try and find something that interests you that seems useful and just write a little bit on that, it would be great
70 11:06 < sam_moore> Learning git would be useful, you can write about that, it doesn't matter if Rowan does it as well since we'll all need to learn more
71 11:07 < sam_moore> I know enough of git to work on my own projects, but there are a lot of features designed for group work that I've never used
73 11:42 < Callum> Sam, I think i got a different ssh key from github; So if im going to use this you'll likely need to add it
74 11:42 < Callum> And hey James
78 12:09 < sam_moore> Callum__: Ok, send it to me
79 12:11 < sam_moore> If you have github accounts let me know those as well
83 12:12 < sam_moore> You guys can't see what's written in the channel whilst you're not in it, right?
84 12:12 < james__> How are things
86 12:12 < james__> Its only once you log in that you can read it
87 12:13 < sam_moore> I'm messing around with git a bit, I've sent an email about the progress report
88 12:13 < james__> Unless you log it there isn't any way to go back to previous convos
89 12:13 < sam_moore> I'd like to meet at 2pm on Monday if that's possible
90 12:13 < james__> sounds good
91 12:13 < sam_moore> I'm running irssi in screen on a server, so I'll have everything logged
92 12:13 < sam_moore> I'll look into making the logs available on git
93 12:14 < Callum__> think anyone would care if i go to G19 without the safety meeting? not like we're actually doing anything.
94 12:14 < james__> i'm using chatzilla so there is an inbuilt log function
95 12:15 < james__> Don't know tbh
96 12:15 < sam_moore> Callum__: No, but just try not do anything unsafe or the rest of us will get the blame :P
97 12:15 < Callum__> well, we could just meet somewhere else. Not like we need to go there
98 12:16 < sam_moore> Adrian did say that we could have people visit the lab, but we are responsible for anyone we bring in without the safety course.
99 12:16 < sam_moore> Ok, what's another good place?
100 12:16 < james__> No idea
101 12:16 < james__> The lab is kinda nice and quite/out of the way
102 12:16 < Callum__> ok well it should be fine. If it's a suitable meeting location than just go with it.
103 12:17 < sam_moore> I don't think it will be a big deal to go in G19, just don't use any equipment. It is a good place.
104 12:17 < Callum__> Yea. just making sure it wont be a problem
105 12:18 < Callum__> Im going to get some lunch.
106 12:40 < sam_moore> You need to use
[email protected]:matchesucc/MCTX3420.git to commit using your ssh key
107 12:41 < sam_moore> If you give me your username, I think you can use https://github.com/matchesucc/MCTX3420.git
108 12:41 < sam_moore> You should be able to commit to git.ucc with your ssh key
109 12:42 < sam_moore> But I think we'll prefer github. It looks like it has more features. I'll use that as the main repository and keep git.ucc up to date in case github explodes.
110 12:43 < Callum__> username: Callum-
111 12:45 < sam_moore> Right, before you commit your changes, pull from the server
112 12:45 < sam_moore> If your repository is "up to date" with the server and you make changes, it is really easy
113 12:46 < sam_moore> If it isn't and you have changes that contradict something done on the server, we'll have to merge the repositories, and from what I've heard that's usually a pain
114 12:47 < sam_moore> We'll probably have to deal with it at some point.
115 12:48 < Callum__> how do you pull from github>
116 12:51 < sam_moore> Not sure how you do it in the gui, is there a "pull" or "fetch" button
117 12:52 < Callum__> not that i can see
118 12:52 < sam_moore> Hang on, I'll start windows and see if I can work out how to do it
119 12:53 < james__> are you logged in?
120 12:53 < sam_moore> Yes
121 12:53 < sam_moore> Cool, you can even edit the files entirely from github
122 12:54 < Callum__> you can?
123 12:54 < sam_moore> Well, I can
124 12:54 < sam_moore> I added Callum- as a collaborator; can you see the repository?
125 12:55 < Callum__> i could see it before
126 12:55 < Callum__> wait hang on
127 12:56 < james__> can you add me aswell?
128 12:56 < james__> username: firefields
129 12:57 < Callum__> i can edit it from the browser
130 12:57 < sam_moore> Done
131 12:57 < sam_moore> Excellent, that's a start
132 12:59 < james__> I can comment
133 13:00 < sam_moore> The browser editor actually looks pretty good
134 13:01 < sam_moore> Hmm
135 13:01 < sam_moore> We need to be able to pull from github to our own machines though
136 13:01 < sam_moore> So we can actually run code
137 13:02 < sam_moore> I can do it myself using the command line
138 13:02 < sam_moore> I'll see how to do it using the GUI
139 13:03 < james__> I am having a look through the documentation now trying to find it
140 13:07 < sam_moore> I wonder what happens when two people edit a file at the same time
141 13:07 < james__> Lets edit the readme?
142 13:08 < sam_moore> Alright.
143 13:08 < james__> I am currently editing
144 13:08 < james__> Can you get in?
145 13:09 < sam_moore> Yes, and it looks the same
146 13:09 < sam_moore> Make some changes and commit it, then I'll go and we'll see what happens
147 13:09 < james__> Done
148 13:09 < sam_moore> It says that you have committed since I started editing
149 13:10 < sam_moore> Whoops, but I could still overwrite it
150 13:11 < sam_moore> Ok, at least it gives us a warning, that's nice
151 13:11 < sam_moore> I think the key to this will be: 1) Try and work on different source files 2) Send lots of spam to IRC when you do stuff
152 13:11 < james__> Also
153 13:11 < james__> if you look in history my changes are still there
154 13:11 < sam_moore> Yeah, that's nice
155 13:12 < sam_moore> And I think we can go back to them
156 13:12 < james__> I am reading about this fork and pull method as well. Might work well
157 13:13 < james__> Essentially you fork the repo. Make changes then request for it to be pulled back into the master repo
158 13:13 < sam_moore> Yes, that will likely be the best way to go about it.
159 13:13 < james__> That way all changes can be viewed and then confirmed before going into the master copy
160 13:15 < james__> https://help.github.com/articles/fork-a-repo
161 13:15 < james__> and this https://help.github.com/articles/using-pull-requests
162 13:17 < sam_moore> I think in the long run it will be easier to use the command line when you work on your local machine
163 13:17 < Callum__> might just end up learning how to do it all from command line anyway
164 13:17 < sam_moore> All the tutorials seem to give the command line stuff
165 13:17 < Callum__> yea
166 13:17 < Callum__> suppose you could use the gui just to look at whats there
168 13:17 < sam_moore> `git pull github master`
169 13:17 < sam_moore> Make changes
170 13:17 < sam_moore> `git add .`
171 13:18 < sam_moore> `git commit`
172 13:18 < sam_moore> `git push github master`
173 13:18 < sam_moore> Well, that's just directly going to the repository without forking it
174 13:19 < Callum__> is the add thing for staging?
175 13:19 < sam_moore> Yeah; you have to tell it what changes to stage to the commit
176 13:19 < Callum__> yea
177 13:19 < sam_moore> I think there is an option to automatically add all changed files
178 13:20 < sam_moore> I've always just manually done them, makes it easier to work out what I actually did before writing the commit message
179 13:20 < james__> Do we want to fork first
180 13:20 < sam_moore> Probably
181 13:20 < james__> That way someone can't make a change that is incorrect into the master
182 13:21 < sam_moore> Yes, this sounds good
183 13:22 < sam_moore> It won't let me fork it (probably because I'm the "owner")
184 13:24 < james__> I have forked succesfully
185 13:25 < james__> maybe branch?
186 13:25 < sam_moore> No, branches are different
187 13:25 < james__> Right...
188 13:25 < james__> well i made a branch for you? :P
189 13:26 < sam_moore> It doesn't matter if I directly edit the master repository anyway; I'll have to deal with all the pull requests before I do anything mysekf
190 13:27 < sam_moore> Yeah, we don't want to use branches just yet
191 13:28 < sam_moore> A fork is for each person working on the code; a branch is for when you want to make changes to something that might break parts of the code that already work
192 13:28 < sam_moore> For example: You have some really badly written code, but it does what it's meant to do
193 13:28 < sam_moore> So you make a branch "Improve networking code" or something like that
194 13:29 < sam_moore> Then you redo it, and only when you're done you merge your branch back into the master, getting rid of all the old code
195 13:30 < james__> Fair enough. I think i have made a pull request...
196 13:30 < sam_moore> Cool
197 13:31 < sam_moore> Now it should be in the main repository
198 13:32 < james__> yeah. worked
199 13:32 < sam_moore> I show up as the author of your changes, which is a bit silly
200 13:33 < Callum__> firefields opened this pull request 15 hours ago
201 13:33 < Callum__> what
202 13:34 < sam_moore> Is the clock on your local machine correct?
203 13:34 < Callum__> yea
204 13:34 < Callum__> matchesucc merged 1 commit into matchesucc:master from firefields:master 2 minutes ago
205 13:34 < Callum__> it also says that
206 13:34 < james__> Right.... Thats weird
207 13:35 < sam_moore> You guys should also be able to merge the pull requests, since you're collaborators
208 13:36 < Callum__> alright
209 13:36 < james__> Yeah. Should be able to
210 13:36 < sam_moore> So in summary: Fork the repository, make a pull request, go and check that nothing will break horribly, and then you can merge it
211 13:36 < james__> pretty much
212 13:36 < sam_moore> Cool
213 13:36 < sam_moore> We should put this in the progress report
214 13:37 < Callum__> Yea, detailing how we plan to collaborate the code
215 13:38 < sam_moore> So, should I put our IRC channel log into git?
216 13:39 < Callum__> probably a good idea
217 13:39 < sam_moore> That way people who weren't in the channel can read conversations they missed
218 13:39 < Callum__> unlikely be that useful but it would be good to have everything archived
219 13:42 < james__> Its always good to have everything archived
220 13:47 < Callum__> so noone else getting weird timestamps on github
221 13:47 < james__> not that i can see
222 13:48 < sam_moore> No, they all make sense to me
223 13:48 < Callum__> also my forked repo doesnt have the updated readme
224 13:48 < Callum__> iv added the upstream and tried fetch upstream and doesnt seem to do anything
225 13:48 < sam_moore> Try merging after the fetch
226 13:48 < sam_moore> fetch + merge = pull
227 13:49 < sam_moore> "Pull request" is a bit confusing, because you're not asking to pull from my repository; you're requesting that I pull from yours
228 13:49 < Callum__> yea, i got that. how do i do the merge?
229 13:50 < sam_moore> git merge upstream/master
230 13:51 < Callum__> yup that worked
231 13:51 < sam_moore> The GUI seems really terrible, I have no idea how to do this stuff with it
232 13:52 < sam_moore> I thought it might be easier if people weren't used to the command line, but there aren't that many commands
233 13:52 < Callum__> yea
234 13:52 < james__> Its easier to comment etc
235 13:53 < james__> But some of the functionality is horribly buried
236 13:53 < sam_moore> Do you get a text editor in the terminal when you want to commit?
237 13:54 < sam_moore> Oh well, whatever people find easiest
238 14:09 < Callum__> alright well i just submitted a pull request and accepted it
239 14:10 < sam_moore> Yep
240 14:10 < sam_moore> Callum- authored in 15 hours
242 14:11 < Callum__> ahahahahahaah
243 14:11 < sam_moore> Are you from the future?
244 14:11 < sam_moore> Does IRC mess with the space time continuum
245 14:11 < Callum__> it says 15 minutes ago for me, but the rest are 17 hjours ago
246 14:11 < Callum__> i must be from the future :o
247 14:12 < sam_moore> Someone's clock is out of skew
248 14:13 < sam_moore> That is really wierd
249 14:13 < sam_moore> You merged the pull request... before the file was changed... according to this history
250 14:14 < sam_moore> Oh!
251 14:14 < sam_moore> Is it because github is based in the US
252 14:14 < Callum__> but for you all the times are right apart from mine?
253 14:14 < Callum__> and for me all the times are wrong but mine
254 14:15 < sam_moore> Well it's only showing relative times
255 14:15 < Callum__> or do you get weird results from james as well?
256 14:15 < sam_moore> James times look reasonable
257 14:15 < Callum__> hmm. weird
258 14:15 < sam_moore> But notice how a lot of our stuff is on 3rd August, it's actually the 4th today
259 14:16 < Callum__> hmm yea
260 14:17 < sam_moore> I kind of think we should fix this, it's not a major issue but it will certainly be confusing
261 14:18 < sam_moore> Hey, wierd, the times look sensible in git.ucc
262 14:18 < sam_moore> http://git.ucc.asn.au/?p=matches/MCTX3420.git;a=summary
263 14:19 < Callum__> yea agreed
264 14:19 < Callum__> and that is kinda weird
265 14:20 < Callum__> i cant seem to find anything in account settings for a timezone
266 14:21 < Callum__> Anything else we need done by tomorrow? because i have a bunch of other stuff I'd like to get done
267 14:21 < sam_moore> While you're in account settings, you can set your author name for commits
268 14:22 < sam_moore> No, there's nothing urgent at this stage
269 14:22 < sam_moore> It's only the first week, and we only need 1 page
270 14:22 < sam_moore> We can be like "Here is a page of details on how we got Git to work" if we have to
271 14:22 < Callum__> Yea just we need to make sure we have enough for 1 page
272 14:23 < Callum__> hmm, true i suppose. set up IRC + git repo + discussed an outline on what is going to be required
273 14:24 < Callum__> Tbh he'l likely be happy if we just give him a summary of those meeting minutes
274 14:25 < Callum__> Anyway i'l divert my attention for now then. If you come across anything interesting or something that can be done il stick around in the channel
275 14:25 < sam_moore> Ok, thanks
276 14:26 < sam_moore> The first automatic commit of the irc logs seems to have worked!
277 14:26 < sam_moore> It also copies everything to git.ucc so we have a backup
278 14:26 < Callum__> nice
279 14:27 < sam_moore> The times might be correct as well :P
280 14:27 < Callum__> was just like "where is it? " then i realise i was looking at my forked repo
281 14:27 < sam_moore> Oh, just make sure you don't push anything to the git.ucc repo, because it doesn't go the other way
282 14:27 < sam_moore> Actuall I'll just remove everyone's keys to stop that from happening
283 14:28 < Callum__> haha, good to be sure. We need to make sure the other 2 have this sorted out. hopefully they rock up to the meeting tomorrow
284 14:28 < Callum__> oh wow. the logs go all the way back to when you first connected
285 14:28 < Callum__> haha
286 14:30 < Callum__> and according to me the logs were commited 15 hours ago
287 14:32 < sam_moore> Yeah, my logs will be the best to keep because I don't have to quit, so I should get everything
288 14:33 < Callum__> yea
289 14:34 < Callum__> Sigh. end of first week. already just written myself a fairly long list of things i need to do, which is by no means comprehensive
290 14:36 < sam_moore> I think I have a lot of work to do as well, I should do something for another unit
291 14:36 < sam_moore> See you later
292 14:36 < Callum__> later
293 15:32 < sam_moore> Ok, so pretty much anyone can comment on our stuff, and pretty much anyone can submit bug reports
294 15:32 < sam_moore> I'm going to say that's useful, and we should tell all the other teams about it
295 15:33 < sam_moore> Also I was supposed to go do something else, whoops
297 18:35 < sam_moore> I changed my username because someone pointed out it sounds like "matches succ"
298 18:35 < sam_moore> But the old links should redirect
300 18:36 -!- justin_ is now known as justin_kruger
302 18:37 < sam_moore> Whoops
303 20:21 < Callum__> whoops?
304 21:20 < sam_moore> EOF From client
305 21:32 < sam_moore> I wonder how I can get people's forks to merge into the main repository without them having to issue a pull request
306 21:34 < sam_moore> Ah, I can't, because basically they have total control over their own fork
307 21:35 < sam_moore> Everyone just remember to fetch from upstream before you do work and issue a pull request when you are done, and hopefully things will stay relatively in sync.
309 --- Day changed Mon Aug 05 2013
310 00:00 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
314 10:33 -!- Callum_ [
[email protected]] has quit ["AndroIRC - Android IRC Client ( http://www.androirc.com )"]
317 11:19 < Callum> hallo
318 11:29 < sam_moore> Hi
319 11:30 < sam_moore> I've spoken to Omid from the electronics team, they are in charge of the "microcontroller"
320 11:31 < sam_moore> Apparently they think a raspberry pi is a good choice
321 11:31 < sam_moore> I told him we thought we might need a lower level device to do the ADC/DAC in particular
322 11:32 < sam_moore> But they seem to think a raspberry pi by itself will work
323 11:33 < sam_moore> I'm kind of not sure who's responsible for this part, since we have "server hardware" and they have "microcontroller" and the raspberry pi is sort of both
324 11:33 < sam_moore> But if we agree we want a raspberry pi it probably won't be an issue
325 11:33 < sam_moore> Also apparently the unit coordinators recommended the raspberry pi as well
326 11:34 < Callum> Yea he did
327 11:34 < james__> Well we are using the raspberry pi as a server
328 11:34 < james__> And we can bootstrap microcontrollers onto it
329 11:34 < james__> So i guess we are in charge of the pi
330 11:35 < james__> And the are in charge of the hardware around it
331 11:35 < james__> *they
332 11:35 < sam_moore> Seems logical
333 11:36 < sam_moore> I don't know if you get email notifications; I did a block diagram using the ideas from our first meeting
334 11:36 < sam_moore> I kind of added some thoughts of my own
335 11:38 < sam_moore> Hopefully it makes sense
336 11:41 < sam_moore> If either of you gets time, would you like to start typing some of the progress report?
338 11:51 < james__> Do we have to submit a progress report? Because the guide to mechatronics project work that was on lms said we had to do some things for week 1 but not that
339 11:52 < sam_moore> I'm pretty sure we do
340 11:52 < sam_moore> Hang on
341 11:53 < sam_moore> All teams are expected to report next monday (see the report format in the unit outline/overview).
342 11:53 < sam_moore> All teams must review their sub-system and provide high level detail of what is required.
343 11:54 < sam_moore> All team must take an integrated approach. (I assume this means we have to start talking to other teams ASAP)
344 11:54 < sam_moore> I think the block diagram is a good start for the high level detail
345 11:54 < sam_moore> Then make some notes about how we're collaborating using git
346 11:55 < james__> git and irc
347 11:55 < sam_moore> We should decide whether Rowan or I will be the meeting convener
348 11:56 < james__> I think you
349 11:56 < james__> Just because you actually know what is going on
350 11:56 < sam_moore> Yes, I'm happy to do it and I think I can do a good job
351 11:56 < sam_moore> I just don't want to try and take over the group or something
352 11:56 < sam_moore> I have a good idea of what's going on, but we'll still need everyone to contribute
353 11:57 < sam_moore> I'm not a particular expert in any area, I just sort of know enough to have a general idea of how to approach things
354 11:57 < james__> Its important that the person who represents us has a firm knowledge base of whats possible and what we plan to do. Ultimately you are the person who best fills those requirements
355 11:58 < sam_moore> Ok, thanks, if everyone agrees we'll tell Rowan that when we meet
356 11:58 < sam_moore> And he can still talk to his friends for us, in fact the more of us that can communicate with the other teams the better
357 11:59 < james__> True
358 12:00 < james__> there isn't anything that says he can't talk to others
359 12:00 < sam_moore> Omid said his team was going to rotate the meeting convener, maybe we could try that later on once everyone has a better idea of what we're doing
360 12:00 < sam_moore> Anyway, I should do some other work, see you at 2pm
361 12:01 < james__> Yeah might be worth it. Gives everyone a taster
362 12:01 < james__> okay see you then
367 20:38 < sam_moore> I'm going to try using the GitHub issues and milestones thing
368 20:39 < sam_moore> It might help with keeping track of what we need to do and what we've done
370 20:50 < sam_moore> I think we had some difficulty setting specific goals for this week
371 20:50 < sam_moore> I can try and put together some longer term goals as a start, if that's helpful
372 20:51 < sam_moore> Hmm
373 20:52 < sam_moore> We weren't given a lot of requirements that the guy was asking us about
374 21:06 < sam_moore> So the most important task seems to be "determine those requirements"
375 21:07 < sam_moore> Well, we talked about it in the meeting, but I'm going to make GitHub issues for each of the areas so we have a good record
376 21:32 < Callum__> Sam are you talking to yourself or am i not just seeing the other messages?
377 21:35 < sam_moore> Yeah, just ranting
378 21:36 < sam_moore> Well if you read the messages, then I was talking to you :P
379 21:37 < Callum__> haha just they seemed like they were structured like you were responding to someone
380 21:39 < sam_moore> I guess that's how I'm used to using IRC, people tend to say stuff broadly directed at anyone even though they won't get an immediate reply
381 21:39 < sam_moore> Or even if they don't need a reply
382 21:45 < Callum__> Fair enough
384 --- Day changed Tue Aug 06 2013
393 15:12 < Callum__> Is the only image processing that needs doing detecting the edge of the can? (and doing measuring how it changes with time etc)
395 15:39 < Callum__> hey
396 15:39 < james__> what up
397 15:39 < sam_moore> Hi
398 15:39 < Callum__> Is the only image processing that needs doing detecting the edge of the can? (and doing measuring how it changes with time etc)
399 15:40 < sam_moore> Callum__: I think so
400 15:40 < james__> As far as i understand it yes
401 15:40 < Callum__> plus just booted up ubuntu on laptop. havent touched it since i did C programming a year ago xD
402 15:40 < sam_moore> It would also be nice to just have unprocessed images streamed to the GUI
403 15:40 < Callum__> yea what i was thinking
404 15:41 < Callum__> firstly, i can look into only processing a portion of the image, so we could get away with a larger resolution
405 15:41 < sam_moore> With the server side interface, I'm starting to think I'll ditch the apache2 webserver + CGI and integrate a minimal webserver + the lower level stuff into the same program
406 15:41 < Callum__> and openCV has a couple of algorithms to detect edges
407 15:41 < Callum__> so will likely look into one or 2 of those
408 15:41 < sam_moore> Just thinking about all the layers that are involved with the CGI approach... it probably won't turn out easier to code, and it will definitely be slower
409 15:42 < sam_moore> Plus, if we really care about performance, the apache2 webserver has a lot of features we don't care about
410 15:42 < james__> As long as i can access the raw files etc i should be able to display it via a gui
411 15:42 < sam_moore> The main one being it's designed to cope with multiple users well, and we want to configure it to only allow ONE user
412 15:43 < sam_moore> Yes, that sounds good
413 15:44 < Callum__> responding to who? me or james?
414 15:44 < sam_moore> Um... both now
415 15:44 < Callum__> haah
416 15:45 < sam_moore> Anyway, I've realised that our software will place an upper limit on the quality of the sensors
417 15:45 < james__> true
418 15:45 < sam_moore> Since we weren't given a requirement on quality, we should aim to get it as high as feasible
419 15:45 < sam_moore> But sensors group needs to have some idea of the upper limit that our software will place on quality
420 15:45 < Callum__> yea.
421 15:46 < james__> Start simple and ramp it up until the hardware breaks?
422 15:46 < sam_moore> No point streaming 1000 images a second if the JavaScript GUI can't send requests that fast.
423 15:46 < sam_moore> Yep.
424 15:46 < sam_moore> I know you're supposed to do task break downs and all that time management stuff, but the fact is we need to experiment with actual code to work out the best implementation
425 15:47 < james__> yeah. break it down into code and test code?
426 15:48 < sam_moore> Maybe?
427 15:49 < sam_moore> Well, we've got a high level idea of the software
428 15:49 < sam_moore> The first tasks should be "decide on the best software implementation of each level"
429 15:49 < sam_moore> To do that we need to test some minimalistic implementations
430 15:50 < Callum__> yea
431 15:50 < sam_moore> So, to set a goal for week 2, can it be "Decide on software implementation at each point in the block diagram"
432 15:51 < sam_moore> And "Determine upper limit on data transfer rate through software systems"
433 15:51 < sam_moore> The second one might take a bit longer.
434 15:52 < Callum__> githubs down for maintenance. hahah
435 15:52 < sam_moore> That happened like 2 seconds after I submitted a comment on the CGI stuff
436 15:53 < sam_moore> For a while it was showing me a Unicorn (?)
437 15:53 < Callum__> yea i got that before
438 15:53 < Callum__> when trying to access on my laptop
439 15:53 < sam_moore> Well... we have the git.ucc server
440 15:54 < sam_moore> But I was starting to like the Issues and Comments and all those actual features
441 15:54 < Callum__> hmm. doubt it will be down for long. will have to see
442 16:10 < Callum__> back up
447 18:35 < Rowan> test test
449 18:43 < Callum__> Hey
451 18:56 -github:#mctxuwa_softdev- [MCTX3420] none pushed 2 new commits to master: http://git.io/ZDMvew
452 18:56 -github:#mctxuwa_softdev- MCTX3420/master 64b0cd9 Sam Moore: Investigate software for interfacing with hardware via HTTP requests...
453 18:56 -github:#mctxuwa_softdev- MCTX3420/master 5afaa23 Sam Moore: Merge branch 'master' of github:szmoore/MCTX3420
456 18:57 -github:#mctxuwa_softdev- [MCTX3420] none pushed 1 new commit to master: http://git.io/1nMEMA
457 18:57 -github:#mctxuwa_softdev- MCTX3420/master 9579cea Sam Moore: Makefile for webserver test...
463 --- Day changed Wed Aug 07 2013
465 00:24 -github:#mctxuwa_softdev- [MCTX3420] none pushed 1 new commit to master: http://git.io/5DEPzw
466 00:24 -github:#mctxuwa_softdev- MCTX3420/master fe2fc11 Sam Moore: More work on webserver test...
469 00:52 -github:#mctxuwa_softdev- [MCTX3420] none pushed 1 new commit to master: http://git.io/r6aFJw
470 00:52 -github:#mctxuwa_softdev- MCTX3420/master e615433 Sam Moore: Add necessary HTTP response headers...
473 01:00 -github:#mctxuwa_softdev- [MCTX3420] none pushed 1 new commit to master: http://git.io/eZPWcQ
474 01:00 -github:#mctxuwa_softdev- MCTX3420/master b101617 Sam Moore: Automatic commit of irc logs
476 10:07 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
480 20:43 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
481 20:45 -github:#mctxuwa_softdev- [MCTX3420] none pushed 3 new commits to master: http://git.io/Dhb-Fg
482 20:45 -github:#mctxuwa_softdev- MCTX3420/master fe2fc11 Sam Moore: More work on webserver test...
483 20:45 -github:#mctxuwa_softdev- MCTX3420/master e615433 Sam Moore: Add necessary HTTP response headers...
484 20:45 -github:#mctxuwa_softdev- MCTX3420/master b101617 Sam Moore: Automatic commit of irc logs
485 20:45 -github:#mctxuwa_softdev- [MCTX3420] none pushed 3 new commits to master: http://git.io/Dhb-Fg
486 20:45 -github:#mctxuwa_softdev- MCTX3420/master fe2fc11 Sam Moore: More work on webserver test...
487 20:45 -github:#mctxuwa_softdev- MCTX3420/master e615433 Sam Moore: Add necessary HTTP response headers...
488 20:45 -github:#mctxuwa_softdev- MCTX3420/master b101617 Sam Moore: Automatic commit of irc logs
489 20:46 < sam_moore> Whoops, I was trying to make it less spammy and ended up making it spam us
490 20:53 < Callum__> haha nice work
491 20:58 < sam_moore> I have a minimal web server in C done
492 20:58 < sam_moore> It was surprisingly easy actually
493 21:05 -github:#mctxuwa_softdev- [MCTX3420] none pushed 2 new commits to master: http://git.io/Tui0FA
494 21:05 -github:#mctxuwa_softdev- MCTX3420/master c1321a7 Sam Moore: Test webserver with minimalist JavaScript...
495 21:05 -github:#mctxuwa_softdev- MCTX3420/master 1b2939d Sam Moore: Merge branch 'master' of github:szmoore/MCTX3420...
496 21:07 < sam_moore> Hooray, more spam
497 21:07 < sam_moore> Maybe I should just turn that off.
498 21:35 < Callum__> Maybe, its kinda goods to know when people commit things though, restricted to one line would be good
500 --- Day changed Thu Aug 08 2013
502 08:59 -!- Callum_ [
[email protected]] has quit ["AndroIRC - Android IRC Client ( http://www.androirc.com )"]
505 --- Day changed Sun Aug 11 2013
509 14:09 < Callum__> actually so much work to do already.
510 14:47 < sam_moore> Yep
511 15:15 < Callum__> well iv spent some time thinking over this, finally get around to writing it down. so iv probably spent close to 4 hours or so thinking about it (while doing other things) but really only spent an hour and a half according to diary
512 15:25 < sam_moore> We can always flesh out people's reports with graphs and stuff
513 15:27 < Callum__> well we doing 1 per person or group?
514 15:29 < sam_moore> 1 per person is the safest way to go I think
515 15:29 < sam_moore> We can always summarise them
516 15:30 < Callum__> well, tbh i think we should do 1 per person and summarise, but not necessarily go for a full page. thing is not sure how they expect us to do 1 page for 5 people AND be detailed
517 15:30 < sam_moore> Yep
518 15:31 < Callum__> so they might end up making it 1 per person anyway.
519 15:31 < Callum__> not very well thought out either way
520 15:31 < sam_moore> Let's just submit a multiple page report, with a bit from each person and a summary. If some people have less than a page that's fine.
521 15:32 < Callum__> Yea, agreed thats the best way to go about it. Unless they complain about it being too long
522 15:32 < sam_moore> That's why we include a summary :P
523 15:33 < sam_moore> Although, it might be difficult to make the summary actually summarise things, since everyone's already using pretty concise summaries
524 15:33 < sam_moore> Oh well, writing more stuff is safer to start with.
525 15:34 < Callum__> hmm. its kind of a pain though, write it all down in your book...oh look now i need to rewrite most of it for a report..
526 15:34 < sam_moore> Ah crap, I forgot about the book
527 15:34 < Callum__> haha
528 15:34 < sam_moore> Yeah... write it all down in the git commit messages, write it all down in the report, write it all down in the diary...
529 15:35 < sam_moore> I suppose in the "Real World" you have to do stuff like this
530 15:35 < Callum__> yea true
531 18:16 < Callum__> Not sure when il get round to writing what i'v done but il do it tonight some time. We finalising it tomorrow and printing it off then?
532 18:27 < sam_moore> Yes, I'd like to have it done before the meeting, or at least do it first thing in the meeting
533 18:27 < sam_moore> Then there are some things I need to ask everyone about to progress with my part of the code
534 18:27 < sam_moore> Since I'm sort of doing the bit in the middle that gets all the other bits to talk to each other
535 18:28 < sam_moore> I think it would be good to keep all the raspberry pi code in a single process, running in seperate threads
536 18:29 < sam_moore> But to do that we'd need everyone to use the same language
537 18:30 < sam_moore> Also we need to start thinking about the structure of the system in a bit more detail
538 18:31 < sam_moore> Like: We can't just transfer data straight to a GUI, because the user will want to use the GUI to start the experiment, then go away and come back later to view results (and possibly save them on their own machine)
539 18:32 < sam_moore> Also if we do transfer everything straight to the GUI we'd be limited by the speed of the GUI, and JavaScript requests are slow
540 18:34 < Callum__> yea
541 18:34 < sam_moore> Pretty easy to just dump stuff to a data file, but we probably also want the ability to do it in realtime
542 18:35 < sam_moore> Anyway, good luck, see you tomorrow
543 18:36 < Callum__> Alright, cya tomorrow them
545 --- Day changed Mon Aug 12 2013
548 --- Log closed Tue Aug 13 07:49:14 2013
549 --- Log opened Tue Aug 13 07:55:27 2013
551 07:55 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
552 07:55 -!- Irssi: Join to #mctxuwa_softdev was synced in 9 secs
555 10:01 < Callum> So apparently we have a new member..
556 10:12 < sam_moor1> Yep, Jeremy Tan, apparently he's doing CS as well?
557 10:13 < sam_moor1> So, with the two sources of confusion we have so far...
558 10:13 < sam_moor1> 1. The Camera - Adrian thinks we need one, Sensors team doesn't, everyone needs to recheck calculations
559 10:14 < sam_moor1> The "Can" team wanted to use some kind of tiny can with a relatively thick wall, Adrian recommended a Coke Can, Oliver used Rockstar Cans last year and recommended them
560 10:14 < Callum> well, they may be right in saying we may not be able to do any proper processing on it
561 10:14 < Callum> but we will need one to relay whats actually HAPPENING in the system
562 10:14 < Callum> surely the sensors team see that..
563 10:15 < sam_moor1> I guess, I told them in their meeting it would probably be useful
564 10:15 < sam_moor1> Anyway...
565 10:15 < sam_moor1> We all got in trouble for not communicating between teams well enough
566 10:15 < sam_moor1> So now the 9am session is for teams to communicate (at least one member is meant to go)
567 10:15 < Callum> how many people went to the lecture?
568 10:15 < sam_moor1> About 6
570 10:16 < sam_moor1> I think only one team didn't have a representative, electronics?
571 10:16 < Callum> hmm. thats not too bad then.
572 10:16 < Callum> but still, not really our fault communication was poor. we attempted to set up meetings and to convene with others.
573 10:17 < Callum> The only other thing we could have done is actually told people, right we're meeting at this time. come or dont (then you'd have like 1 or 2 people at most)
574 10:17 < sam_moor1> Yeah, I really think this project needed some kind of direction at the start
575 10:17 < sam_moor1> I think that's what we're going to have to do
576 10:18 < sam_moor1> We're going to have to be more assertive; we think we need Arduinos, electronics team doesn't seem to know, we should just say "Right, we're using some Arduinos"
577 10:18 < sam_moor1> At least that's the vibe I got from Adrian
578 10:18 < sam_moor1> Also what happened to my name
579 10:18 < Callum> hmm ok. it would help if we had the team convener meeting to do that
580 10:18 -!- You're now known as sam_moore
581 10:19 < Callum> and no idea
582 10:19 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
583 10:20 < sam_moore> Also, so far we've neglected physical details a bit
584 10:20 < sam_moore> Lastly, we need to start ordering things as soon as possible
585 10:21 < sam_moore> Oh, and we (as in, all teams) are supposed to have a schedule of tasks agreed upon
586 10:21 < sam_moore> Right, I need to have lunch
587 10:21 < sam_moore> *breakfast
588 10:22 < sam_moore> Then I guess I can panic some more
589 10:23 < Callum> haha. we'v only had 2 weeks to work on this really. We can pull it back.
590 10:24 < sam_moore> The scary part is where they do a very similar project every year and no one ever succeeds :S
591 10:25 < sam_moore> They seem to think simply throwing the entire class at it (instead of one team of 6) will make it work this time
592 10:25 < sam_moore> Oh well, they can't just fail the entire class
593 10:25 < sam_moore> It would be nice to actually succeed though
594 10:30 < Callum> Yea, well even if it doesnt work a lot of the marking will come from the shit like the diary
595 10:30 < Callum> but yes, it would be nice to see a can go boom
596 11:57 < Callum> alright so am i still doing the taking images thing and storing it? Coz we pretty much need the camera. what we do with the images though dno
597 11:58 < sam_moore> Just take the images and save them to a file for a start I guess
598 12:00 < Callum> alright.
599 12:13 < Callum> I might reinstall linux on my laptop, stick with ubuntu or go debian?
600 12:51 < sam_moore> I'd recommend debian
601 12:51 < sam_moore> It's not that much harder to use, but it's closer to raspian
602 13:06 < Callum> alright. any port better to use?
603 13:15 < sam_moore> Oh, stick with "stable"
604 13:15 < sam_moore> ie: Wheezy
605 13:16 < sam_moore> No matter what you do, do NOT get "Sid"
606 13:18 < Callum> nah i meant the architecture
610 13:21 < sam_moore> Hi
611 13:23 < jtanx> i should say that right now I cant access g19 because I haven't gone through the safety induction yet
612 13:23 < sam_moore> Callum: The architecture shouldn't matter too much
613 13:24 < Callum> we can let you in. As long as you don't do anything stupid it will be fine
614 13:24 < Callum> alright
615 13:25 < sam_moore> We can just compile code on the RPi itself, or if that's too slow (I doubt it) there will be cross compilers
617 13:25 < sam_moore> It's just nice to be able to run test software in debian
618 13:25 < jtanx> so do you have access to an/the RPi and the other microcontrollers, or is that tba
619 13:26 < sam_moore> We have access to "an" (not "the") RPi
620 13:26 < Callum> rowan has an arduino too
621 13:26 < sam_moore> Ah, that's good
622 13:26 < Callum> atleast i think he said he did
623 13:27 < Callum> just dont know the exact hardware we're using and won't get access to it for a few weeks atleast (hopefully not too long. need to make sure other teams are doing everything on time)
624 13:27 < Callum> speaking of which we should write up a time schedule for our team and make sure a project one gets written up
625 13:27 < sam_moore> Adrian said to allow for 6 weeks ordering time
626 13:28 < sam_moore> Yeah, the entire class needs to agree on a schedule
627 13:28 < Callum> hmm. true i guess, by the time adrian gets the bill of materials, clears it and the stuff gets ordered in
628 13:28 < Callum> but at the current rate shit wont be chosen in time
629 13:29 < jtanx> i'm surprised that not much has been done in three weeks
630 13:29 < sam_moore> The problem is there are too many people working on this
631 13:29 < Callum> its been less than 3 weeks though
632 13:30 < sam_moore> Right. Let's make a schedule then.
633 13:30 < sam_moore> Just a second
634 13:30 < Callum> we only got the teams on like wed first week
636 13:31 < Callum> And having 5-6 people per team across 6 teams without a project manager...makes sense
637 13:31 < sam_moore> Haha
638 13:31 < sam_moore> Ok, so I have an excel document
639 13:31 < sam_moore> Anyone here actually made a schedule for a project?
641 13:32 < sam_moore> Welp
642 13:32 < jtanx> ms project was suggested in cits3200
643 13:32 < jtanx> nice gantt chart and everything
644 13:32 < sam_moore> Does it allow collaborative editing?
645 13:33 < sam_moore> Also, is there an open source version :P
646 13:33 < sam_moore> Ok, I've shared a google spreadsheet
647 13:34 < jtanx> not likely haha although there was something called ms project server which might allow collaboraitve stuff
648 13:34 < jtanx> you can get this all off msdnaa
649 13:34 < jtanx> but since noone's used it before it might be better to stick with excel
650 13:34 < sam_moore> Ok, let's just try and think what we need to get other teams to do, and what we need to do for other teams
651 13:35 < Callum> HAHAH
652 13:35 < sam_moore> Well
653 13:35 < Callum> Hello everyone,
654 13:35 < Callum> It appears that the lab signup sheets for GENG4402, the MECH/MCTX/Oil and Gas students have dissapeared from the desk at the stairwell.
655 13:35 < Callum> Can you please check if you have it and return it as soon as possible? Many students still need to sign up. I will then scan and put online once complete so that you can check when your lab is.
656 13:35 < Callum> PLEASE RETURN THE SHEETS.
657 13:35 < Callum> Thank you
658 13:35 < Callum> thats hilarious
660 13:36 < sam_moore> Oh dear
661 13:36 < sam_moore> It strikes me that something like a Makefile, except a bit more GUI, would be good for this
663 13:37 < jtanx> you lost me there - what are you referring to
665 13:37 < sam_moore> To compile C projects that involve several files, you use something called "make"
666 13:37 < sam_moore> You write a Makefile for it
668 13:38 < sam_moore> The Makefile has a list of targets and what they depend on
669 13:38 < sam_moore> And how to make them once their dependency exists
671 13:38 < sam_moore> Then you run "make" and it reads the make file and magically compiles everything in the right order
672 13:38 < Callum> yea we get what make is
673 13:39 < sam_moore> Ok, I was referring to the list of tasks
674 13:39 < sam_moore> That depend on each other
677 13:39 < sam_moore> It was a bad joke
678 13:39 < sam_moore> I am not seriously suggesting we use make to plan the project
679 13:40 < Callum> hahahah
680 13:40 < Callum> now that i would like to see :p
681 13:40 < jtanx> um just with git
682 13:40 < jtanx> i've never done pull requests before
683 13:40 < sam_moore> Neither had we until last week :P
684 13:41 < sam_moore> Basically you make your own fork of the repositoy, and there is a pull request button that lets you ask to have the changes merged back into the upstream repository
687 13:51 < jtanx> well that was pretty straight forward - I understand it now
688 15:06 < sam_moore> I made a #mctxuwa channel for group representatives
689 15:06 < sam_moore> I don't know if people will use it, but at least it's an attempt at something
690 15:47 < Callum> tbh it makes more sense for us all to use one
691 15:47 < Callum> unless the one for everyone is actually used often enough to justify us having our own
692 16:11 < sam_moore> Yeah, there's nothing stopping people that aren't group representatives from joining it
693 16:11 < sam_moore> It will certainly make it easier if there are more people talking to other teams directly than just the representative
694 16:11 < sam_moore> We might still want our own for discussing the details of code
695 16:12 < sam_moore> Speaking of which, I'm currently tidying up the test webserver code I wrote
696 16:17 < sam_moore> Does: FunctionName, variable_name, Structure, Extern_FunctionName, g_global_variable seem suitable
697 16:19 < sam_moore> Well, unless anyone objects before I've satisfied my obsessive compulsive urges, that's what it will be
698 16:19 < sam_moore> Until then, it'll probably take a while, and find-replace is fast
699 16:20 < sam_moore> Other than that, the style of comments/documentation in the test webserver is what I'll keep using
700 16:22 < sam_moore> If someone wants to actually write code... it would be good to have a watchdog program that uses exec to start the main program and detects SIGCHLD when it crashes
701 16:22 < sam_moore> Then we can put some kind of emergency "Turn all the things off!" in that
702 16:57 < jtanx> what about something like this? http://stackoverflow.com/questions/696839/how-do-i-write-a-bash-script-to-restart-a-process-if-it-dies
703 16:58 < sam_moore> Oh cool, that looks good
704 17:03 < sam_moore> I'll be back later tonight, bye
706 17:21 < jtanx> wow okay you're actually writing a webserver from the ground up?
707 17:22 < jtanx> what if you just had software that got the results and then wrote that to a html/php file
708 17:22 < jtanx> then you can just run nginx and serve it up
709 17:45 < jtanx> or what about if you ran an sql server, so you update the database from your program
710 17:46 < jtanx> then you can either use php to interface with the database
711 17:46 < jtanx> or you could make some sort of api and serve the data in json format
712 17:50 < jtanx> sqlite
713 19:12 < jtanx> you could do something like this: http://pastebin.com/mEdbu4jR
714 19:13 < jtanx> where instead of outputting html, you could make it output json, which is then interpreted by your actual webpage
719 --- Day changed Wed Aug 14 2013
721 09:13 < jtanx> I've done a version using fastcgi, which was surprisingly quite easy to set up
722 09:13 < jtanx> see here: https://github.com/jtanx/MCTX3420/tree/master/testing/fastcgi-approach
723 10:41 < sam_moore> That looks interesting, I'd prefer that to the PHP/database solution
724 10:42 < sam_moore> My concern is: You have to query the web server to start the process, even though it keeps running
725 10:42 < sam_moore> Also, I know "write a custom HTTP server" sounds scary, but it does actually work
727 10:43 < jtanx> fastcgi
728 10:43 < jtanx> the process is started once and always runs
729 10:43 < jtanx> so you have a request loop
731 10:44 < jtanx> how do you envision it working?
732 10:45 < sam_moore> Oh, right, I see how the fastcgi approach would work, it's basically the same idea; you have something responding to HTTP queries in one thread, something dealing with sensors/actuators in seperate threads
734 10:46 < jtanx> except that you don't have to worry about maintaining your own webserver
735 10:46 < sam_moore> Cool
736 10:46 < sam_moore> I do think that the HTTP server isn't that hard, and it's mostly working
737 10:46 < sam_moore> But we can probably switch to fastcgi
738 10:48 < sam_moore> I mean, we still have to parse a query string right?
739 10:48 < jtanx> well yes
740 10:48 < jtanx> if your request was
741 10:48 < jtanx> http://blah/cgi/?key=value&anotherkey=value2
742 10:48 < jtanx> you'd get back key=value&anotherkey=value2
743 10:48 < jtanx> as query string
744 10:50 < jtanx> try it out here: http://124.169.120.181:8080/cgi
745 10:51 < jtanx> (hopefully that forwards ok)
746 10:51 < sam_moore> Yep, that's cool
747 10:51 < sam_moore> The HTTP server I wrote basically does that
748 10:51 < sam_moore> But if it really bothers you, I'm fine with switching to fastcgi :P
749 10:52 < jtanx> well whatever works
750 10:52 < jtanx> but I thought it might be more maintainable if you used something that already exists :P
751 10:52 < sam_moore> Yeah, but thinking about it, what maintainence does the HTTP server require?
752 10:53 < sam_moore> Oh well, it's a good idea
753 10:53 < jtanx> for this situation not much
754 10:57 < sam_moore> We can pretty easily start with a structure that would allow us to switch, but I'd lean towards keeping the custom HTTP server
755 10:58 < sam_moore> Have you done multithreading in C before?
756 10:58 < jtanx> in windows yes
757 10:58 < jtanx> on linux not really
758 10:58 < sam_moore> Ah, I've only done it on linux
759 10:58 < jtanx> i did a bit in operating systems
760 10:59 < jtanx> but kinda forgot
761 10:59 < sam_moore> It shouldn't be too hard for our purposes
762 11:00 < jtanx> that thing with running a custom webserver is that if anyone wants to reuse this in the future, i doubt they'd really like the idea of that
763 11:01 < jtanx> say they had some new fangled thing that requires php
764 11:01 < jtanx> which isn't going to work
765 11:01 < jtanx> but with a standard webserver like apache or nginx, it's really easy to just install an extra addon
766 11:02 < sam_moore> I suppose... what would they need the new fangled php thing for?
767 11:03 < jtanx> well that's the thing - for now I don't know, but it could be required
768 11:03 < sam_moore> Yeah, good point
769 11:03 < sam_moore> Ok, another reason to use an existing web server, is we might require some advanced features if we want to be serious about the safety stuff
770 11:04 < sam_moore> For example, it would be a fair amount of work to add SSL to make the custom thing do https
771 11:04 < jtanx> oh yeah
772 11:04 < jtanx> that too
773 11:04 < sam_moore> Also we might want some authentication on it
774 11:04 < jtanx> nginx/apache are highly customisable
775 11:05 < sam_moore> I've never used nginx, what are it'
776 11:05 < sam_moore> s advantages over apache2?
779 11:05 < jtanx> its really good
780 11:05 < sam_moore> Haha
781 11:05 < jtanx> a lot of sites use it because it's fast
782 11:05 < sam_moore> Fast is good
783 11:05 < jtanx> faster than apache
784 11:05 < sam_moore> Sold
785 11:05 < sam_moore> Well, we only need one user as well
786 11:05 < sam_moore> In fact, we deliberately do not want to have multiple clients able to use the thing at the same time
787 11:05 < jtanx> haha true
788 11:07 < sam_moore> Ok, so I think you've convinced me to use fastcgi
789 11:07 < sam_moore> Most of the custom HTTP server was reused code, so I didn't waste too much time on it
790 11:07 < jtanx> haha ok
791 11:07 < jtanx> have you written one before?
792 11:09 < sam_moore> Not specifically a HTTP server, but I've written a project for posix systems with a fair bit of networking
793 11:09 < sam_moore> git.ucc.asn.au/?p=matches/swarm.git
795 11:10 < sam_moore> It allows you to run a shell, eg: bash accross multiple machines at once
796 11:11 < sam_moore> Not as useful as I thought it might be, but it was fun
798 11:12 < jtanx> what did you end up using it for?
799 11:13 < sam_moore> I was setting up a programming competition where you have AIs play against each other
800 11:13 < sam_moore> I wanted to make a round robin
801 11:13 < sam_moore> So I had a bash script setup to do that, but then I got impatient, because it would have to run the games in order
803 11:14 < sam_moore> Well it turned out no one entered the competition, so I probably didn't need to go overboard
804 11:14 < sam_moore> But maybe I can use it for something else
805 11:15 < sam_moore> For the threading I'm thinking of using pthreads
806 11:16 < sam_moore> The alternative is OpenMP, but it's more suited to numerical computation, rather than having seperate things talking to each other
808 11:17 < sam_moore> My goal for this week was to have the framework started, so we just have some really basic threads running and then we can start implementing them
809 11:17 < jtanx> yeah that would be good
810 11:18 < sam_moore> If you want to do some work with the fastcgi part so that we'll be able to parse the query strings, that would probably be a good start
811 11:18 < sam_moore> We don't have the exact details of pretty much anything yet
812 11:18 < sam_moore> Maybe talk to James/Rowan about how the GUI is going to query the server
813 11:19 < sam_moore> Also, did you see my suggested naming convention?
815 11:20 < sam_moore> I don't really mind, although I'd prefer not to have hungarian notation
816 11:20 < sam_moore> As long as it'
817 11:20 < sam_moore> s consistent
818 11:21 < sam_moore> But the suggestion was: FunctionName, variable_name (local or member), Structure, ENUMVALUE, Extern_FunctionName, g_global
819 11:21 < jtanx> okay I'll try to keep to that
820 11:22 < sam_moore> Cool, I should probably go do something else
821 12:33 < jtanx> i gotta go
827 16:56 < jtanx_> a beagleboard
830 16:58 -!- jtanx_ is now known as jtanx
831 17:03 < jtanx> is it the beaglebone black?
832 17:03 < jtanx> sounds interesting
833 17:04 < sam_moore> They didn't specify
834 17:04 < sam_moore> Oh right, I accidentally cut out his message
835 17:04 < sam_moore> tl;dr "Beagle Board"
836 17:04 < jtanx> the beagle board is around $125 though
837 17:04 < sam_moore> Probably the Beaglebone black
838 17:04 < sam_moore> Oh really
839 17:04 < sam_moore> Heh
841 17:05 < jtanx> the beaglebone black is $45
842 17:05 < jtanx> but just looking the A/D converter on the black has a max voltage of 1.8v
843 17:05 < sam_moore> That's probably what they meant, since they said it is "not much more expensive"
844 17:05 < sam_moore> That should be fine; the sensors team says things are in mV
846 17:05 < jtanx> that's good
847 17:05 < sam_moore> Really though... electronics should be asking the sensors team stuff like this
848 17:06 < jtanx> heh yeah
849 17:06 < sam_moore> They should probably have asked us if it was feasable for software
850 17:06 < sam_moore> Maybe they had someone who knew it would be, but still
851 17:06 < sam_moore> It looks like it is anyway, so crisis averted
852 17:07 < jtanx> just with the sensors, I think that the diferences need to be amplified so it covers the full range of the A/D converter
853 17:07 < sam_moore> Yes, the sensors guy knows that
854 17:07 < jtanx> yeah so if its only 1.8v there's less range than 0-5v
855 17:08 < jtanx> is that compensated enough by having a 12 bit a/d converter vs a 10 bit (i think arduino is 10 bit) converter
856 17:10 < sam_moore> I think so; you get ~4x more resolution from the 12 bit ADC and lose ~3x from the lower range
857 17:10 < sam_moore> Also there's no set requirement yet on what the resolution should be
859 17:11 < jtanx> well in any case the bb black sounds quite nice
860 17:11 < sam_moore> Yep, it'll probably be good to use
861 17:14 < sam_moore> I'm much happier now that we actually have regular verbal communication with the other teams
862 18:23 < sam_moore> I'm looking into getting doxygen working for this
863 18:59 < jtanx> for the documentation?
864 18:59 < jtanx> seems good, but never used it before myself
865 19:01 < jtanx> looks a lot like javadoc
869 --- Day changed Thu Aug 15 2013
874 08:22 < jtanx> just a suggestion for the logging functions, but you can use macros
875 08:22 < jtanx> to get the function name (and even file name)
877 08:22 < jtanx> http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html
878 08:23 < jtanx> so you can do stuff like #define Log(level, fmt, ...) LogReal(level, __func__, fmt, __VA_ARGS__)
879 08:25 < jtanx> it should be c99 conformant
880 09:15 < jtanx> I created a pull request anyway
883 13:39 < sam_moore> Yeah, I probably should have looked at that
884 13:46 < jtanx> back to the rpi+arduino
885 13:47 < jtanx> didn't they know about the beagle board black, or can that not be used for some reason?
886 13:48 < jtanx> beagle bone* black
887 14:20 < sam_moore> I don't know what model they were looking at exactly
888 14:20 < sam_moore> I told them the Beagle Bone was about $50, I haven't had much time to research it myself
889 14:20 < sam_moore> I didn't know about the Beagle Board/Bone, which was why I suggeste the RPi + Arduino
890 14:20 < sam_moore> They originally were just considering an Arduino
891 14:21 < sam_moore> Which would not have been fun for the remote interfacing stuff
892 14:21 < sam_moore> Well we could do it, but we wouldn't be able to have a nice web browser controlled GUI, probably some dedicated networked server/client with a GUI program installed on the client machine
893 14:22 < sam_moore> Also image processing would have been interesting
894 14:23 < sam_moore> Next time there's a combined groups meeting, hopefully we can talk to them more
896 14:24 < jtanx> there's quite a few
897 14:24 < jtanx> there's a beagleboard which is ~150
898 14:24 < jtanx> beaglebone which is ~90
899 14:24 < jtanx> beaglebone black which is ~50
900 14:24 < sam_moore> Right
901 14:24 < sam_moore> So they were probably looking at the beaglebone for $90
902 14:24 < jtanx> yeah probably
903 14:24 < jtanx> it's weird because the black version has better specs, from what i can see
904 14:25 < sam_moore> But still, even for $150, if it saves us 10 hours of writing code to interface the RPi with Arduinos, it will be worth it
905 14:25 < jtanx> yeah exactly
906 14:25 < sam_moore> Arduinos themselves cost a bit
908 14:25 < jtanx> you can get equivalents off ebay
909 14:25 < jtanx> like an uno is $10
910 14:26 < sam_moore> The only issue with the beaglebone to avoid having to use arduinos as well, is whether it has enough ADC by itself
912 14:26 < jtanx> well how many sensors are needed
913 14:26 < sam_moore> If it doesn't, you might have to add an Arduino or two anyway
914 14:26 < jtanx> you could just add on an adc chip
915 14:26 < sam_moore> Yes, or something like that
916 14:27 < jtanx> the beaglebone has like a bazillion gpio ports
917 14:31 < sam_moore> Well without getting into the specific details, it sounds like we should recommend they use that
918 14:32 < sam_moore> Apparently the sensors team will have a list ready by monday, which will be good
919 14:33 < jtanx> that'd be good
920 14:35 < jtanx> when are combined group meetings? just the 9am slot?
921 14:36 < sam_moore> 9am Tuesday is the "official" time picked by Adrian, 2pm Wednesday is the time that we agreed between the teams
922 14:36 < sam_moore> I'm going to go to both, if more people want to come from the team that's also good
923 14:37 < sam_moore> Realistically not everyone is going to come, so I'll have to send emails a lot
925 14:39 < sam_moore> What account do you need to be invited to the dropbox?
926 14:39 < sam_moore> I think Alex invited everyone using their student email
927 14:40 < sam_moore> Oh right, you wouldn't have been in the list that he used if you enrolled late
928 14:40 < jtanx> yeah, through student email would be good
929 14:41 < jtanx> last year's experiment ran with an arduino diecimila which only had 5 analogue inputs
930 14:41 < jtanx> any reason why we need more?
931 14:41 < jtanx> sorry that's 6
932 14:42 < sam_moore> I think the estimate was: 4-6 strain gauges, 1 temperature sensor, 1 microphone, 2 pressure gauges, 1 (maybe 2) USB webcam
934 14:44 < jtanx> At that rate you would definitely need something with more analogue inputs
935 14:45 < sam_moore> We also might need a DAC for one of the pneumatics team's devices
936 14:46 < sam_moore> But you can't get that on a microcontroller, there'd have to be a seperate module
938 14:48 < jtanx> it'd be no point interfacing an arduino to the rpi/beaglebone if all you want is more analog inputs
939 14:49 < sam_moore> If you can get modules for ADC that can talk to a rpi/beaglebone, then yes
941 14:49 < jtanx> I don't think they're too hard to wire up
942 14:50 < sam_moore> I think the electronics team should be considering all this, but I don't know since we haven't verbally spoken
943 14:50 < sam_moore> Well not at length anyway
944 14:51 < sam_moore> Just when I happen to bump into Omid
946 14:54 < sam_moore> This project is probably going to be a good lesson in "Why you need a project manager"
947 14:55 < jtanx> so true
948 14:59 < jtanx> with the web interface, what sort of update times are we looking at?
949 15:00 < sam_moore> My tests with apache2 and the custom HTTP server showed it took about 50us for jQuery to get an AJAX request
950 15:01 < sam_moore> There was only one data point returned each time though, we can probably optimise it a bit by returning multiple data points with a request
952 15:07 < jtanx> I wonder what sort of performance impact running one (or two) cameras would have on the rpi/beaglebone
954 15:45 < jtanx> I was wondering why my nginx config wasn't working
955 15:45 < jtanx> until I realised that gedit was creating a backup copy of the config file
956 15:45 < jtanx> so nginx was reading both the original and backup
957 17:28 < sam_moore> That's wierd, you'd think it would only read one config file
958 17:34 < jtanx> well it was in a config directory
959 17:36 < sam_moore> Oh, ok
960 18:49 < jtanx> so the current idea i have with the web thing is
961 18:49 < jtanx> you can query it like http://domain/api/module?key=value&key=value2
962 18:50 < jtanx> and then you could return something in json format or whatever is most suitable for the ajax query
963 19:46 < jtanx> you can test it at http://mctx.us.to:8080/apoi
964 19:46 < jtanx> woops, http://mctx.us.to:8080/api
965 19:46 < jtanx> the only 'module' which will give a response of '200 OK' is sensors
966 19:47 < jtanx> which currently spits back any arguments you pass to it
967 19:47 < jtanx> eg http://mctx.us.to:8080/api/sensors?k=v
968 19:50 < jtanx> hopefully it doesn't break
969 20:44 < sam_moore> I'll take a look
970 20:45 < sam_moore> Looks good
971 20:45 < sam_moore> I'm writing a dummy thread for a sensor now
972 21:04 < jtanx> the code behind it (in the cgi module) is a bit clunky right now though
973 21:04 < jtanx> is there a meeting tomorrow?
974 21:05 < sam_moore> I don't think so, sorry
975 21:06 < jtanx> ok that's alright
976 21:06 < sam_moore> Things aren't urgent (yet)
978 21:12 < sam_moore> For the progress report: I'd like everyone to write a page individually, then we can summarize those in the group report
979 21:12 < sam_moore> Well you don't have to write a whole page, and if you miss a week or so it's not a big problem
981 21:17 < jtanx> i'll try to remember that
982 21:18 < jtanx> do you think we need to keep track of how long we spend on this project
983 21:18 < jtanx> for that 'cost estimate'
986 22:23 < sam_moore> For the cost estimate: Yes, we are supposed to have a technical diary (hand written)
987 22:23 < sam_moore> Including all notes and times worked on the project
989 --- Day changed Fri Aug 16 2013
991 09:48 < jtanx> I was wondering what sort of model you have for reading/storing sensor values and controlling actuators
992 10:02 < sam_moore> At the moment each sensor has a thread that continuously polls the sensor and dumps data to a binary file
993 10:03 < sam_moore> For reading there is a thread that fills a buffer from the file when it gets a request
994 10:04 < sam_moore> It might be better to change to a single thread for sensors/actuators though
995 10:04 < jtanx> yeah, I was about to say if it was necessary to have one for each
996 10:05 < sam_moore> Probably not, if you had varying polling speeds it would be useful, because you could poll the fast sensors seperately from the slow ones
997 10:05 < jtanx> how do you wish to pass the data to the fcgi module?
998 10:06 < jtanx> right now
999 10:06 < jtanx> i've kinda set it so
1000 10:06 < jtanx> there's this thing called a ModuleHandler
1001 10:07 < jtanx> so you can pass it some data (tba what this is), and it also receives the query string from the use
1002 10:09 < sam_moore> Well, the ModuleHandler gets called whenever the right HTTP request is made right?
1003 10:10 < sam_moore> So, that function retrieves the data it needs to respond to the request
1004 10:10 < jtanx> well rightnow the typedef is
1005 10:10 < jtanx> typedef void (*ModuleHandler) (Data *data, char *params);
1006 10:10 < jtanx> so it's up to you to write a module handler (eg SensorsHandler)
1007 10:11 < sam_moore> Ok, data's a bit of an ambigous name, so is that something passed to the ModuleHandler when the FastCGI gets a request?
1008 10:11 < jtanx> well the data thing was a placeholder for whatever sensors/actuators data there was
1009 10:11 < sam_moore> Is it meant to be sensor data, or is it a value that the user has passed through HTTP
1010 10:11 < jtanx> the query string is part of params
1011 10:11 < sam_moore> Ok, right, that makes more sense
1012 10:12 < sam_moore> My view had the ModuleHandler getting the appropriate data itself
1014 10:12 < sam_moore> Given the params
1015 10:13 < jtanx> I'm just not really used to using global variables
1016 10:13 < sam_moore> The global sensors array?
1018 10:13 < jtanx> i take it that's where you access data from?
1019 10:14 < sam_moore> Yes
1020 10:14 < jtanx> oh yeah one more thing, when you get a request, should it only return the latest data?
1021 10:20 < sam_moore> We should probably think some more about this as a whole group
1022 10:20 < sam_moore> So, you have a sensor that can (probably) poll a lot faster than you get requests via jQuery
1023 10:21 < sam_moore> You can write it so that you only actually query the sensor when you get a request, but then you're wasting the chance to get data that could be useful
1024 10:22 < sam_moore> Or you can have it so that the sensor is continuously polling (What my code is simulating at the moment)
1025 10:22 < sam_moore> With the continuosuly polling sensor; when you get a request, you can either return the most recent block of data you got
1026 10:23 < sam_moore> Or you can have it so that the data will be sent in sequential order (which is what my code currently does)
1028 10:23 < sam_moore> I'm pretty sure continously polling is better than querying each time you get a request, since after all this is an experiment and you want the data
1030 10:24 < jtanx> I agree with you there
1031 10:24 < jtanx> so you're saying, continuously poll and log the results
1032 10:24 < jtanx> and when a request comes in, send back all the data up to the point when the last request came in
1033 10:25 < sam_moore> Well that's what the server program I wrote simulates at the moment.
1034 10:25 < sam_moore> However it might be more sensible for the request to just get the most recent data.
1036 10:25 < sam_moore> Ah, yeah that's probably better actually
1037 10:25 < jtanx> then you're logging more points than youdisplay
1038 10:26 < sam_moore> Yes, but you can always add a function to pull all the data points and save to a csv or something like that.
1039 10:26 < sam_moore> In fact I think we'd want to do that.
1040 10:27 < jtanx> yeah ok
1041 10:27 < jtanx> that sounds not too bad
1042 10:27 < jtanx> but if that's the case
1043 10:27 < sam_moore> If you actually use this for an experiment, you're not going to want to have to do all your analysis in a JavaScript GUI
1045 10:27 < sam_moore> The GUI is for getting live information on the state of the system more than for data analysis
1046 10:27 < jtanx> but if that's the case you might want to allow direct access to the latest dataset
1047 10:28 < jtanx> instead of having to read from the file
1048 10:28 < jtanx> if that's possible
1049 10:28 < jtanx> then you can directly record the results in csv format
1050 10:28 < sam_moore> Yes, I thought about that; you can have a buffer of points accessed by the request thread easily enough
1051 10:29 < sam_moore> There are some difficulties though with managing the buffer
1052 10:30 < sam_moore> Wait, maybe it's easier than I though
1053 10:30 < sam_moore> Yeah, the reason I started saving stuff to a binary file was because I was thinking of the requests having to get the data in sequence
1054 10:32 < sam_moore> I have some other stuff to do today unfortunately
1055 10:33 < sam_moore> I have a feeling it won't be trivial to just access the most recent dataset, I'll have to think about it
1056 10:34 < sam_moore> However, currently it should be easy to change so that the request gets data from the end of the binary file, rather than keeping track of its position
1057 10:34 < sam_moore> The function QuerySensor is what I was thinking the SensorHandler would do to get data; it just fills a buffer and prints it at the moment
1058 10:35 < sam_moore> Binary file access is pretty fast, we could even just keep the binary file and change the data to csv when it goes to the client
1059 10:36 < jtanx> ok, I'll keep that in mind
1060 11:11 < sam_moore> Oh, you can replace the Data* pointer with a Sensor* pointer and then not have to use the global variable directly, that's probably best
1061 11:13 < jtanx> well it might not only be sensor data
1062 11:13 < jtanx> it could be actuator stuff or anything else
1063 11:13 < sam_moore> I suppose
1064 11:14 < jtanx> maybe I should change the typedef to void*
1065 11:14 < jtanx> then you can cast it to whatever
1066 11:14 < sam_moore> Yeah, that will work
1067 11:15 < sam_moore> Actuator stuff is going to be a bit of a seperate (hopefully easier) problem
1068 11:15 < sam_moore> In that case you can just wait for a query before doing anything
1069 11:15 < sam_moore> Anyway, I've distracted myself again, this is just too interesting :S
1070 11:15 < jtanx> hahaha
1071 11:16 < jtanx> anycase for the actuator you would have a separate handler function
1072 11:16 < sam_moore> Yes
1073 11:16 < jtanx> eg ActuatorHandler
1074 11:20 < jtanx> fcgi is pretty whack
1075 11:20 < jtanx> it replaces printf
1076 11:21 < jtanx> so when you printf (or fwrite for binary?), that gets sent to the client
1078 12:04 < jtanx> what if we stored stuff in an sqlite library
1079 12:04 < jtanx> sorry database
1080 12:04 < jtanx> on second thoughts nah
1083 15:02 -!- jtanx_ is now known as jtanx
1086 18:59 -!- jtanx_ is now known as jtanx
1087 21:28 < sam_moore> So, I did a bit of testing with sqlite vs a binary file
1088 21:28 < sam_moore> sqlite takes about 1000x as long for saving data
1089 21:28 < sam_moore> I haven't tested reading it back yet
1090 21:28 < sam_moore> But more worrying
1091 21:28 < sam_moore> I get a segmentation fault using sqlite
1092 21:29 < sam_moore> And it's in the sqlite library somewhere; not my test code
1093 21:29 < sam_moore> Running sqlite in valgrind shows a bunch of complaints about uninitialised values
1094 21:29 < sam_moore> So... I'd recommend we just use a binary file
1095 21:30 < sam_moore> A database is good for storing more complex data, but when you just need to store data recorded in a sequence, it's probably unnecessary
1096 21:36 < jtanx> yeah sqlite not so good for file performance
1097 21:36 < jtanx> because every insert it has to confirm the write to disk
1098 21:36 < jtanx> the segfault
1099 21:36 < jtanx> may actually be because you didn't initialse the mutex
1101 21:36 < jtanx> i tried compiling it on mingw and it segfaults on the mutex unlock
1102 21:37 < sam_moore> Re: fcgi replacing printf - It probably calls dup2 to change stdout from the terminal to a domain socket or fifo that nginx listens to
1104 21:38 < jtanx> fcgi_stdio just has a bunch of defines
1105 21:38 < sam_moore> Oh really, that's wierd
1106 21:38 < jtanx> so printf becomes FCGI_printf
1107 21:38 < jtanx> so fcgi_stdio must be the first include in the fcgi module
1108 21:38 < sam_moore> I would have thought it was simpler to just change stdout than replace the whole printf function
1109 21:38 < sam_moore> But whatever, we're not implementing fcgi :P
1111 21:39 < sam_moore> Oh, the mutex needs initialising, yeah
1112 21:39 < sam_moore> But the test I did was just a serial program, no mutex
1115 21:39 < sam_moore> We'll be using gcc to compile on the beaglebone/rpi
1116 21:40 < sam_moore> I think some implementations of pthreads need an initialiser but others don't, I'll have to check
1117 21:40 < sam_moore> But pthread_mutex_init doesn't show up in man pages on debian
1118 21:40 < jtanx> yeah it's not on ubuntu either
1119 21:41 < jtanx> have you ever worked with clang
1120 21:42 < sam_moore> No
1121 21:42 < jtanx> neither but it seems pretty cool
1122 21:45 < jtanx> when you compile it gives better diagnostic output when something goes wrong
1123 21:46 < jtanx> it's a drop in replacement for gcc
1124 21:47 < sam_moore> Interesting
1127 21:57 < jtanx> if you kept the file handles for the sensor data always open
1128 21:58 < jtanx> and immediately wrote to them when a data point is polled
1129 21:58 < jtanx> is there much performance difference to buffering first?
1130 22:05 < sam_moore> Yeah, it's probably better to keep the file handles always open
1131 22:05 < sam_moore> The operating system will use some kind of buffer for the file anyway
1132 22:06 < sam_moore> I've got some basic programs, maybe I'll make some performance graphs tomorrow
1133 22:07 < sam_moore> On the other hand, I need to do some of the meta stuff (list of tasks that need to be completed, etc) before Monday
1134 22:08 < sam_moore> I should look into a #define or something to initialise the mutexes if they need to be
1135 22:09 < sam_moore> Anyway, I need to sleep
1136 22:11 < sam_moore> I wonder how James and Callum are going, they haven't been in the channel for a while
1137 22:12 < jtanx> yeah, it's pretty quiet
1138 22:17 < sam_moore> If we can get a second meeting in the week, preferably a longer one that would be good
1139 22:18 < sam_moore> Particularly if we can start working on code at the same time
1140 22:18 < sam_moore> But we'll see
1141 22:18 < sam_moore> Everyone has other stuff to do after all
1142 22:18 < sam_moore> I'm spending way too much time on this unit compared to my others
1143 22:18 < sam_moore> Then again this unit will probably require the most work
1144 22:19 < sam_moore> Anyway, bye
1147 --- Day changed Sat Aug 17 2013
1152 --- Day changed Sun Aug 18 2013
1161 --- Day changed Mon Aug 19 2013
1167 20:07 < jtanx> just so you know, I'm changing the JSON functions
1168 21:04 < sam_moore> Ok, I already pushed some stuff to github
1169 21:05 < sam_moore> But we can get it to merge
1170 21:05 < sam_moore> I ended up just using printf to make part of the JSON in the SensorHandler anyway
1171 21:06 < jtanx> depending on where SensorHandler is
1172 21:06 < jtanx> that may or may not work
1173 21:06 < jtanx> inside of fastcgi.c it willwork
1174 21:06 < jtanx> outside it won't
1175 21:07 < jtanx> oh ok
1176 21:07 < jtanx> I see
1177 21:07 < jtanx> so that's fine
1178 21:08 < jtanx> it might be best not to use a do while loop
1179 21:08 < jtanx> because if no arguments are passed
1180 21:08 < sam_moore> Ah, right
1181 21:08 < jtanx> then the keypair function will return null
1182 21:09 < jtanx> while ((params = FCGI_KeyPair(params, &key, &value)))
1183 21:09 < jtanx> will work fine
1184 21:10 < sam_moore> The KeyPair function looks like it can return an empty string though, in which case I was getting the sensor_id parsed twice when I was testing it
1185 21:10 < jtanx> what was your input string?
1186 21:11 < sam_moore> "http://localhost/api/sensors?id=0"
1187 21:11 < jtanx> looks fine from this end
1188 21:11 < jtanx> http://mctx.us.to:8080/api/sensors?id=0
1189 21:11 < jtanx> it might be because of your do while loop
1190 21:12 < jtanx> yeah it will be because of that
1191 21:12 < sam_moore> The do while loop causes problems when there is an empty string
1192 21:13 < sam_moore> ie: No parameters are passed
1193 21:13 < jtanx> ok let's just put it this way; FCGI_KeyPair was designed to use a while loop
1194 21:13 < sam_moore> Ok, sure
1195 21:13 < sam_moore> I had some problems with just a while loop, but I'll try again
1196 21:13 < jtanx> yeah about that JSON stuff
1197 21:13 < jtanx> I'm still trying to think of a good way to do that
1198 21:13 < jtanx> especially with the array stuff
1199 21:19 < sam_moore> I'm not sure what I did before, but a while loop seems ok now
1201 21:21 < sam_moore> Ok, I have to go now
1202 21:21 < sam_moore> I might not be able to do much tomorrow, we'll see
1203 21:22 < jtanx> ok yep
1210 23:14 -!- Callum [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1212 23:35 -!- Callum [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1213 --- Day changed Tue Aug 20 2013
1222 15:06 < Callum> hey same
1223 15:06 < Callum> sam*
1225 15:22 < Callum> he literally set himself to away as soon as i said that
1226 15:45 < jtanx> urgh this json stuff is doing my head in
1227 15:57 < sam_moore> Callum: I've been set to away since last night
1228 15:57 < Callum> o.O not according to my client
1229 15:58 < sam_moore> Anyway, we are definitely using the Beaglebone, Electronics has ordered one, they seemed to think they'd have to program it but I corrected them
1230 15:58 < Callum> ...why would they have to program it? wtf did they think we were doing?
1231 15:59 < sam_moore> They probably thought all we had to do was the GUI and not any of the other software? I don't know. But the guy seemed relieved anyway.
1232 15:59 < Callum> and was gonna ask if you remembered anything about the pi meson decay question for physics (how do you get the anti-neutrinos momentum, or do you assume it to be 0 as well? but then it doesnt really make sense with conservation of momentum)
1233 16:00 < sam_moore> Woah, I don't remember the assignments in that much detail
1234 16:00 < Callum> was hoping you would :p
1235 16:00 < sam_moore> No, I just have vague memories of algebra
1236 16:01 < sam_moore> And looking through notes
1237 16:01 < Callum> hmm. i cant seem to find anything in the notes
1238 16:01 < Callum> because he says to assume the rest mass of the anti-neutrino is 0
1239 16:02 < Callum> and i don't really remember much in regards to energies and 0 rest mass ;/
1240 16:02 < jtanx> I talked to someone who did computer vision before
1241 16:02 < jtanx> and he's really doubtful that you can get accurate readings off a webcam
1242 16:02 < sam_moore> Callum: I don't think you can assume the momentum is zero, other than that, I don't have much to offer
1243 16:02 < Callum> the question also says to have it in terms of m(pi) m(e) and c
1244 16:03 < Callum> and yea thats what i thought. it doesnt make sense to do that. just cant remember how to do it D;
1245 16:03 < Callum> @jeremy yea well, its a pain but possible
1246 16:04 < Callum> really comes down to how good your camera is/sampling rate/how quickly you can process it.
1247 16:04 < sam_moore> How about you do some experimenting with a webcam and see what you can do with it?
1248 16:04 < Callum> but you can get some pretty good webcams nowadays (but then again the better it is the longer it takes to process)
1249 16:04 < jtanx> personally, I don't think it will work
1250 16:04 < sam_moore> It looks like we might just end up streaming images diretly to a website
1251 16:04 < Callum> i don't have any
1252 16:04 < Callum> yea well even if thats all we do we still need the camera
1253 16:05 < Callum> spose i could use my laptop one but i doubt that would be very good
1254 16:05 < Callum> could run it through the canny algorithm and see what it produces
1255 16:06 < sam_moore> Sounds like an idea
1256 16:07 < sam_moore> A good idea specifically
1257 16:07 < jtanx> about the sensorhandler
1258 16:07 < sam_moore> Yes?
1259 16:07 < jtanx> do you envision leaving it in fastcgi.c permanently
1260 16:07 < jtanx> or for that matter any other handlers
1261 16:07 < sam_moore> I was kind of thinking there would be a "handlers.h" and "handlers.c"
1262 16:08 < sam_moore> Just to make things more organised
1264 16:08 < jtanx> I'm trying to export enough of the functionality
1265 16:08 < jtanx> to do that
1266 16:08 < jtanx> but the json thing is annoying
1267 16:08 < jtanx> especially when you need to spit out arrays
1268 16:09 < jtanx> unless you have something like FCGI_Printf
1269 16:09 < jtanx> and it's up to you to format it correctly
1270 16:09 < Callum> bloody physics lecture video is laggy. gonna have to download it and hope for the best. fuck echo
1271 16:10 < jtanx> compared to lectopia you get 2x filesize with no visible benefit in quality
1272 16:10 < Callum> they're both shit.
1273 16:10 < sam_moore> You could have seperate "BuildJSON_Key" and "BuildJSON_Value" functions, with a "BuildJSON_ValueArray" maybe
1274 16:10 < Callum> haha
1275 16:11 < sam_moore> FCGI_Printf is Ok though, it's not too much formating
1276 16:11 < jtanx> the problem with the buildjson_* stuff
1277 16:11 < jtanx> is it gets very verbose
1278 16:12 < jtanx> and you can probably come up witha situation that breaks it too
1279 16:12 < jtanx> and don't get me started on value types
1280 16:12 < sam_moore> Haha
1281 16:14 < sam_moore> We can always just send plain text and make James turn it into JSON :P
1282 16:14 < jtanx> ahaha
1283 16:14 < jtanx> yeah that could work
1285 16:15 < jtanx> this is where java is good
1286 16:15 < jtanx> or any other higher level language
1287 16:21 < jtanx> ok so it's a bit of both, but how about: FCGI_JSONKey(key) and FCGI_JSONValue(format, ...)
1288 16:22 < sam_moore> That looks good
1289 16:25 < jtanx> I'm also adding long/double types for the BuildJSON function, just for convenience
1290 16:25 < jtanx> any preference to naming conventions?
1291 16:26 < jtanx> FCGI_BuildJSONLong
1292 16:27 < sam_moore> Seems OK
1293 16:28 < sam_moore> I need to go do some ENSC1001 stuff (hooray)
1295 16:30 < Callum> hhaha
1296 16:30 < Callum> have fun :p
1297 16:30 < Callum> although i cant really talk. about a days worth of physics and a days worth of ensc3016 shit i should get through, on top of mctx and geng4402 stuff. yay for being behind already
1298 16:38 < Callum> well iv got an answer for the first part (second part should be the same process). just hope its right :s
1299 16:46 < jtanx> ok, time to merge this into the server code
1300 19:47 < jtanx> hmm interesting - it crashes if compiled with clang but not with gcc
1301 19:49 < jtanx> probably just a bug in clang 3.2
1302 20:08 < jtanx> ok, just submitted a pull request to update the fastcgi stuff
1303 20:08 < jtanx> for now I moved Sensor_Handler to sensor.c
1304 20:09 < jtanx> the status codes have all changed
1305 20:09 < jtanx> If you absolutely cannot process anything given the input arguments, you call FCGI_RejectJSON
1306 20:10 < jtanx> If you fail for some other reason (e.g unauthorized access), you use FCGI_BeginJSON with the appropriate status code
1307 20:10 < jtanx> With RejectJSON, it sends a HTTP 400 code so any query through AJAX/jQuery will fail with no extra info
1308 20:11 < jtanx> With BeginJSON, the HTTP code is always 200 OK, so you are able to transmit extra info if it failed for another reason
1309 20:12 < jtanx> BeginJSON will automatically add the module handler name + the status code
1311 --- Day changed Wed Aug 21 2013
1315 11:57 < jtanx> I just had a play with the sensor stuff
1316 11:57 < jtanx> and I trialled a 'double buffer' scheme
1317 11:57 < jtanx> instead of the binary file idea
1318 11:57 < jtanx> seems to work okay, and it guarantees that a point won't be returned to the user if they have already received it
1320 12:35 < jtanx> just worked through some stupid bug
1321 12:37 < jtanx> I think it's because make didn't recompile something because it thought it hadn't changed
1322 12:38 < jtanx> probably the header files
1323 12:50 < jtanx> you can see the double buffer method in this branch: https://github.com/jtanx/MCTX3420/tree/doublebuffer
1324 12:58 < jtanx> one issue though is that writing out csv instead of binary file takes up a lot more space
1326 14:49 < james__> Hey
1327 14:50 -!- james__ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1332 --- Day changed Thu Aug 22 2013
1341 15:07 < callum> sam you still at uni?
1342 15:22 < callum> or jeremy if you remember what he used to compile the file. i'v managed to get it to recognise the header files but now its complaining about not being able to find the libraries.
1344 15:34 < jtanx> I can't remember
1345 15:34 < jtanx> didn't you use pkg config to find out
1346 15:36 < jtanx> try this http://opencv.willowgarage.com/wiki/CompileOpenCVUsingLinux
1349 22:08 < sam_moore> gcc -o opencv opencv.c -I/usr/include/opencv -lopencv_core -lopencv_highgui -lopencv_imgproc
1350 22:08 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [0 ops, 0 halfops, 0 voices, 1 normal]
1351 22:08 < sam_moore> Oh... there's no one here
1352 22:08 < sam_moore> Well, if you read the IRC logs when they're commited to git, you'll see it. Good luck.
1353 --- Day changed Fri Aug 23 2013
1362 12:30 < jtanx_> do you know how you connected the relay board to the sensor board
1363 12:30 < jtanx_> for the soldering lab
1364 12:45 < jtanx_> and what sort of wire did you use?
1368 --- Log opened Sat Aug 24 17:07:53 2013
1370 17:07 -!- ServerMode/#mctxuwa_softdev [+nt] by irc.eversible.com
1371 17:07 -!- Irssi: #mctxuwa_softdev: Total of 1 nicks [1 ops, 0 halfops, 0 voices, 0 normal]
1372 17:07 -!- Irssi: Join to #mctxuwa_softdev was synced in 1 secs
1373 17:08 -!- You're now known as sam_moore
1374 --- Day changed Mon Aug 26 2013
1377 11:12 <@sam_moore> Thought I might have the wrong server
1378 17:18 <@sam_moore> I do have the wrong server!
1380 --- Log closed Mon Aug 26 17:19:05 2013
1381 --- Log opened Mon Aug 26 17:19:34 2013
1383 17:19 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
1384 17:19 -!- Irssi: Join to #mctxuwa_softdev was synced in 5 secs
1385 17:19 < sam_moore> !motd
1386 17:20 < sam_moore> '!motd'
1387 17:20 < sam_moore> MctxBot: You're broken
1388 17:20 < sam_moore> Oh wait, never mind
1391 18:09 < jtanx> you can change the message if you want
1395 --- Day changed Tue Aug 27 2013
1400 19:11 < jtanx> the camera that we were using for the soldering lab inserted a bunch of wavy lines/static into the video
1401 19:12 < sam_moore> It's an effect
1403 19:14 < jtanx> the camera was actually broken
1404 19:15 < sam_moore> (I figured that)
1405 19:15 < sam_moore> You could pretend it's supposed to be an 80s style video?
1406 19:15 < jtanx> yeah that could work
1407 19:16 < jtanx> have you done it yet?
1408 19:18 < sam_moore> No :S
1410 19:21 < jtanx> according to the manual, you need to connect a wire from R5 on the sensor board to the relay board
1411 19:21 < jtanx> problem was we already chopped off the lead on R5
1412 19:22 < jtanx> another group connected the wire to the LEd though
1413 19:22 < jtanx> seemed to work
1414 20:02 < jtanx> so are we using clock_gettime?
1415 20:08 < sam_moore> I think so, we can use CLOCK_MONOTONIC_RAW if we are paranoid about the system time getting changed
1416 20:08 < sam_moore> Or we can just use CLOCK_REALTIME if we aren't
1417 20:09 < jtanx> I thought CLOCK_MONOTONIC was supposed to be best, because the RAW version wasn't compensated for temp/other stuff
1418 20:10 < jtanx> http://stackoverflow.com/questions/3523442/difference-between-clock-realtime-and-clock-monotonic
1419 20:10 < jtanx> about the FCGI loop blocking
1420 20:10 < jtanx> you can switch to FCGX_ methods
1421 20:10 < jtanx> I think
1422 20:11 < jtanx> but is it really necessary
1423 20:20 < jtanx> about the valgrind comment in sensors.c
1424 20:20 < jtanx> this is probably it: http://stackoverflow.com/questions/5844242/valgrind-yells-about-an-uninitialised-bytes
1425 20:23 < sam_moore> It's probably not necessary to stop the FCGI loop blocking, don't worry about it
1426 20:25 < sam_moore> Yeah, I didn't initialise the buffers anywhere
1427 20:25 < jtanx> actually I can't reproduce that message
1428 20:25 < sam_moore> Hmm
1429 20:26 < jtanx> about the sensor times
1430 20:27 < jtanx> what about if you all reference it relative to some point
1432 20:27 < sam_moore> The epoch :P
1434 20:27 < jtanx> I mean
1435 20:28 < jtanx> when you get sensor data, you store the difference in time between the start of recording and now
1436 20:28 < sam_moore> Sure, that makes more sense
1437 20:29 < sam_moore> Just give the client the start of recording time and they can convert it to a time of day / day in the calendar themselves
1439 20:30 < jtanx> you could have a specific request to return the starting time
1440 20:30 < jtanx> then it's implicit for all requests
1441 20:30 < jtanx> btw I submitted a pull request for the nginx configs
1442 20:32 < sam_moore> Ok
1443 20:32 < sam_moore> I've added you to collaborators so you can merge them yourself if you need to
1446 20:35 < jtanx> http://www.cnx-software.com/2011/09/26/beagleboard-emulator-in-ubuntu-with-qemu/
1447 20:41 < sam_moore> Nice
1448 20:42 < sam_moore> "Currently you can not access Ethernet" Not so nice
1449 20:42 < sam_moore> Although this is dated 2011
1451 --- Day changed Wed Aug 28 2013
1459 16:31 < jtanx> firefox's javascript debugger is pretty cool
1460 16:31 < sam_moore> Firebug? Yeah
1461 16:35 < jtanx> nah the inbuilt one
1462 16:35 < jtanx> firebug's good for inspecting html though
1463 16:35 < jtanx> haven't used firebugs js debugger yet
1464 16:35 < sam_moore> Oh, I didn't know they had an inbuilt one
1465 16:36 < jtanx> Ctrl+Shift+K
1466 16:36 < sam_moore> Of course I normally use Iceweasel, which is currently built as firefox 10.0.2 with a different name
1467 16:36 < jtanx> well that's about 10 releases behind
1468 16:36 < sam_moore> That looks pretty similar to firebug anyway
1469 16:55 < jtanx> inline conditionals in javascript are whack
1471 16:55 < sam_moore> I haven't done much javascript, but a lot of it does seem whack
1472 16:56 < sam_moore> jtanx: What are you working on in JavaScript?
1473 16:56 < jtanx> unit tests
1474 16:57 < sam_moore> Cool
1476 17:01 -!- Callum_ is now known as Callum
1477 17:18 < jtanx> javascript in general is annoying me though
1478 17:25 < Callum> when exactly is this soldering lab due? fucking thing.
1479 17:27 < jtanx> next friday
1480 17:27 < Callum> it says week 5 on lms
1481 17:27 < jtanx> sept 6
1482 17:27 < Callum> where's it say this?
1483 17:27 < jtanx> yeah he made an announcement
1484 17:27 < jtanx> that it's wrong
1485 17:27 < jtanx> somewhere
1486 17:28 < Callum> sigh. this unit..i swear
1487 17:28 < Callum> if it really is next week then i'd be so relieved
1489 17:28 < Callum> he made an announcement today..
1490 17:28 < Callum> wait yesterday
1491 17:29 < jtanx> still got that central plant fbd to do
1492 17:29 < Callum> why hasnt LMS emailed me a notification? (/end spam)
1493 17:29 < Callum> yea i know
1494 17:29 < Callum> which i think i have it pretty much done
1495 17:29 < Callum> not 100% sure on it though
1496 17:29 < Callum> and whether to add pumps and shit into it
1497 17:29 < jtanx> what did you have on it?
1498 17:30 < Callum> HA as i say that i check my phone and i have the message about the announcement
1499 17:30 < jtanx> and what did you call the chiller things?
1500 17:30 < Callum> pretty much just the 4 chillers, a line showing it can go back (they're literally called chillers ahha(
1501 17:31 < Callum> then i had another part to show the chillers (evaporation/condensor/compressor and cooling tower is connected to condenser)
1503 17:31 < Callum> however
1504 17:32 < Callum> im not sure about the input/output of the chiller
1505 17:32 < Callum> because stuff online shows it to be the evaporator
1506 17:32 < Callum> but isnt it water being pumped?
1507 17:32 < jtanx> I think there were pumps on the output
1508 17:33 < jtanx> were there three outputs?
1509 17:33 < Callum> also not sure if i should/wherte to add the tank (yea ofc theres pumps but not sure to put them in to the diagram, pretty much everything is pumped)
1510 17:33 < Callum> outputs where?
1511 17:33 < jtanx> North/Sout/East distribution things
1513 17:33 < jtanx> yeah not sure whether to add tank or not
1514 17:34 < Callum> oh that, i didnt bother with that
1515 17:34 < Callum> just how did the chiller connect with the rest of the plant?
1516 17:34 < Callum> was the evaporator the input/output?
1517 17:34 < Callum> because the chiller feeds out to the water tower and the tower feeds back into the chiller (i think)
1518 17:36 < Callum> also what was the thing called? that allowed water to flow back and forth bypassing the chillers. back something?
1519 17:36 < Callum> really they should have told us before we went in we had to do this. some lazy fucks like me dont read the outline so i didnt take notes..or try to commit stuff to memory :po
1520 17:39 < jtanx> the bypass?
1521 17:39 < jtanx> I haven't gone into detail
1522 17:39 < jtanx> so I just have chiller
1523 17:39 < jtanx> and cooling tower
1524 17:39 < jtanx> maybe I should
1525 17:40 < Callum> remember how tehre was 4 chillers, and they would only run what was needed.
1527 17:40 < jtanx> how many cooling towers?
1528 17:40 < Callum> and if they had more than they needed there was a pipe to flow back, or if they had some chilled water from the tanks or w.e it bypassed chillers
1529 17:40 < Callum> i dont know, but im not sure how to show it all
1530 17:40 < Callum> im sure what iv got is somewhat decent
1531 17:41 < jtanx> I used visio and I ended up spending so much time trying to get the lines rihgt
1532 17:41 < jtanx> probably would have been faster to hand draw it
1533 17:41 < jtanx> still not finished too
1534 17:41 < Callum> haha im fiarly sure i read somewhere it was hand drawn :p
1535 17:41 < jtanx> meh I suck at drawing
1536 17:42 < Callum> maybe not. "This is to be drawn and annotated on single A4 page"
1537 17:42 < Callum> i dont think they'll be picky
1538 17:42 < jtanx> and there's lines everywhere
1539 17:42 < Callum> really? how do you have lines everywhere?
1540 17:42 < jtanx> ok so chiller
1541 17:42 < Callum> it's a fairly simple system. unless i'v done it wrong :s
1542 17:43 < jtanx> has warm chilled water (1), chilled coolant (2), hot coolant (3), chilled chilled water(4), control line (5), (maybe) sensor back to controller (6)
1543 17:43 < jtanx> that's ~5 lines in/out of one box?
1544 17:44 < Callum> hmm. havent included coolant or control/sensor
1545 17:44 < Callum> maybe i should :S
1546 17:44 < jtanx> and an operator
1547 17:44 < jtanx> to the controller
1548 17:45 < Callum> thing is it asked for a high level FBD though
1549 17:45 < Callum> which means not very detailed
1550 17:45 < Callum> or maybe it didnt?
1551 17:45 < jtanx> yeah, so do you need to show condensor/evaporator
1552 17:45 < jtanx> I just have a chiller box
1553 17:46 < jtanx> anyway... afk ~10 mins
1554 17:46 < Callum> the condensor/evaporater is part of the chiller isnt it?
1556 18:10 < Callum> anyone finished reading chapter 4 of the notes?
1557 18:11 < jtanx> what's that
1558 18:11 < Callum> sensors
1559 18:12 < Callum> so dull :l
1560 18:12 < Callum> and pretty much no chance to remember enough of it. quiz tomorrow is going to be fun..
1563 18:13 < jtanx> have to study for that
1564 18:13 < Callum> rofl
1566 18:15 < Callum> gonna just have to wing most of them again like last time most likely.
1567 18:15 < jtanx> probably
1568 18:15 < jtanx> Well, the unit testing thing works http://mctx.us.to:8080/unit-tests/
1569 18:15 < jtanx> now what unit tests should there be
1570 18:18 < Callum> not sure.
1571 18:25 < Callum> brilliant! the notes show a false colour image built from a black and white image...while printed in black and white.
1574 19:50 < jtanx> did we get around to doing the sparkplus thing
1575 19:54 < jtanx> we need to do it before the end of the week
1576 19:54 < Callum> umm.
1577 19:54 < Callum> actually justin already set up the group
1578 19:54 < Callum> so you need to hurry up and join before we have to recreate the group :P
1579 19:54 < jtanx> nah it expired
1580 19:54 < Callum> wait already?
1582 19:55 < jtanx> 5 hr deadline
1583 19:55 < Callum> and adrian said it was 24Hr, whats with this 5 hour shit
1584 19:55 < jtanx> so... we need to try again
1585 19:55 < jtanx> when everyone's available
1588 --- Day changed Thu Aug 29 2013
1590 09:16 < jtanx> firefox blocks ajax calls if you try to run the file locally :/
1594 14:25 < james__> Hey Jeremy. Is there a way to find my login hash key if i am already logged into the api?
1596 14:28 < jtanx> right now you should store it
1597 14:29 < jtanx> just declare a global variable and set it to the hash
1598 14:30 < jtanx> or if you have made a class
1599 14:30 < jtanx> just make it an element
1600 14:31 < james__> I'm still logged in from ages ago and i can't logout so i can get a different key that works
1603 14:31 < james__> Possibly a bug that needs fixing?
1604 14:31 < jtanx> so the way it works right now is there's a 3 minute timeout on the key
1606 14:31 < jtanx> there's actually two layers
1607 14:32 < jtanx> the password that you enter first (mctxadmin) is what's called HTTP basic authentication
1608 14:32 < jtanx> this lets you gain access to /api/login
1609 14:32 < james__> Well i tried loging in again and its saying i am already logged in
1610 14:32 < jtanx> when you reach /api/login you get the access key
1611 14:32 < jtanx> there's a three minute timeout on the key
1612 14:32 < jtanx> if you wish to invalidate the key
1613 14:33 < jtanx> you call
1614 14:33 < jtanx> /api/login?end
1615 14:34 < jtanx> you can force getting a key by also calling /api/login?force
1616 14:34 < james__> right. well it worked this time
1617 14:34 < james__> Thats weird
1618 14:34 < jtanx> so the only thing that the key prevents is stopping accidental concurrent use
1619 14:34 < james__> Fair enough
1620 14:35 < jtanx> Calling /api/login?force will force a new key to be generated and the old one to be invalidated
1621 14:35 < james__> Okay
1622 14:35 < jtanx> btw as I was working on unit testing
1623 14:35 < jtanx> I did a function to retrieve the json data
1624 14:36 < jtanx> http://mctx.us.to:8080/unit-tests/unit-tests.js
1625 14:37 < james__> I will have a look. I have some buttons working and stuff. Working on putting them in a seperate script file for easier editing etc
1626 14:37 < james__> They don't seem to be playing nice at the moment
1628 14:38 < jtanx> how come it takes so much effort to get some buttons working
1629 14:39 < james__> Getting the css to mesh with the js
1630 14:40 < james__> I have buttons fine
1631 14:40 < james__> And they work
1632 14:40 < jtanx> maybe you should get the functionality to work first
1633 14:40 < jtanx> with the ajax queries
1634 14:40 < jtanx> before worrying about styling them
1635 14:40 < james__> I have the functionality pretty much working
1636 14:41 < jtanx> so the querying works?
1637 14:41 < james__> But i want the styling to work before we scale it up
1638 14:41 < james__> That way its less hassle to fix it later
1639 14:41 < jtanx> could you post it to git?
1640 14:41 < jtanx> it'd be cool to have a look
1641 14:45 < james__> The way i am thinking about having it set out is having a central index.html which just imports all the js. The js will contain all the functionlity seperated in to similar functions. Ie. all the buttons in one script
1642 14:46 < jtanx> right
1643 14:46 < james__> That should allow for ease of scaling and editing
1644 14:46 < james__> Also changing id's and stuff
1645 15:46 -!- james__ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1648 23:18 -!- Callum [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1649 --- Day changed Fri Aug 30 2013
1653 17:06 < jtanx> say you want to perform a command
1654 17:06 < jtanx> eg move an actuator
1655 17:07 < jtanx> and suppose checks have to be made against other sensors to ensure that this command is good to go
1656 17:07 < jtanx> how are those checks going to be made?
1657 18:10 < sam_moore> The Actuator Handler will call some sanity check against the most recent sensor data
1658 18:11 < sam_moore> If they aren't, it will respond with some appropriate JSON or HTTP status code
1659 18:11 < sam_moore> eg: "Try again later when the pressure is in the right range", or "Don't do that you silly person"
1661 18:21 < jtanx> I wonder if there's a way to pull from your git repository without creating the 'merge branch master from...' commits
1662 18:22 < sam_moore> I don't think so
1663 18:22 < jtanx> I tried playing with rebasing but it doesn't work out so well
1664 18:40 < jtanx> ok so I've committed some stuff to my repository that changes the handling of controls/actuators/login
1665 18:41 < jtanx> I'm not sure if it's the best way to do it
1666 18:41 < jtanx> though
1667 18:41 < jtanx> What I did was get rid of /api/login
1668 18:41 < jtanx> and instead have /api/control
1669 18:41 < jtanx> All of the control code (eg actuators but may be other controls? Start/stop the whole thing?) has been moved to controls.c
1670 18:42 < jtanx> You still need to supply username and password to access /api/control
1671 18:42 < jtanx> and what was previously called the 'authorization key' is now the control key (ie who has control)
1672 19:00 < sam_moore> Ok, I'll take a look at it later
1673 19:01 < sam_moore> Don't worry about the merge messages, it's not a big deal
1674 19:06 < jtanx> ok thanks
1678 --- Day changed Sat Aug 31 2013
1683 --- Day changed Sun Sep 01 2013
1686 14:17 < jtanx> it'd have been cool to have written then server in python
1687 14:19 < Callum> gah havent done much for this project this week. not sure what i should do either
1689 14:19 < Callum> so far behind in one of my units too. haha joys of uni
1691 14:20 < jtanx> werent we meant to get the camera stuff working or something
1692 14:21 < Callum> well yea but thats more rosher getting stuff working on his end. still not really sure what's going on. need to find an efficient way to transfer data (which would be directly streaming but it seemed adrian wanted some sort of processing)
1693 14:21 < Callum> guess i could start working on edge detection
1694 14:21 < jtanx> james hasn't got much done afaik
1695 14:21 < Callum> nah dont think he ahs
1696 14:22 < jtanx> but man I was looking at the javascript stuff
1697 14:22 < jtanx> and it's really annoying
1698 14:22 < jtanx> everything in javascript is asynchronous
1699 14:22 < jtanx> so you have a callback for an AJAX query, and it gets executed some time in the future
1700 14:23 < jtanx> it's really hard to pass variables to the callback and then also retrieve them
1702 14:23 < jtanx> i'm probably not doing it in the right fashion or something
1703 14:28 < Callum> not sure. don't really understand this stuff myself. havent done much/any
1704 14:45 < jtanx> flask is so cool
1706 15:02 < jtanx> maybe we can use cookies to store authorization
1707 15:02 < jtanx> instead of in javascript
1709 15:02 < jtanx> http://stackoverflow.com/questions/15722795/how-to-create-a-cookie-with-fastcgi-nginx-in-c
1710 15:57 < sam_moore> Maybe a cookie is better, but couldn't you have a global variable that the JavaScript code sets in the callback?
1711 15:57 -!- Irssi: #mctxuwa_softdev: Total of 4 nicks [0 ops, 0 halfops, 0 voices, 4 normal]
1712 15:59 < sam_moore> Ok, I'll do the simulated "digital" sensor and actuator
1713 15:59 < sam_moore> We should make some kind of minimal gui in JavaScript
1714 16:00 < sam_moore> I'm not sure what James has done, but there's nothing under git
1715 16:02 < sam_moore> http://www.flotcharts.org/flot/examples/ajax/index.html is a good starting point for updating sensor graphs
1716 16:03 < sam_moore> jtanx: I wouldn't worry about the login/authentication too much for this week
1717 16:04 < jtanx> james said he got the buttons working but that's about it
1718 16:04 < jtanx> he's more concerned about issues with styling them than getting a fully fledged gui
1719 16:04 < sam_moore> I think actually having a gui is more important than having a pretty gui
1720 16:04 < sam_moore> At the moment anyway
1722 16:05 < jtanx> it would be great to have *something*
1723 16:05 < jtanx> the problem with js
1724 16:05 < jtanx> is from what i've seen, the callback occurs in the jQuery file
1725 16:06 < jtanx> so you can't set global variables in say sensors.js
1726 16:06 < jtanx> and expect to be able to read/set them in the callback
1727 16:06 < sam_moore> Hmm, that's wierd
1728 16:06 < jtanx> what really shits me about javascript is variable handling
1729 16:06 < sam_moore> Hang on, let me have another look at the only project I ever used jQuery for... :P
1730 16:07 < jtanx> you can pass one/none/more than specified parameters
1731 16:07 < sam_moore> It was a chess game, so it should definietly be possible to modify variables in the callback function
1732 16:07 < jtanx> yeah there's probably a way, I just don't know it
1733 16:08 < jtanx> about the actuators
1734 16:08 < jtanx> I've already got something working in my repository
1735 16:08 < jtanx> but I don't really like how I've done it
1736 16:30 < sam_moore> I'm making a minimal gui (it will be able to plot something, and have a button); we can either ditch it or improve on it later
1737 16:31 < jtanx> sounds good
1738 16:35 < sam_moore> Callum: If you want to make a (really awful but possibly looking good enough at this stage for Adrian) "streaming" images thing
1739 16:35 < sam_moore> You can have your program continuously save to a file
1740 16:35 < sam_moore> And a html page that just has "<meta http-equiv="refresh" content="0">" in the header
1741 16:35 < sam_moore> With a link to the image
1742 16:36 < Callum> alright il look into it
1743 16:36 < sam_moore> It's absolutely aweful, but it will give the effect of a really laggy video
1744 16:36 < jtanx> nice :P
1745 16:36 < sam_moore> You can improve it (if you get time) by having 2 images instead of one, with a symbolic link to swap between them
1746 16:38 < sam_moore> I'll bring the raspberry pi with the webcam tomorrow and we'll put everything on it to show Adrian
1747 16:38 < jtanx> hehehe
1748 16:38 < jtanx> can you install ffserver on the raspi?
1749 16:39 < sam_moore> Probably
1750 16:40 < jtanx> actually
1751 16:41 < jtanx> does our code run on the raspi?
1752 16:50 < sam_moore> Yes, at the moment
1753 16:54 < Callum> how are we integrating my code into it?
1754 17:01 < sam_moore> Keep it as a seperate process for now
1755 17:01 < Callum> alright
1756 17:01 < sam_moore> I'll modify the "run.sh" script to start both of them
1757 17:01 < sam_moore> Sigh javascript
1758 17:01 < sam_moore> So useful and yet so horrible
1759 17:02 < sam_moore> Still, I think if we can get our heads around it it is actually a nice way to do this
1760 17:09 < jtanx> the camera thing or the api or both?
1761 17:24 < sam_moore> The API
1762 17:24 < Callum> ok so how do i link to the image? (
1763 17:24 < sam_moore> Just put a html file in the /server directory for now
1764 17:25 < sam_moore> With <img src="path_to_image"> in the body somewhere
1765 17:29 < Callum> where are we going to put the images?
1766 17:31 < sam_moore> /server/images (?)
1767 17:31 < sam_moore> Wherever it seems logical I guess
1768 17:33 < sam_moore> If either of you are available earlier on Monday, I'm free for pretty much the whole day
1769 17:33 < sam_moore> Do you want to meet earlier and actually do coding as a group?
1770 17:37 < sam_moore> Dammit why does javascript remove the [] brackets when printing string representations of arrays
1771 17:37 < sam_moore> How are you supposed to tell what dimensions the array has...
1772 17:37 < jtanx> if you want sample code of how I printed the array of sensor values
1773 17:37 < jtanx> see the unit tests
1774 17:37 < sam_moore> Ok, thanks
1775 17:37 < jtanx> for (var i = 0; i < data.data.length; i++) {
1776 17:37 < jtanx> result += data.data[i][0] + ":" + data.data[i][1] + ", ";
1778 17:56 < Callum> ok well iv done trhat, i think. you should probably check it to make sure its right
1779 17:58 < Callum> sent pull request. and i'v got food so brb
1780 17:58 < sam_moore> Ok, thanks
1781 17:59 < sam_moore> jtanx: You're right, altering variables on a successful ajax call is a pain in the ass
1783 17:59 < sam_moore> ... You can modify html attributes really easily though
1785 17:59 < jtanx> that's what I was thinking
1786 17:59 < sam_moore> Must resist urge to store data in a comment
1787 17:59 < jtanx> have a hidden input field?
1788 18:01 < jtanx> I must say that the firebug debugger and inbuilt web console were both quite useful
1789 18:02 < sam_moore> Yes, I've got firebug running
1790 18:04 < jtanx> I was looking at flask and it was ridiculously easy to set up a similar API in python
1791 18:05 < sam_moore> Do you want to change to python then?
1792 18:06 < sam_moore> Don't we still have to do the javascript though?
1793 18:07 < sam_moore> The API we have at the moment isn't that terrible
1795 18:07 < jtanx> it's probably best to stick with what we have
1796 18:07 < jtanx> the javascript stuff would remain the same yeah
1797 18:09 < sam_moore> Ok
1798 18:26 < sam_moore> Right... you can update global variables on a successful AJAX request
1799 18:27 < sam_moore> If you put "var" in front of the variable in the global scope then the AJAX callback will just make a new local variable and modify that -_-
1800 18:27 < sam_moore> But if you Don't put the "var" there, it will work
1802 18:41 < jtanx> but using global variables in javascript can get.... messy
1803 18:41 < sam_moore> Mmm
1804 18:42 < sam_moore> But doing pretty much *anything* in javascript is messy
1806 18:42 < jtanx> true that
1807 18:43 < sam_moore> I wonder...
1808 18:43 < sam_moore> Should we just have one html page for each sensor/actuator
1809 18:43 < sam_moore> And then the user can open multiple tabs?
1810 18:45 < sam_moore> That's probably not very nice though
1811 18:46 < sam_moore> I think we should return data about multiple sensors at a time
1812 18:51 < jtanx> you'd probably want it all on one page
1813 18:51 < sam_moore> Yeah
1814 18:51 < jtanx> how many sensors are we talking about again
1815 18:51 < sam_moore> 6 or 7 I think, + a camera
1816 18:51 < jtanx> oh yeah
1817 18:51 < sam_moore> Oh well, we can redesign it later
1818 18:51 < jtanx> I guess we can design for max 7
1819 18:52 < sam_moore> But it might be a good idea to query multiple sensors in one ajax request
1821 18:53 < jtanx> supply more than one id in a go?
1822 18:53 < jtanx> could have an array (max size 7) that holds all the sensors you want to get data for
1823 18:53 < jtanx> i guess
1824 18:55 < sam_moore> It's probably more flexible to just add a "getall" key to the sensor module
1825 18:57 < jtanx> oh yeah
1826 18:57 < jtanx> I'm free until 12 tomorrow
1827 18:57 < jtanx> do you want to work together before that?
1828 18:58 < sam_moore> Sure
1829 18:59 < sam_moore> Try G19 again, but if that doesn't work we can go to the physics lab, or the computer science labs
1830 19:01 < jtanx> yeah ok
1831 19:02 < jtanx> what time do you want to start?
1832 19:04 < sam_moore> I'll probably get in around 9 or 10, depending on how much sleep I get
1833 19:04 < sam_moore> Let's say 10:00
1834 19:05 < sam_moore> Got to go, I'll be back later
1836 21:35 < sam_moore> I'm just going to use the same Sensor stuff for digital sensors
1837 21:36 < sam_moore> Adding a second type of sensor seems needlessly complicated
1838 21:36 < sam_moore> 1 = on and 0 = off
1839 21:37 < sam_moore> Probably do the same for actuators (just have some sanity checks on the values you can set, both at the client and the server)
1840 21:38 < jtanx> usually I'd just say 0 is off and not 0 is on
1841 21:38 < sam_moore> Haha, fair enough
1842 21:39 < jtanx> I kinda hate over-checking stuff :P
1843 21:39 < sam_moore> The actual GetData function has to return something reasonably sane though
1844 21:39 < sam_moore> It's easy to just make it only return 0 or 1
1845 21:39 < jtanx> oh I was more talking about setting the value of the actuator
1846 21:39 < sam_moore> Right
1847 21:40 < sam_moore> We should probably check for 0 or 1 anyway
1848 21:40 < sam_moore> In case the user does something dumb
1850 21:40 < sam_moore> Like think they are setting an analog sensor and put in like "200"
1851 21:40 < jtanx> it should be the js code that's setting it
1852 21:41 < jtanx> so if you write the code properly it shoul be ok
1853 21:41 < sam_moore> "should be OK"...
1854 21:41 < jtanx> you shouldn't access the api directly
1855 21:41 < sam_moore> Alright, we'll see, but it's like, 1/2 a line of code to check :P
1856 21:41 < sam_moore> Redundancy and all that
1857 21:41 < jtanx> but even if they entered 200
1858 21:41 < jtanx> well so what
1859 21:41 < sam_moore> Yeah, but people *can* access the API directly
1860 21:41 < jtanx> it'd just represet 1
1861 21:42 < jtanx> represent
1863 21:42 < sam_moore> How does the server know the difference between someone typing the URL and an AJAX request to the URL?
1865 21:42 < sam_moore> Someone could go view source, "How can I break this... ah, what happens if I pass stupid values directly to the API"
1866 21:42 < jtanx> well if you define that 0 is off and not zero is on
1867 21:43 < jtanx> then it meets specs :P
1868 21:43 < sam_moore> Ok, I suppose it doesn't really matter
1869 21:44 < sam_moore> I respectfully disagree with the idea of having too many checks :P
1870 21:44 < sam_moore> Unless we went "while (true) DoCheck();" or something like that
1871 21:44 < sam_moore> That would be dumb
1872 21:44 < jtanx> hahaha
1873 21:45 < jtanx> but sometimes it gets really messy to maintain when you have that many checks
1874 21:45 < jtanx> and then when you want to modify something it's a real pain
1875 21:45 < jtanx> and really easy to break
1876 21:45 < sam_moore> True, but a bounds check isn't that bad
1878 21:46 < sam_moore> I mean, you have to convert the value that isn't zero to an "on" anyway, which requires a check
1879 21:46 < jtanx> not really
1880 21:46 < sam_moore> Depends on the actuator
1881 21:46 < jtanx> you check if !value
1882 21:47 < sam_moore> Alright
1883 21:58 < jtanx> do you think there should be a stop/start method?
1884 21:58 < jtanx> eg start the experiment
1885 21:58 < jtanx> stop the experiment
1886 22:28 < sam_moore> Yes, probably
1887 22:28 < sam_moore> The stuff I wrote for Thread Exit conditions may actually help there...
1888 22:29 < sam_moore> Remove the bit where the FCGI loop exits though
1892 --- Day changed Mon Sep 02 2013
1894 08:33 < sam_moore> Hi
1895 08:33 < sam_moore> I managed to get a reasonable sensor plotting GUI done
1896 08:35 < sam_moore> So, adrian wanted: 1) A digital sensor simulation (done) 2) Sensors plotted in GUI (done) 3) A test actuator in the GUI 4) Camera images in the GUI (sort of done, kind of)
1897 08:35 < sam_moore> Was there anything else?
1898 08:38 < sam_moore> I have to go to Uni, I'll be in G19 otherwise I'll send an email
1899 08:38 < sam_moore> See you
1900 08:42 < jtanx> ok then
1907 13:18 < james__> hey
1908 13:18 < james__> I have the AJAX call working i am pretty sure
1910 13:19 < james__> Do you know if we have the beaglebones in yet?
1911 13:19 < jtanx> I don't know
1912 13:19 < jtanx> it should be ready soon though
1913 13:19 < jtanx> anyway, sam got a gui with graphs semi working
1914 13:20 < jtanx> could you update your git repository with what you've done?
1915 13:28 -!- james__ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
1922 --- Day changed Tue Sep 03 2013
1926 21:35 -!- jtanx_ is now known as jtanx
1928 --- Day changed Wed Sep 04 2013
1934 09:02 -!- jtanx_ is now known as jtanx
1935 09:03 -!- MctxBot_ is now known as MctxBot
1940 16:00 -!- jtanx_ is now known as jtanx
1944 --- Day changed Thu Sep 05 2013
1948 18:51 < jtanx> hm, so to get clock_gettime to work, you need to use std=gnu99 instead of std=c99
1949 18:52 < jtanx> do you think we should just stick with gettimeofday?
1951 --- Day changed Fri Sep 06 2013
1955 16:05 < jtanx> I was just thinking, what sort of identification information is needed from the server?
1956 16:05 < jtanx> The gui should have some understanding of what sort of sensors/actuators it needs to display
1957 16:10 < jtanx> it might be enough to say this is API version x
1958 16:10 < jtanx> and at version x, it's agreed that these id values correspond to these sensors/actuators etc?
1959 16:19 < jtanx> anyway, what I've done for now is if asked, the api will list the sensor/actuator ids and the corresponding human readable string
1960 16:19 < jtanx> api/?sensors&actuators
1961 18:06 < jtanx> also, what do you think of keeping track of the number of points stored
1962 18:07 < jtanx> then you can allow the user to request from where they want to retrieve data from and how many to retrieve
1963 18:08 < jtanx> the only problem is that it wouldn't be time based, but based on the number of data points recorded
1964 18:08 < jtanx> this method is simpler because you now the offset to use with fseek
1965 18:08 < jtanx> if it's time based you have to search the data for the correct point
1966 19:51 < sam_moore> All the above makes good sense
1967 19:52 < sam_moore> If we can make a working "request X number of points" first instead of "request from time T onwards", we might be able to convert the latter to the former if necessary
1968 20:04 < jtanx> ok I just submitted a pull request for some stuff
1969 20:04 < jtanx> mostly the identification stuff and some reordering
1970 20:04 < jtanx> FCGI_RejectJSON now requires that you give a description explaining why
1971 20:05 < jtanx> when RejectJSOn is called, it's always logged along with the description, so some of the current log messages within the handler functions may be redundant
1973 --- Day changed Sat Sep 07 2013
1976 18:29 < jtanx> what if you had two file pointers to the same file
1977 18:29 < jtanx> one read only, one write only
1978 18:29 < jtanx> then if you also kept track of how many points were written to the file
1979 18:29 < jtanx> you don't need to have mutexes anymore
1980 18:30 < jtanx> as long as you write the read/write calls carefully
1981 18:44 < jtanx> ahp, may have spoken too soon
1982 18:44 < jtanx> you'd still need a mutex around the read/write from/to the counter
1983 18:45 < jtanx> I think...
1984 19:07 < jtanx> but it might still be a good idea
1985 21:38 < jtanx> I went the simple route
1986 21:53 < jtanx> what I've got: /api/sensors?id=x&from=y&count=z
1987 21:54 < jtanx> In dump mode:
1988 21:54 < jtanx> If from < 0, then return from start, else from the given index (0-indexed)
1989 21:54 < jtanx> if count < 0, then return all points, else return /at most/ that many points
1990 21:55 < jtanx> in normal mode:
1991 21:55 < jtanx> if from < 0, then return from the end (return the most recent points)
1992 21:55 < jtanx> if count < 0, then return at most the default amount (SENSOR_QUERYBUFSIZ)
1993 21:56 < jtanx> otherwise return /at most/ that many points
1994 21:56 < jtanx> oh ya, if from >= 0 then return from that indicated index
1995 21:57 < jtanx> it's only in my git repository for now because I haven't tested it enough and I'm still not sure how I should go about integrating it with the current code
1996 21:58 < jtanx> (I basically rewrote Sensor_Handler and it has less error checks on the input; not sure if they're necessary or not)
1997 21:59 < jtanx> Since requesting a huge range could impact on sensor readings due to the mutex, it may be better to at least restrict dumps to when the experiment is not 'running'
1999 --- Day changed Sun Sep 08 2013
2003 18:06 < Callum_> what was the server stuff you said to install? also what packages do i need?
2007 18:09 -!- Callum_ is now known as Callum
2008 18:21 < jtanx> if you want to install the server, you need at least the 'nginx' and 'spawn-fcgi' packages
2009 18:21 < jtanx> one nginx is installed you need to copy the config files from the git repository in
2013 22:38 -!- Callum [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
2014 --- Day changed Mon Sep 09 2013
2018 10:54 -!- jtanx_ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
2019 11:30 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
2028 --- Day changed Tue Sep 10 2013
2030 17:25 < jtanx> it looks like we do need an sd card, at least to install the os onto it
2031 17:26 < jtanx> http://beagleboard.org/Getting%20Started#update
2032 17:41 < jtanx> http://avedo.net/653/flashing-ubuntu-13-04-or-debian-wheezy-to-the-beaglebone-black-emmc/
2033 17:42 < sam_moore> Ok, we should write a BOM for next week then
2034 17:42 < sam_moore> 1x SD Card
2035 17:44 < jtanx> from what I understand
2036 17:45 < jtanx> you write an image to the sd card
2037 17:45 < jtanx> boot off the sd card
2038 17:45 < jtanx> then you can write another image directly too the internal storage
2039 17:45 < jtanx> after that you don't need the sd card any more
2040 17:46 < sam_moore> Alright
2041 17:46 < jtanx> http://www.armhf.com/index.php/boards/beaglebone-black/
2042 17:47 < jtanx> any preference for ubuntu or debian?
2043 17:48 < sam_moore> As a debian user, I'd have to say debian :P
2045 17:49 < sam_moore> If it works on debian stable, we know it will work for at least the next 6 years
2047 17:49 < jtanx> debian should be fine
2048 17:53 < jtanx> *correction; we need a microsd card
2049 17:56 < jtanx> that's at least 2GB in size
2050 17:57 < sam_moore> Ok
2051 18:04 < jtanx> haha it's cheaper to buy a 4gb one than a 2gb one
2054 20:15 < jtanx> Well I can confirm that angstrom doesn't have nginx precompiled - http://www.angstrom-distribution.org/repo/
2056 --- Day changed Wed Sep 11 2013
2061 15:58 < jtanx> it took so long just getting internet access to the bbb
2062 16:01 < jtanx> dhcp/dns issues
2063 16:01 < jtanx> the debian image on the microsd is set to static ip 192.168.0.7
2064 16:02 < jtanx> /etc/resolv.conf should have the uwa nameservers in it, but it may have been rewritten by resolvconf
2065 16:02 < jtanx> I've left it in g19
2068 19:32 < jtanx> I've moved the 'current_time', 'start_time' and 'running_time' to the identify module instead of sticking it on every json response, because it's probably not information that will be required most of the time
2069 19:37 < jtanx> actually, we may have to rethink those, especially if we introduce start/stop control
2071 --- Day changed Thu Sep 12 2013
2074 09:36 < sam_moore> I think I have some time after the tutorial today to work on stuff
2075 09:36 < sam_moore> I take it we have the bbb now?
2076 09:37 < sam_moore> I'll bring that crappy webcam
2077 09:37 < sam_moore> Maybe look into sending images as part of the API, see if it's feasable to do it that way
2078 09:38 < sam_moore> I think we can introduce start/stop control fairly easily
2079 09:40 < sam_moore> "Mush Mush"
2080 09:40 < sam_moore> Heh
2081 09:41 < sam_moore> To reduce the load on the client, we might be able to send averaged data points instead of every data point
2082 09:41 < sam_moore> You specify "averages per point"
2083 09:42 < sam_moore> So each [time, value] pair is actually an average of X recordings
2084 09:42 < sam_moore> In fact it's better to send [mean_time, mean_value, std_dev]
2085 09:42 < sam_moore> The std_dev gives you an idea of noise and/or if the value is changing a lot
2086 09:43 < sam_moore> And of course you can always specify a single average and it becomes equivelant to what we currently do
2088 09:50 < jtanx> I'm free after the tute
2089 09:50 < jtanx> I'm bringing in a router to make it easier
2090 09:50 < jtanx> to work on the bbb together
2091 09:51 < jtanx> yesterday it was so painful trying to get shit working
2092 09:51 < jtanx> dhcp issues, dns issues, internet connection sharing issues...
2093 09:51 < jtanx> (mostly the fault of my own computer though)
2094 09:51 < jtanx> btw I'm working on adding an extra function to FCGI to makeit easier to parse parameters
2095 09:51 < jtanx> (hoepfully)
2096 09:55 < jtanx> gtg see you at the tute
2099 18:26 < Callum> would be easier to talk here...if everyone was on
2101 18:41 < jtanx> did you bring the bbb home?
2102 18:43 < sam_moore> Yep
2103 18:44 < sam_moore> I'll put it back tomorrow morning
2107 19:47 < jtanx> I'm so tempted to use bitflags for that request function
2108 19:52 < jtanx> one thing that I need to do is to sanitise json string fields
2109 20:18 < sam_moore> Sanitise? As in "make sane" or "make clean"?
2110 20:18 < sam_moore> Um... if you think bitflags are necessary, I fully support you :P
2111 20:19 < jtanx> as in
2112 20:19 < jtanx> If I allow FCGI_JSONPair to also be passed a format string
2113 20:19 < jtanx> then having stuff like \ or " or newline characters for eg in the string
2114 20:20 < jtanx> is not a good idea
2115 20:20 < sam_moore> Hmm
2116 20:20 < jtanx> it's sorta like this:
2117 20:20 < sam_moore> Well, writing the function to print out data (either as TSV or JSON)
2118 20:20 < sam_moore> I've only been using FCGI_PrintRaw
2120 20:20 < jtanx> but right now, you're logging messages in Server_handler
2121 20:20 < jtanx> about invalid values
2122 20:21 < sam_moore> Yes, I'm not sure how to deal with that
2123 20:21 < jtanx> Sensor_handler*
2125 20:21 < jtanx> eg Log(LOGERR, "Require \"all\" or an integer value: %s = %s", key, value);
2126 20:21 < sam_moore> Yes
2127 20:21 < jtanx> if I wanted to send that back to the client in FCGI_RejectJSON
2128 20:21 < jtanx> there's the potential (...) that the user could hvae included a " in the value
2129 20:22 < jtanx> so if you return it as part of your json response, then suddenly it's broken
2130 20:22 < sam_moore> Oh, that sucks
2131 20:23 < sam_moore> Perhaps treat Log messages seperately from JSON responses?
2132 20:23 < jtanx> eg: "description":" required an id, got 'blah-stray"'"
2134 20:24 < jtanx> What I could do is just replace any special characters with space
2135 20:24 < jtanx> and return that in description
2136 20:24 < jtanx> but keep the actual value in log
2137 20:24 < sam_moore> Maybe
2138 20:24 < sam_moore> You could also call FCGI_RejectJSON as soon as you get a special character
2139 20:25 < sam_moore> Since we shouldn't have any key/values that use them
2140 20:25 < sam_moore> (I think :P)
2142 20:25 < sam_moore> Whatever seems best
2143 20:25 < jtanx> let me think about it some more
2144 20:25 < sam_moore> Yeah, fair enough
2145 20:25 < sam_moore> Um, another thing (sorry) is error messages that you might get independent of any request
2146 20:26 < sam_moore> Like you suddenly have an I/O error on a file
2147 20:26 < sam_moore> Currently we handle that with Fatal
2148 20:26 < sam_moore> Which it would be convenient to keep; but instead of terminating the whole program, we need to notify the client somehow
2149 20:26 < jtanx> that won't happen until the next request
2150 20:27 < jtanx> what you could do is keep it exiting
2151 20:27 < jtanx> when that happens, nginx sends 502 bad gateway
2152 20:27 < jtanx> then if that's detected, send a link to the log file
2153 20:27 < sam_moore> Yeah, that seems good
2154 20:27 < jtanx> and a method to restart the software
2155 20:28 < sam_moore> Do we want to notify the client of non-fatal errors or warnings though?
2156 20:28 < sam_moore> Hmm
2158 20:29 < jtanx> probably a good idea
2159 20:29 < jtanx> but how
2160 20:29 < sam_moore> The client could periodically request the log file and deal with messages?
2161 20:30 < jtanx> It could just display it I guess
2162 20:30 < jtanx> onus on the user to take action if required
2163 20:30 < sam_moore> Sure, an alert might be nice though
2164 20:30 < sam_moore> Perhaps have an extra log file that just has the most recent message in it (with a timestamp)
2165 20:31 < jtanx> you could perform a regex on the text and highlight lines with warning or something
2166 20:31 < sam_moore> The client just periodically looks at that and if it's a new message can alert
2167 20:31 < sam_moore> Yeah that would work, as long as the file doesn't get too big
2168 20:31 < sam_moore> It probably won't
2169 20:31 < jtanx> well you could autoscroll it anyway
2170 20:32 < jtanx> but ok maybe that's getting a bit ahead of ourselves
2171 20:32 < sam_moore> Yeah, sure
2172 20:32 < sam_moore> I'll get back to rewriting 90% of the sensor code :P
2174 20:32 < jtanx> currently, I've got
2175 20:32 < jtanx> bool FCGI_ParseRequest(FCGIContext *context, char *params, FCGIValue values[], size_t count);
2176 20:32 < jtanx> (any better suggestion for FCGIValue?)
2177 20:32 < jtanx> (the name that is)
2179 20:33 < sam_moore> That's probably fine
2180 20:33 < jtanx> typedef struct FCGIValue {
2181 20:33 < jtanx> const char *key;
2182 20:33 < jtanx> void *value;
2183 20:33 < jtanx> unsigned flags;
2184 20:33 < jtanx> } FCGIValue;
2185 20:33 < jtanx> you then do
2186 20:33 < jtanx> something like:
2187 20:33 < jtanx> FCGIValue values[2] = {{"sensors", &ident_sensors, FCGI_REQUIRED(FCGI_BOOL_T)},
2188 20:33 < jtanx> {"actuators", &ident_actuators, FCGI_BOOL_T}};
2189 20:33 < sam_moore> Looks good
2190 20:33 < jtanx> although I'm open to suggestions on those type names too
2191 20:34 < jtanx> if you really have to
2192 20:34 < jtanx> you can do something like FCGI_RECEIVED(values[0].flags)
2193 20:34 < jtanx> to check if you received the argument or not
2194 20:34 < sam_moore> If it's not too hard to implement, then OK
2196 20:35 < sam_moore> That looks reasonably nice
2197 20:35 < jtanx> the #defines look less so:
2198 20:35 < jtanx> #define FCGI_PARAM_REQUIRED (1 << 0)
2199 20:35 < jtanx> #define FCGI_PARAM_RECEIVED (1 << 1)
2200 20:35 < jtanx> #define FCGI_BOOL_T (1 << 2)
2201 20:35 < jtanx> #define FCGI_LONG_T (1 << 3)
2202 20:35 < jtanx> #define FCGI_DOUBLE_T (1 << 4)
2203 20:35 < jtanx> #define FCGI_STRING_T (1 << 5)
2204 20:35 < jtanx> #define FCGI_REQUIRED(x) ((x) | FCGI_PARAM_REQUIRED)
2205 20:35 < jtanx> #define FCGI_IS_REQUIRED(x) ((x) & FCGI_PARAM_REQUIRED)
2206 20:35 < jtanx> #define FCGI_RECEIVED(x) ((x) & FCGI_PARAM_RECEIVED)
2207 20:35 < jtanx> #define FCGI_TYPE(x) ((x) & ~(FCGI_PARAM_REQUIRED | FCGI_PARAM_RECEIVED))
2208 20:35 < sam_moore> In fact it's similar to how you use select(2)
2209 20:35 < sam_moore> Wow, macros
2211 20:35 < jtanx> makes life easier
2212 20:36 < sam_moore> Alright, this is C
2213 20:36 < sam_moore> Yeah, FCGI_RECEIVED(values[i].flags) looks nice (from the point of view of actually using it anyway)
2214 20:37 < jtanx> yeah it's ok
2215 20:37 < jtanx> the only stickler is that hardcoded index
2216 20:37 < jtanx> can't really do much about that though
2217 20:37 < sam_moore> I can put an enum in the function
2218 20:38 < jtanx> if you want; it might be more work to maintain the enum than anything though
2219 20:39 < jtanx> but yeah, essentially if you require a parameter, you surround the type in FCGI_REQUIRED()
2220 20:39 < jtanx> hopefully that part was clear
2221 20:39 < sam_moore> Yep, I'm happy with that
2223 20:43 < jtanx> for the bool value, what behaviour do you think is better
2224 20:43 < jtanx> always set the value to true, or invert the current value
2225 20:44 < jtanx> right now it's set to always be true
2226 21:06 < sam_moore> Um... always set to true?
2229 21:30 < jtanx> well I didn't need to escape after all
2230 21:30 < jtanx> If you do something like this: http://mctx.us.to:8080/api?afa%22%22%22%22
2231 21:30 < jtanx> it gets url encoded
2232 21:30 < jtanx> http://mctx.us.to:8080/api?afa""""
2233 21:30 < jtanx> I wonder if that's guaranteed
2234 21:32 < jtanx> well, apparently it's not because IE doesn't escape it for you
2235 21:32 < jtanx> so I did need to escape
2236 21:33 < sam_moore> There's no escape
2237 21:46 < jtanx> wait wat
2238 21:59 < sam_moore> (It's a pun)
2239 22:00 < sam_moore> So I've made a DataFile structure to isolate it a bit more from the higher level Sensor related stuff
2240 22:00 < sam_moore> Hopefully things make more sense
2241 22:00 < sam_moore> I put in 2 seperate FILE* as well
2242 22:00 < sam_moore> And got rid of the confusing "fill a buffer then dump the buffer to a file" loop
2243 22:01 < sam_moore> Now it just writes each point to a file
2244 22:01 < sam_moore> Hopefully it's thread safe enough
2245 22:01 < sam_moore> Now... I just need to simplify the Sensor_Handler function...
2246 22:02 < jtanx> > (It's a pun)
2247 22:02 * jtanx facepalm
2250 22:03 < jtanx> I'll submit what I've done so far to git
2251 22:08 < jtanx> callum
2252 22:08 < jtanx> that code you submitted
2253 22:08 < jtanx> I don't think it's right
2254 22:08 -!- Irssi: #mctxuwa_softdev: Total of 3 nicks [0 ops, 0 halfops, 0 voices, 3 normal]
2255 22:09 < jtanx> the stuff with g_sensor_names, that's the human readable name of each sensor
2256 22:10 < sam_moore> I've changed the name and how the sanity check gets called, but I've left the body unimplemented for now
2257 22:12 < jtanx> it's with the pull request he submitted ~30mins ago
2258 22:12 < sam_moore> Oh, ok
2259 22:13 < sam_moore> Good thing I made a new branch for my changes
2260 22:14 < jtanx> the pull request isn't merged yet
2261 22:15 < sam_moore> Yeah, I don't think we should merge that, sorry Callum
2262 22:17 < jtanx> ok just submitted the pull request
2263 22:17 < sam_moore> I never put documentation on g_sensor_names I guess, sorry
2264 22:17 < jtanx> I think I did though
2265 22:17 < jtanx> but in the header file
2266 22:18 < jtanx> which is annoying :/
2267 22:18 < jtanx> (as in there's more than one spot to put documentation)
2268 22:19 < sam_moore> Yeah... does one overwrite another?
2269 22:19 < sam_moore> I'll just copy paste the same thing into the .c file
2270 22:19 < jtanx> No idea how doxygen handles that
2271 22:20 < sam_moore> I wonder how much fun I'll have merging these branches...
2273 22:20 < jtanx> I'm not really sure if FCGI_ParseRequest will be that helpful or not
2274 22:20 < jtanx> if you find it doesn't really help then we can scrap it
2275 22:21 < sam_moore> Well it makes sense to seperate the code for getting key,value pairs from the code that does stuff with them
2276 22:23 < jtanx> I guess
2277 22:23 < sam_moore> I've basically moved a lot of functionality from sensor.c into a new file data.c under functions with the prefix "Data_"
2279 22:24 < sam_moore> data.c doesn't care anything about what the data is or where it came from, it just wraps around saving/reading/selecting ranges of DataPoints
2280 22:25 < jtanx> sounds like a good idea
2281 22:25 < jtanx> it might be of use in actuator code I guess
2282 22:25 < sam_moore> Yeah, there's a DataFile structure that basically wraps around the binary file
2283 22:25 < sam_moore> Yes, I was thinking that too
2284 22:25 < sam_moore> Because we'll probably want to store DataPoints when an actuator gets changed
2285 22:26 < jtanx> yeah true
2286 22:27 < sam_moore> If the idea about using 2 FILE* is right... I don't think we really need any mutexes?
2287 22:28 < sam_moore> There is an index that gets incremented, but since only one thread can write to it, the worst that can happen is you return one (maybe two at the extreme) less point than actually exists
2288 22:29 < sam_moore> If you had 2 threads incrementing the index you'd need a mutex though
2289 22:29 < jtanx> the problem is that setting a value is not guaranteed to be atomic
2290 22:29 < jtanx> i think
2291 22:29 < sam_moore> Yes, sure
2292 22:29 < jtanx> so while setting and you read it it could be indeterminate
2293 22:29 < sam_moore> Mmm
2294 22:30 < jtanx> I think you need mutexes around reading/writing the points_written(?)
2295 22:30 < jtanx> index
2296 22:30 < jtanx> but that's it
2297 22:31 < jtanx> http://stackoverflow.com/questions/54188/are-c-reads-and-writes-of-an-int-atomic
2298 22:31 < sam_moore> I'm not sure you do if you are writing in one thread and reading in another
2299 22:31 < sam_moore> Ah, stackoverflow, OK
2300 22:32 < jtanx> it's actually very architecture specific
2301 22:32 < sam_moore> Yeah "Yes, no, hmmm, well it depends" is probably right
2303 22:32 < sam_moore> Well... there are no mutexes at the moment, but maybe I should get around to putting them in
2304 22:32 < sam_moore> I think I had one thread writing and another reading in my parallel programming assignment and got full marks :S
2305 22:33 < sam_moore> Threads are strange and magical
2306 22:33 < jtanx> hey well it probably works 99% of the time
2307 22:34 < sam_moore> Ah, it probably works if the size of the integer is smaller than the bus
2308 22:34 < sam_moore> smaller or equal
2309 22:34 < jtanx> too bad linux doesn't have something like InterlockedExchange
2310 22:35 < sam_moore> I'll add mutexes in later then
2311 22:35 < jtanx> One thing I liked about C++ was auto locks
2312 22:36 < jtanx> (you could call some lock function and once that scope ended the lock ended too)
2313 22:36 < sam_moore> That's nice
2314 22:40 < jtanx> Ok, that's all I'm probably going to get done today
2315 22:41 < sam_moore> Yeah, thanks
2316 22:42 < jtanx> what's with the meeting tomorrow though
2317 22:43 < sam_moore> I'm busy from 2:00pm until at least 4:00pm (maybe later)
2318 22:43 < sam_moore> But I think I should be preparing for something before 2:00pm
2319 22:44 < jtanx> ok, I'll probably come in around 1.30pm so I can work with Callum, and I'll stay on until whatever time
2320 22:44 < sam_moore> Alright
2321 22:45 < sam_moore> Check github in the morning, I'll push all my changes
2322 22:45 < jtanx> ok I'll do that
2323 22:45 < sam_moore> Hopefully they make sense, otherwise you can change everything back :P
2324 22:45 < sam_moore> The wonders of git
2325 22:45 < jtanx> haha I'm sure it'll make sense
2326 22:46 < jtanx> after staring for a while
2327 22:46 < sam_moore> Yeah it should be a bit simpler
2328 22:46 < jtanx> thanks
2329 22:47 < jtanx> see you tomorrow (probably)
2331 23:28 -!- Callum_ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
2332 --- Day changed Fri Sep 13 2013
2334 08:31 < jtanx> oh yeah, I forgot to restart the bot :P
2336 08:53 < sam_moore> So, using 2 FILE* causes some problems, I recommend we just use 1
2337 08:54 < sam_moore> In theory the operating system is supposed to use locks when multiple processes have access to the same file
2338 08:54 < sam_moore> But...
2339 08:54 < sam_moore> It probably doesn't work with threads
2340 08:55 < sam_moore> I'm not sure exactly what goes wrong, but using 1 works and isn't really going to be slower (if the OS uses locks then that probably has a similar overhead to using a mutex)
2341 08:59 < jtanx> yeah, let's stick to one then
2342 09:00 < jtanx> there's still a few bugs around I think
2343 09:00 < sam_moore> Probably
2344 09:01 < sam_moore> I put valgrind back in, I got rid of a lot last night
2346 09:01 < sam_moore> Although I probably introduced them in the first place
2347 09:01 < jtanx> what was with that mem leak in fastcgi code?
2348 09:03 < sam_moore> Oh, that wasn't a memory leak, it was an uninitialised value
2349 09:04 < sam_moore> I thought I'd be clever and use sizeof() on the FCGIValue array
2350 09:04 < sam_moore> But I forgot that the actual number of elements is not just sizeof()
2351 09:04 < sam_moore> It's sizeof(array) / sizeof(element)
2352 09:04 < jtanx> oh right haha
2353 09:05 < sam_moore> So the refactored code basically does the same thing
2354 09:05 < sam_moore> But hopefully it's a bit cleaner
2356 09:05 < jtanx> it's pretty good
2357 09:06 < jtanx> when you get an invalid id or format, do you want to reject that?
2358 09:07 < sam_moore> Yeah, I wasn't sure what I should do there, but I think Sensor_Handler is the only place you can really deal with that
2360 09:07 < sam_moore> I did have it calling FCGI_RejectJSON if the sensor id was invalid
2361 09:08 < jtanx> the current code on git just calls Log
2362 09:08 < sam_moore> But I must have done something wrong, because the normal JSON was getting printed just after that
2363 09:08 < sam_moore> So I removed it
2364 09:08 < jtanx> oh yeah
2365 09:08 < jtanx> you have to return after FCGI_RejectJSON
2366 09:08 < sam_moore> Ah
2367 09:08 < sam_moore> Durr
2369 09:09 < jtanx> anyways I'll look through and see if I can fix stuff up
2370 09:09 < jtanx> then I'll try and do that start/stop stuf
2371 09:10 < sam_moore> Ok
2372 09:10 < sam_moore> I put in Sensor_Start and Sensor_Stop which might help
2373 09:10 < sam_moore> I thought you might want to pause data collection without actually "stopping" the experiment?
2375 09:11 < jtanx> that might be a good idea
2376 09:11 < sam_moore> And also it should be fairly easy to implement a Sensor_Load if we want to be able to load previous experiments
2378 09:38 < jtanx> those issues with fread
2379 09:38 < jtanx> it could be because you didn't specify the 'b' flag in fopen
2381 09:39 < jtanx> // Clear the FILE*s
2382 09:39 < jtanx> df->read_file = NULL;
2383 09:39 < jtanx> df->write_file = NULL;
2384 09:39 < jtanx> fclose(df->write_file);
2385 09:52 < sam_moore> Oh... hurdur
2386 09:52 < sam_moore> Wait how is it working at all
2387 09:52 < sam_moore> The write file is mode "w+" which should make it plain text
2388 09:53 < jtanx> so it's no longer a binary file?
2389 09:53 < jtanx> I think i may not be experiencing the same issues as you just because I'm running everything on single core processors
2390 09:53 < sam_moore> Well... it certainly looks like a binary file when you try and cat it
2392 09:53 < jtanx> it's probably a good idea to stick to one file pointer and use mutexes
2393 09:53 < sam_moore> Yeah
2394 09:53 < sam_moore> But also make sure that file is binary
2396 09:54 < sam_moore> It's probably compiler specific what happens when you use fwrite and fread on a plain text file
2397 09:54 < jtanx> probably
2398 09:54 < sam_moore> But it looks like a binary file to me, so I'm not sure that's related to the problems with fread
2399 09:54 < sam_moore> I can investigate this by changing like 4 characters...
2400 09:55 < jtanx> one thing I did notice on linux
2401 09:55 < jtanx> if it wasn't a binary file you'd have to use fflush to explicitly write out text and have it appear when you used cat
2402 09:56 < jtanx> but overall I think it's not due to it being a binary file or not
2403 09:56 < sam_moore> Yep
2404 09:56 < sam_moore> I just put the second FILE* for read_file back in
2405 09:56 < sam_moore> Made them both binary
2406 09:56 < sam_moore> Still get the "Transport endpoint is not connected" errors
2407 09:57 < sam_moore> So there should be a "b" in the file mode, but that's unrelated to having multiple FILE*
2408 09:57 < jtanx> yep then I think that's due to you running it on a multicore processor
2409 09:57 < jtanx> maybe
2410 09:57 < sam_moore> I think the OS locks around file access are based on PID
2411 09:58 < jtanx> on linux all file locks are advisory only
2412 09:58 < sam_moore> Can
2413 09:58 < sam_moore> Anyway, it's clearly safest to just have one FILE*
2415 09:58 < jtanx> I'm changing it now
2416 10:09 < jtanx> oh ffs that's the second time it's crashed simply because I didn't do make clean before make
2417 10:16 < sam_moore> haha
2418 10:17 < sam_moore> Modify the make file to always run make clean?
2419 10:28 < jtanx> haha that's one option
2420 10:28 < jtanx> it's because make doesn't consider changes to the header files
2421 10:28 < jtanx> there's a way to make it detect those, but *effort*
2422 10:40 < sam_moore> Regarding Actuators, I think if we design for a thread to control (one or more) actuators that will make it easy to add more advanced control later
2423 10:42 < sam_moore> eg: The Actuator_Handler just sets some kind of formula or says "Every time sensor 0 is stable for Xs (within a range) change actuator by Y" and the thread watches the sensor data and changes the actuator when necessary
2424 10:43 < sam_moore> You could also add feedback that way too
2425 10:44 < sam_moore> "Set this actuator so that sensor 0 has value X"
2427 10:47 < jtanx> about the sensor stuff
2428 10:47 < jtanx> there were a few things I noticed
2429 10:48 < jtanx> the time wrapping
2430 10:48 < jtanx> could still give a negative start_time or end_time
2431 10:48 < jtanx> if the user specified a very negative start_time/end_time
2432 10:49 < jtanx> (eg specifies a negative time greater than the total running time)
2433 10:49 < sam_moore> Oh yeah
2434 10:49 < jtanx> so in data_printbytimes
2435 10:49 < jtanx> I just clamped it to zero
2436 10:49 < jtanx> instead of asserting
2437 10:49 < sam_moore> Fair enough
2438 10:49 < jtanx> strangely this code seems to work pretty good:
2439 10:49 < jtanx> void Data_PrintByTimes(DataFile * df, double start_time, double end_time, DataFormat format)
2441 10:49 < jtanx> assert(df != NULL);
2442 10:49 < jtanx> //Clamp boundaries
2443 10:49 < jtanx> if (start_time < 0)
2444 10:49 < jtanx> start_time = 0;
2445 10:50 < jtanx> if (end_time < 0)
2446 10:50 < jtanx> end_time = 0;
2447 10:50 < jtanx> int start_index = 0, end_index = 0;
2448 10:50 < jtanx> if (start_time < end_time)
2450 10:50 < jtanx> start_index = Data_FindByTime(df, start_time, NULL);
2451 10:50 < jtanx> end_index = Data_FindByTime(df, end_time, NULL);
2453 10:50 < jtanx> Data_PrintByIndexes(df, start_index, end_index, format);
2455 10:50 < jtanx> oh but that was the other ting
2456 10:50 < jtanx> it works better if you have exclusive end index/time
2457 10:50 < sam_moore> Ok
2458 10:50 < sam_moore> I have to go now
2460 10:50 < sam_moore> See you this afternoon if you're still there
2461 10:50 < jtanx> yep see you then
2462 10:51 < jtanx> probably
2466 13:44 < callum> should i just add the sensor threshold values to the sensor struct?
2467 13:47 < jtanx> probably not
2468 13:47 < jtanx> I think you have to create a new struct
2469 13:48 < jtanx> are you at uni?
2470 13:49 < callum> yea. why is a new struct necessary?
2471 13:49 < jtanx> come to g19
2472 13:49 < jtanx> the bbb is setup too
2474 16:17 < sam_moore> Are you guys still in G19?
2475 16:17 < sam_moore> On my way now
2478 18:42 < jtanx> lol you need to use a transistor to turn on an led from the gpio pins
2479 19:56 < jtanx> ok I think I'll just escape all input parameters from within the request loop
2480 19:56 < jtanx> then at least you're guaranteed that user input won't stuff up anything
2481 19:56 < jtanx> (as in making it generate invalid JSON)
2483 --- Day changed Sat Sep 14 2013
2486 11:32 < sam_moore> blergh, too many different versions of OpenCV
2487 11:32 < sam_moore> Also too many different data types
2488 11:33 < sam_moore> "Getting a digital image into numbers can be very handy for your image processing. In this post i will brief just that."
2489 11:34 < sam_moore> Thank god, finally a tutorial that makes sense
2490 11:34 -!- Irssi: #mctxuwa_softdev: Total of 2 nicks [0 ops, 0 halfops, 0 voices, 2 normal]
2491 11:34 < sam_moore> ... no one else is in the channel
2492 11:34 < sam_moore> :S
2494 12:36 < jtanx> on start/stop/pausing an experiment
2495 12:36 < jtanx> currently everything is relative to g_options.start_time
2496 12:42 < sam_moore> Yeah
2497 12:43 < sam_moore> Perhaps make an ExperimentTime function and that leaves us free to change what the time stamps are relative to?
2498 12:43 < sam_moore> Looking into this interferometer stuff...
2499 12:43 < jtanx> ok, maybe as part of the Control_ module then
2500 12:43 < sam_moore> Interesting problem, I think I've worked out an algorithm that isn't too terrible
2501 12:44 < jtanx> yeah?
2502 12:44 < jtanx> how does it work
2503 12:45 < sam_moore> If you have a sinusoidal wave, find the x intercepts, and that lets you calculate the phase and frequency
2504 12:45 < sam_moore> That's the simple version
2505 12:46 < jtanx> haha alright
2506 12:46 < sam_moore> I have 3 pages of notes that I can show Adrian/Adam if I can't get it working
2508 12:46 < jtanx> nice work
2509 12:47 < sam_moore> Fortran would be good for the array operations
2510 12:47 < sam_moore> If fortran were able to do anything *other* than array operations it would be a nice language...
2511 12:47 < jtanx> have you ever used Fortan before?
2512 12:48 < sam_moore> Yes
2513 12:48 < sam_moore> I'm going to keep it in C though
2514 12:48 < sam_moore> It took long enough to get OpenCV working
2515 12:48 < sam_moore> I'm sure there's some kind of convoluted Fortran library
2516 12:49 < sam_moore> But a seperate fortran program won't talk to our server
2517 12:49 < jtanx> can you compile the code as a library with C interop
2518 12:49 < sam_moore> Erm..
2519 12:49 < sam_moore> Probably more effort than just doing it in C
2520 12:49 < jtanx> probably
2521 12:51 < jtanx> I think a separate mutex is needed around the *_Stop() functions
2522 12:51 < jtanx> because if a client sends in a request
2523 12:51 < sam_moore> Oh, good point
2524 12:52 < jtanx> although that's only going to be a problem if our own software calls the stop function because of the sanity checks
2525 12:52 < sam_moore> If there are 2 requests?
2526 12:52 < sam_moore> No wait, the FCGI stuff is serial
2527 12:52 < jtanx> the request loop is single threaded
2528 12:52 < sam_moore> It has to finish processing one request to respond to the next
2529 12:52 < sam_moore> That's fine
2530 12:56 < sam_moore> Put a mutex in the Sensor struct, use the same one that's already in the Actuator struct, put critical sections around setting the "s->record_data" or "a->activated" variables (or whatever you choose to use as a "is thing running" flag)
2531 12:56 < sam_moore> And check the flag hasn't already been set before doing anything
2532 12:57 < sam_moore> Similar to how the Thread_Running() and Thread_QuitProgram() functions used to work
2533 12:57 < sam_moore> .... Before I deleted them
2534 12:57 < sam_moore> Any thread could call Thread_QuitProgram, and repeated calls would have no effect
2535 13:01 < jtanx> ok I'll try that
2536 13:51 < jtanx> actually, what about this:
2537 13:51 < jtanx> in control.c, it maintains its own mutex
2539 13:52 < jtanx> and it's the only place where Sensor_Start/Stop Actuator_Start/Stop is called
2540 13:53 < jtanx> You then have Control_Lock/Unlock that's placed around the responses in the handler functions
2541 13:53 < jtanx> those functions internally lock/unlock the mutex held in control.c
2542 13:53 < jtanx> ah stuff it
2543 13:53 < jtanx> I'll commit it to my git repo
2544 13:54 < jtanx> I still don't know how the pause functionality should be done though
2545 13:54 < jtanx> especially with the time discontinuities
2546 14:01 < jtanx> oh yeah, just a reminder that you have to be careful using FCGI_LONG_T vs FCGI_INT_T
2547 14:02 < jtanx> if your variable is of type int but you give FCGI_LONG_T, and where sizeof(int) != sizeof(long) then there could be a buffer overflow
2548 14:13 < sam_moore> Right
2549 14:14 < sam_moore> If you want to commit to the main repo you can use a new branch
2550 14:14 < sam_moore> Having a single mutex in control.c instead of one per sensor/actuator is probably better
2551 14:15 < sam_moore> With the pause functionality... I think if you just don't call Data_Close() (and don't call Data_Open on resuming) but otherwise stop the threads running Sensor_Loop in the same way
2552 14:15 < sam_moore> That should do most of it
2553 14:16 < sam_moore> Don't reset the experiment start time
2554 14:17 < sam_moore> Perhaps the experiment start time needs to be stored somewhere though
2555 14:18 < sam_moore> Anyway, I'll let you solve the problem :P
2557 15:45 < jtanx> well I think I got something semi-working
2558 15:45 < jtanx> it involved adding on Sensor_PauseAll/ResumeAll + Acuator_PauseAll/ResmueAll (plus the individual Pause/Resume) functions
2559 15:46 < sam_moore> Cool
2560 15:46 < sam_moore> I think I'm starting to get my head around OpenCV
2561 15:46 < sam_moore> The documentation for it is a bit crap
2562 15:46 < jtanx> oh don't get me started on opencv documentation
2563 15:47 < jtanx> yesterday it took me and callum around 30 mins to figure out that CvMat structure
2564 15:47 < sam_moore> Haha
2565 15:47 < sam_moore> It probably took me a bit longer :S
2566 15:47 < jtanx> the problem is that most of it's geared towards c++ usage
2567 15:49 < jtanx> back on that control stuff, basically those Sensor/Actuator_[Start|Stop|Pause|Resume] functions can only be called via the Control_[Start|Stop|Pause|Resume] functions
2568 15:50 < jtanx> partly because of threading issues but also because it's the only place where the current state is currently kept track of
2569 15:51 < jtanx> (e.g if you call Sensor_Start twice then...
2570 15:53 < sam_moore> Seems sensible
2571 15:53 < jtanx> anyway, I'm taking a break from this stuff for a while
2572 15:53 < sam_moore> Yeah, fair enough
2573 15:54 < jtanx> If you want to see what I've done so far, it's on my git repo (haven't added comments yet)
2574 15:54 < sam_moore> Cool
2575 16:50 < sam_moore> The IplImage vs CvMat conversion is dumb
2576 16:50 < sam_moore> In fact I don't think you even need to do it?
2577 16:51 < sam_moore> Well at least to display an image you can just pass a CvMat
2578 16:51 < sam_moore> Maybe you still need the IplImage to capture from a camera
2579 16:51 < sam_moore> I worked out how to convert from IplImage to CvMat anyway
2580 16:53 < sam_moore> Other than that, OpenCV doesn't actually seem horrible to use
2581 16:53 < sam_moore> Just... contradictory documentation
2582 16:55 < sam_moore> Anyway... I've created a moving sinusoidal image!
2583 16:56 < sam_moore> Now to work out why the algorithm keeps returning -nan :S
2584 16:56 < sam_moore> Also for some reason the image is blue instead of red
2585 16:56 < sam_moore> But whatever
2587 16:57 < jtanx> BGR vs RGB?
2588 17:02 < sam_moore> Looks like it
2589 17:03 < sam_moore> Doing this with an actual camera is going to suck
2590 17:04 < sam_moore> See, I've worked out an algorithm to cope with changing background light conditions
2591 17:04 < sam_moore> Because differentiating a sinusoid gives you another sinusoid with the same phase (offset by pi/2)
2592 17:05 < sam_moore> Buut... differentiating with finite differences adds more noise
2593 17:05 < sam_moore> Or rather it makes the noise more pronounced
2594 17:07 < sam_moore> Hopefully sensors is considering this
2595 17:07 < sam_moore> If they want to shoot a laser into a camera, they should really do it in a way that keeps out background light
2596 17:07 < sam_moore> Buuut
2597 17:07 < sam_moore> I think they mentioned using one camera to do both the interferometer and look at the can
2598 17:07 < sam_moore> :S
2599 17:08 < sam_moore> Oh well, the optics is their problem
2600 17:09 < sam_moore> I suppose I will prepare a report or something about the algorithm and what conditions the image needs to satisfy
2602 17:12 < jtanx> there's going to be two cameras
2603 17:12 < jtanx> because it was too much hassle moving it
2604 17:12 < sam_moore> Yes... but one was meant to be looking at each can?
2607 17:13 < sam_moore> We should ask them
2608 17:13 < jtanx> I just thought that one would be for the interferometer (no need to look at can) and the other would be for the can to be blown up
2609 17:13 < sam_moore> Probably
2610 17:15 < jtanx> but I was thinking for the one to be blown up
2611 17:16 < jtanx> you could possibly just stream it using something like ffserver
2612 17:16 < jtanx> instead of passing it through opencv
2613 17:16 < sam_moore> Yeah, that seems like it's probably easier
2616 18:19 < sam_moore> So... when you take an image with a camera the pixels are stored as rgb with 0->255 values
2617 18:20 < sam_moore> You can convert the IplImage to a CvMat and it keeps the values ordered as rgb with 0->255 values
2618 18:20 < sam_moore> And then...
2619 18:20 < sam_moore> If you try and display it...
2620 18:20 < sam_moore> The display function treats it as having values in bgr order with 0->1 values
2621 18:20 < sam_moore> -_-
2622 18:21 < sam_moore> (So unless you manually adjust all the values you'll just get a white picture in the display)
2623 18:54 < jtanx> hahaha
2625 18:56 < jtanx> for cvShowImage:
2626 18:56 < jtanx> If the image is 8-bit unsigned, it is displayed as is.
2627 18:56 < jtanx> If the image is 16-bit unsigned or 32-bit integer, the pixels are divided by 256. That is, the value range [0,255*256] is mapped to [0,255].
2628 18:56 < jtanx> If the image is 32-bit floating-point, the pixel values are multiplied by 255. That is, the value range [0,1] is mapped to [0,255].
2629 18:57 < jtanx> so it's treating it as 32-bit floating point?
2632 20:41 < sam_moore> I think it's because of how I converted the IplImage to a CvMat
2633 20:42 < sam_moore> My algorithm is almost working
2634 20:43 < sam_moore> The fact that angles wrap around every 2*pi is giving me a headache though
2635 20:43 < sam_moore> This is pretty fun
2636 20:45 < sam_moore> Hopefully I can do Computer Vision as an optional, I think its in the list
2637 20:45 < sam_moore> Maybe I shouldn't make all my optionals CS units, but meh
2639 21:20 < jtanx> the computer vision unit sounds interesting, but a lot of maths/theory involved
2641 --- Day changed Sun Sep 15 2013
2643 11:02 < sam_moore> I'm really glad I put the IRC logs under git
2644 11:02 < sam_moore> It's very helpful for keeping my diary up to date
2646 11:40 < jtanx> I'm gladful for git
2647 11:48 < jtanx> about the bbb
2648 11:48 < jtanx> it's probably best to just install debian to the internal memory
2649 11:54 < jtanx> on the controls
2650 11:54 < jtanx> maybe we can have the following states: start/pause/resume/stop/close
2651 11:56 < jtanx> actually, maybe just start/pause/resume/close
2652 11:56 < jtanx> when an 'emergency stop' due to the sanity checks occurs
2653 11:57 < jtanx> actually, start/pause/resume/close/emergency
2654 11:57 < jtanx> start/pause/resume/close can only be initiated by the client
2655 11:58 < jtanx> emergency can be initiated by client/server
2656 11:58 < jtanx> in emergency, actuators are set as necessary then deactivated
2657 11:58 < jtanx> but importantly, the data files remain open, which hopefully removes the need for mutexes
2658 12:26 < sam_moore> That seems sensible
2659 13:20 < sam_moore> Hey
2660 13:20 < sam_moore> It's actually quite simple to stream an image through FastCGI
2662 13:21 < jtanx> you just fwrite the image buffer
2663 13:21 < sam_moore> Yep
2664 13:21 < jtanx> I had some test code for that but could never test it
2665 13:22 < jtanx> no webcam
2666 13:22 < sam_moore> Ah, damn
2667 13:22 < sam_moore> I've written some code, it works pretty brilliantly
2669 13:22 < jtanx> this control code is really annoying me
2670 13:23 < jtanx> just all the considerations of if you need a mutex here or not and 'what happens if...'
2671 13:23 < sam_moore> Ah, sorry to hear that
2672 13:23 < jtanx> yeah nah its ok
2673 13:24 < jtanx> but that interferometer stuff you did looks really cool
2674 13:26 < sam_moore> Yeah, it worked surprisingly well
2675 13:26 < sam_moore> It can cope with a fair bit of background light, even without all the improvements I was thinking about
2676 13:27 < sam_moore> If I add 2 or 3 more columns to scan, and use the fact that we actually know the spatial frequency to eliminate nodes that are too close together
2677 13:27 < sam_moore> It should be pretty good
2678 13:27 < sam_moore> I'm not sure what the laser intensity will be, but the generated image looks similar to ones you can find on the internet
2679 13:28 < sam_moore> One possible problem is if the mirrors aren't flat enough
2680 13:28 < sam_moore> But hopefully it won't be a big issue (since they've pretty much just specified an expensive pre-built kit which presumably has flat mirrors)
2682 13:30 < jtanx> here's to hoping 'it just works'
2683 13:30 < sam_moore> Yep :P
2684 13:31 < sam_moore> Got to go, bye
2685 13:32 < jtanx> ok cya
2688 15:56 -!- jtanx_ is now known as jtanx
2690 --- Day changed Mon Sep 16 2013
2695 16:05 -!- jtanx_ [
[email protected]] has quit ["ChatZilla 0.9.90.1 [Firefox 23.0.1/20130814063812]"]
2698 19:44 < jtanx> no mctxbot while I work on my f# project
2702 --- Day changed Tue Sep 17 2013
2706 15:34 < jtanx> to run the software not as root, we need to at least add it to the 'video' group so it can access the webcam
2707 15:34 < jtanx> not sure about the sensors
2708 15:34 < jtanx> eg sudo usermod -a -G video debian
2709 15:38 < sam_moore> Ah, cool
2710 15:39 < sam_moore> I think I worked out how to get around the camera crashing without killing the rest of the program, won't implement it for a while though
2715 15:57 -!- jtanx_ is now known as jtanx
2718 16:46 -!- jtanx_ is now known as jtanx
2726 23:23 < sam_moore> Hi
2727 23:24 < Callum> do you know how to do the second question of that assignment?
2728 23:24 < Callum> https://docs.google.com/file/d/0B241H5liqVlnbHZETXRZX1Mwd1k/edit?usp=sharing
2729 23:25 < Callum> rather remember
2730 23:35 < sam_moore> Well, you can eliminate any epsilon^2 when you substitute those formulae for v into the formula for gamma
2731 23:35 < sam_moore> Then it has a really simple taylor expansion
2732 23:35 < Callum> i might have to hunt you down tomorrow to show me. or maybe il be able to think straight tomorrow.
2733 23:38 < sam_moore> You can express one of the epsilons in terms of the other one after that
2734 23:40 < sam_moore> I'm pretty busy tomorrow
2735 23:42 < Callum> mhmm. so no free time at all? coz im fairly free
2736 23:49 < sam_moore> Not from 8:00am until 5:00pm
2737 23:49 < Callum> ohwow. you are busy
2738 23:49 < Callum> im still unsure what im meant to be applyign the taylor expansion to
2739 23:53 < sam_moore> Substitute in the suggested formulae to gamma, simplify it, then apply a taylor expansion
2740 23:53 < sam_moore> Anyway, goodnight, good luck
2741 23:53 < Callum> night
2742 --- Day changed Wed Sep 18 2013
2750 --- Day changed Thu Sep 19 2013
2752 16:08 < jtanx> one thing I forgot to mention - the latest version on git uses syslog
2753 16:08 < jtanx> if you copy the config file (server-configs/rsyslog.d/* ??) to /etc/
2754 16:09 < jtanx> it will log to /var/log/mctx[something I can't remember].log
2755 16:10 < jtanx> i'm pretty sure you can also create a log file specifically for warning level and above (so it logs in three places, stderr, the normal log, and a special 'error' log), but I haven't set this up yet
2759 18:22 < sam_moore> ?
2762 18:50 -!- jtanx_ is now known as jtanx
2765 19:52 -!- MctxBot_ is now known as MctxBot
2766 20:24 < jtanx> I got the camera image to be updated in javascript instead: http://mctx.us.to:8080/test/
2767 20:25 < jtanx> right now it's updated around every ~400ms because my webcam is running through a usb1.1 link which seriously limits how fast it can update
2768 20:36 < jtanx> (its running on a pentium 3 computer)
2770 --- Day changed Fri Sep 20 2013
2773 18:02 < jtanx> this seems like an interesting option, at least for the cam that just shows the can explode:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page
2774 18:51 < sam_moore> Cool
2775 18:51 < sam_moore> It, ah
2776 18:52 < sam_moore> Looks like we might have to recompile the kernel to get PWM working
2777 18:52 < sam_moore> Hooray
2778 18:52 < sam_moore> Kernel compiling
2779 18:52 < sam_moore> What could possibly go wrong?
2780 19:02 < jtanx> really??
2781 19:02 < jtanx> why....
2782 19:03 < jtanx> no am33xx_pwm module?
2783 19:04 < sam_moore> Not that I can tell
2784 19:05 < jtanx> well crap
2785 19:06 < sam_moore> Well... surely I can find a precompiled kernel somewhere
2786 19:06 < jtanx> it seems that stuff for the BBB is at a really premature stage
2787 19:07 < sam_moore> Yeah, RPi is much nicer
2788 19:07 < jtanx> the BBB is just too new..
2789 19:07 < sam_moore> What's the point of having fancy things like ADC and PWM...
2790 19:07 < sam_moore> If you can't actually use them without jumping through hoops
2791 19:07 < jtanx> hahaha
2792 19:07 < jtanx> were you referencing this, when you said we might have to recompile the kernel? https://groups.google.com/d/msg/beagleboard/wjbOVE6ItNg/AGYVRhYbTX8J
2793 19:08 < sam_moore> Yeah
2794 19:08 < sam_moore> ...
2795 19:08 < sam_moore> I wonder if I can take the kernel used by Angstrom and stick it in /boot
2796 19:08 < sam_moore> on the SD card
2798 19:10 < jtanx> what about kernels from here
2799 19:10 < jtanx> http://rcn-ee.net/deb/precise-armhf/
2800 19:10 < jtanx> sorry
2801 19:10 < jtanx> http://rcn-ee.net/deb/wheezy-armhf/
2802 19:11 < jtanx> what's it currently running
2803 19:12 < sam_moore> 3.8.13-bone20
2804 19:13 < sam_moore> Try 3.8.13-bone28 ?
2805 19:15 < jtanx> what about v3.8.9-bone15
2806 19:15 < jtanx> oh wait
2808 19:15 < sam_moore> I wonder why the BBB developers didn't go with debian...
2809 19:15 < jtanx> v3.11.0-bone5
2811 19:15 < jtanx> why angstrom, of all things
2812 19:15 < sam_moore> Is angstrom used anywhere else?
2813 19:16 < jtanx> dunno
2814 19:16 < sam_moore> Other embedded devices, heh
2815 19:16 < sam_moore> Everyone just has to use their own distro :P
2816 19:17 < sam_moore> I didn't see the .11 kernels, I'll try the latest one
2817 19:17 < jtanx> want to try the rc version? lol
2818 19:18 < jtanx> oh the rc versions are older than .11
2819 19:19 < jtanx> how does it work?
2820 19:19 < jtanx> do you just download from http://rcn-ee.net/deb/wheezy-armhf/v3.11.0-bone5/
2821 19:19 < jtanx> the .sh script and run it from the BBB?
2822 19:24 < sam_moore> I think so
2823 19:25 < sam_moore> Well... here goes nothing
2824 19:26 < sam_moore> Hopefully between 3.8 and 3.11 they actually enabled PWM by default...
2825 19:27 < sam_moore> It looks like install-me.sh downloads all the .deb files appropriately
2826 19:29 < sam_moore> It's creating files like: /lib/firmware/bone_pwm_P8_36-00
2827 19:29 < sam_moore> Which looks promising
2828 19:29 < sam_moore> Snoopy is not yet on fire
2829 19:29 < sam_moore> Which is promising
2830 19:29 < sam_moore> Rebooting and praying
2831 19:31 < sam_moore> And... it booted into 3.8.13-bone20 -_-
2832 19:31 < sam_moore> Tempted to just symlink that filename to the new kernel
2833 19:34 < sam_moore> The new kernel exists in /boot, but obviously there's some boot config that needs to get set
2834 19:39 < sam_moore> Ok, screw this, I'm making a symlink just to see if it works
2836 19:41 < jtanx> no grub
2837 19:43 < jtanx> did update-initramfs run?
2838 19:46 < jtanx> or maybe we need mkimage
2839 19:47 < jtanx> yeah probably need mkimage
2840 19:50 < sam_moore> Um, zImage is a symlink to the kernel
2841 19:50 < sam_moore> But regardless, the new one won't boot
2842 19:50 < sam_moore> Such a pain
2843 19:50 < sam_moore> I wonder if we can just toggle the GPIO pin fast enough to implement PWM
2844 19:56 < sam_moore> Using a decent oscilloscope, I read a 6us period when switching GPIO1_28 on/off as fast as possible
2845 19:59 < sam_moore> That
2846 19:59 < sam_moore> s like 166KHz
2847 19:59 < sam_moore> Heh
2848 19:59 < sam_moore> Maybe the sources you found were closing the file and reopening it?
2849 20:01 < sam_moore> Yeah, wow
2850 20:02 < sam_moore> Using fopen, fprintf and fclose each time takes the period to 224us
2851 20:02 < sam_moore> Or 4KHz
2852 20:03 < sam_moore> Also for future reference, that CRO in G19 is definitely broken; it's always a lovely square wave on the modern oscilloscope I'm testing with now
2853 20:12 < jtanx> haha ok
2854 20:13 < jtanx> but without kernel support your pwm signal won't be very accurate
2855 20:13 < sam_moore> Yeah, I suppose
2856 20:13 < jtanx> how come the new kernel won't boot?
2857 20:14 < sam_moore> No idea
2859 20:14 < jtanx> this lack of documentation on how you do such procedures is pretty crap
2860 20:15 < sam_moore> Yeah, kernel developers aren't great on documentation
2861 20:15 < jtanx> is the mkimage package present?
2862 20:15 < jtanx> if not, install it and try running the install-me script again
2863 20:16 < jtanx> from this: http://www.jeremycole.com/blog/2011/03/09/beagleboard-upgrading-from-debian-5-to-debian-6/
2864 20:16 < jtanx> it should be just running that install script and rebooting
2865 20:16 < sam_moore> Alright, uboot-mkimage I presume?
2866 20:16 < jtanx> i guess
2867 20:17 < jtanx> and update-initramfs?
2868 20:18 < jtanx> (just looking at what the install-me.sh script uses)
2869 20:18 < sam_moore> Oh, does the script not fail if packages it needs don't exist...
2870 20:18 < sam_moore> -_-
2871 20:19 < jtanx> a quick scan says nup
2872 20:24 < sam_moore> Already had initramfs-tools but not mkimage, so I'll try again
2873 20:27 < sam_moore> I should probably have focused on the ADC reading before PWM
2874 20:27 < sam_moore> We're definitely going to get asked about aliasing again
2875 20:28 < jtanx> urgh yeah
2876 20:28 < sam_moore> I don't have a signal generator here though
2877 20:28 < jtanx> this BBB has definitely not been designed with 'plug n play' in mind
2878 20:28 < sam_moore> Mmm
2879 20:29 < sam_moore> The Angstrom image would work for this stuff, but obviously has limitations in terms of the webserver stuff
2880 20:29 < sam_moore> But even with Angstrom you still have to go through a similar convoluted process to control pins
2881 20:30 < sam_moore> From what I can tell there are two ways to do it
2882 20:30 < sam_moore> SYSFS, which I can't find much documentation on
2883 20:30 < sam_moore> Which is the /sys/class/gpio/ stuff
2884 20:30 < sam_moore> Which actually seems more intuitive than the other way
2885 20:31 < sam_moore> That involves echoing a bunch of cruft to /sys/devices/cape-manager/slots/ or something similar
2887 20:32 < sam_moore> There is a /sys/class/pwm
2888 20:32 < sam_moore> But unfortunately whatever you export it complains about
2889 20:32 < sam_moore> Probably because the kernel wasn't compiled with it enabled
2890 20:32 < jtanx> is this with the old kernel?
2891 20:32 < sam_moore> Yeah
2892 20:33 < sam_moore> Hangon, the new one's probably finished building by now
2893 20:34 < jtanx> we don't know if the new one has been compiled with pwm support though
2894 20:34 < sam_moore> Yeah
2895 20:36 < sam_moore> The diff between the config options for the kernels shows that the old one has a comment "CONFIG_EHRPWM_TEST is not set" and the newer one has no reference to it
2896 20:37 < sam_moore> ...
2897 20:37 < sam_moore> Someone at some point
2898 20:37 < sam_moore> Has realised that PWM was not enabled
2899 20:37 < sam_moore> And commented that it isn't enabled
2900 20:37 < sam_moore> WHY THE HELL DIDN'T THEY JUST ENABLE IT
2902 20:37 < sam_moore> Anyway it still booted off the old kernel
2903 20:37 < sam_moore> Dinner time
2906 21:15 < sam_moore> http://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel
2907 21:15 < sam_moore> Looks promising
2908 21:16 < sam_moore> Hmm...
2909 21:17 < sam_moore> I'll try using 3.8 but building with the PWM
2910 21:18 < jtanx> building from source - fun fun :P
2911 21:19 < sam_moore> Well in theory I just change a config option
2913 21:19 < sam_moore> When that doesn't work and I have to modify the source, that's when the fun begins
2914 21:19 < jtanx> let's just hope it works
2915 21:19 < sam_moore> Yeah, if it doesn't we're (beagle) boned
2916 21:19 < jtanx> oh while you're at it, figure out how to enable the ethernet-over-usb feature
2917 21:19 < sam_moore> Haha
2918 21:20 < jtanx> loljk
2919 21:25 < sam_moore> Hmmm... compiling a kernel is going to take a while
2920 21:26 < sam_moore> Ergh, why am I running it on this Pentium D
2921 21:30 < sam_moore> Hmmm, more troubling... why does a debian wheezy server have OpenSUSE sources in sources.list
2922 21:30 < sam_moore> Oh well, not my problem
2924 21:33 < sam_moore> How the hell are we going to explain this in the progress report...
2925 21:34 < sam_moore> Also, I didn't fully understand, why can't you use the same image for multiple BBB?
2926 21:34 < sam_moore> Are we going to have to do this all again for the other BBB?
2927 21:34 < sam_moore> Spike I mean
2928 21:37 < jtanx> no idea
2929 21:38 < jtanx> without some sort of debugging cable to see what happens when it boots, who knows
2930 21:38 < sam_moore> :S
2931 21:39 < sam_moore> I love how git gets to the head of the branch
2932 21:39 < sam_moore> By starting at the initial commit
2933 21:39 < sam_moore> And going through every commit and changing the file
2934 21:42 < sam_moore> It hasn't started building yet
2935 21:42 < sam_moore> And the way you customise the build...
2936 21:42 < sam_moore> Is to build it with the defaults, so that the options file exists, then change the options, then build it again -_-
2938 21:43 < sam_moore> Oh well, I have to go home, I'll try finish this tomorrow
2939 21:43 < sam_moore> Bye
2943 --- Day changed Sat Sep 21 2013
2945 11:23 < sam_moore> http://hipstercircuits.com/enable-pwm-on-beaglebone-with-device-tree-overlays/
2946 11:23 < sam_moore> So... according to this I should add pwm_test as a kernel module
2947 11:24 < sam_moore> "This is it. It is now three o’clock in the morning and I have not slept or eaten in two days. My neck is sore, my ass has fallen asleep and my organs are screaming “slow down, man”. I no longer see [CC]s, [LD]s and [AS]s, I only see blondes, brunettes and redheads flashing before my eyes. With my last ounce of energy I barely manage to type in “reboot” as my face hits the keyboard. And that is when it happens.."
2948 11:25 < sam_moore> Ummm
2949 11:25 < sam_moore> It's awesome that this guy has solved the problem (I think)
2950 11:26 < sam_moore> But a bit depressing that it still isn't in the official kernel
2951 11:29 < sam_moore> I think most people just give up and use Angstrom, which is tempting
2952 11:30 < sam_moore> I still have that HTTP server code... :P
2953 11:45 < sam_moore> Looks like Robert C Nelson's 3.8 kernel does have a pwm_test module
2954 11:45 < sam_moore> Maybe the image you used just had an out of date kernel?
2955 11:45 -!- Irssi: #mctxuwa_softdev: Total of 3 nicks [0 ops, 0 halfops, 0 voices, 3 normal]
2957 11:51 < jtanx> no idea
2958 11:51 < jtanx> it was made in july I think and it uses those rcn kernels
2959 11:51 < jtanx> We could always use lighttp
2960 11:51 < jtanx> lighttpd on angstrom if necessary
2961 11:52 < jtanx> lighttpd and install mod_fastcgi
2962 11:55 < jtanx> ok so the image uses 3.8.13-bone20, so maybe it wasn't enabled in that version, but it now is in 3.8.13-bone28?
2963 12:02 < sam_moore> I've just built 3.8.13-bone28 and the module pwm_test exists
2964 12:03 < sam_moore> ... I also copied the code from that guy's blog as pwm_test2 just in case :P
2965 12:03 < sam_moore> I'll have to test it later, but at least we have the kernel module
2967 12:39 < jtanx> ohhhhh I know why it didn't work from one bbb to the next, using the same image
2968 12:39 < jtanx> When you boot for the first time, it assigns the ethernet port eth0
2969 12:39 < jtanx> when you then take it out and boot it on a different BBB
2970 12:40 < jtanx> because the ethernet device has a different id, it gets assigned to say eth1
2971 12:40 < jtanx> and because you don't have any config for eth1 in your network config, there's no internet access
2972 12:40 < jtanx> http://www.eewiki.net/display/linuxonarm/BeagleBone#BeagleBone-Networking:UsingasharedSDcardwithMultipleBeagleBone
2973 12:41 < jtanx> should fix that
2976 15:10 < jtanx> Eh, you know what I'll just stop the threads when you want to pause it
2977 15:10 < jtanx> instead of conditionals
2978 15:11 < jtanx> it's not like you're pausing the experiment that often
2979 15:18 < sam_moore> That's fine
2980 15:19 < sam_moore> The conditional approach is only really necessary if you're constantly pausing the threads
2981 15:19 < sam_moore> I used it for an nbody simulator, so the computation of force and position was split up between threads
2982 15:19 < sam_moore> It's really slow if you have to stop and then recreate the threads on every step
2983 15:22 < sam_moore> Although still actually faster than the single threaded program
2984 15:22 < sam_moore> Well, depending on how many objects you simulated
2985 15:23 < sam_moore> Anyway, just stop the threads, it's simpler to code and the performance effect in our case is probably negligable
2987 15:30 < jtanx> say you had an actuator that was being controlled at that instant when an 'emergency stop' was issued
2988 15:31 < jtanx> since an 'emergency stop' is the same as just pausing (eg stopping the thread but keep DataFile open)
2989 15:31 < jtanx> you'd have to wait for that action to be completed before the 'emergency stop' would be propagated
2990 15:34 < jtanx> welp I guess that's why there's hardware safety interlocks
2991 15:38 < jtanx> Also, technically wouldn't it be possible to try to set the actuator value before the current value has been set
2992 15:38 < jtanx> Since there's no queue
2993 15:39 < jtanx> a->control could be overwritten by a new request as Actuator_SetValue operates
2994 16:12 < sam_moore> We want that right?
2995 16:13 < sam_moore> I'll look at it later if I get time
2996 16:14 < jtanx> I don't know if we want that or not
2997 16:15 < jtanx> wait want as in the current behaviour or the behaviour with a queue?
2998 16:16 < sam_moore> The current behaviour
2999 16:16 < sam_moore> I don't think you need a queue
3000 16:16 < sam_moore> You can extend the critical section in Actuator_Loop to stop the current control getting overwritten
3001 16:17 < sam_moore> Move the pthread_mutex_unlock on line 121 to below line 127 (Actuator_SetValue)
3002 16:17 < sam_moore> That way if Actuator_SetControl is called before the value has been successfully set, it will just wait
3003 16:17 < sam_moore> Mutexes actually implement a queue
3004 16:18 < sam_moore> If one thread has a lock on the mutex, subsequent threads that try to access the mutex will queue up; whenever the mutex is unlocked the next thread (if any) which was waiting will get it
3006 16:23 < jtanx> I'll leave it as is for now
3007 16:23 < sam_moore> Sure
3008 16:49 < sam_moore> PWM working
3010 16:50 < jtanx> I still don't really understand - did you compile the kernel from scratch
3011 16:50 < jtanx> or did you figure out how to use the install-me.sh script
3012 16:50 < sam_moore> I did, but I didn't need to modify it
3015 16:51 < sam_moore> http://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-LinuxKernel
3016 16:52 < jtanx> so if we do this: http://www.eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-Networking:UsingasharedSDcardwithMultipleBeagleBone
3017 16:52 < jtanx> We should be able to just copy our image
3018 16:52 < jtanx> and stick it on the electronics' BBB
3019 16:53 < sam_moore> Sounds good
3020 16:53 < sam_moore> I'm glad that worked
3022 16:54 < jtanx> I wonder if it also enabled the usb0 stuff (ethernet over usb)
3023 16:58 < sam_moore> PWM appears to have picosecond resolution? Or at least the arguments are in ps
3025 17:11 < sam_moore> ADC can sample at ~4KHz
3026 17:11 < sam_moore> But... that's using bash
3027 17:11 < sam_moore> It will probably be massively fast when done in C
3029 17:11 < jtanx> is there any need to have it sample at a consistent rate
3030 17:11 < jtanx> as in, with threads there's no guarantee
3031 17:12 < jtanx> of a consistent sampling rate
3032 17:12 < sam_moore> Yes, you're right
3033 17:13 < sam_moore> I don't think we can achieve a consistent sampling rate, but I don't think it's critical that we do
3034 17:14 < sam_moore> As soon as we make our software run in an operating system with a kernel and other processes that can run as well, it gets pretty unfeasable to have a constant sample rate
3035 17:14 < sam_moore> We can have it constant to within an uncertainty I guess
3036 17:15 < jtanx> yeah, true
3037 17:18 < sam_moore> If you wanted a really high constant sample rate (say much faster than 1us which is probably the best case we could get) you'd have to use a more low level embedded device
3038 17:18 < sam_moore> Well I guess you could compile your own kernel for the BBB
3039 17:19 < sam_moore> But either way you'd have to physically run the webserver/GUI interface stuff on a seperate device
3040 17:19 < sam_moore> At this stage my feeling is what we have is good enough given the complexity of all the requirements we were given
3042 17:25 < sam_moore> Hmm, I can set some GPIO pins to toggle whenever Sensor_Read is called and get an idea of sample rates and to what degree of accuracy we can quote the time stamps
3043 17:26 < sam_moore> I think I'll write some pin control code
3044 17:26 < sam_moore> I don't trust any of these custom libraries
3045 17:29 < jtanx> custom libraries?
3046 17:36 < sam_moore> Well they aren't really libraries
3047 17:36 < sam_moore> http://www.avrfreaks.net/wiki/index.php/Documentation:Linux/GPIO#Example_of_GPIO_access_from_within_a_C_program
3048 17:37 < sam_moore> Eg: That one has an fopen and fclose each time the value is changed
3049 17:38 < sam_moore> I could google until I find someone that has already written a C library, but chances are it will be slow or broken
3050 17:38 < sam_moore> Since I've worked out how to control the pins I may as well just write the C code to do it
3052 17:49 < sam_moore> I wonder if I can do this with a macro...
3053 18:30 < sam_moore> Ergh, screw that
3054 18:31 < sam_moore> Ok, I'm going to implement things like: GPIO/ADC/PWM_Export/Unexport to initialise or deinitialise all pins
3056 18:31 < jtanx> too much effort with macros?
3057 18:31 < sam_moore> Yeah,
3058 18:32 < sam_moore> I was thinking of having something like "GPIOX_Set()" instead of GPIO_Set(int x)"
3059 18:32 < sam_moore> But that's probably not as nice as I thought it was
3060 18:32 < sam_moore> Anyway, there's an enum in the header file that contains the id of all pins used
3061 18:32 < sam_moore> The implementation defines some structs that wrap around the file descriptors
3062 18:33 < sam_moore> But to use the module you just give it an ID as defined in the enums
3063 18:33 < jtanx> Makes sense
3064 18:33 < jtanx> designing the gui is actually not too bad
3065 18:33 < sam_moore> That's good
3066 18:34 < jtanx> looks ok in ie8 too
3067 18:34 < sam_moore> Nice
3068 18:35 < jtanx> gotta go, dinner
3069 18:35 < sam_moore> Ok
3070 18:35 < sam_moore> Hmm, it would be nice if C had value checking on enums
3071 18:35 < sam_moore> You can define a function that takes an enum type as an argument
3072 18:36 < sam_moore> But people can still just pass any old integer
3073 18:36 < sam_moore> As far as I know
3074 18:36 < sam_moore> eg: typedef enum {FIRST=1, SECOND=10, THIRD=100} EnumType
3075 18:36 < sam_moore> void Foo(EnumType e);
3076 18:37 < sam_moore> If you go Foo(2) it won't complain
3077 18:38 < sam_moore> Annoying
3078 18:38 < sam_moore> That seems like something the compiler would be able to pick up
3079 19:31 < sam_moore> Ergh, I'm getting too obsessive compulsive with this pin thing
3080 19:35 < sam_moore> It's annoying because ADC, GPIO and PWM are treated completely differently
3081 19:35 < sam_moore> You write one thing and it enables *all* the ADCs
3082 19:35 < sam_moore> You have to enable each GPIO pin individually
3083 19:36 < sam_moore> And to enable PWM pins you give a string (not just an integer)
3084 19:37 < sam_moore> Also the location of the pin files is not guaranteed (though it probably doesn't change for a given system configuration)
3085 19:39 < sam_moore> Ah, I found a way to enable pwm with /sys/class/ instead of that cape manager thing
3086 19:39 < sam_moore> I think I'll use that, since at least it's consistent with the GPIO stuff
3087 19:41 < sam_moore> Ooh!
3088 19:41 < sam_moore> http://beagleboard-gsoc13.blogspot.com.au/2013/07/sampling-analogue-signals-using-adc-on.html
3089 19:41 < sam_moore> Provides a driver for continuously sampling with the ADC
3090 19:41 < sam_moore> Oh wait
3091 19:41 < sam_moore> Crap in a bucket
3092 19:42 < sam_moore> Because we're using those multiplexers we can't do that
3093 19:42 < sam_moore> We have to set the multiplexer before each sample
3094 19:42 < sam_moore> Oh well, never mind
3095 19:44 < sam_moore> I suppose we could write our own kernel module :S
3096 19:45 < sam_moore> I think I understand this enough to talk to Adam next time he tries to talk about sample rate
3097 19:46 < sam_moore> 1. It's not actually constant, but we can probably have it constant to within a few us
3098 19:46 < sam_moore> 2. To make it constant would require writing a kernel module
3099 19:47 < sam_moore> Unless electronics stops being stingy and gets one amplifier per channel :P
3100 20:22 < jtanx> hehehe
3101 20:22 < jtanx> next week's adrian though
3102 20:22 < sam_moore> Ah
3103 20:23 < jtanx> grilling time
3104 20:23 < sam_moore> He'll probably ask us the same things :P
3106 20:23 < jtanx> but man, so much stuff to go through just to get some readings from a few pins
3107 20:24 < jtanx> so good job with that :P
3108 20:54 < sam_moore> Thanks
3110 --- Day changed Sun Sep 22 2013
3111 00:51 < sam_moore> Hell yes
3112 00:51 < sam_moore> PWM controlled through web browser
3113 00:51 < sam_moore> GPIO controlled through web browser