

6 Jun 2008 (Friday)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Baby. Sleeping. |
Lucy and Martin have had a little baby boy. They're all well,
apparently. It's lovely to hear
.
I got a lovely letter in the post from Bethany yesterday, too. A little picture she'd drawn for me and another one of me. Aww! So very sweet.
I'm back to having problems sleeping again, which is always fun. It'll pass in time, but for now it just makes things more difficult than they usually are. So tonight, after spending ages at work trying to get some stuff working which is so amazingly unimportant it's not funny, I'm trying to get an early night. Early for me. So about 10. My head hurts, too, so... we'll see.
We went to Pizza Express for lunch today. Pretty nice meal and a chance to chat to people. Whilst I was having mine, though, I had a flash of something I dreamt last night. I remembered making a tomato sauce, and adding some herbs, like I'd seen someone do before. It didn't quite turn out as well as theirs had, but it was better than mine usually is. That's all I remember. I guess I must have slept a bit better than I thought, last night. But then I woke up at 5:30-ish, so I'm quite tired now.
Return to top | Comment on the diary
|
Difficult to think. |
It's difficult to think sometimes. I've written Lucy and Martin a card now, but it took me 2 hours to do it. Writing a few words shouldn't really be so hard, but finding the right ones is so very difficult, even if you know that you're heading in the right direction. I feel quite pleased at it though.
Return to top | Comment on the diary
|
So much things I wrote. End of the world. |
I was chatting today to Chris about the stupid things that we did when we were younger - mostly about the programming things, but also about other stuff that got us in trouble. Partly this led on to talking about RISC OS stuff again. I'd been chatting to Ian a week or so back about some stuff that I did a few years ago but which I didn't have the source to hand for - because it was on the Risc PC. So, after a very long time, I've turned the RPC on again and started it copying parts of the disc over NFS. All being well, that'll mean that I have a backed up copy of my RISC OS stuff in the future. Not that I'm likely to care, but... well, the RPC will die at some point and just won't come back. And at that point I'll not have all the rubbish I wrote from back then. So... move it all to a more reliable (!) system.
I couldn't sleep all that well last night, and when I did I woke up late dreaming about the world ending by slowly fading out because god (for want of a better name) didn't need it any more and everyone else had left, but there needed to be a couple of people left to see it vanish. And so it was slowly fading out of existance a little bit at a time, and the wind was getting up and the trees were all rustling and we could see the buildings in the distance just fading to grey through the house window and then being no more. It was a little scary; I don't tend to dream about the world ending all that often.
Return to top | Comment on the diary
|
The Answer. |
The answer for the day is...
LDRB r14, [r12, #10]
TEQ r14, r0
LDMEQFD {r0-r5, r9, pc}
Return to top | Comment on the diary
|
Long day. |
Feels like a very long day today. It's really dragged on I think. Partly that's 'cos I got in late - still not sleeping all that well. Late, in this case isn't really all that late; I'm still well before 10, but it's later than the 9am that I would really like to be in. I had a lot of emails exchanged with Caroline over the day, which was quite fun. I had to undo some changes I made over the weekend, 'cos it turned out that people hated them. And all through this I was trying to get some complicated python and C code to work together in an interesting and completely non-obvious way. It's quite a bit hacked now, but by 7:20, it was actually working.
At which point, I realised what the time was and decided that it was time I was at home. I had tea whilst watching a bit of telly, and then I wrote a little perl program to work out the positions of points in a hilbert curve. Which might not seem all that useful, but I'd been meaning to do it - purely as an exercise - since XKCD's Map of the Internet.
I had a brief chat with Caroline this evening, and then a chat with Chris, and now I'm writing this. I'm not looking forward to sleeping 'cos it's hot, I'm not sleeping so well, and I've got a lot of code to tidy up so that I can get it committed tomorrow. Which is far more optimistic than I can really hope for.
I've nearly finished backing up the RPC to the server, which is probably fortunate as, whilst doing so, I've had about 8 files that are uncopiable because the disc wouldn't read them correctly. There's a distinct possibility that I could unplug the drive and boot off the network. Except I so rarely use the RPC these days it's probably not worth the effort. Plus I'm not sure if I can boot off NFS. Probably didn't write the code for that.
Return to top | Comment on the diary
|
Long meetings. |
We had a really long meeting today at work. Well, it was only about 2 hours, so that doesn't really count as a really long meeting I guess (I've had way longer anyhow), but it dragged on, so it felt like longer.
Raining tonight... so I guess I probably won't be going in to work without my coat tomorrow. I've been able to go in with my jumper around my waist the last few days, it's been so nice. Oh well.
Return to top | Comment on the diary
|
Cygnets. Dreams. |
I was a little concerned last night when I went home, 'cos I saw a swan swimming on the canal with only two cygnets around him. I thought maybe we'd lost the other one, but he was floating aorund under the bushes at the side.
Had a really nice dream this morning that I woke up from and felt really really happy. Unfortunately it turned out to be 9:20 when I looked at the clock. So lovely dream, don't remember much of it, and was later than I'd like for work. The former easily makes up for the later.
Return to top | Comment on the diary
|
Dreaming. TV. |
Dream last night was about visiting New York with Caroline and being really worried that we wouldn't get back to the airport in time, and that we couldn't find our passports. Although I was very happy to stop off in a park for a bit and just sit and look at the flowers.
This evening I have been mostly messing around with MythTV with limited
success. Which is a good thing because it's in the area of success.
However, I've realised that there is a very good reason you put screws
in when you fit PCI cards
.
Return to top | Comment on the diary
|
Telly. Music. |
A while back I was pretty impressed with Caroline's Sky+ box - being able to record stuff for later and the like. I knew Chris had had his MythTV box set up for a couple of years (well something like that) and found it to be pretty good. I'd upgraded by server after I had problems with the earlier one and it's pretty reasonable now - and it provides the videos that the XBox, running XBox Media Center, runs. I rather like being able to pick from my video collection on the Xbox. Actually getting up to get a DVD is sort of novel really - although I've not copied everything to the server yet.
So, with this in mind, I set up MythTV on the server one night a few weeks back. This was a surprising success as Debian Etch has a package (provided externally) for it. A few hours were spent cursing because - for some reason) images were missing from the default 'GANT' skin. In any case, I finally got a 'Blue' skin installed and could see what I was doing. I got a reasonable way through the setup for this, as I didn't actually have a capture card. I installed mythweb as well, so that I can control things more easily (ie at all).
Next, I installed XMBCMythTV on the XBox. Set up, and got it almost working. This was more of a problem because XMBCMythTV doesn't understand protocol 40 which MythTV talks. Fortunately I found someone that had hacked around to make it at least start up properly. This, I did, although it wasn't 100% successful because MythTV had no channels stored in it, as it had no capture card. I ordered a capture card (Hauppauge WinTV Nova-T PCI card) and left things.
That was quite a few weeks back. The card arrived and sat on the floor for a few weeks - I didn't really want to break the server. Anyhow, on Friday our external connection died and, for reasons that are unclear, this causes a significant problem for the kernel that I'm using. So the server needed a reboot anyhow... and I fitted the card (as came up last night in the diary entry).
I had decided, last night, that this would be a difficult job. These things always are - there's never anything simple about this because this is a specialised thing really. So it would probably take about a day to get the card up and running - maybe I'd have to rebuild the kernel and mess around a lot (I'm not getting into the whole 'why should installing a hardware driver need a kernel rebuild' thing because that's just too longwinded and pointless here).
So the card went in and I didn't bother screwing it in - it's going to be ages until I need the aerial, and it won't hurt in the meantime. Only... then everything worked - I could see the card properly in lspci, dmesg told me that things had been recognised, and it seemed to be doing the right thing. So... plug in the aerial and... oh, yes that rips the card out of its socket 'cos it's not screwed in. Now, most systems don't like having their guts ripped out whilst they're running, and this was no exception. One dismantle, screw in, reboot and short disc check later, and I've got an aerial lead plugged in.
Admittedly the aerial leads I've got aren't really long enough so they trail across the room, but that's solveable. It seems that I can tune to the Hannington transmitter and find my channels. Simple streaming to mplayer means that I can see that I'm getting stuff - although it's over X so it's not ideal (and for some reason it's in cyan), but it's a picture and it's moving.
I set up the remainder of mythtv so that it knows where channels are and the like. That all worked quite well - I could schedule recordings and get out an mpeg. Using mencoder, I can convert those MPEG streams into avis - I believe the MPEG streams it produces are transport streams so aren't usually understood by players (ie Windows Media Player doesn't understand them, and neither does my KiSS DP-1500). I've already written a little script to make using mencoder a little easier, so a few tests later and I've got out some avis from the short sections I've recorded.
Going to the XBox, I try out the xbmcmythtv script and... I can play the recorded programs directly (it's an mplayer derivative, so that's expected). Cool. I can't, however, play Live TV. Which is frustrating as I kinda wanted that.
Trying a different tack I hunted for one of the Windows front ends for MythTV. DSMyth doesn't work - it's for an earlier version of MythTV and doesn't understand the new version. However, MythTVPlayer does work, and in the latest beta can play live TV as well. This works pretty well in a quick test - the interface is a bit quirky, but it works for playing things on my desktop so that'll do.
Anyhow, that was 3am yesterday and I went to bed, writing up the small entry that was there.
Today, I woke up late, and had a quick tinker with what I've got - there's a lot of possibilities. Last night I'd queued up a short 5 minute segment to check that queuing a programme to record would work and it did indeed record it. That was cool.
One of the annoying things about the reboots was that the clock that gets set when the system comes back is hugely skewed. I presume this is due to some timezone issue but don't know why. I knew I'd seen some option to deal with this but couldn't remember where - it's in /etc/default/rcS, I found after a little prodding and frustration.
That working, I tried the MythTVPlayer on the laptop. Since this is on the wireless, I wasn't really expecting much but... it worked pretty well. I was really quite pleased with it.
A good morning so far, I decided to get out of bed and look at why the
Xbox wasn't able to play live TV. Turning on the debug helped (X+Y when
you start XBMC) a little. But more than that, turning on the debug
inside XBMCMythTV helped even more (especially when I found where its
log file was). Now comes the tedious part. To access the scripts on the
XBox, I need to FTP them to it - XMBC runs its own FTP Server. To access
the logs I need to FTP them off it. And so begins the cycle of 'fiddle
code, upload code, test, download log, repeat'. What you also have to
remember here is that my PC is in my bedroom (downstairs) and the XBox
is in the living room (upstairs). So each cycle keeps me fit, too
.
The crux of the problem is this... MythTV versions above 0.19 use a different way of managing Live TV - they no longer use ringbuffers. They also start live TV in a slightly different manner. Because of this, XBMCMythTV can't really start the recordings properly and things go bad. Fortunately, however, I'm getting reasonably competent (!) with python now (which is work's fault for having me doing some reasonably complex stuff with it for the last couple of weeks - handy to re-use work things in a practical way). So I can fix this. With much debug and faffing, I've got a working XBMCMythTV script which plays the TV from the server. It takes a little longer than I'd like to start playing, and to fetch the current channel listings, but it does work.
I ended up watching 'The Supersizers Go... Seventies' this afternoon -
partly because I'd caught it last night whilst doing testing, partly
because it's quite fun, and quite a bit because it's got Sue Perkins in
it (I loved Light Lunch
). That was about half an hour. Which is
odd because I don't usually watch telly (well duh) and this was quite
fun. I was just thinking to myself 'I must mention this to Simon', when
I realised 'hey, I don't need to, it's recorded it whilst I'm watching
it'. Which is so funky.
I've now fixed up a few of the remaining problems, turned off the debugging and tried it and... everything looks good. I've set up my magic 'make an avi from this file' script so that it can be invoked as a user job from the mythweb front end. If I click the option, the recording will turn up in my 'to be sorted' area so that I can put it in the right place with the TV series or films (or cartoons, or music videos or whatever).
I popped out to town, because we're out of essentials like milk
,
and bought a 10m aerial lead, and that's now fitted around the outside
of the room, and looks marginally tidier. I'm pretty pleased overall.
I've queued up a few shows to record and I've left it now. That's pretty much it, really. It's working and I'm happy. The basic thing is... I can watch telly on my desktop machine, my laptop, simon's machine, or the XBox. The telly can be live or recorded. Programmes can be scheduled for recording any time in the next week, and live tv is implicitly recorded. I can create avi's of anything that I'd like to keep. The KiSS in my room can't play back the live tv or recordings (but can play the converted avis) but other than that, it's all pretty nice I think.
Whilst I was out looking for an aerial lead this afternoon, I heard a track on one of the stereos nearby which I knew and liked but I'd got no idea what it was. It's pretty generic radio fare, but that doesn't mean it's not any good.
[ |
I spoke to people on the talker about what I was doing and got a few
'oh's and 'ah's out of them. And a few groans at the PCI card problem
- fortunately they know what I'm like with hardware. I spoke to
Caroline about what I'd done and she was pretty unimpressed that I'd
gone to so much trouble. It might not be perfect, but it does the job I
want, so I'm happy. She was pretty amused by the PCI incident as well.
Ok, maybe amused is the wrong word. Boggling at my silliness ? That'll
probably cover it
.
Also whilst I was in town, I noticed that Making Money is in paperback
now, so I may get a copy of that later. Quick searches this evening
imply that Harry Potter 7 is out in paperback early next month
(probably), so I may finally get to read that. I'm in no hurry, but
it'll be nice to finally get around to reading it. Claire managed to not
spoil it by telling me what happens - 'it ends'
.
It's all just gone so well today, I'm really quite surprised, but I'm not going to knock it. It's been so productive.
Oh, and from a very old radio show I was listening to a few days ago,
I've got
Mirror In The Bathroom
, by
The Beat
stuck in my head as well. Grr.
There's also a 'telly' quote to come later, but I'm too tired to worry about it now - I wanted to be in bed far earlier than this!
Return to top | Comment on the diary
|
The vengeful kitten. XBMCMythTV. |
I was thinking today... 'The Vengeful Kitten' would be an excellent name for a book. I'm not sure what sort of book, but I think it would be cool.
XBMCMythTV is working pretty well now; I've fiddled about with the settings and it's a little faster than it was, and actually manages to queue things sanely some of the time.
The problem is pretty simple. XBMCMythTV queues up the files to be played as they turn up in the MythTV chains. These are continuing chains of files which should be played one after another to make a continuous stream. MythTV splits streams at (approximately) programme breaks. That works well most of the time, except there's a second issue - the current stream might not be large enough to play back before the new streams has arrived. Thus the stream ends and we're left being dumped out of the LiveTV because there's nothing for it to do. One way to solve this is to increase the buffer so that there's always data available, but that can only last so long - we're bound to fail at some point. My possible solution to this problem is to extend the Player class and when the stream calls onPlayerEnded, we can check if there's more data coming in the new file. If there is, then all's well and we can continue with the new file. If not, we can offer the option to restart to the user. Well that's the plan anyhow. It'll probably be far more complex than that.
Other things today... I'm very tired still, which is my own fault for going to bed late last night.
Managed to get myself very annoyed this afternoon. Which wasn't overly
fun and I was yet more annoyed at being annoyed
. I think that's
tiredness. Should try to sleep tonight. And be up earlier than today.
Grr.
I rather enjoyed the second of the Library Doctor Who episodes today. Afterward I noticed that it's by Stephen Moffat again. Heh.
I've got a little sniffle this evening, too. I hope I've not caught something.
Return to top | Comment on the diary
|
Recording shows. Multiplexed recordings. |
Tonight was the first test of recording shows automagically on MythTV. It seemed to work pretty well, really. The auto-flag commercials seems to have been done, although we might need to actually fiddle a little to get it to use that cutlist (the transcoder didn't seem to do a good job when I tried; might need a bit more work).
Chris suggested, this evening, that since I've got a later version of MythTV than him, and a slightly more powerful CPU, I might like to try the multi-recording feature. Essentially the channels are grouped onto multiplexers, which means that a group of channels are all delivered together when you tune to them. So, if you're tuned to one you can receive all - which means that you can record things on multiple channels so long as they're on the same multiplex. The list of channels isn't actually that unsurprising. So if I want to record ITV1 and watch ITV2, that's fine.
To do this we just increase the max recorders that we can use at one time on the card. I tried this, increasing it to 3, and then set the system to record ITV1 and C4. This seemed to work. Then I tried watching E4. And that worked too. How funky is that ? Well I think it's pretty funky. Obviously it restricts you to a multiplex, but still quite cute.
Very tired again today, and I've got a sore tummy. Not sure why, but it hasn't gone away much.
Return to top | Comment on the diary
|
Tired. |
Really tired and can't seem to sleep sensibly at the moment. I seem to be distracted by something, and as I'm tired, I'm feeling worse about it. Once I get some sleep, I'll feel a lot more normal.
I feel a little out of place at the moment, but being tired means that I'm probably just bothered by things that I shouldn't be bothered by.
Ah good, I'm back to not being able to express myself particularly well.
That's just excellent. And unable to remember any sort of important
thought for very long. But that's really just tiredness. Doesn't mean I
don't hate it
.
Return to top | Comment on the diary
|
Baby Godbolt! |
It seems that Matt Godbolt (The Moog, for those who knew him on IRC and Egham) has had a little baby boy. Big congratulations to him.
[ |
Return to top | Comment on the diary
|
Fun weekend over. |
The fun weekend's over now. Well, it wasn't all that fun really, but I got a few things done that I needed to sort out with the MythTV box. The XBox skin for MythTV is now nicely lined up and seems to be working sanely. That's a useful thing. The actual functioning of the LiveTV is now nearly useable for those cases where the stream runs out. I'd like to do a 'buffering...' window for when we're trying to obtain new data, but it's a little more tricky than I'd thought. There's also some design that needs doing on how this should be done, which I've got ideas about but needs to be thought through more thoroughly.
I've tested some of my trimming script now and it seems to do a reasonable job. Testing that means that I've seen a lot of the Joyce Grenfell programme that Caroline asked me to record over the weekend, a few times over.
Caroline's back from her break this weekend, although her cold's caught up with her in a big way. She was really tired this evening when I spoke to her.
And I've also won a second XBox in the ebay auctions. Which was a little frustrating but that's what I get for spreading a few bids. If nothing else it means I get a 3rd xbox to set up and maybe give away to someone.
Otherwise, nothing much else today.
Return to top | Comment on the diary
|
Naff day. |
Today's just been really pretty crappy. I don't seem to have got very far, and I'm not sure that the way that things are going seems at all sensible. However... that's the way that things go. Fortunately I had Caroline to talk to which at least made the day seem not a total waste.
Return to top | Comment on the diary
|
Another bad day. |
Today seems to have gone very bad as well. It's just been very
frustrating. Quite a lot achieved, lot of pestering for things to be
done, and I'm wanting to ensure that things are tested properly before
they're deployed.
Anyhow, I got a nice mail from Helen which surprised me quite a lot and was rather nice.
Return to top | Comment on the diary
|
Another day. |
Another very frustrating day. I'm not really sure where I am right now. I know where I want to be, and I know what it is that I'm not keen on, but just trying to keep on an even keel at the moment is a little difficult. I'm not sure I'm really making much headway to be perfectly honest.
I don't really know what else has happened today. I've spent this evening (!) playing Bejewelled. I got home about half 10 and it's now nearly 1am... My tummy's been sore and I'm tired but couldn't sleep.
Return to top | Comment on the diary
|
So tired. XBox. |
Very tired today. Getting somewhere with work things, but it's still taking a lot of time and energy.
XBox 2 arrived today, and despite having a jammed DVD drive - which
Caroline took great delight in telling me was broken
- I've
managed to make it work by dismantling it, re-seating one of the locking
nubs on it (seriously, the guides call it a 'nub'). So I've got XBMC
installed on it now... It's still partly in bits, but it's at least
working.
However it's now about 5 hours after I wanted to sleep.
I'm still feeling a little out of sorts and I'd no doubt be more eloquent if I wasn't quite so tired. Oh well.
XBox 3 is still at work; it arrived today. After today's fun I won't have any trouble setting it up (!)
Hugh rang me at work today and say I always seemed pretty depressed when
he rang me. Which is odd as Caroline's said similar things recently as
well. I'm not sure what to say really
. I don't mean to sound too
down.
Return to top | Comment on the diary
|
Dreaming. Yesterday. |
I've just been woken up from a dream. It was a continuation from last
night's, I think. Caroline and I were visiting mum and dad in Norfolk
for the weekend. They weren't around a lot of the time so we didn't get
to see them much, and we were both tired. Caroline fell asleep on a
chair in the living room and I fell asleep in the kitchen (don't ask why
we had chairs in the kitchen). We got up and chatted to some people -
Caroline was chatting to the person next door who was having bottled
water delivered. Then mum and dad got home and we had a nice chat to
them. They were telling stories about things that I'd done in the past,
and I remember him telling a story about how I buried a coke can in the
garden (I don't know if I ever did that, though). It was late and time
for bed and so we were just getting ready to get in to bed when I
realised that it was Sunday and we had to leave because we had to get
back home. Dad tried to convince us to stay because it was 9pm and we'd
be getting home well after 11pm. I wasn't really convinced that it was
Sunday and though I knew that if it was Sunday we had to leave Right
Now, I wasn't sure that it was. Eventually, after much frustration
because we wanted to stay but knew we probably had to go, I looked at my
phone as I trusted that it would have the right time as it came from the
network (which now I retell seems silly, because the phone doesn't take
its time from the network) and it did say Sunday. I was convinced and
knew we had to go. Mum asked if there was anything we had to get back
for on Monday, and as we were starting university but it was still a
little bit away, we had a week before things started and didn't actually
have to be back. So we decided to stay, and had something to
eat (it was quite late but we were hungry anyhow). We had something with
fish and chicken and rice which I quite enjoyed but Caroline didn't
like so much. And then the phone rang - in the real world, and it was
Caroline calling to say hello
. Which was a lovely thing to wake
up to.
My dreams are sometimes a little odd, but this was suprising by being memorable, just like the one yesterday was. I'm completely shattered this morning, though. I really want to just go back to sleep. Not sure that I can now that I've been woken up.
I was going to say something more about yesterday in the diary last night, but I was too tired. Essentially it boils down to... got XBox 3 working, both the new ones now have XBMC installed on them and seem to be working out ok. I'm kinda glad this week is over, except that the work to be done isn't done so I might end up doing things this weekend anyhow.
We had a nice lunch down at Nandos on Friday as well.
I've spent most of today making sure the XBoxes work properly and chatting to people. And sleeping. Sleeping plays a very big part.
I'm still very tired, and somehow it's now 1 am, but I'm not really able to sleep. Unfortunately I've lost the ability to think straight now.
But I think I want to do something. I don't know what. Something different though. Maybe something will occur to me. I think I want
Return to top | Comment on the diary
|
Weird day. Milkshakes. Nicola Brown. Annoyance. Nails. MythTV + IMDB. |
It's been a weird day today. Work's been intensely frustrating because I've been getting nowhere on why things aren't working (although this evening I think I've got a handle on it and why things have changed, which is good). So much so that I decided to go for milkshake at lunch.
It turns out that that's a very girly thing to do. As I was standing in line at Shakeaway I noticed that every one of the 15 or so people there were girls and I was in a minority of one boy. Obviously it's not going to stop me having my milkshakes when I feel bad but it amused me nonetheless.
I had very touching email from Nicola Brown (as-was) today as well. It took me ages to write a reply because it's really hard to find the words for something like that. It's still surprising to be thought well of when you weren't the best of people. She's happy and married to XLCUS now, which is really quite neat.
What other things today ? I'm calming down from the general annoyance that was last weekend (not the one that's gone but the one before) which seems to now be passing. Being too tired to be that angry helps, but also shying away from things that make me angry instead of being agry at them is also good.
My nail, the one that got caught in the door and which has a lovely black nail, is - I think - going to come off. The base of it seems all cracked and chipped. The nail itself is a little lifted from my finger, too, which was the first sign a few days ago. Also, playing one the XBox tends to hurt it like I'd sort of expect a bruised and bashed thumb would hurt.
It's nearly 1am again; Nicola's reply took up a lot of time and I haven't really caught up yet with the things I wanted to do.
Obviously, it being 1am the thing you do is sleep... no... you write a script to fetch IMDB details for films and populate the MythTV tables with the star ratings and descriptions. Because yes, that's the obvious thing to do at 1am. Well, it works, after a fashion. There's a problem where my IMDB fetcher bits goes a little insane. For some reason it thinks that (for example) 'Predator' is actually 'Predator: The Concert'. Which are a little different. Only a little though. Otherwise, it's not too bad. I've got ratings now for my films, and genres as well, even if they're a bit limited. Still, I think it's kinda cute.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||