na ir slavena ne tikai ar savu akmens m ri valsts zieme os, bat ar ar Di o nas Ugunsm ri apk rt visam s valsts Internetam, kas blo visu p c k rtas un iebremzina visu p r jo. Man pirm person g saskarsme ar o pakalpojumu notika jau anhajas lidost , kad tri vien izr d j s, ka valst blo ts ir ne tikai Facebook, bet ar Twitter, kas iev rojami apgr tin ja manas iesp jas tri un viegli apzi ot visus, ka es esmu v l joproj m esmu dz vs un vesels. P c p ris eksperimentiem izr d j s, ka, lai ar no telefona nav pieejama Google+ m jas lapa un nav lejupl d jama Google+ (un WhatsApp) programma uz Android, tom r, ja t s jau ir telefon , ie abi servisi turpina no telefona str d t. T p c es s ku rakst t ce ojuma piez mes Google+ un da as dienas p c ce ojuma s kuma man pat izdev s nokonfigur t If This Then That servisu, lai tas pa em manus Google+ ierakstus un uztaisa no tiem Twitter ierakstus (kas jau t l k pa citiem kan liem izplat s uz Facebook un Draugiem un ar par d s k ned as kopsavilkums aj blog ).
Google+ ir savi plusi, bet ar savi m nusi. Galvenais m nuss, ko es aj ce ojum paman ju ir tas, ka Google+ Android aplik cij nav iesp jams sagatavot vair kus ierakstu melnrakstus (v lams katru ar savu geolok ciju) bez Interneta var rakst t tikai vienu ierakstu un t ieraksta GPS koordin tes b s t s kur viet p c tam Internets par d sies. Es jau uzrakst ju Googlei par o probl mu.
Galvenais pluss Google plusam (no pun intended) ir Instant Upload ja bild t fotogr fijas ar Android telefonu, s fotogr fijas autom tiski tiks aug upiel d tas un par d sies jaun ieraksta izveides interfeis , kur t s var pievienot ierakstam ar vienu klik i bez jebk das gaid anas. Diem l tas nestr d ar norm laj m kamer m. Pagaid m
puppet and similar things are
very nice tools for managing your systems. Rather than doing the same
thing 100 times, it's much more interesting to spend some time
describing how to do something, and then have it done hundreds of times
automatically.
However, I'm starting to see a distressing trend lately. I'd like to
say that puppet is not an
installer, nor is it a replacement for one. Here's why:
"Now that I have your attention, I would like to make the following
delegations:"
... nah, scrap that. In my last day in office I first of all owe
you a report of DPL activities for the last reporting period of
this term, i.e. March 8th until today. Here it is!
Highlights
elgar.debian.org:/srv/accounting.debian.org/ledger/
you can now find Debian monetary transactions for the 2010-2013
period. Note that:
1) They are not all of our transactions, most notably
because we haven't yet managed to get access to all our bank
transactions at SPI (while we do have access to other transactions
there, e.g. donations). Given the relevance of the missing
transactions for our budget, this is a blocker for producing
meaningful public periodic reports of Debian finances. This is
clearly annoying, but I'm confident that our feedback to SPI over
the past years has helped them better understand our needs and
improve. I hope this could be finally solved during the next DPL
term. And,
2) Donor names have been anonymized in the ledger files, in wait
of a donation system that allow to express privacy preferences.
Complete donation information is available in the companion
ledger.git repository, which is accessible to auditors only.
I'd like to thank the Debian auditors, and in particular Martin
Michlmayr, for their amazing work on this over the past 3
years.
I've only helped
"politically" here and there with this over the years, and I'm
happy to see it live. Your thanks for this should go to the blog
editors---Francesca Ciceri and Ana Guerrero Lopez---and to DSA for
making it real. A proper delegation for the editors is pending and
I'm confident the next DPL will pick it up.
master:/srv/leader/news/bits-from-the-DPL.txt.20130 3,4
After nearly one year of development, the "Port bootstrap build-ordering tool"
now finally has a name: botch. It stands for Bootstrap/Build Order Tool CHain.
Now we dont have to call it "Port bootstrap build-ordering tool" anymore
(nobody did that anyways) and also dont have to talk about it by referring to
it as "the tools" in email, IRC or in my master thesis which is due in a few
weeks. With this, the issue also doesnt block the creation of a Debian package
anymore. Since only a handful of people have a clone of it anyway, I also
renamed the gitorious git repository url (and updated all links in this blog
and left a text file informing about the name change in the old location). The
new url is:
https://gitorious.org/debian-bootstrap/botch
Further improvements since my last post in January include:
I am led to believe that splunkd (some agent for feeding log entries into
the Grand Log Analysis Tool Of Our Age ) has no capability for running
itself in the foreground. This is stupid. Do not make these sorts of
assumptions about how the user will want to run your software. Some people
use sane service-management systems that are capable of handling the
daemonisation for you and automatically restart the managed process on
crash. These systems are typically much easier to configure and debug, and
they don t need bloody PID files and the arguments about where to put them
(tmpfs, inside or outside chroots oh my) and who should update them and
how to reliably detect that they re out of date when they crash without
causing race conditions and whether non-root-running processes should place
their PID files in the same place and how do you deal with the permissions
issues and bugger that for a game of skittles.
In short, if you provide a service daemon and do not provide some
well-documented means of saying don t background , I will hurt you. This
goes double if your shitware is not open source.
| 2005/06 | 2006/07 | 2007/08 | 2008/09 | 2009/10 | 2010/11 | 2011/12 | 2012/13 | |
|---|---|---|---|---|---|---|---|---|
| number of (partial) days | 25 | 17 | 29 | 37 | 30 | 30 | 25 | 23 |
| Dam ls | 10 | 10 | 5 | 10 | 16 | 23 | 10 | 4 |
| Diedamskopf | 15 | 4 | 24 | 23 | 13 | 4 | 14 | 19 |
| Warth/Schr cken | 0 | 3 | 0 | 4 | 1 | 3 | 1 | 0 |
| total meters of altitude | 124634 | 74096 | 219936 | 226774 | 202089 | 203918 | 228588 | 203562 |
| highscore | 10247m | 8321m | 12108m | 11272m | 11888m | 10976m | 13076m | 13885m |
| # of runs | 309 | 189 | 503 | 551 | 462 | 449 | 516 | 468 |
DRI3K First Steps
Here s an update on DRI3000. I ll start by describing what I ve
managed to get working and then summarize discussions that happened on
the xorg-devel mailing list.
Private Back Buffers
One of the big goals for DRI3000 is to finish the job of moving buffer
management out of the X server and into applications. The only thing
still allocated by DRI2 in the X server are back buffers; everything
else moved to the client side. Yes, I know, this breaks the GLX
requirement for sharing buffers between applications, but we just
don t care anymore.
As a quick hack, I figured out how to do this with DRI2 today
allocate our back buffers separately by creating X pixmaps for them,
and then using the existing DRI2GetBuffersWithFormat request to get a
GEM handle for them.
Of course, now that all I ve got is a pixmap, I can t use the existing
DRI2 swap buffer support, so for now I m just using CopyArea to get
stuff on the screen. But, that works fine, as long as you don t care
about synchronization.
Handling Window Resize
The biggest pain in DRI2 has been dealing with window resize. When the
window resizes in the X server, a new back buffer is allocated and the
old one discarded. An event is delivered to invalidate the old back
buffer, but anything done between the time the back buffer is
discarded and when the application responds to the event is
lost.
You can easily see this with any GL application today resize the window
and you ll see occasional black frames.
By allocating the back buffer in the application, the application
handles the resize within GL; at some point in the rendering process
the resize is discovered, and GL creates a new buffer, copies the
existing data over, and continues rendering. So, the rendered data are
never lost, and every frame gets displayed on the screen (although,
perhaps at the wrong size).
The puzzle here was how to tell that the window was resized. Ideally,
we d have the application tell us when it received the X configure
notify event and was drawing the frame at the new size. We thought of
a cute hack that might do this; track GL calls to change the viewport
and make sure the back buffer could hold the viewport contents. In
theory, the application would receive the X configure notify event,
change the viewport and render at the new size.
Tracking the viewport settings for an entire frame and constructing
their bounding box should describe the size of the window; at least it
should describe the intended size of the window.
There s at least one serious problem with this plan applications may
well call glClear before calling glViewport, and as glClear does not
use the current viewport, instead clearing the whole window, we
couldn t use the viewport as an indication of the current window size.
However, what this exercise did lead us to realize was that we don t
care what size the window actually is, we only care what size the
application thinks it is. More accurately, the GL library just needs
to be aware of any window configuration changes before the
application, so that it will construct a buffer that is not older than
the application knowledge of the window size.
I came up with two possible mechanisms here; the first was to
construct a shared memory block between application and X server where
the X server would store window configuration changes and signal the
application by incrementing a sequence number in the shared page; the
GL library would simply look at the sequence number and reallocate
buffers when it changed.
The problem with the shared memory plan was that it wouldn t work
across the network, and we have a future project in mind to replace
GLX indirect rendering with local direct rendering and PutImage which
still needs accurate window size tracking. More about that project in
a future post though
X Events to the Rescue
So, I decided to just have the X server send me events when the window
size changed. I could simply use the existing X configure notify
events, but that would require a huge infrastructure change in the
application so that my GL library could get those events and have
the application also see them. Not knowing what the application is up
to, we d have to track every ChangeWindowAttributes call and make sure
the event_mask included the right bits. Ick.
Fortunately, there s another reason to use a new event we need more
information than is provided in the ConfigureNotify event; as you
know, the Swap extension wants to have applications draw their content
within a larger buffer that can have the window decorations placed
around it to avoid a copy from back buffer to window buffer. So, our
new ConfigureNotify event would also contain that information.
Making sure that ConfigureNotify event is delivered before the core
ConfigureNotify event ensures that the GL library should always be
able to know about window size changes before the application.
Splitting the XCB Event Stream
Ok, so I ve got these new events coming from the X server. I don t
want the application to have to receive them and hand them down to the
GL library; that would mean changing every application on the planet,
something which doesn t seem very likely at all.
Xlib does this kind of thing by allowing applications to stick
themselves into the middle of the event processing code with a
callback to filter out the events they re interested in before they
hit the main event queue. That s how DRI2 captures Invalidate events,
and it works , but using callbacks from the middle of the X event
processing code creates all kinds of locking nightmares.
As discussed above, I don t care when GL sees the configure events, as
long as it gets them before the application finds about about the
window size change. So, we don t need to synchronously handle these
events, we just need to be able to know they ve arrived and then
handle them on the next call to a GL drawing function.
What I ve created as a prototype is the ability to identify
specific events and place them in a separate event queue, and when
events are placed in that event queue, to bump a sequence number so
that the application can quickly identify that there s something to
process.
Making the Event Mask Per-API Instead of Per-Client
The problem described above about using the core ConfigureNotify
events made me think about how to manage multiple APIs all wanting to
track window configuration. For core events, the selection of which
events to receive is all based on the client; each client has a single
event mask, and each client receives one copy of each event.
Monolithic applications work fine with this model; there s one place
in the application selecting for events and one place processing
them. However, modern applications end up using different
APIs for 3D, 2D and media. Getting those libraries to cooperate and
use a common API for event management seems pretty intractable. Making
the X server treat each API as a separate entity seemed a whole lot
easier; if two APIs want events, just have them register separately
and deliver two events flagged for the separate APIs.
So, the new DRI3 configure notify events are created with their own
XID to identify the client-side owner of the event. Within the X
server, this required a tiny change; we already needed to allocate an
XID for each event selection so that it could be automatically cleaned
up when the client exited, so the only change was to use the one
provided by the client instead of allocating one in the server.
On the wire, the event includes this new XID so that the library can
use it to sort out which event queue to stick the event in using the
new XCB event stream splitting code.
Current Status
The above section describes the work that I ve got running; with it, I
can run GL applications and have them correctly track window size
changes without losing a frame. It s all available on the dri3
branches of my various repositories for xcb proto, libxcb, dri3proto
and the X server.
Future Directions
The first obvious change needed is to move the configuration events
from the DRI3 extension to the as-yet-unspecified new Swap extension
(which I may rename as Present , as in please present this pixmap in
this window ). That s because they aren t related to direct rendering,
but rather to tracking window sizes for off-screen rendering,
either direct, indirect or even with the CPU to memory.
DRI3 and Fences
Right now, I m not synchronizing the direct rendering with the
CopyArea call; that means the X server will end up with essentially
random contents as the application may be mid-way through the next
frame before it processes the CopyArea. A simple XSync call would
suffice to fix that, but I want a more efficient way of doing this.
With the current Linux DRI kernel APIs, it is sufficient to serialize
calls that post rendering requests to the kernel to ensure that the
rendering requests are themselves serialized. So, all I need to do is
have the application wait until the X server has sent the CopyArea
request down to the kernel.
I could do that by having the X server send me an X event, but I think
there s a better way that will extend to systems that don t offer the
kernel serialization guarantee. James Jones and Aaron Plattner put
together a proposal to add Fences to the X Sync extension. In the X
world, those offer a method to serialize rendering between two X
applications, but of course the real goal is to expose those fences to
GL applications through the various GL sync extensions (including
GLARBsync and GLNVfence).
With the current Linux DRI implementation, I think it would be pretty
easy to implement these fences using pthread semaphores in a block of
memory shared between the server and application. That would be
DRI-specific; other direct rendering interfaces would use alternate
means to share the fences between X server and application.
Swap/Present The Second Extension
By simply using CopyArea for my application presentation step, I think
I ve neatly split this problem into manageable pieces. Once I ve got
the DRI3 piece working, I ll move on to fixing the presentation
issue.
By making that depend solely on existing core Pixmap objects as the
source of data to present, I can develop that without any reference to
DRI. This will make the extension useful to existing X applications
that currently have only CopyArea for this operation.
Presentation of application contents occurs in two phases; the first
is to identify which objects are involved in the presentation. The
second is to perform the presentation operation, either using
CopyArea, or by swapping pages or the entire frame buffer. For
offscreen objects, these can occur at the same time. For
onscreen, the presentation will likely be synchronized with the
scanout engine.
The second form will mean that the Fences that mark when the
presentation has occurred will need to signaled only once the
operation completes.
A CopyArea operation means that the source pixmap is ready
immediately after the Copy has completed. Doing the presentation by
using the source pixmap as the new front buffer means that the source
pixmap doesn t become ready until after the next swap completes.
What I don t know now is whether we ll need to report up-front
whether the presentation will involve a copy or a swap. At this point,
I don t think so the application will need two back buffers in all
cases to avoid blocking between the presentation request and the
presentation execution. Yes, it could use a fence for this, but that
still sticks a bubble in the 3D hardware where it s blocked waiting
for vblank instead of starting on the next frame immediately.
Plan of Attack
Right now, I m working on finishing up the DRI3 piece:
| Publisher: | Greywolf |
| Copyright: | 2012 |
| ISBN: | 1-55597-535-6 |
| Format: | Hardcover |
| Pages: | 205 |
There is no common way to express license information in each source
file at the moment. Some people embed license information in each
file, others keep it in README or another file at the top of the
source tree.
Worse, there is no common syntax to express the license information
in a machine-parseable way. If we had this, we could have tools that,
for example, tell you if you're trying to merge code that has an
incompatible license.
Obviously, this kind of thing can never work perfectly. People
keep inventing new licenses, and it is not possible for a computer
program to fully understand any license. It is not clear humans
can do that, either. However, it would be possible to do it to a
number of well-known licenses, which would help most of the time.
A classic 20/80 situation.
I would like to suggest a syntax, similar to Emacs's "Hey Emacs"
modelines, for embedding a summary of the license, or licenses,
for a source file, in such a way that it can be programmatically
extracted and parsed and analysed. With this syntax, one could then
write a tool to ensure that all files in a project have the same
license, or that all licenses are compatible with the project's
overall license.
Such a tool will, of course, rely on heuristics and assumptions.
For example, it needs to assume the machine-parseable license
summary is correct, and rely on a ruleset on what licenses are
compatible with what licenses. Things can go wrong. That's life.
Remember, this is aiming at doing the 20% of the work that will
work 80% of the time, not perfection.
I don't have a tool written, but I have a suggestion for the syntax.
/*
* Copyright 2013 Lars Wirzenius
*
* tl;dr =*= Licenses: GPL-3+ or Expat, and Artistic =*=
*
* Blah. Blah. Blah. Imagine long, boring license texts
* here.
*/
The important part is this:
=*= Licenses: GPL-3+ or Expat, and Artistic =*=
The =*= prefix and suffix and the word Licenses are there to
make grepping reasonably reliable without too many false positives,
and to allow comment characters and other text on the same line.
The actual license summary follows the syntax and semantics
of the Debian copyright-format 1.0 specification, which I
chose because it exists and has had a fair bit of review so far,
and is reasonably expressive.
The license summaries can be extracted with the following GNU sed
invocation:
sed -n '/.*=\*= [Ll]icen[cs]es\?: \(.*\)=\*=.*/s//\1/p'
I allowed various forms of the word license, since it's a word
that a lot of people will get wrong, and it's easy to catch all
four common forms.
So, does anyone else think this might be useful? Would you use
it in your own projects?
I bought a ScanJet N6350 a few years back, in the belief that it
would work. After all, you write free Linux drivers for all your
printers, and when those printers are multifunctional printers with
scanners, you do make sure the scanner bits of those printers work too.
So it shouldn't be too hard to write a Linux driver for that scanner
too, right?
Apparently it is. For some reason that I can't imagine, you decided
that my money is worth more than my stress levels.
| Artist: | Gahan Wilson |
| Publisher: | Subterranean |
| Copyright: | 2009 |
| Printing: | 2012 |
| ISBN: | 1-59606-479-X |
| Format: | Kindle |
| Pages: | 32 |
[1] http://shogun-toolbox.org/page/Events/gsoc2013_ideas
[2] http://google-melange.appspot.com/gsoc/org/google/gsoc2013/shogun
# apt-get update # apt-get build-dep resiprocatewill obtain all the necessary build tools. Then, as a normal user:
$ mkdir ~/src/resiprocate $ cd ~/src/resiprocate $ apt-get source resiprocate $ cd resiprocate $ dpkg-buildpackage -rfakeroot -j12In a few minutes, you should find the packages (*.deb files) are created.
I like it very much
Working with dak is not exactly fun. The documentation is not that awesome, and dak contains many hardcoded stuff for Debian, e.g. it often expects the unstable suite to be present. Also, running dak on Debian Wheezy turned out to be a problem, as the Python module apt_pkg changed the API and dak naturally had problems with that. But with the great help of some Debian ftpmasters (many thanks to that!), dak is now working for Tanglu, managing the whole archive. There are still some quirks which need to be fixed, but the archive is in an usable state, accepting and integrating packages.
The work on dak is also great for Debian: I resolved many issues with non-Debian dak installations, and made many parts of dak Wheezy-proof. Also, I added a few functions which might also be useful for Debian itself. All patches have of course been submitted to upstream-dak.
This is also nearly finished
The Tanglu metapackages have been published in a first alpha version. We will support GNOME-3 and KDE4, as long as this is possible (= enough people working on the packaging). The Tanglu packages will also depend on systemd, which we will need in GNOME anyway, and which also allows some great new features in KDE.
Side-effect of using systemd is at least for the start that Tanglu boots a bit slow, because we haven t done any systemd adjustments, and because systemd is very old. We will have to wait for the systemd and udev maintainers to merge the packages and release a new version first, before this will improve. (I don t want to do this downstream in Tanglu, because I don t know the plans for that at Debian (I only know the information Tollef Fog Heen & Co. provided at FOSDEM))
The community
The community really surprised me! We got an incredible amount of great feedback on Tanglu, and most of the people liked the idea of Tanglu. I think we are one of the less-flamed new distributions ever started
Something else
I am involved in Debian for a very long time now, first as Debian Maintainer and then as Debian Developer and I never thought much about the work the Debian system administrators do. I didn t know how dak worked or how Wanna-build handles the buildds and what exactly the ftpmasters have to do. By not knowing, I mean I knew the very basic theory and what these people do. But this is something different than experiencing how much work setting up and maintaining the infrastructure is and what an awesome job the people do for Debian, keeping it all up and running and secure! Kudos for that, to all people maintaining Debian infrastructure! You rock! (And I will never ever complain about slow buildds or packages which stay in NEW for too long
)
I'd decided ahead of time that I wanted to use Internode as my ISP, and had ordered a
Naked DSL service from them and also decided to bundle my mobile phone with
them as well. For reasons that only made sense to me 7 years ago, I've been
paying Telstra to keep my mobile number going, but I've long since lost the
SIM. My current phone has a micro-SIM anyway, so I needed a replacement SIM.
My grand plan had been to order the SIM, order the number port from Telstra
to Internode, and then, well, profit from the moment I stuck the SIM in my
phone. Unfortunately the port didn't go through as planned, and I was left
incommunicado for the better part of two and a half days. I felt like I had
my hands tied behind my back not having a mobile data service. It was also
mildly annoying not being able to call people or be contactable, given the
amount of running around I was doing. But it got resolved and is fast
becoming a distant memory.
The DSL service required a Telstra technician to come out (I'm not actually
sure why) and that was scheduled for Thursday. I happened to catch him while
he was at my building's MDF, and had a bit of a chat with him. He was a
Scotsman, and I didn't get all the details, but he was going on about how he
was only there to operate on the exchange side of the MDF, and I'd have to
get someone else to jumper it up to my apartment.
This wasn't what I expected from an installation service, but sure enough
when I finally got around to plugging the ADSL modem in on Saturday morning,
there was no line sync to be had. A call to Internode confirmed that he'd
only jumpered it up to exchange side of the MDF.
What was even more annoying was I'm pretty sure I saw him yanking out jumper
wires from the MDF when he was working on it. Jumper wires that connected
the exchange side of the MDF to my apartment.
I was not thrilled with the idea of waiting (and paying) for a cabling
contractor to come out and hook up a couple of bits of jumper wire, so I put
out a call on Facebook for a Krone tool and a tone generator, and Brent was
able to come through for me. He dropped the gear around while I was out
shopping with Kristy, and when we got back, I located the pair for my unit,
and rejumpered the existing jumper wire that I'm pretty sure the Telstra
technician had disconnected. Lo and behold, my ADSL started working. I felt
pretty proud of myself. It's fun operating at Layer 1 every now and then.
The FRITZ!Box
Fon WLAN 7270 is quite the beast of a box. Not only is it an ADSL modem,
it's a wireless router, DECT base station, VoIP thingy and an answering
machine! I've managed to connect my Engin account up to it, so once I get a
DECT handset, I'll be able to make VoIP calls through it. I don't need to
run Asterisk any more.
On Monday I took part in my first triathlon, a "sprint" distance race organised by Thames Turbo Triathlon Club.
(Full results)
Antonia came into the room. Where's Alieta? she asked.
We don't know, replied Luda. It was true; we hadn't seen Alieta
in quite some time, and we had no idea where she was.
Antonia left. Varvara eyed me mischievously and said, You could
call her.
How? I asked.
Touch the grandmother clock and you will figure it out.
I touched the clock trepidly. Nothing happened. I opened my mouth
to speak, but the word I had been about to say resonated in my mind
as if spoken through a comb filter. I concentrated. Alieta,
dozens of human-like voices sang over and over in different
harmonies. I let go.
What was that? I demanded.
Clock, Varvara said dismissively.
Come on, let's do laundry, Luda grunted.
We carried our laundry out to the garage, which is where the washer
and dryer lived. Alieta slipped in through one of the open garage
doors, and surreptitiously pulled Varvara over for a whispered
conversation.
Antonia wandered in and squinted in Alieta's general direction.
Luda quickly pulled Varvara in front of her. It's just Varvara,
she announced.
Antonia's eyes glazed over and she went back into the house.
Alieta pursed her lips and studied the wall as if there
might be some reflective object that had alerted her mother
to her presence. Then she grabbed Varvara by the hand, pulled
her over to push the buttons that closed the garage doors,
and dragged her into the house.
I watched the garage doors close. Then I watched the one on
the left reverse direction. I opened my mouth to notify someone
of this, but the doors reversed direction again, and proceeded
to partially open and close as if possessed. I tried to hide
behind Luda, without success.
Now she was watching as well, as reality seemed to to shimmer
and bend. The roof became arched, and there were loud mechanical
noises as our environs transformed. When it finished, the
place where the garage doors had been was now a wall of screens
displaying video as you might encounter in a television store.
More disconcertingly, we were in front of a railing which
overlooked what appeared to be a car dealership showroom.
Luda sucked in her breath. Benjamin Snow, you were into
some serious shit, she muttered.
This was the first "normal" (i.e. not part of the Easter "long weekend")
day. As it happened, Easter Monday was surprisingly retail-friendly anyway.
My friend Kristy picked me up in the morning, and we dropped past the real
estate agent for my apartment to see if the tenants had happened to drop the
keys back yet (they hadn't) and then we went to Ikea and bought a bed for
Zoe a bunch of other random stuff. I also bought a bed frame and mattress
while we were at the neighbouring Logan
MegaCentre (it's not a bad shopping
centre)
The bed frame is wooden and is taking 6-8 weeks to be made, so in the
meantime, because I bought a mattress from them, they're lending me a
mattress base. That's getting delivered on Saturday.
We then headed over to Harvey
Norman in Fortitude Valley. We'd just got started there when the real
estate agent called to say the tenants had dropped the keys back, so we
stopped and headed back over to meet the property manager at the apartment
and get the keys.
After that, we headed back to Harvey Norman and bought a fridge, TV, and a
bunch of small appliances, and then headed back to the apartment to do some
Ikea assembly. We'd just about finished putting Zoe's bed together when we
discovered we'd gotten the wrong width slats for her bed. It turns out there
are two widths of the "Sultan Lade" slats, and they're right next to each
other in the warehouse. We'd picked up from the correct location, but I
think the piles had become jumbled. Lesson learned: cross check the SKU as
well as the pickup location.
It was a long day, and I was enormously grateful to Kristy for driving me
all over the place, and generally helping me shop. I think it ended up being
a 15 hour day for her.
Next.