Haskell OpenGL Entry: Getting an overview Date: Sun Jan 29 10:06:30 EST 2012 What I want is to do something with TTF fonts. First problem is getting the example to do something. This displays points, but no text: import Graphics.Rendering.FTGL import Graphics.UI.GLUT ttfFile = "/home/tom/pub/darcs/cmexp/cour.ttf" main :: IO () main = do (progname, _) <- getArgsAndInitialize createWindow "Hello World" font <- createTextureFont ttfFile setFontFaceSize font 24 72 let display = do clear [ ColorBuffer ] renderPrimitive Points $ mapM_ (\(x, y, z)->vertex$Vertex3 x y z) myPoints color $ (Color3 (1.0::GLfloat) 0 0) renderFont font "some string" Graphics.Rendering.FTGL.Front flush displayCallback $= display mainLoop myPoints :: [(GLfloat,GLfloat,GLfloat)] myPoints = map (\k -> (sin(2*pi*k/12),cos(2*pi*k/12),0.0)) [1..12] Looks like "quickly getting something going" is not happening.. Ha! There's something wrong with the scaling. After some mending I get to this as doing something useful: import Graphics.Rendering.FTGL import Graphics.UI.GLUT import Data.IORef ttfFile = "/home/tom/pub/darcs/cmexp/cour.ttf" -- ttfFile = "/usr/share/vlc/skins2/fonts/FreeSans.ttf" scale1 c = scale c c c display font time = do clear [ ColorBuffer ] loadIdentity preservingMatrix $ do scale1 (0.003::GLfloat) renderFont font "some string" Graphics.Rendering.FTGL.Front flush putStrLn "." idle time = do t <- get time time $=! t postRedisplay Nothing main :: IO () main = do (progname, _) <- getArgsAndInitialize createWindow "words" font <- createTextureFont ttfFile setFontFaceSize font 100 100 time <- newIORef 0.0 displayCallback $= display font time idleCallback $= Just (idle time) mainLoop Entry: State machines Date: Sun Jan 29 11:04:16 EST 2012 So I got to something parameterized by time. Is this preferable over something parameterized by state? The point is to make things reactive, which probably corresponds more to a stateful approach. However, there is no equidistant sampling at this point either, which means the state updates should probably be parameterized by time difference. Entry: Time keeping Date: Sun Jan 29 11:52:39 EST 2012 So I'm using the following approach: data Time = Time ClockTime {- system time -} Double {- seconds since start -} Double {- diff seconds -} Where ClockTime comes from getClockTime, and the 2 Doubles represent absolute time (since start) and relative time. Entry: NEXT Date: Sun Jan 29 11:53:24 EST 2012 * Factor state machines and allow for state products as in DSPM. DONE. * Each state machine can be linked to a render function. DONE. * Do something about font anti-aliasing. I.e. mip-mapping? * Motion blur? Entry: Progress Date: Sun Jan 29 21:10:55 EST 2012 I got something to move that doesn't look too bad. Also factored out a layer that bridges GLUT's main loop and a simple state machine + rendering abstraction. Probably want to move away from GLUT at some point. Next: texture data. Unknown terrain is the different ways to work with foreign binary data. The OpenGL bindings seem to use Ptr[1], while PNG uses StorableArray[2]. The bridge seems to be in withStorableArray[3] withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a [1] http://www.haskell.org/ghc/docs/latest/html/libraries/base/Foreign-Ptr.html [2] http://hackage.haskell.org/packages/archive/array/latest/doc/html/Data-Array-Storable.html#t:StorableArray [3] http://hackage.haskell.org/packages/archive/array/latest/doc/html/Data-Array-Storable.html#v:withStorableArray Entry: Blending GL_ONE Date: Thu Feb 2 15:34:32 EST 2012 From PF code: static PF_FUNCTION(blend) { CHECK1(a_int); int mode = ARG0->w.w_int; switch(mode){ case 0: glDisable(GL_BLEND); break; case 1: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); break; case 2: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); break; } DROP; EXIT; } Googled for "GL_ONE_MINUS_SRC_ALPHA haskell" and found [1]. Looking for BlendingFactor in hoogle gives [2]. Looks like this is what I'm looking for, accumulating: blendFunc $= (SrcAlpha, One) But type is :: StateVar (BlendingFactor, BlendingFactor) Still, this doesn't blend correctly. It might be that FTGL uses blending internally in a specific way, and that this needs to be changed manually? [1] http://hackage.haskell.org/packages/archive/OpenGL/2.3.0.0/doc/html/src/Graphics-Rendering-OpenGL-GL-BlendingFactor.html [2] http://hackage.haskell.org/packages/archive/OpenGL/latest/doc/html/Graphics-Rendering-OpenGL-GL-PerFragment.html#t:BlendingFactor Entry: Crashes Date: Sat Feb 11 00:10:33 EST 2012 Trouble - revo: flicker - one: full system crashes - timelinex: works, but doesn't wait (3ms frame diff = 300 fps) - desktop works, (16ms frame diff, looks synced) This[1] is what is needed. And maybe also a way to get rid of GLUT. [1] http://www.opengl.org/registry/specs/SGI/video_sync.txt Entry: TODO Date: Mon Feb 13 19:19:52 EST 2012 - images - global state (i.e. window, fps, time, ...) - state machine in haskell. DSL? Entry: The Animation Monad Date: Mon Feb 13 19:39:40 EST 2012 Animations are isolated state machines, but * they should be able to somehow interact - "outputs" of other animations * they should know some "world state": - window dimension/aspect ratio - current controller input - current time + time diff to previous frame(s) - frame number I find it hard to think functionally about interactions. Using state (state space models) makes a lot of sense here.. Prime objective is to not get lost. For now it's probably best to stick this information in the AM monad. Entry: Acer Revo stuff Date: Sat Feb 18 09:24:27 EST 2012 - VGA/HDMI auto-selects at boot. I didn't find a way to do this while running, or to have both. Maybe BIOS option? - VGA is 1024x768 on the 720p TV, which does not have square pixels! Need to think about this! Entry: Sidetracked.. Date: Sat Feb 18 11:27:35 EST 2012 Got sidetracked[1]. Still don't have an answer to how to use the reader monad. What do I really want to do? I want to make input implicit, so it's just an organization thing.. Instead of having (s,i) -> s I want i -> (s -> s) where the (i ->) is the reader monad. I got stuck on the constructor of the Reader monad: reader :: (r -> a) -> Reader r a It seems that I need to switch this: animUpdate :: s -> AM s -- old animUpdate :: AM (s -> s) -- new though I can't quite explain why except for saying that the "value" that is parameterized by an environment is really the state update function itself, not its output. This seems to correspond more to reality.. ( What I think is that I'm implicitly writing a monad transformer. The s -> s is actually a specific case of s -> (s,a) and there are sometimes issues with commutation of monad compositions.. ) I guess later this could be something like: AM (s -> (s, o)) where o is an abstraction of the effect on the world. [1] entry://../compsci/20120218-100732 Entry: RenderScript Date: Sat Feb 18 15:18:01 EST 2012 Scripts' dynamics should also be able to see the world == Reader / environment. The thing which really comes up is separation of dynamics update and output / rendering, where both should be made world-dependent. I wonder though if it isn't simpler to just explicitly parameterize these functions with the environment. Current factorization needs some work.. For script renderer we perform fractional updates: i.e. don't round dynamics to frame boundaries. Entry: TODO Date: Sat Feb 18 15:30:21 EST 2012 How to move this forward without going into a blind refactoring frenzy? Basically I don't have a good answer to how to factor this: I keep going back to a general state monad. Script needs proper dynamics though. Currently there is nothing that can perform dynamics updates without changing renderings... Doesn't quite add up. Summary: - Not sure if this Reader stuff is a good idea. - Not sure if bundling of animation and renderer is a good idea. Probably also need state machine composition without rendering (world-dependent state machines). Entry: Going back to s -> M s ? Date: Sun Feb 19 08:59:54 EST 2012 Does it make sense to change this? Current encoding is a bit clumsy. do t <- aTime return $ \s -> s+t instead of \s -> do t <- aTime return s+t The latter also allows different monads. Let's change it back, just for exercise to see how difficult it is. It should be equivalent so really should be a straightforward refactoring. Yes, it was straightforward. Looks like my initial trouble was really just ignorance of how to use runReader.. Entry: Forkable RNG Date: Sun Feb 19 09:27:25 EST 2012 While the forkable RNG seems like a neat idea to keep in the bag of tricks, it also seems a bit convoluted for what I'm doing right now. Looks like it's best to use monad transformers to combine a reader and state monad[1]. [1] entry://../compsci/20120219-095844 Entry: Textures Date: Sun Feb 19 11:56:32 EST 2012 From [4]: Unknown terrain is the different ways to work with foreign binary data. The OpenGL bindings seem to use Ptr[1], while PNG uses StorableArray[2]. The bridge seems to be in withStorableArray[3] withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a Step 1: read PNG. img = do Right i <- loadPNGFile imageFile return $ imageData i img :: IO (Data.Array.Storable.StorableArray (Int, Int) GHC.Word.Word8) How to get the size? img >>= getBounds Next: OpenGL part. Some info here [6]. [1] http://www.haskell.org/ghc/docs/latest/html/libraries/base/Foreign-Ptr.html [2] http://hackage.haskell.org/packages/archive/array/latest/doc/html/Data-Array-Storable.html#t:StorableArray [3] http://hackage.haskell.org/packages/archive/array/latest/doc/html/Data-Array-Storable.html#v:withStorableArray [4] entry://20120129-211055 [5] http://hackage.haskell.org/packages/archive/pngload/0.1/doc/html/Codec-Image-PNG.html [6] http://www.haskell.org/pipermail/hopengl/2010-July/000971.html Entry: Meeting minutes Date: Fri Feb 24 14:38:17 EST 2012 * Document view instead of sequence * tablet * texture for deformation * get vertex array for processing (shader?) * Cursor? ftglGetFontBBox / ftglGetFontAdvance * FTGL: get raw vertex data? or just per glyph + kerning info. * Texture fonts might be the way to go: lot better anti-aliasing. Disadvantages are transparency etc... However, it would be really nice to just get the raw texture and kerning data. * Description: needs to be more declarative. Can't do this as state machines, since most animations will be specified as some kind of boundary problem.. Entry: FTGL: texture glyphs Date: Fri Feb 24 16:02:17 EST 2012 tom@one:~/hgl/ftgl/trunk$ svn info Path: . URL: https://ftgl.svn.sourceforge.net/svnroot/ftgl/trunk Repository Root: https://ftgl.svn.sourceforge.net/svnroot/ftgl Repository UUID: 74be908f-6f43-0410-a0eb-e6a2fe4e4ee7 Revision: 1266 Node Kind: directory Schedule: normal Last Changed Author: sammy Last Changed Rev: 1266 Last Changed Date: 2011-05-21 06:24:37 -0400 (Sat, 21 May 2011) ./FTGlyph/FTTextureGlyph.cpp:179: glBegin(GL_QUADS); What would probably work is to just make a "fake" display list. Render a string once, and record all texture coordinate / quad operations in an array, then operate on this array. Entry: FTGL mailing list Date: Fri Feb 24 17:32:06 EST 2012 * Is there a particular reason mipmapping is not used for the texture fonts? * Any hints on the following, using texture fonts: I'd like to do some non-linear distortion on rendered text, basically rendering the texture fragments onto something else than a QUAD. Any tips on how to do this without resorting to this horrible hack which records TexCoord/Vertex data into an array for later processing? /* Fake display list. */ const int fdl_size_max = 100000; int fdl_size = 0; static float fdl_coords[fdl_size_max]; void fdl_write_float(float f) { if (fdl_size < fdl_size_max) { fdl_coords[fdl_size++] = f; } } void _glTexCoord2f(float x, float y) { fdl_write_float(x); fdl_write_float(y); glTexCoord2f(x, y); } void _glVertex2f(float x, float y) { fdl_write_float(x); fdl_write_float(y); glVertex2f(x, y); } const FTPoint& FTTextureGlyphImpl::RenderImpl(const FTPoint& pen, int renderMode) { float dx, dy; if(activeTextureID != glTextureID) { glBindTexture(GL_TEXTURE_2D, (GLuint)glTextureID); activeTextureID = glTextureID; } dx = floor(pen.Xf() + corner.Xf()); dy = floor(pen.Yf() + corner.Yf()); glBegin(GL_QUADS); _glTexCoord2f(uv[0].Xf(), uv[0].Yf()); _glVertex2f(dx, dy); _glTexCoord2f(uv[0].Xf(), uv[1].Yf()); _glVertex2f(dx, dy - destHeight); _glTexCoord2f(uv[1].Xf(), uv[1].Yf()); _glVertex2f(dx + destWidth, dy - destHeight); _glTexCoord2f(uv[1].Xf(), uv[0].Yf()); _glVertex2f(dx + destWidth, dy); glEnd(); return advance; } Entry: Declarative approach Date: Fri Feb 24 18:01:16 EST 2012 It seems that the current approach really isn't going to work very well. In talking with Melissa today I found out that a better way to think of this is as text on paper "with extra stuff". I.e. to have a default way of rendering the text with effects built on top of that, like works fading in/out or moving, or getting bigger or stretched. Another thing is that while there is this 2D description, there is also time. It is as if these 2 views "collide". To relate it to a physical process: someone reading a poem is someone "scanning" it with their eyes, hopping from word to word with a certain meter. What about mapping this scanning to the animation directly, or at least to the events that trigger relaxation processes. Let's see what this is: * 2D - layout, effects (i.e. instead of "bold" there is also "moving") * Time - meter, accent, intonation The challenge is to make this expressable in a meaningful way. It's a bit like this: a 2d (textfile) rep is both a representation of what you see on the screen AND how it unfolds. Entry: FTGL render to something simpler.. Date: Fri Feb 24 18:35:22 EST 2012 I can reuse the Glyphs object, which is basically a set of texture coordinates. What really needs to happen is a way to get at the kerning. In the code below, the only important part is the pen position, so if this can be saved together with a glyph reference all is well. However, that needs C code to actually do the drawing. After all, it might be simpler just to record the glyphs as (texture,texcoord,vertex) so they can be exported to Haskell. const FTPoint& FTTextureGlyphImpl::RenderImpl(const FTPoint& pen, int renderMode) { float dx, dy; if(activeTextureID != glTextureID) { glBindTexture(GL_TEXTURE_2D, (GLuint)glTextureID); activeTextureID = glTextureID; } dx = floor(pen.Xf() + corner.Xf()); dy = floor(pen.Yf() + corner.Yf()); glBegin(GL_QUADS); glTexCoord2f(uv[0].Xf(), uv[0].Yf()); glVertex2f(dx, dy); glTexCoord2f(uv[0].Xf(), uv[1].Yf()); glVertex2f(dx, dy - destHeight); glTexCoord2f(uv[1].Xf(), uv[1].Yf()); glVertex2f(dx + destWidth, dy - destHeight); glTexCoord2f(uv[1].Xf(), uv[0].Yf()); glVertex2f(dx + destWidth, dy); glEnd(); return advance; } Entry: Next step Date: Fri Feb 24 20:20:04 EST 2012 Getting at the glyph data is a low-level optimization that can be done later. It might be best to focus on the important parts... I can get at word offsets using the advance call on a string. Entry: FTGL hacking Date: Fri Feb 24 22:25:02 EST 2012 Conceptually: replace the gl calls with construction of a list. Where to store that list? Simplest seems to be in the FTFontImpl class. Glyph could call its associated FTFontImpl class, and an extra API call would then get the data, which would be a reference to the Glyph (pointer) and an x,y coordinate. Yeah, I see no point in threading this through all the interfaces... The simplest thing is really going to be a dirty hack where we insert a callback by setting a global variable. Seems to link, let's do it like that. If variable "renderHack" is non-NULL, it's a function, it's used as a consumer function that takes the relative coordinates instead of rendering the QUAD. Next is then: how to call Haskell from C? See [1]. [1] http://www.haskell.org/haskellwiki/GHC/Using_the_FFI#Callbacks_into_Haskell_from_foreign_code Entry: Space and Time Date: Sat Feb 25 09:14:54 EST 2012 The main problem here is describing time evolution in a declarative/parametric way, instead of reactively. What about the following: is it possible to take a state machine description of something and "wrap it" as a parametric curve? This is a memoization problem. What I really need is a tree-like representation of time for control, and a sequential/update representation for low-level animations. The fundamental contradiction is: * Animations ("physical" parameter evolution) is best expressed as an update equation. * Choreography is best expressed as a (hierarchical) sequence. In the second, time is somewhat implicit. At each time instance we need to search the whole tree and see if the configuration has changed. Something like this: the declarative representation of the timeline needs to be translated to events. These events feed the state machines. This is a typical score/synth architecture used in sound synthesis. The state machine part is simple. The configuration part is not. How to represent? This is something like a time-indexed type. Configuration changes are really type changes, in Haskell either represented as class instance changes, or as constructors in a single type. So, there are the following problems: * Construction of objects. * Time evolution of objects. * Destruction (probably implicit: absence of construction / update). Entry: Narrowing down Date: Sat Feb 25 09:36:19 EST 2012 I need 2 components: - Scoring: convert declaration to evolution over time: generation of events/construction + management of state updates. - Parametrizable text layout engine = static frame. Entry: Kerning? Date: Sat Feb 25 10:14:48 EST 2012 How can it be that calling renderFont getFontAdvance -> translate renderFont with 2 strings "AWAW" seems to give proper kerning where the 2 join? Does FTGL keep kerning state between render calls? So adding print to: FTPoint FTGlyphContainer::Render(const unsigned int charCode, const unsigned int nextCharCode, FTPoint penPosition, int renderMode) { unsigned int left = charMap->FontIndex(charCode); unsigned int right = charMap->FontIndex(nextCharCode); FTPoint kernAdvance = face->KernAdvance(left, right); printf("kernAdvance = %f, %f\n", kernAdvance.Xf(), kernAdvance.Yf()); if(!face->Error()) { unsigned int index = charMap->GlyphListIndex(charCode); kernAdvance += glyphs[index]->Render(penPosition, renderMode); } return kernAdvance; } Shows there seems to be no kerning: all values are zero. Let's see if this is a font issue. Nope, all fonts I try have the same problem. Using ttx from the fonttools debian package does show a non-zero kerning table, so this seems to be a FTGL issue. OK, got it. It works if I disable kerning precomputation. I modified the source, can it be done in an API call? Doesn't seem so. Entry: Rendering a stanza Date: Sat Feb 25 11:34:38 EST 2012 Rendering needs font scaling / rotation / ... How to render different sizes? Problem here is translate and scale. Probably best to use scale x, translate, scale 1/x Yep that works. Next problem is how to handle boxes. What I want to do is some kind of constraint-based programming for describing text layout, and let the boxes snap together. Entry: Some ideas about hiding state Date: Sat Mar 10 18:19:34 EST 2012 - Hide state by exposing only input and output. As opposed to the DSP language which has state machine guts exposed for code generation, in this animation framework state can forever be hidden, meaning. Trouble there is that you can't construct infinite types, so this only works for output-only state machines. (s -> (s, o)) -> [o] ((s,i) -> (s,o)) -> i -> (o, i -> (o, ...)) -- infinite type Actually, this doesn't work for ADTs but maybe does work for GADTs. Something to explore. Probably a side-track for the immediate goals though. - If hiding state is possible, switching state is also possible. Inherits all problems of above. Wait... this does work: data F i o = F (i -> (o, F i o)) Why does it, and why did I think it didn't? I'm confusing this with the representation fo lambda/app: F (i -> o) -> F i -> F o Maybe a noisy arport is not the best place to start thinking about this. Anyway, if the stuff above works it makes things a bit simpler to use: encode recursion as recursion, not exposing internal state. This allows the use of different *types* as internal states, or that internal states are not even necessary to be made explicit? One caveat: the *initial* state does need to be somehow made explicit. I have trouble expressing an integrator this way. Entry: Pinning Date: Fri Mar 23 18:28:19 CET 2012 - For box -> paragraph this should work fine: use 0,1,inf weights. What about nested boxes? Can this be used to pin the center of say 4 squares? The weights here could indicate some kind of pull, i.e. rubber bands. Entry: Layout & Constraint programming Date: Sat Mar 24 16:41:18 CET 2012 Problem: functional parametric won't work: need at least relations. Problem: relations: local/non-local? local -> propagation to convert relational network -> functional network non-local -> needs backtracking or "smart" solver (i.e. gauss elim for multilinear) Nature of problem (boxes with local connections) probably allows local propagation algo. Layout is fixed, so translation from relations to uni-directional functions can be done once. Problem: define collection of primitive constraints. Simplifcation: not all nodes in constraints need to be output, i.e. aspect (from text) is directly determined. This allows some nodes to be non-invertible. (== PARTIAL directionality) Type of constraints from problem: - aspect (from text) - corner coordinate equality (adjacent words) - line end/begin constant distance - pinning in time (i.e. justify s.t. final frame == centered) Entry: Constraint implem Date: Sat Mar 24 17:04:12 CET 2012 Implementation. Algebraic or co-algebraic? It is parametric: result should be a function. Can this be done directly, or does it need an intermediate representation? Co-algebraic (CA) network needs CA prims. Lenses? CA prim = list of functions, 1 for all I/O configurations. Examples: node equality a == b : 2 [\x->x, ...] sum: 3 inputs: a + b + c == 0 : 3 [\a b -> -(a + b), ...] sum: 4 ... lc: n (a_1 * x_1 + ...) == 0 : [\(a_1, ...) \(x_1,,x_k-1,x_k+1,...,x_n) linear constraints: generic gausian elim + param i.e. allow variables IN/OUT + parameter (scaling) only IN. So... if all eqs are linear it's probably simpler to use only one set of equations + use gaussian elim. The only reason to use constraint networks is to incorporate NONLINEAR equations, and exploit invertibility through sparseness. I.e. nonlinear doesn't mean non-bijective. So, it's probably enough to solve: - linear equations (gaussian elimination) - (locally) invertible nonlinear functions, i.e. product (not square!), transcendental functions The solver is then a directionalization of a network, which can be a function if the underlying primitives are functions. Entry: Just linear equations? Date: Tue Apr 3 14:52:32 CEST 2012 Am I looking for a problem to apply to my solution? Maybe I'm just looking too far with all this. It can very well be that what I need is just linear equations (i.e. no a * b * c = 1) and in that case Gauss elimination is a lot simpler to do. For juxtaposing words it's going to be something like, with capitals as constants (inputs) and lower caps as unknowns. a + B = c c + D = e e + F = g ... the only tricky part is time, we have something like: a + B(T) = c .. q + R(T) = s and B(T0) = R(T0) this means that the curves have another parameter, probably translation, which is also just linear. Curves can be as complex as they want, as long as we don't change the shape (a nonlinear parameter) and as long as time itself remains a parameter, all the layout equation remain linear. Later, GE can still be used as a building block in multi-directional nonlinear networks. [1] http://luckytoilet.wordpress.com/2010/02/21/solving-systems-of-linear-equations-in-haskell/ [2] http://hackage.haskell.org/packages/archive/Vec/0.9.4/doc/html/src/Data-Vec-LinAlg.html Entry: Gaussian Elimination in Haskell Date: Tue Apr 3 15:20:48 CEST 2012 [1] http://hackage.haskell.org/packages/archive/Vec/0.9.4/doc/html/src/Data-Vec-LinAlg.html Entry: Equations Date: Thu Apr 5 11:31:02 CEST 2012 - Convert set of words with size parameter into point locations + distance. This is a set of equations where the unknowns are (x,y) of the starting point. - The equations that fix it are distance between lines, and join points of boxes. Entry: FTGL font size Date: Thu Apr 5 12:02:14 CEST 2012 Thinking about fixing units. I'm going to do the scaling with OpenGL operators, so best to fix the size a bit. It's largely arbitrary, unless I'm missing some kind of standard. If I'm not mistaken, the ratio if the 2 numbers sets the number sets the resolution of the texture image. Some experiment: the "res" parameter does not influence the size. Further test will probably need to show whether this is indeed texture resolution. ftglSetFontFaceSize ( FTGLfont * font, unsigned int size, unsigned int res ) Set the char size for the current face. Parameters: font An FTGLfont* object. size The face size in points (1/72 inch). res The resolution of the target device, or 0 to use the default value of 72. Returns: 1 if size was set correctly. Entry: OpenGL versions Date: Thu Apr 5 13:47:33 CEST 2012 zoo: 2.4.0.2 zni: 2.5.0.0 The trouble I had with Float/GLFloat is probably because of that upgrade. Let's check the other machines + see if I can downgrade or pin the version in the config. # Install older version and de-register the newer one cabal install OpenGL-2.4.0.2 ghc-pkg unregister OpenGL-2.5.0.0 --force ghc-pkg unregister OpenGL-2.2.3.0 --force ghc-pkg unregister GLUT-2.3.0.0 ghc-pkg unregister GLUT-2.2.2.1 # Recompile libraries that depend on it: cabal install FTGL-1.333 cabal install GLUT-2.2.2.1 I'm seriously confused now... How can I get to the same Haskell install on different machines? Maybe it's best to just use ghc-7.0.4 from debian and build platform from source? Nope that gives problems too. apt-get install ghc haskell-platform cabal-install cabal update cabal install FTGL pngload Entry: Video card trouble Date: Thu Apr 5 14:51:50 CEST 2012 This doesn't seem to be a Haskell issue. The same binary works perfectly on the Acer TimelineX laptop. tom@zni:~/hgl$ dist/build/hgl/hgl X Error of failed request: BadWindow (invalid Window parameter) Major opcode of failed request: 20 (X_GetProperty) Resource id in failed request: 0x2400014 Serial number of failed request: 11 Current serial number in output stream: 11 What I found here[1] is that: IRQ support for r600 and r700 chips was added in 2.6.33; making them require KMS was a conscious decision. I'm running 2.6.33.7-rt29 Might be an X problem also. Currently I have: ii xserver-xorg 1:7.4+3 the X.Org X server ii xserver-xorg-video-radeonhd 1.2.5-1 X.Org X server -- AMD/ATI r5xx, r6xx display ii xserver-xorg-video-radeon 1:6.12.2-2 X.Org X server -- ATI Radeon display driver It uses radeon: tom@zni:~/hgl$ cat /var/log/Xorg.0.log|grep radeon (II) LoadModule: "radeon" (II) Loading /usr/lib/xorg/modules/drivers//radeon_drv.so (II) Module radeon: vendor="X.Org Foundation" The TimelineX runs [ 34.454] (II) LoadModule: "intel" xserver-xorg 1:7.6+9 xserver-xorg-video-intel 2:2.17.0-1 Let's hope this works: install 7.6 apt-get install xserver-xorg That solved one problem at least.. It runs now, but very inefficient. Following up I find: ... [ 172.667] (--) RADEON(0): Chipset: "ATI Radeon HD 3300 Graphics" (ChipID = 0x9614) [ 172.667] (II) RADEON(0): PCI card detected [ 172.667] drmOpenDevice: node name is /dev/dri/card0 [ 172.667] drmOpenDevice: open result is 11, (OK) [ 172.667] drmOpenByBusid: Searching for BusID pci:0000:01:05.0 [ 172.667] drmOpenDevice: node name is /dev/dri/card0 [ 172.667] drmOpenDevice: open result is 11, (OK) [ 172.667] drmOpenByBusid: drmOpenMinor returns 11 [ 172.667] drmOpenByBusid: Interface 1.4 failed, trying 1.1 [ 172.667] drmOpenByBusid: drmGetBusid reports pci:0000:01:05.0 [ 172.667] (II) RADEON(0): GPU accel disabled or not working, using shadowfb for KMS ... [ 172.826] (II) AIGLX: Screen 0 is not DRI2 capable [ 172.826] (II) AIGLX: Screen 0 is not DRI capable ... [ 172.811] (WW) RADEON(0): Direct rendering disabled ... This seems to be the problem: tom@zni:~/hgl$ dmesg|grep firm [ 49.102311] platform radeon_cp.0: firmware: requesting radeon/RS780_pfp.bin [ 49.151445] platform radeon_cp.0: firmware: requesting radeon/RS780_me.bin [ 49.153931] platform radeon_cp.0: firmware: requesting radeon/R600_rlc.bin [ 49.171166] r600_cp: Failed to load firmware "radeon/R600_rlc.bin" [ 49.171206] [drm:r600_startup] *ERROR* Failed to load firmware! sudo apt-get install firmware-linux-nonfree Stupit fucking crap. That works, i.e. the firmware now loads, but I get black windows for all GL stuff. [ 128.761] (WW) RADEON(0): You need a newer kernel for sync extension So let's install a recent kernel. linux-image-3.2.0-2-rt-amd64 Well waddayaknow the fucker doesn't boot. Too much... can't loose time with this now. Or maybe [3]: Good news, adding pci=nomsi to the kernel line, solves the issue completely. No blank output without the .drirc file, and a massive performance improvement. Thanks to Alex Deucher for the useful comment on the related freedesktop bug report. Doesn't make a difference. Setting vblank_mode=0 also doesn't do anything. I give up. [1] http://forums.debian.net/viewtopic.php?f=6&t=50880 [2] https://jeremy.visser.name/2009/10/no-dri-on-x-org-with-a-radeon-check-your-virtual-size/ [3] https://bbs.archlinux.org/viewtopic.php?id=109132 Entry: Next Date: Thu Apr 5 20:00:08 CEST 2012 Questions - Font size 200 seems adequate. How to make this resolution-relative? I.e. I want code where font size is expressed in ordinary units and texture resolution can be changed without changing layout. => done: FontInfo - How to draw a grid. Maybe not neccesary - Equations. Things to express = neighborhood of boxes in 3D (2D + frame space). Whole animation is network (actually tree!!). If it's a tree, we also know the root node! Location of root node determines rest. Might even make it variable over time. Problem: how to express this tree. Probably best unrolled over frames. Entry: Datastructure is a tree Date: Thu Apr 5 21:04:58 CEST 2012 Which is hugely cool: means it's a document, i.e. flat. What is even more cool: the information flow is represented by the inside-out-ness of the tree (zipper/cursor). I think I'm reinventing CSS data BoxDir = Fwd | Rev data BoxDim = X | Y | T data Box p = BoxComp BoxDim BoxDir [Box p] | BoxScale GLfloat (Box p) | BoxPrim p I wonder though if this is well-defined. I.e. nesting X and Y makes sense: save one dimension then branch out into another: [5,3,4] or [[,,,,,],[,,,],[,,,,]] 5 ,,,,, 3 ,, 4 ,,,, But what happens when boxes of the same direction are nested? Then there should be no backtracking but concatenation: ,,,,,|,,|,,,, What is it that makes this so a-symmetric? Is "ENTER" so ill-defined? Actually, this reminds me of a typical enter/space problem when just printing out stuff to a text console.. For ordinary typing: - space: next column - enter: netxt row, reset column There's a clear hierachy here. With the nested structure above it's possible to do things like: 1222223 1 3 122 3 1 3444444 1 So it's a bit like this; - if from moving from one level to the other we change direction we: - push location - render subtree - pop location - if direction is not changed we just render subtree = auto-flatten. That seems to be the most sensible behaviour. The other alternative is to use this as strike-through, and make sure there are no nested same-direction levels. Actually strike through is useful for tabs! I.e. sentence, [text], tab, ... So it is consistent. Another inconistency: composite boxes should probably also have width/height in the directions other than the one they are composing. Otherwise we can do "CR" but no "LF". Basically this means that a line has a line height. This should be a property of the line and not the vertical container. It could be made so that if a container does not have a dim spec, it inherits the spec of its children. Basically: dim spec = push/pop/increment, no dim spec = no push/pop. Another thing is "reverse drawing" of text. Probably a primitive box should have an idea of where the cursor is. This is only for drawing, so just an indication of which of the 4 corners should be enough. So what is a primitive? It's a function that receives a coordinate and a corner spec, and produces a box. Projects: box coord or box drawing + box coord. ( It should probably receive explicit coordinates to be able to perform some effects. ) The output of rendering a box network could be just a collection of coordinates and render thunks, which could then be further parameterized, i.e one word appearing after another. Since all dimensions are symmetric, maybe this should just use numbers: 0 x 1 y 2 (layer?) 3 t So what happens at a fork point? We step into a context and pass some info into this context: - which direction we're going, which means at what end of the n-d box do we place the next box + how is this information aligned in the perpendicular direction (going down:left/right/center) or (going right;top/bottom/center). - advance to use, or inherit from boxes. (inheritance needs bounding boxes). examples: - normal stanza: going left/right, cursor top/bottom/middle - normal paragraph: going down, cursor bottom left. it might be simplest to let primitives always draw with bottom left corner (easiest for text), and let the iteration mechanism do the compensation. this allows primitive boxes to be just dimensions, no location. So we're stacking boxes.. The dialog goes like this: stacker: box1, how big are you box1: I'm .... (possibly recursively determined) stacker: box2, how big are you ... stacker: parent, I'm this big parent: ok, go here, and shrink/grow stacker: box1, go here and s/g... box1: here's my list of allocated children stacker: box2, go here and s/g ... box2: here's my list of allocated children stacker: parent, here's my list of allocated children ... From this it's clear that the input is a nested box structure, and the output is a collection of primitive boxes annotated with coordinates. So basically location is determined by size by first propagating all relative size info up, then calculating location and propagating location down. This allows all kinds of tricks to then meddle with box sizes. I.e. go here could be: go here, and scale this much. So where's the magic? It's at the composite box level: once a the size of a box is known it can be translated/scaled to fit the larger picture. Summary: - push/pop determined by fix/inherit for composite boxes - primitives should know corner (= iteration context) - all dimensions are equal in type (-> list) - composite box (stacker) knows: - tab size (either inherited or specified for all dims) - direction of box concatenation (2 x 3) - left|center|right or top|center|bottom for perpendicular alignment Entry: Simpler Date: Fri Apr 6 01:10:48 CEST 2012 Thinking some more, it's not necessary to put a sign on the direction if you let the stacker do the alignment. It really is quite abstract: just glue boxes together and when it's done, use this aggregate info to determine the adjust necessary to fit. This "normalization" step is essential. - all dimensions are symmetric (x,y,time,layer,...) - primitives are queried for default size - ... instructed with location (lower left corner) + scaling - composite box (stacker) knows: - direction (coordinate index, i.e, x,y,time,... - x,y dimension override - it doesn't know its own alignment! determined by parent from context - it knows the aligment perpendicular to the stacking direction Entry: Expression the algo Date: Fri Apr 6 11:10:39 CEST 2012 isn't easy due to the "bouncing" information flow. First thing I did was to abstract the 2-pass algo as: type BoxPlace = BoxCo -> Flt -> [(BoxCo, BoxCo)] boxLayout :: BoxAxis -> [Box BoxCo] -> (BoxCo, BoxPlace) Where firsst pass gives te bounding box and second pass takes coordinate and scale, and produces a collection of coordinate and width. ( Here the Box is actually not very abstract: it's just its width. ) So I almost have it, meaning the information flow seems corred. What is missing is proper layout in Pass2, I.e. justification: how to pack boxes: X X X X bottom X X X X X X top X X X X X X X X X X X X center X X X X X X X X boxLayout (BoxPrim co) = (co, cont) where cont coord scale = [(coord, co)] -- Fixme: not scaled! boxLayout (BoxComp axis bs) = (bbox, cont) where -- Pass 1: recurse down subboxes to gather size & placement functions. dims_conts = map boxLayout bs (dims, _) = unzip $ dims_conts -- Compute bounding box for all subboxes, stacking along axis. bbox = foldr bboxUpdate (BoxCo [0..]) dims bboxUpdate dim bbox = forAxis axis (\d b -> d + b) -- sum along stacking axis (\d b -> max d b) -- compute bounding box for others dim bbox -- Pass 2: Calculate placement/scaling of children from the -- location/scaling we get from parent. cont coord scale = concat locs where (_, locs) = mapAccumL distrib coord dims_conts distrib coord (dim, cont) = (coord', locs) where locs = cont coord scale coord' = boxCoSum coord dim -- FIXME: compute placing -- Top level driver (bounces bottom-up -> top-down recursion) boxLayoutTop b = locs where (bbox, cont) = boxLayout b locs = cont (BoxCo [0,0]) 1.0 p = BoxPrim $ BoxCo [1,2] test1 = boxLayoutTop $ p test2 = boxLayoutTop $ BoxComp 0 [p,p,p] Before doing that let's first introduce generality in the primitive, to make Box a true container. Entry: Next Date: Fri Apr 6 14:31:51 CEST 2012 Put some text on the screen. First is a BoxPrim instance: -- Text boxes data TextBox = TextBox FontInfo String instance BoxPrim TextBox where boxDim (TextBox f s) = BoxVec [w,h] where w = advance f s h = ascender f -- Render text box from data produced by layout algo. textBoxRender (BoxVec [x,y,_], scale, TextBox font string) = do trans2 x y scale1 scale render font string layoutRenderer box = do scale1 0.1 forM_ (boxLayoutTop box) $ \params -> GLUT.preservingMatrix $ textBoxRender params Entry: Evaluation Date: Fri Apr 6 15:33:54 CEST 2012 Some bugs: left/right alignment should not be from center point but from the edges of the bounding box. Problem is that toplevel should *set* bounding box, and this needs to be propagated down. This seems to work well. Entry: Weird bug Date: Fri Apr 6 17:32:48 CEST 2012 -- WRONG boundingBox axis dims = foldr bboxUpdate (BoxVec [0..]) dims where bboxUpdate dim bbox = zipWithAxis axis (\d b -> d + b) -- sum along stacking axis (\d b -> max d b) -- compute bounding box for others dim bbox -- RIGHT boundingBox axis dims = foldr1 bboxUpdate dims where bboxUpdate dim bbox = zipWithAxis axis (\d b -> d + b) -- sum along stacking axis (\d b -> max d b) -- compute bounding box for others dim bbox Is this another one of those weird thread bugs? Entry: Layout problem Date: Fri Apr 6 17:51:32 CEST 2012 So there's a bug that will give a parent-size-adjusted bounding box to a child, but performs justification based on the size of the original box. It seems there is a choice to make: Ether .. - Don't align and leave alignment to the child box, in which case a size-adjusted box can be passed to child. - Do align, and pass the original bounding box. If child is a composite box *along the same axis* it can do its own alignment. Otherwise it needs to be fixed and placed by parent. Entry: Missing algiment specification Date: Fri Apr 6 19:23:33 CEST 2012 I cant seem to express to do the followign alignment with testBox4: testBox4 f = stanza grouping [stanza left [text f "eyes", text f "and ears", text f "and nose" ], stanza center [text f "wide"], stanza right [text f "open"], stanza center [text f "wide"], stanza left [text f "eyes"] ] to put the grouping block centered inside the square. Entry: Next Date: Fri Apr 6 19:29:24 CEST 2012 Let's start with some animations: - Letters/words appear one by one. - Some words scale with time This requires some creative use of boxes + tests if current implementation is good enough. Also requires a way to organize words from left to right. For the latter, the monadic loop can be used if the lines are reversed for dim 1. -> fixed in forBoxM. To get a list of all words: allWords box = s where (_, s) = runState (forBoxM_ box process) [] process (TextBox _ text _ _) = modify $ (++ [text]) Or more cleanly using Writer instead of State: allWords box = s where (_, s) = runWriter (forBoxM_ box process) process (TextBox _ text _ _) = tell [text] Or with the monkey operator: allWords box = s where (_, s) = runWriter $ forBoxM_ box (tell . (:[]) . boxText) Entry: Next Date: Sat Apr 7 20:36:31 CEST 2012 Spent the whole day messing with Traversable / Foldable. While this was great fun and I learned a lot, there's work to be done if we want to get anywhere.. So what's next? We have (apart from some bugs) : - layout - text sequencing Maybe it's time to type in the whole poem and see if the basic structure works out. Meaning that the layout can be expressed and the text sequencing works. Entry: Effects Date: Sun Apr 8 00:09:48 CEST 2012 - growing words: just let them go out of their box Entry: The TextBox state Date: Sun Apr 8 14:49:43 CEST 2012 Now it starts to get interesting. How to keep constants separate from state? I.e. there needs to be an update function for TextBox animations which updates the associated state. What I'm looking for is a kind of shared context that's accessible to all TextBoxes. Note that it doesn't really matter to some extent whether computations happen in the render thread or in the state update thread. Entry: Timeline Date: Sun Apr 8 15:30:19 CEST 2012 18th: start setup (also PC) 27th: start exhibition - picture is important! - interaction also to make it interesting - audio -> volume influence word size or some other attribute - transitions Entry: Language should be monad to be able to load stuff into a context Date: Sun Apr 8 15:48:05 CEST 2012 language should be monad! Entry: Typeclass monad Date: Sun Apr 8 17:12:47 CEST 2012 Problem is that clauses like this give inference problems: grouping :: align left :: align center :: align right :: align But I'd like to keep attributes abstract. Let's just use strings for now. So I tried that and there were still errors. Turns out there were syntax errors that didn cause any type inference errors. Inference takes long, since manual annotation makes it compile a lot faster. Entry: NEXT: Date: Sun Apr 8 17:49:57 CEST 2012 State.. What's state, how to represent it. Everything can go in TextBoxParams though. Box -> list of TextBox This is evaluated for every frame, meaning we can update the layout (i.e. sizes) per frame. However, some extra state is necessary next to Box to store global state. Entry: Animations Date: Sun Apr 8 18:17:03 CEST 2012 One abstraction that doesn't sit right is the animation state machine. This really should be: update :: (e,s) -> m (o,s) render :: (e,o,s) -> IO () The idea is that "render" is dumb, except for data structures that really are just about rendering, and 'o' is a script that's only used between update and render, mostly to keep most the logic pure and the rendering in the IO monad. The following, which is used right now, of course can embed the above, but seems a bit raw. update :: s -> m s render :: s -> IO (s) where m is the render context monad (state and environment). Entry: Next. Date: Sun Apr 8 22:47:44 CEST 2012 I lost momentum. Next: pictures & transitions. The current frame is always a transition between 2 frames (or 3?). How to specify? What we need is just a way to store parameters to derive the rendering params for the individual frames. For now this is just intensity. So what is this? - evolution over time of intensity (and possibly other params later) - a decision function to switch to the next frame From the point of rendering, there are only transition functions. They look like this: 0->1->1->0 So there are 3 phases: fade in, presence, fade out. During transition, 2 frames are active. During presence only one. This needs a state machine and a way to specify the queue points. Transition = Transition Frame Frame = Presence Frame A frame should contain its lifetime. Entry: Managing this.. Date: Mon Apr 9 12:41:55 CEST 2012 2 hours today, what to do? all next steps require a bit of effort. except maybe the pictures, so let's do that first. -> Linked image rendering and boxes. Time to get the transitions going to be able to put the animations in there. For transitions there are 2 parts: rendering a single time span + performing state space switches. Probably best to do the rendering first. Entry: Data context Date: Tue Apr 10 11:03:19 CEST 2012 The core problem in this program is management of locality of information. How far-reaching is the effect of a parameter? This seems to be more difficult to manage in Haskell because it's not hackable: graphs are harder to use. In an imperative program it would be simple: just ask parent. Maybe that's the whole thing: i shouldn't isolate children so much, just use zippers so leaf processors *can* search up the tree? Entry: Scale it outside the box Date: Tue Apr 10 11:06:40 CEST 2012 This is a "breaking" effect: relative to the box used in layout, color outside the lines.. Entry: Weaving sequential read Date: Tue Apr 10 11:11:44 CEST 2012 I need a weaver that takes care of the linear parameters next to the layout. Just the linear progression of text. Problems: - currently columns are used for rendering R|L alignments: this needs to weave per line, across columns. how to specify? - attributes: where are they stored? they need to arrive at the renderer next to TextBox instance.. Entry: Maybe matrix needs to be the primitive? Date: Tue Apr 10 13:21:37 CEST 2012 ... with hbox and vbox special cases? This way it will be trivial to do the left-to-right weaving. Is this a big change? Is it necessary? It shouldn't be too hard actually. Instead of bboxing in one direction, it goes over 2. Which can be done by doing them separately (one H, one V) and combining them. ( Considering my current state of lack of concentration I think it's best to skip this one. At first sight it does seem to be the "right" approach, i.e. more elegant, but the problem at hand can probably be fixed in another way. ) Entry: Todo Date: Thu Apr 12 12:11:05 CEST 2012 - solve layout vs. read direction problem -> type class instance or matrix layout ????? - animation parameters -> already have timer ramp after transition. what else? - out-of-box rendering also a hack because pinning doesn't work.. +- OK: could use some tuning Entry: Matrix layout Date: Thu Apr 12 16:20:13 CEST 2012 Looks like this is an essential part. Previous H/V cases reduce to it. However, it fixes 2D layout.. or not? Maybe it generalizes? Let's try. Algo notes: - Previous algo had bug: it did not solve the problem of perfect subdivision, i.e. it performs centering for clients in one direction but not the other: that's left to parent. - Bounding boxes: this needs a cross approach: at any cell in the matrix, cell width comes from bounding boxes of column, cell height from bounding boxes of rows, so for e.g. 3x3 matrix there are 6 params: 3 cols, 3 rows. What this needs is primitives for nested bounding boxes, fully general. Entry: Generic box layout: map/fold madness Date: Thu Apr 12 16:58:11 CEST 2012 After playing with this a bit it seems simplest to do it in pieces. The compositions of maps and folds and lifting becomes unmanagable after a while. Representing matrices as [[a]] maybe is not the best approach either.. First problem: collapse columns or rows. First degree of freedom is to collect results as [[a]] or [a]. The conclusion I came to is to: - limit folds to inner level, and just use lifting to obtain a n -> n-1 tensor operation. - use transposition for other ops. It seems simpler to just work directly with indices and transpose operations without bothering with mapping. So, to not waste too much time: the 2D case seems simple, as it just needs inner fold and transpose. For 3D an higher all coordinate permutations (generalized transpositons) need to be parameterized. I don't see how to do that in a generic way so lets skip it. - transpose: import Data.List - inner fold: foldri f = map $ foldr f foldri1 f = map $ foldr1 f m = [[11,12,13],[21,22,23],[31,32,33]] t1 = (foldr1 max) m t2 = (foldr1 max . transpose) m - lifting max for bounding boxes -- Map functions over nth component of list liftC1 f n as = f (as !! n) liftC2 f n as bs = f (as !! n) (bs !! n) - cross product cross f xs ys = map fy ys where fy y = map (\x -> f x y) xs -- cross f xs ys = map (\y -> map (\x -> f x y) xs) ys tx = cross (+) [1,2,3] [10,20,30] - mapMatrix mapMatrix f = map (map f) Entry: Effects Date: Thu Apr 12 18:09:13 CEST 2012 - fade out older words (scale or color) Entry: Stick backup Date: Sat Apr 14 14:02:10 CEST 2012 mount /vol/hpstick ; darcs push -a /vol/hpstick/darcs/hgl ; umount /vol/hpstick Entry: Debug printing Date: Sat Apr 14 17:01:25 CEST 2012 ??? -> check later online Entry: Passing parent box Date: Sat Apr 14 17:55:28 CEST 2012 How to properly pass on box inherits? Problem: given cell widths/heights, apply some stretching in case there are AlignInherit cells. Simplest approach seems to be to 1. compute the leftover 2. count nb of inherits 3. give each inherit part of the leftover (-> later: use "badness" weighting) Edit: it seems to work better to have inherit on all nodes. Think about why this pops up. Entry: Images Date: Sun Apr 15 09:32:56 EDT 2012 Next: - reverse video OK - fade to white OK - images: how to link to spec? Entry: Image animation Date: Sun Apr 15 11:04:04 EDT 2012 The layout language should produce something more than just text. How to incorporate? Probably simplest to just have boxes with background images and some extra render parameters. Let's introduce a layer box. Ok, got ImageBox too. Next: use parent-provided bbox. TODO: textBoxRender needs additional adjusted box argument so we can scale image. DONE Next: - state monad for current image in Layout instance. - "growing" animation + others - check specs again Entry: Animations Date: Mon Apr 16 07:43:39 EDT 2012 I'm missing some insight. It seems that the types are too concrete: there is not enough abstraction to hide the actual form of animations. I probably just need no-fuss mutable state at this point. See [1]. Some overview of the TextBox animation. 1. TextBox is only one of the leaf nodes: names should change to reflect this. (TextBox.hs -> BoxAnim.hs) 2. Each leaf node has an associated read-only struct of render parameters. [1] entry://../compsci/20120416-081957 Entry: Renderparameters Date: Mon Apr 16 10:15:02 EDT 2012 The real problem is to get the information to the correct place: it's a routing problem.. What I want is some kind of context. How to go about that? Means that the monad in the Layout instance for BoxAnim should be a combination of Writer and Reader. In which order? This should be done in a separate pass, since the specification language is not monadic for nesting document structures. It gets complicated.. Let's do it like this: all parameters are environment variables. This means TextBox doesn't need to contain these, but they are contained in the iteration itself. (Use forM with a Reader monad). What about this: make Box an applicative functor such that we can make one tree of data and one of parameters. It's kind of neat, but I'm losing track of things quite fast.. 1. Input: tree of boxes with "environment" and "layout" nodes. 2. Layout nodes perform placing of leaf nodes 3. Environment nodes provide hierarchical context to leaf nodes The reason to make Box an applicative functor is to be able to have a tree of "animation specification data" and a tree of "animation state data". Making box an Applicative functor doesn't seem possible because it needs to throw away information: we can't combine 2 trees if they have different BoxMatrix params. Even more obvious is that trees can have different structures in which case this doesn't work at all! appBox (BoxPrim f) (BoxPrim a) = BoxPrim $ f a appBox (BoxLayers fs) (BoxLayers as) = BoxLayers $ zipWith appBox fs as appBox (BoxMatrix ax ay fs) (BoxMatrix ax' ay' as) = ... ? A different approach is needed. Probably best expressed in the monad used for "compiling" the tree inside the state update method. Entry: Reverting bad edit Date: Mon Apr 16 10:49:26 EDT 2012 tom@zoo:~/hgl$ darcs wh hunk ./Box.hs 229 + hunk ./Box.hs 238 + + hunk ./Box.hs 248 + [_$_] hunk ./BoxAnim.hs 33 -data TextParams = TextParams [_$_] - Int {- Nb of letters to show -} - Double {- Time -} - (Int, Float) {- Corner (ccw,0=ll) + out-of-box scaling -} - - deriving Show +data TextBoxParams = TextParams [_$_] + Int {- Nb of letters to show -} + Double {- Time -} + (Int, Float) {- Corner (ccw,0=ll) + out-of-box scaling -} + deriving Show hunk ./BoxAnim.hs 39 -data TextBox = DebugBox BoxDim - | TextBox { - textBoxFont :: FontInfo, [_$_] - textBoxString :: String, [_$_] - textBoxScale :: (Float, Float), [_$_] - textBoxBBox :: (Maybe (Float, Float)), [_$_] - textBoxParams :: TextParams - } - | ImageBox BGImage + +data TextBoxSpec = TextBoxSpec { + textBoxFont :: Either FontInfo (FontInfoCompiled, Float, Float), + textBoxString :: String, [_$_] + textBoxScale :: (Float, Float) + } + +data BoxAnim = DebugBox BoxDim + | TextBox TextBoxSpec -- from source file + (Maybe TextBoxParams) -- compiled from context + | ImageBox BGImage BoxDim hunk ./BoxAnim.hs 52 -instance BoxPrim TextBox where +instance BoxPrim BoxAnim where hunk ./BoxAnim.hs 54 - boxDim (TextBox _ _ (sw, sh) (Just (w, h)) _) = BoxVec [sw*w,sh*h] + boxDim (TextBox (Right (_,w,h)) _ (sw, sh)) = BoxVec [sw*w,sh*h] + boxDim (ImageBox _ dim) = dim hunk ./BoxAnim.hs 59 -data FontInfo = FontInfo (Either (String, Int) -- not initialized - (Ptr Font_Opaque, Float)) -- initialized +data FontInfo = FontInfo String Int -- not initialized +data FontInfoCompiled = FontInfoCompiled (Ptr Font_Opaque) Float hunk ./BoxAnim.hs 117 -textBoxRender (loc@(BoxVec (x:y:_)), +renderBoxAnim (loc@(BoxVec (x:y:_)), hunk ./BoxAnim.hs 132 -textBoxRender (loc, dim', DebugBox dim) = do +renderBoxAnim (loc, dim', DebugBox dim) = do hunk ./BoxAnim.hs 137 -textBoxRender (loc, dim', ImageBox img) = +renderBoxAnim (loc, dim', ImageBox img dim) = hunk ./BoxAnim.hs 183 - update img@(ImageBox _) = return img + update img@(ImageBox _ _) = return img hunk ./BoxAnim.hs 209 -renderBoxAnim (context, state, script) = do +renderBoxAnims (context, state, script) = do hunk ./BoxAnim.hs 212 - \params -> GLUT.preservingMatrix $ textBoxRender params + \params -> GLUT.preservingMatrix $ renderBoxAnim params hunk ./BoxAnim.hs 219 -boxImage file = BoxPrim $ ImageBox $ BGImage file Nothing +boxImage file dim = BoxPrim $ ImageBox (BGImage file Nothing) (BoxVec dim) +boxCenter el = BoxMatrix [BoxAlignFrac 0.5] [BoxAlignFrac 0.5] [[el]] hunk ./BoxAnim.hs 222 -type BT = Box TextBox +type BT = Box BoxAnim hunk ./BoxAnim.hs 225 + expand corner el = el + [_$_] hunk ./BoxAnim.hs 243 - + [_$_] + matrix2 aw ah mtx = BoxMatrix [_$_] + aw ah + (reverse mtx) + [_$_] hunk ./BoxAnim.hs 257 - frame el = tell [BoxLayers [el, boxImage "flag.png"]] - -instance Show (TextBox) where + frame el = tell [BoxLayers [el, boxCenter $ boxImage "flag.png" [40,30]]] + [_$_] +instance Show (BoxAnim) where hunk ./BoxAnim.hs 291 -compileTextBox (_, fonts) (TextBox font@(FontInfo (Left (fontFile, _))) text scale _ params) = do +compileBoxAnim (_, fonts) (TextBox font@(FontInfo (Left (fontFile, _))) text scale _ params) = do hunk ./BoxAnim.hs 297 -compileTextBox (texs, _) (ImageBox img@(BGImage fileName _)) = - ImageBox <$> cacheCompile texs uploadTextureRGB fileName img +compileBoxAnim (texs, _) (ImageBox img@(BGImage fileName _) dim) = + flip ImageBox dim <$> cacheCompile texs uploadTextureRGB fileName img hunk ./BoxAnim.hs 301 -compileBoxAnim caches box = forM box $ compileTextBox caches +compileBoxAnims caches box = forM box $ compileBoxAnim caches hunk ./BoxAnim.hs 310 - !frames <- forM (execWriter poem) (compileBoxAnim (textures, fonts)) - return $ PrimAnim updateBoxAnim renderBoxAnim (initBoxAnimState frames) + frames <- forM (execWriter poem) (compileBoxAnims (textures, fonts)) + return $ PrimAnim updateBoxAnim renderBoxAnims (initBoxAnimState frames) hunk ./Poem.hs 16 +import Prelude hiding (Float) +import qualified Graphics.UI.GLUT as GLUT +type Float = GLUT.GLfloat hunk ./Poem.hs 21 + hunk ./Poem.hs 28 + [_$_] + -- Pure part [_$_] hunk ./Poem.hs 32 - [_$_] hunk ./Poem.hs 36 + matrix2 :: [opts] -> [opts] -> [[el]] -> el hunk ./Poem.hs 43 + expand :: (Float, Float) -> el -> el + [_$_] + -- Imperative part hunk ./Poem.hs 48 - hunk ./Poem.hs 81 - [text f "within the ", text f "1st"], + [text f "within the ", expand (0,1) $ text f "1st"], Entry: Next Date: Mon Apr 16 10:51:11 EDT 2012 Datastructure organization is not very good, but let's not waste too much time on this yet. Basic problem is that many structures are in a couple of different states: 1. Initial specification 2. Some patched info according to context Here 2. is i.e. font loading, image loading, and context-dependent BoxAnim parameter updates. Most are embedded in Either / Maybe. Entry: Reader monad Date: Mon Apr 16 19:30:00 CEST 2012 So combining reader and state is quite trivial. However, it doesn't solve anything since forM only visits leaf nodes, not hierarchical nodes. This needs a special-purpose traversal function that is tied to the environment monad. Entry: Simpler approach Date: Mon Apr 16 21:19:08 CEST 2012 Let's just add string attributes, and clean it up later. Just adding an extra datatype for Attrib instead. Anyways. I'm taking the wrong approach. I miss the globally accessible pool of parameters... My mind doesn't really agree with this need to specify dataflow upfront. I need some ad-hoc patching! What's the problem really? Get parameter evolution to the correct place, and make it possible to define events in terms of each other. I.e. the time evolution of a zoom depends on when exactly a word appears on the screen. How to make such a dependency obvious without using state machines? Wait.. I have a knot tying mechanism so at least some things can be expressed quite explicitly. What I need is (a collection of) segmented curves, and have them produce parameter values. This can go straight into the Layout language. Let's start with a piecewize linear curve. Done. Once the parameters get to the right place it can go pretty fast.. I need a way to create parameters, link them to the correct thing, and define them as a curve. How to get at things like the time of the appearance of a certain word? Maybe this should work the other way around, set the rate from another parameter? So what is needed is a monad that can produce a computation that can be run in the context of an evaluated / placed box. Entry: Params Date: Tue Apr 17 07:08:49 EDT 2012 How to get access to the time at which a certain word appears, or inversely, how to time the appearance explicitly? This requires 2 views that are somewhat intertwined: - a Box structure that influences placement, influenced by parameters - a linear structure (already placed) that influences parameters As mentioned in previous post, it seems that knot-tying is going to be the right approach. But how? Some ideas - Text should be annotated by continuation = a function to call to perform the chaining. - Text should be annotated by an "activation" event, which creates a function. - Instead of rendering text into a list, can we render it into another kind of monoid/applicative? (or just a zip..) - The only input to the parameter network is time (for now). All the rest is hard-coded? Parameterization is a map of time -> param, but what is possible is that these maps are inter-related. Practically, following the last remark, I need a function than maps time (start of frame?) to the number of characters to display in a TextBox. This can either operate on the original Box format, or the finished layout. Let's pick the latter: building a render structure is then a zip. maxChar = pwlEval curve t Entry: New Principle Date: Tue Apr 17 07:36:36 EDT 2012 Current guideline: curves (functions) and lists + zipping are easier to work with than state machines. This is just a "transposed" view of state, keeping real state (unfolding/mapAccum) as local as possible. For now, seems to work well... Entry: Shifting coordinate system Date: Tue Apr 17 08:08:58 EDT 2012 Origin will now be top left: since we're only using images and text which both use that system, it makes a lot more sense to fix it once and forget about it.. It's not that simple. FTGL also seems to rely on the standard lower-left corner approach. Probably better to stick to standardizing all traversals, including the "list of placed boxes". Entry: Per frame / per box parameters Date: Tue Apr 17 08:39:23 EDT 2012 Next step: allow for per frame and per box parameters. The typing curve is per frame so let's fix that first. Point of insertion is the "frame" function. OK, typing curve is pushed to the "frame" function. Next problem: how to make it depend on the text? I.e. type first few words slowly, then fast, ... Next: the typing should trigger events, or at least, the "character analys" should map text to times. chars -> typing curve -> event times -> other curves Next subprob: merge a list of word timings to produce a typing curve. Entry: Meter Date: Tue Apr 17 10:25:47 EDT 2012 FIXME: Maybe use "-" to indicate syllables? Entry: Reading Line Date: Tue Apr 17 11:03:36 EDT 2012 The idea is that the reading line provides local time coordinates to BoxAnim primitives. This should be enough to "trigger" animations based on reading/typing progress, and also to abstract the reading timeline at one point, to possibly replace it with real-time input. Practically: readingCurve -> [BoxAnim] -> [readingCurve] The core element is a segmented reading curve. This requires solving the curve, which is +- trivial in a state machine (just eval and check if we've reached a border). However, we know the curve is monotone so it's possible to solve it using bisection[1]. However, it might be possible to avoid solving by starting from meter. It should be possible to define a curve based on meter and curve segment. Roadmap: - each TextBox is assocated to a single duration. currection: list of durations since we might want to do syllables. - Maybe Time: Nothing is past (this makes everything causal!) and Just is future. Depending on the TextBox durations, map current time to this structure. [1] http://en.wikipedia.org/wiki/Bisection_method Entry: Next Date: Tue Apr 17 12:09:54 EDT 2012 - allow note + rest to be specified separately (last element in list could be rest/pause). TODO - map attributes to animations +- DONE Entry: Bullet points Date: Tue Apr 17 16:16:33 EDT 2012 It's probably best to make bullet points part of a single frame, just by adding a delay attribute to the printing. I.e. Bullet 2 5, where 2 is nb of characters to print in first pass, and 5 is the nb of seconds to wait for the rest. Entry: Multisampling Date: Tue Apr 17 18:57:39 EDT 2012 It would be nice to be able to use multisampling, but it looks like GLUT relies on the old GLX_SAMPLE_SGIS which is not supported on my card, and not the newer ARB_multisample (GL_ARB_multisample, GLX_ARB_multisample, WGL_ARB_multisample) [1]. There is a patch in GLUT[2] but this seems to be not so old yet, so maybe not yet in my version? Hmm.. there's also a difference between freeglut in debian, and [2] it seems[3]. This looks like a can of worms. Probably best to not use GLUT at all, though that will put us back a bit. Let's just live with it for a bit. Maybe full screen AA can be used on the nvidia? Yep, 4x oversampling seems to solve most of the problems. 16x is already too much to ask from the GPU. Should not forget to permanently set this; seems to reset. Ah, stored in ~/.nvidia-settings-rc 0/FSAA=5 [1] http://www.opengl.org/registry/specs/ARB/multisample.txt [2] http://www.mail-archive.com/mesa-commit@lists.freedesktop.org/msg21456.html [3] http://www.mail-archive.com/mesa-commit@lists.freedesktop.org/msg21456.html Entry: Next Date: Tue Apr 17 20:34:28 EDT 2012 - tuning - transitions - images - "explode" Entry: Getting rid of GLUT Date: Wed Apr 18 07:26:20 EDT 2012 It was nice to get started, but it's getting too limited. +- show stopper is lack of support for GLX_ARB_multisample in freeglut. So I see GLEW[1] and GLEE[2] mentioned. Which would be best? Both are extension managers, maybe not what I need. Maybe GLFW[3] is what I'm really looking for + Haskell bindings[4]. ( Not doing this now; would take too much time for little benefit. It works fine on the Revo/NVIDIA.. ) [1] http://glew.sourceforge.net/ [2] http://www.opengl.org/sdk/libs/GLee/ [3] http://www.glfw.org/ [4] http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GLFW Entry: Getting started Date: Wed Apr 18 07:51:41 EDT 2012 Trouble getting started today; a bit bored with it.. How to make it interesting? Figure out Layers. Does it make sense to treat layers as another matrix dim? No, that's not actually what's happening: not 3D cells: 1D cells of 2D cells. This needs a separate bounding box algo. Entry: Next Date: Wed Apr 18 08:59:50 EDT 2012 - automatic advance - image effects - transitions cont Some transitions need some work to fit them in the current approach. Entry: Next Date: Sat Apr 21 09:24:05 EDT 2012 - automatic advance - image effects Entry: Transitions: structural change Date: Sat Apr 21 13:32:04 EDT 2012 Will need some way to have TextBox survive between parts. How to do that? Entry: Transitions: use old time scales Date: Sun Apr 22 10:05:15 EDT 2012 I have something that doesn't fit in the current framework: some parts run over multiple frames, keeping the original (old) time frame. How to fit this in? Maybe transitions should not be layout, but truly IIR state updates. A quick hack could be to just keep track of a list of time scales? Maybe, but this also needs a list of previous frames params (index + t0). Turn the Maybe frame into a list of frames. Entry: Lifetime and fade Date: Sun Apr 22 12:22:18 EDT 2012 Both are different, or not? Let's first introduce lifetime. What about this. Lifetime 0 = no fade, 0 1 = fade 1 0 1 2 = fade 2 Won't work: need to distinguish between fade out and lifetime. Maybe this decision needs to be made in the TextBox renderer. Let's first move it, then add annotation to indicate whether to fade or not, i.e. use infinite time constant for last frame? begin, end, 1/timeCo Most of it done, just that the per frame timeframes are not there: fadeout uses the original time frame, not the last transition. Structural problem.. this sucks. The problem is that boxes supposidly have only one time scale, but that's not true, they have multiple. Entry: Time scales Date: Sun Apr 22 15:05:16 EDT 2012 Box timescale, necessary for animation: never changes. Fadeout timescale = independent fo box time scale, depends on frame. I'm loosing track of it - is getting too complicated. The first timescale is simple, the second hower is hard to get at the right spot. Ok, after fixing stupid bug (zipwith unused 2-element list!) it seems to work now, except that background images should always be drawn first. Entry: Next Date: Sun Apr 22 17:33:00 EDT 2012 - automatic transitions OK (+-) - image transitions - faster bullets Entry: Overview Date: Mon Apr 23 09:35:53 EDT 2012 It's a patch-up. In there is hidden a simple way to do this, but it's definitely not coming out very well :) It could use a bit of refactoring. What surprises me is that there is no "simple" approach to this: there's a lot of special-casing. This could probably use FRP.. I'm stuck between parametric curves and state machines.. It would be a lot simpler if this would be event-driven, where reactions to events can cause other events, and the binding of events would be in a monad. Simply "connect". Also, the box matrix approach works well but needs some more tuning: especially inherit: when and when not? It would also be nice to make this dependent. It really itches.. There's some beatiful approach that would allow compilation of FRP networks to state machines. How to do that? Entry: Harddisk problems? Date: Mon Apr 23 10:54:19 EDT 2012 From syslog: Apr 23 10:39:30 revo kernel: [2151375.072061] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen Apr 23 10:39:30 revo kernel: [2151375.072071] ata1.00: failed command: FLUSH CACHE EXT Apr 23 10:39:30 revo kernel: [2151375.072085] ata1.00: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 0 Apr 23 10:39:30 revo kernel: [2151375.072088] res 40/00:00:00:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout) Apr 23 10:39:30 revo kernel: [2151375.072094] ata1.00: status: { DRDY } Apr 23 10:39:30 revo kernel: [2151375.072105] ata1: hard resetting link Apr 23 10:39:35 revo kernel: [2151380.432028] ata1: link is slow to respond, please be patient (ready=0) Apr 23 10:39:40 revo kernel: [2151385.080031] ata1: COMRESET failed (errno=-16) Apr 23 10:39:40 revo kernel: [2151385.080042] ata1: hard resetting link Apr 23 10:39:45 revo kernel: [2151390.440030] ata1: link is slow to respond, please be patient (ready=0) Apr 23 10:39:50 revo kernel: [2151395.088028] ata1: COMRESET failed (errno=-16) Apr 23 10:39:50 revo kernel: [2151395.088039] ata1: hard resetting link Apr 23 10:39:55 revo kernel: [2151400.448029] ata1: link is slow to respond, please be patient (ready=0) Apr 23 10:40:25 revo kernel: [2151430.128029] ata1: COMRESET failed (errno=-16) From dmesg: [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Linux version 3.0.0-15-generic (buildd@zirconium) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #26-Ubuntu SMP Fri Jan 20 15:59:53 UTC 2012 (Ubuntu 3.0.0-15.26-generic 3.0.13) [ 0.000000] KERNEL supported cpus: [ 0.000000] Intel GenuineIntel [ 0.000000] AMD AuthenticAMD [ 0.000000] NSC Geode by NSC [ 0.000000] Cyrix CyrixInstead [ 0.000000] Centaur CentaurHauls [ 0.000000] Transmeta GenuineTMx86 [ 0.000000] Transmeta TransmetaCPU [ 0.000000] UMC UMC UMC UMC [ 0.000000] BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: 0000000000000000 - 000000000009e000 (usable) [ 0.000000] BIOS-e820: 000000000009e000 - 00000000000a0000 (reserved) [ 0.000000] BIOS-e820: 00000000000e0000 - 0000000000100000 (reserved) [ 0.000000] BIOS-e820: 0000000000100000 - 000000007ff90000 (usable) [ 0.000000] BIOS-e820: 000000007ff90000 - 000000007ff9e000 (ACPI data) [ 0.000000] BIOS-e820: 000000007ff9e000 - 000000007ffe0000 (ACPI NVS) [ 0.000000] BIOS-e820: 000000007ffe0000 - 0000000080000000 (reserved) [ 0.000000] BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved) [ 0.000000] BIOS-e820: 00000000ffb00000 - 0000000100000000 (reserved) [ 0.000000] Notice: NX (Execute Disable) protection cannot be enabled in hardware: non-PAE kernel! [ 0.000000] NX (Execute Disable) protection: approximated by x86 segment limits [ 0.000000] DMI present. [ 0.000000] DMI: Acer Aspire R3700/TPDS05 R3700, BIOS P01-B0 06/16/2011 [ 0.000000] e820 update range: 0000000000000000 - 0000000000010000 (usable) ==> (reserved) [ 0.000000] e820 remove range: 00000000000a0000 - 0000000000100000 (usable) [ 0.000000] last_pfn = 0x7ff90 max_arch_pfn = 0x100000 [ 0.000000] MTRR default type: uncachable [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-CFFFF write-protect [ 0.000000] D0000-DFFFF uncachable [ 0.000000] E0000-EFFFF write-through [ 0.000000] F0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 000000000 mask F80000000 write-back [ 0.000000] 1 disabled [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106 [ 0.000000] found SMP MP-table at [c00ff780] ff780 [ 0.000000] initial memory mapped : 0 - 01c00000 [ 0.000000] Base memory trampoline at [c009a000] 9a000 size 16384 [ 0.000000] init_memory_mapping: 0000000000000000-00000000377fe000 [ 0.000000] 0000000000 - 0000400000 page 4k [ 0.000000] 0000400000 - 0037400000 page 2M [ 0.000000] 0037400000 - 00377fe000 page 4k [ 0.000000] kernel direct mapping tables up to 377fe000 @ 1bfb000-1c00000 [ 0.000000] RAMDISK: 365e8000 - 372ec000 [ 0.000000] ACPI: RSDP 000fabc0 00024 (v02 ACPIAM) [ 0.000000] ACPI: XSDT 7ff90100 00064 (v01 ACRSYS ACRPRDCT 20110616 MSFT 00000097) [ 0.000000] ACPI: FACP 7ff90290 000F4 (v04 061611 FACP1656 20110616 MSFT 00000097) [ 0.000000] ACPI: DSDT 7ff905c0 05A95 (v02 A42A1 A42A1023 00000001 INTL 20051117) [ 0.000000] ACPI: FACS 7ff9e000 00040 [ 0.000000] ACPI: APIC 7ff90390 0006C (v02 061611 APIC1656 20110616 MSFT 00000097) [ 0.000000] ACPI: MCFG 7ff90400 0003C (v01 061611 OEMMCFG 20110616 MSFT 00000097) [ 0.000000] ACPI: SLIC 7ff90440 00176 (v01 ACRSYS ACRPRDCT 20110616 MSFT 00000097) [ 0.000000] ACPI: OEMB 7ff9e040 00072 (v01 061611 OEMB1656 20110616 MSFT 00000097) [ 0.000000] ACPI: HPET 7ff9a5c0 00038 (v01 061611 OEMHPET 20110616 MSFT 00000097) [ 0.000000] ACPI: ASF! 7ff9a600 00099 (v32 ACRSYS I865PASF 00000001 INTL 20051117) [ 0.000000] ACPI: AWMI 7ff9e0c0 00236 (v01 061611 OEMB1656 20110616 MSFT 00000097) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] 1159MB HIGHMEM available. [ 0.000000] 887MB LOWMEM available. [ 0.000000] mapped low ram: 0 - 377fe000 [ 0.000000] low ram: 0 - 377fe000 [ 0.000000] Zone PFN ranges: [ 0.000000] DMA 0x00000010 -> 0x00001000 [ 0.000000] Normal 0x00001000 -> 0x000377fe [ 0.000000] HighMem 0x000377fe -> 0x0007ff90 [ 0.000000] Movable zone start PFN for each node [ 0.000000] early_node_map[2] active PFN ranges [ 0.000000] 0: 0x00000010 -> 0x0000009e [ 0.000000] 0: 0x00000100 -> 0x0007ff90 [ 0.000000] On node 0 totalpages: 524062 [ 0.000000] free_area_init_node: node 0, pgdat c17b5400, node_mem_map f55e8200 [ 0.000000] DMA zone: 32 pages used for memmap [ 0.000000] DMA zone: 0 pages reserved [ 0.000000] DMA zone: 3950 pages, LIFO batch:0 [ 0.000000] Normal zone: 1744 pages used for memmap [ 0.000000] Normal zone: 221486 pages, LIFO batch:31 [ 0.000000] HighMem zone: 2320 pages used for memmap [ 0.000000] HighMem zone: 294530 pages, LIFO batch:31 [ 0.000000] Using APIC driver default [ 0.000000] ACPI: PM-Timer IO Port: 0x808 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC (acpi_id[0x01] lapic_id[0x00] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x02] lapic_id[0x02] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x03] lapic_id[0x01] enabled) [ 0.000000] ACPI: LAPIC (acpi_id[0x04] lapic_id[0x03] enabled) [ 0.000000] ACPI: IOAPIC (id[0x04] address[0xfec00000] gsi_base[0]) [ 0.000000] IOAPIC[0]: apic_id 4, version 32, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ2 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] SMP: Allowing 4 CPUs, 0 hotplug CPUs [ 0.000000] nr_irqs_gsi: 40 [ 0.000000] PM: Registered nosave memory: 000000000009e000 - 00000000000a0000 [ 0.000000] PM: Registered nosave memory: 00000000000a0000 - 00000000000e0000 [ 0.000000] PM: Registered nosave memory: 00000000000e0000 - 0000000000100000 [ 0.000000] Allocating PCI resources starting at 80000000 (gap: 80000000:7ee00000) [ 0.000000] Booting paravirtualized kernel on bare hardware [ 0.000000] setup_percpu: NR_CPUS:8 nr_cpumask_bits:8 nr_cpu_ids:4 nr_node_ids:1 [ 0.000000] PERCPU: Embedded 12 pages/cpu @f5000000 s26240 r0 d22912 u1048576 [ 0.000000] pcpu-alloc: s26240 r0 d22912 u1048576 alloc=1*4194304 [ 0.000000] pcpu-alloc: [0] 0 1 2 3 [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 519966 [ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-3.0.0-15-generic root=UUID=69db552d-6c01-4b52-851c-0ea34100fdee ro quiet splash vt.handoff=7 [ 0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes) [ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes) [ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes) [ 0.000000] Initializing CPU#0 [ 0.000000] allocated 8386560 bytes of page_cgroup [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Initializing HighMem for node 0 (000377fe:0007ff90) [ 0.000000] Memory: 2047748k/2096704k available (5336k kernel code, 48500k reserved, 2599k data, 696k init, 1187400k highmem) [ 0.000000] virtual kernel memory layout: [ 0.000000] fixmap : 0xfff16000 - 0xfffff000 ( 932 kB) [ 0.000000] pkmap : 0xff800000 - 0xffc00000 (4096 kB) [ 0.000000] vmalloc : 0xf7ffe000 - 0xff7fe000 ( 120 MB) [ 0.000000] lowmem : 0xc0000000 - 0xf77fe000 ( 887 MB) [ 0.000000] .init : 0xc17c1000 - 0xc186f000 ( 696 kB) [ 0.000000] .data : 0xc1536144 - 0xc17c0080 (2599 kB) [ 0.000000] .text : 0xc1000000 - 0xc1536144 (5336 kB) [ 0.000000] Checking if this processor honours the WP bit even in supervisor mode...Ok. [ 0.000000] SLUB: Genslabs=15, HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] Hierarchical RCU implementation. [ 0.000000] RCU dyntick-idle grace-period acceleration is enabled. [ 0.000000] NR_IRQS:2304 nr_irqs:712 16 [ 0.000000] CPU 0 irqstacks, hard=f440a000 soft=f440c000 [ 0.000000] Extended CMOS year: 2000 [ 0.000000] vt handoff: transparent VT on vt#7 [ 0.000000] Console: colour dummy device 80x25 [ 0.000000] console [tty0] enabled [ 0.000000] hpet clockevent registered [ 0.000000] Fast TSC calibration using PIT [ 0.000000] Detected 1795.720 MHz processor. [ 0.004005] Calibrating delay loop (skipped), value calculated using timer frequency.. 3591.44 BogoMIPS (lpj=7182880) [ 0.004016] pid_max: default: 32768 minimum: 301 [ 0.004062] Security Framework initialized [ 0.004094] AppArmor: AppArmor initialized [ 0.004098] Yama: becoming mindful. [ 0.004206] Mount-cache hash table entries: 512 [ 0.004448] Initializing cgroup subsys cpuacct [ 0.004462] Initializing cgroup subsys memory [ 0.004478] Initializing cgroup subsys devices [ 0.004483] Initializing cgroup subsys freezer [ 0.004489] Initializing cgroup subsys net_cls [ 0.004494] Initializing cgroup subsys blkio [ 0.004508] Initializing cgroup subsys perf_event [ 0.004560] CPU: Physical Processor ID: 0 [ 0.004566] CPU: Processor Core ID: 0 [ 0.004572] mce: CPU supports 5 MCE banks [ 0.004586] CPU0: Thermal monitoring enabled (TM1) [ 0.004594] using mwait in idle threads. [ 0.009730] ACPI: Core revision 20110413 [ 0.020025] ftrace: allocating 24882 entries in 49 pages [ 0.024093] Enabling APIC mode: Flat. Using 1 I/O APICs [ 0.024464] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1 [ 0.066061] CPU0: Intel(R) Atom(TM) CPU D525 @ 1.80GHz stepping 0a [ 0.068003] Performance Events: PEBS fmt0+, Atom events, Intel PMU driver. [ 0.068003] ... version: 3 [ 0.068003] ... bit width: 40 [ 0.068003] ... generic registers: 2 [ 0.068003] ... value mask: 000000ffffffffff [ 0.068003] ... max period: 000000007fffffff [ 0.068003] ... fixed-purpose events: 3 [ 0.068003] ... event mask: 0000000700000003 [ 0.068003] CPU 1 irqstacks, hard=f44b2000 soft=f44b4000 [ 0.068003] Booting Node 0, Processors #1 [ 0.068003] smpboot cpu 1: start_ip = 9a000 [ 0.008000] Initializing CPU#1 [ 0.008000] Disabled fast string operations [ 0.156183] CPU 2 irqstacks, hard=f44de000 soft=f44e0000 [ 0.156189] #2 [ 0.156193] smpboot cpu 2: start_ip = 9a000 [ 0.008000] Initializing CPU#2 [ 0.008000] Disabled fast string operations [ 0.248228] CPU 3 irqstacks, hard=f44ea000 soft=f44ec000 [ 0.248234] #3 Ok. [ 0.248238] smpboot cpu 3: start_ip = 9a000 [ 0.008000] Initializing CPU#3 [ 0.008000] Disabled fast string operations [ 0.340020] TSC synchronization [CPU#0 -> CPU#3]: [ 0.340020] Measured 54 cycles TSC warp between CPUs, turning off TSC clock. [ 0.340020] Marking TSC unstable due to check_tsc_sync_source failed [ 0.340039] Brought up 4 CPUs [ 0.340044] Total of 4 processors activated (14364.49 BogoMIPS). [ 0.342022] devtmpfs: initialized [ 0.342022] PM: Registering ACPI NVS region at 7ff9e000 (270336 bytes) [ 0.347683] print_constraints: dummy: [ 0.347718] Time: 12:03:07 Date: 03/29/12 [ 0.347799] NET: Registered protocol family 16 [ 0.347821] Trying to unpack rootfs image as initramfs... [ 0.348139] EISA bus registered [ 0.348164] ACPI: bus type pci registered [ 0.348328] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.348337] PCI: not using MMCONFIG [ 0.348552] PCI: PCI BIOS revision 3.00 entry at 0xf0031, last bus=4 [ 0.348559] PCI: Using configuration type 1 for base access [ 0.351567] bio: create slab at 0 [ 0.354848] ACPI: EC: Look up EC in DSDT [ 0.359195] ACPI: Executed 1 blocks of module-level executable AML code [ 0.366977] ACPI: Interpreter enabled [ 0.366990] ACPI: (supports S0 S3 S4 S5) [ 0.367046] ACPI: Using IOAPIC for interrupt routing [ 0.367126] PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000) [ 0.372300] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources [ 0.372310] PCI: Using MMCONFIG for extended config space [ 0.388906] ACPI: No dock devices found. [ 0.388915] HEST: Table not found. [ 0.388925] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug [ 0.389624] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff]) [ 0.390249] pci_root PNP0A08:00: host bridge window [io 0x0000-0x0cf7] [ 0.390260] pci_root PNP0A08:00: host bridge window [io 0x0d00-0xffff] [ 0.390269] pci_root PNP0A08:00: host bridge window [mem 0x000a0000-0x000bffff] [ 0.390277] pci_root PNP0A08:00: host bridge window [mem 0x000d0000-0x000dffff] [ 0.390286] pci_root PNP0A08:00: host bridge window [mem 0x80000000-0xdfffffff] [ 0.390295] pci_root PNP0A08:00: host bridge window [mem 0xf0000000-0xfed8ffff] [ 0.390326] pci 0000:00:00.0: [8086:a000] type 0 class 0x000600 [ 0.390426] pci 0000:00:1b.0: [8086:27d8] type 0 class 0x000403 [ 0.390452] pci 0000:00:1b.0: reg 10: [mem 0xfeafc000-0xfeafffff 64bit] [ 0.390523] pci 0000:00:1b.0: PME# supported from D0 D3hot D3cold [ 0.390533] pci 0000:00:1b.0: PME# disabled [ 0.390565] pci 0000:00:1c.0: [8086:27d0] type 1 class 0x000604 [ 0.390637] pci 0000:00:1c.0: PME# supported from D0 D3hot D3cold [ 0.390646] pci 0000:00:1c.0: PME# disabled [ 0.390680] pci 0000:00:1c.2: [8086:27d4] type 1 class 0x000604 [ 0.390758] pci 0000:00:1c.2: PME# supported from D0 D3hot D3cold [ 0.390769] pci 0000:00:1c.2: PME# disabled [ 0.390807] pci 0000:00:1c.3: [8086:27d6] type 1 class 0x000604 [ 0.390882] pci 0000:00:1c.3: PME# supported from D0 D3hot D3cold [ 0.390891] pci 0000:00:1c.3: PME# disabled [ 0.390927] pci 0000:00:1d.0: [8086:27c8] type 0 class 0x000c03 [ 0.390979] pci 0000:00:1d.0: reg 20: [io 0xcc00-0xcc1f] [ 0.391023] pci 0000:00:1d.1: [8086:27c9] type 0 class 0x000c03 [ 0.391075] pci 0000:00:1d.1: reg 20: [io 0xc880-0xc89f] [ 0.391119] pci 0000:00:1d.2: [8086:27ca] type 0 class 0x000c03 [ 0.391170] pci 0000:00:1d.2: reg 20: [io 0xc800-0xc81f] [ 0.391214] pci 0000:00:1d.3: [8086:27cb] type 0 class 0x000c03 [ 0.391265] pci 0000:00:1d.3: reg 20: [io 0xc480-0xc49f] [ 0.391320] pci 0000:00:1d.7: [8086:27cc] type 0 class 0x000c03 [ 0.391348] pci 0000:00:1d.7: reg 10: [mem 0xfeafbc00-0xfeafbfff] [ 0.391433] pci 0000:00:1d.7: PME# supported from D0 D3hot D3cold [ 0.391443] pci 0000:00:1d.7: PME# disabled [ 0.391472] pci 0000:00:1e.0: [8086:2448] type 1 class 0x000604 [ 0.391555] pci 0000:00:1f.0: [8086:27bc] type 0 class 0x000601 [ 0.391653] pci 0000:00:1f.0: [Firmware Bug]: TigerPoint LPC.BM_STS cleared [ 0.391713] pci 0000:00:1f.2: [8086:27c1] type 0 class 0x000106 [ 0.391740] pci 0000:00:1f.2: reg 10: [io 0xb880-0xb887] [ 0.391755] pci 0000:00:1f.2: reg 14: [io 0xc400-0xc403] [ 0.391769] pci 0000:00:1f.2: reg 18: [io 0xc080-0xc087] [ 0.391784] pci 0000:00:1f.2: reg 1c: [io 0xc000-0xc003] [ 0.391799] pci 0000:00:1f.2: reg 20: [io 0xbc00-0xbc1f] [ 0.391814] pci 0000:00:1f.2: reg 24: [mem 0xfeafb800-0xfeafbbff] [ 0.391856] pci 0000:00:1f.2: PME# supported from D3hot [ 0.391866] pci 0000:00:1f.2: PME# disabled [ 0.391893] pci 0000:00:1f.3: [8086:27da] type 0 class 0x000c05 [ 0.391955] pci 0000:00:1f.3: reg 20: [io 0x0400-0x041f] [ 0.392099] pci 0000:01:00.0: [10de:0a64] type 0 class 0x000300 [ 0.392125] pci 0000:01:00.0: reg 10: [mem 0xfd000000-0xfdffffff] [ 0.392150] pci 0000:01:00.0: reg 14: [mem 0xd0000000-0xdfffffff 64bit pref] [ 0.392175] pci 0000:01:00.0: reg 1c: [mem 0xce000000-0xcfffffff 64bit pref] [ 0.392195] pci 0000:01:00.0: reg 24: [io 0xdc00-0xdc7f] [ 0.392213] pci 0000:01:00.0: reg 30: [mem 0xfcf80000-0xfcffffff pref] [ 0.392306] pci 0000:01:00.1: [10de:0be3] type 0 class 0x000403 [ 0.392333] pci 0000:01:00.1: reg 10: [mem 0xfcf7c000-0xfcf7ffff] [ 0.400081] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.400095] pci 0000:00:1c.0: bridge window [io 0xd000-0xdfff] [ 0.400106] pci 0000:00:1c.0: bridge window [mem 0xfcf00000-0xfdffffff] [ 0.400119] pci 0000:00:1c.0: bridge window [mem 0xce000000-0xdfffffff 64bit pref] [ 0.400206] pci 0000:02:00.0: [1814:3090] type 0 class 0x000280 [ 0.400234] pci 0000:02:00.0: reg 10: [mem 0xfebf0000-0xfebfffff] [ 0.408077] pci 0000:00:1c.2: PCI bridge to [bus 02-02] [ 0.408090] pci 0000:00:1c.2: bridge window [io 0xf000-0x0000] (disabled) [ 0.408102] pci 0000:00:1c.2: bridge window [mem 0xfeb00000-0xfebfffff] [ 0.408115] pci 0000:00:1c.2: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.408205] pci 0000:03:00.0: [10ec:8168] type 0 class 0x000200 [ 0.408236] pci 0000:03:00.0: reg 10: [io 0xe800-0xe8ff] [ 0.408276] pci 0000:03:00.0: reg 18: [mem 0xfbffb000-0xfbffbfff 64bit pref] [ 0.408302] pci 0000:03:00.0: reg 20: [mem 0xfbffc000-0xfbffffff 64bit pref] [ 0.408368] pci 0000:03:00.0: supports D1 D2 [ 0.408376] pci 0000:03:00.0: PME# supported from D0 D1 D2 D3hot D3cold [ 0.408387] pci 0000:03:00.0: PME# disabled [ 0.416081] pci 0000:00:1c.3: PCI bridge to [bus 03-03] [ 0.416095] pci 0000:00:1c.3: bridge window [io 0xe000-0xefff] [ 0.416105] pci 0000:00:1c.3: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.416119] pci 0000:00:1c.3: bridge window [mem 0xfbf00000-0xfbffffff 64bit pref] [ 0.416211] pci 0000:00:1e.0: PCI bridge to [bus 04-04] (subtractive decode) [ 0.416222] pci 0000:00:1e.0: bridge window [io 0xf000-0x0000] (disabled) [ 0.416232] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff] (disabled) [ 0.416245] pci 0000:00:1e.0: bridge window [mem 0xfff00000-0x000fffff pref] (disabled) [ 0.416256] pci 0000:00:1e.0: bridge window [io 0x0000-0x0cf7] (subtractive decode) [ 0.416265] pci 0000:00:1e.0: bridge window [io 0x0d00-0xffff] (subtractive decode) [ 0.416274] pci 0000:00:1e.0: bridge window [mem 0x000a0000-0x000bffff] (subtractive decode) [ 0.416283] pci 0000:00:1e.0: bridge window [mem 0x000d0000-0x000dffff] (subtractive decode) [ 0.416293] pci 0000:00:1e.0: bridge window [mem 0x80000000-0xdfffffff] (subtractive decode) [ 0.416303] pci 0000:00:1e.0: bridge window [mem 0xf0000000-0xfed8ffff] (subtractive decode) [ 0.416335] pci_bus 0000:00: on NUMA node 0 [ 0.416350] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT] [ 0.416591] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P1._PRT] [ 0.416748] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P4._PRT] [ 0.416858] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P6._PRT] [ 0.416968] ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.P0P7._PRT] [ 0.417506] pci0000:00: Requesting ACPI _OSC control (0x1d) [ 0.418199] pci0000:00: ACPI _OSC control (0x1d) granted [ 0.434812] ACPI: PCI Interrupt Link [LNKA] (IRQs 3 4 5 7 *10 11 12 14 15) [ 0.434972] ACPI: PCI Interrupt Link [LNKB] (IRQs 3 4 5 7 10 11 12 *14 15) [ 0.435142] ACPI: PCI Interrupt Link [LNKC] (IRQs 3 4 5 7 10 *11 12 14 15) [ 0.435293] ACPI: PCI Interrupt Link [LNKD] (IRQs 3 4 *5 7 10 11 12 14 15) [ 0.435445] ACPI: PCI Interrupt Link [LNKE] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.435601] ACPI: PCI Interrupt Link [LNKF] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.435767] ACPI: PCI Interrupt Link [LNKG] (IRQs 3 4 5 7 10 11 12 14 15) *0, disabled. [ 0.435924] ACPI: PCI Interrupt Link [LNKH] (IRQs 3 4 5 7 10 11 12 14 *15) [ 0.436243] vgaarb: device added: PCI:0000:01:00.0,decodes=io+mem,owns=io+mem,locks=none [ 0.436256] vgaarb: loaded [ 0.436261] vgaarb: bridge control possible 0000:01:00.0 [ 0.436900] SCSI subsystem initialized [ 0.437037] libata version 3.00 loaded. [ 0.437170] usbcore: registered new interface driver usbfs [ 0.437206] usbcore: registered new interface driver hub [ 0.437275] usbcore: registered new device driver usb [ 0.437555] PCI: Using ACPI for IRQ routing [ 0.437568] PCI: pci_cache_line_size set to 64 bytes [ 0.437688] reserve RAM buffer: 000000000009e000 - 000000000009ffff [ 0.437696] reserve RAM buffer: 000000007ff90000 - 000000007fffffff [ 0.437963] NetLabel: Initializing [ 0.437970] NetLabel: domain hash size = 128 [ 0.437975] NetLabel: protocols = UNLABELED CIPSOv4 [ 0.438002] NetLabel: unlabeled traffic allowed by default [ 0.438130] HPET: 3 timers in total, 0 timers will be used for per-cpu timer [ 0.438141] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0 [ 0.438155] hpet0: 3 comparators, 64-bit 14.318180 MHz counter [ 0.452111] Switching to clocksource hpet [ 0.455385] Switched to NOHz mode on CPU #0 [ 0.455489] Switched to NOHz mode on CPU #3 [ 0.455527] Switched to NOHz mode on CPU #1 [ 0.455537] Switched to NOHz mode on CPU #2 [ 0.470600] AppArmor: AppArmor Filesystem Enabled [ 0.470661] pnp: PnP ACPI init [ 0.470702] ACPI: bus type pnp registered [ 0.471035] pnp 00:00: [bus 00-ff] [ 0.471045] pnp 00:00: [io 0x0cf8-0x0cff] [ 0.471054] pnp 00:00: [io 0x0000-0x0cf7 window] [ 0.471062] pnp 00:00: [io 0x0d00-0xffff window] [ 0.471071] pnp 00:00: [mem 0x000a0000-0x000bffff window] [ 0.471080] pnp 00:00: [mem 0x000d0000-0x000dffff window] [ 0.471089] pnp 00:00: [mem 0x80000000-0xdfffffff window] [ 0.471097] pnp 00:00: [mem 0xf0000000-0xfed8ffff window] [ 0.471240] pnp 00:00: Plug and Play ACPI device, IDs PNP0a08 PNP0a03 (active) [ 0.471277] pnp 00:01: [mem 0xfed14000-0xfed19fff] [ 0.471285] pnp 00:01: [mem 0xfed90000-0xfed93fff] [ 0.471395] system 00:01: [mem 0xfed14000-0xfed19fff] has been reserved [ 0.471405] system 00:01: [mem 0xfed90000-0xfed93fff] has been reserved [ 0.471415] system 00:01: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.471518] pnp 00:02: [dma 4] [ 0.471526] pnp 00:02: [io 0x0000-0x000f] [ 0.471533] pnp 00:02: [io 0x0081-0x0083] [ 0.471540] pnp 00:02: [io 0x0087] [ 0.471546] pnp 00:02: [io 0x0089-0x008b] [ 0.471553] pnp 00:02: [io 0x008f] [ 0.471559] pnp 00:02: [io 0x00c0-0x00df] [ 0.471639] pnp 00:02: Plug and Play ACPI device, IDs PNP0200 (active) [ 0.471676] pnp 00:03: [io 0x0070-0x0071] [ 0.471696] pnp 00:03: [irq 8] [ 0.471768] pnp 00:03: Plug and Play ACPI device, IDs PNP0b00 (active) [ 0.471914] pnp 00:04: [io 0x0061] [ 0.471997] pnp 00:04: Plug and Play ACPI device, IDs PNP0800 (active) [ 0.472057] pnp 00:05: [io 0x00f0-0x00ff] [ 0.472074] pnp 00:05: [irq 13] [ 0.472149] pnp 00:05: Plug and Play ACPI device, IDs PNP0c04 (active) [ 0.473467] pnp 00:06: [io 0x0000-0xffffffff disabled] [ 0.473476] pnp 00:06: [io 0x0a00-0x0a0f] [ 0.473489] pnp 00:06: [io 0x0a10-0x0a1f] [ 0.473495] pnp 00:06: [io 0x0a20-0x0a2f] [ 0.473502] pnp 00:06: [io 0x0a30-0x0a3f] [ 0.473638] system 00:06: [io 0x0a00-0x0a0f] has been reserved [ 0.473648] system 00:06: [io 0x0a10-0x0a1f] has been reserved [ 0.473656] system 00:06: [io 0x0a20-0x0a2f] has been reserved [ 0.473665] system 00:06: [io 0x0a30-0x0a3f] has been reserved [ 0.473676] system 00:06: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.473940] pnp 00:07: [io 0x0010-0x001f] [ 0.473949] pnp 00:07: [io 0x0022-0x003f] [ 0.473956] pnp 00:07: [io 0x0044-0x005f] [ 0.473962] pnp 00:07: [io 0x0062-0x0063] [ 0.473969] pnp 00:07: [io 0x0065-0x006f] [ 0.473976] pnp 00:07: [io 0x0072-0x007f] [ 0.473982] pnp 00:07: [io 0x0080] [ 0.473988] pnp 00:07: [io 0x0084-0x0086] [ 0.473995] pnp 00:07: [io 0x0088] [ 0.474001] pnp 00:07: [io 0x008c-0x008e] [ 0.474008] pnp 00:07: [io 0x0090-0x009f] [ 0.474014] pnp 00:07: [io 0x00a2-0x00bf] [ 0.474021] pnp 00:07: [io 0x00e0-0x00ef] [ 0.474028] pnp 00:07: [io 0x04d0-0x04d1] [ 0.474035] pnp 00:07: [io 0x0800-0x087f] [ 0.474042] pnp 00:07: [io 0x0000-0xffffffff disabled] [ 0.474049] pnp 00:07: [io 0x0480-0x04bf] [ 0.474056] pnp 00:07: [mem 0xfed1c000-0xfed1ffff] [ 0.474064] pnp 00:07: [mem 0xfed20000-0xfed8ffff] [ 0.474228] system 00:07: [io 0x04d0-0x04d1] has been reserved [ 0.474238] system 00:07: [io 0x0800-0x087f] has been reserved [ 0.474247] system 00:07: [io 0x0480-0x04bf] has been reserved [ 0.474257] system 00:07: [mem 0xfed1c000-0xfed1ffff] has been reserved [ 0.474266] system 00:07: [mem 0xfed20000-0xfed8ffff] has been reserved [ 0.474277] system 00:07: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.474461] pnp 00:08: [mem 0xfed00000-0xfed003ff] [ 0.474543] pnp 00:08: Plug and Play ACPI device, IDs PNP0103 (active) [ 0.474704] pnp 00:09: [mem 0xffb00000-0xffbfffff] [ 0.474713] pnp 00:09: [mem 0xfff00000-0xffffffff] [ 0.474791] pnp 00:09: Plug and Play ACPI device, IDs INT0800 (active) [ 0.474943] pnp 00:0a: [mem 0xffc00000-0xffefffff] [ 0.475082] system 00:0a: [mem 0xffc00000-0xffefffff] has been reserved [ 0.475093] system 00:0a: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.475378] pnp 00:0b: [io 0x0060] [ 0.475386] pnp 00:0b: [io 0x0064] [ 0.475393] pnp 00:0b: [mem 0xfec00000-0xfec00fff] [ 0.475401] pnp 00:0b: [mem 0xfee00000-0xfee00fff] [ 0.475526] system 00:0b: [mem 0xfec00000-0xfec00fff] could not be reserved [ 0.475536] system 00:0b: [mem 0xfee00000-0xfee00fff] has been reserved [ 0.475547] system 00:0b: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.475691] pnp 00:0c: [mem 0xe0000000-0xefffffff] [ 0.475815] system 00:0c: [mem 0xe0000000-0xefffffff] has been reserved [ 0.475828] system 00:0c: Plug and Play ACPI device, IDs PNP0c02 (active) [ 0.476435] pnp 00:0d: [mem 0x00000000-0x0009ffff] [ 0.476444] pnp 00:0d: [mem 0x000c0000-0x000cffff] [ 0.476452] pnp 00:0d: [mem 0x000e0000-0x000fffff] [ 0.476459] pnp 00:0d: [mem 0x00100000-0x7fffffff] [ 0.476467] pnp 00:0d: [mem 0xfed90000-0xffffffff] [ 0.476629] system 00:0d: [mem 0x00000000-0x0009ffff] could not be reserved [ 0.476639] system 00:0d: [mem 0x000c0000-0x000cffff] could not be reserved [ 0.476649] system 00:0d: [mem 0x000e0000-0x000fffff] could not be reserved [ 0.476658] system 00:0d: [mem 0x00100000-0x7fffffff] could not be reserved [ 0.476667] system 00:0d: [mem 0xfed90000-0xffffffff] could not be reserved [ 0.476678] system 00:0d: Plug and Play ACPI device, IDs PNP0c01 (active) [ 0.477108] pnp: PnP ACPI: found 14 devices [ 0.477115] ACPI: ACPI bus type pnp unregistered [ 0.477123] PnPBIOS: Disabled by ACPI PNP [ 0.516763] PCI: max bus depth: 1 pci_try_num: 2 [ 0.516822] pci 0000:00:1c.3: BAR 14: assigned [mem 0x80000000-0x803fffff] [ 0.516835] pci 0000:00:1c.2: BAR 15: assigned [mem 0x80400000-0x805fffff 64bit pref] [ 0.516847] pci 0000:00:1c.2: BAR 13: assigned [io 0x1000-0x1fff] [ 0.516856] pci 0000:00:1c.0: PCI bridge to [bus 01-01] [ 0.516865] pci 0000:00:1c.0: bridge window [io 0xd000-0xdfff] [ 0.516876] pci 0000:00:1c.0: bridge window [mem 0xfcf00000-0xfdffffff] [ 0.516887] pci 0000:00:1c.0: bridge window [mem 0xce000000-0xdfffffff 64bit pref] [ 0.516900] pci 0000:00:1c.2: PCI bridge to [bus 02-02] [ 0.516908] pci 0000:00:1c.2: bridge window [io 0x1000-0x1fff] [ 0.516919] pci 0000:00:1c.2: bridge window [mem 0xfeb00000-0xfebfffff] [ 0.516930] pci 0000:00:1c.2: bridge window [mem 0x80400000-0x805fffff 64bit pref] [ 0.516943] pci 0000:00:1c.3: PCI bridge to [bus 03-03] [ 0.516951] pci 0000:00:1c.3: bridge window [io 0xe000-0xefff] [ 0.516962] pci 0000:00:1c.3: bridge window [mem 0x80000000-0x803fffff] [ 0.516973] pci 0000:00:1c.3: bridge window [mem 0xfbf00000-0xfbffffff 64bit pref] [ 0.516985] pci 0000:00:1e.0: PCI bridge to [bus 04-04] [ 0.516992] pci 0000:00:1e.0: bridge window [io disabled] [ 0.517001] pci 0000:00:1e.0: bridge window [mem disabled] [ 0.517010] pci 0000:00:1e.0: bridge window [mem pref disabled] [ 0.517055] pci 0000:00:1c.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 0.517067] pci 0000:00:1c.0: setting latency timer to 64 [ 0.517081] pci 0000:00:1c.2: enabling device (0106 -> 0107) [ 0.517102] pci 0000:00:1c.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 0.517112] pci 0000:00:1c.2: setting latency timer to 64 [ 0.517138] pci 0000:00:1c.3: PCI INT D -> GSI 19 (level, low) -> IRQ 19 [ 0.517149] pci 0000:00:1c.3: setting latency timer to 64 [ 0.517163] pci 0000:00:1e.0: setting latency timer to 64 [ 0.517173] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7] [ 0.517181] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff] [ 0.517190] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff] [ 0.517198] pci_bus 0000:00: resource 7 [mem 0x000d0000-0x000dffff] [ 0.517206] pci_bus 0000:00: resource 8 [mem 0x80000000-0xdfffffff] [ 0.517215] pci_bus 0000:00: resource 9 [mem 0xf0000000-0xfed8ffff] [ 0.517223] pci_bus 0000:01: resource 0 [io 0xd000-0xdfff] [ 0.517231] pci_bus 0000:01: resource 1 [mem 0xfcf00000-0xfdffffff] [ 0.517240] pci_bus 0000:01: resource 2 [mem 0xce000000-0xdfffffff 64bit pref] [ 0.517248] pci_bus 0000:02: resource 0 [io 0x1000-0x1fff] [ 0.517256] pci_bus 0000:02: resource 1 [mem 0xfeb00000-0xfebfffff] [ 0.517265] pci_bus 0000:02: resource 2 [mem 0x80400000-0x805fffff 64bit pref] [ 0.517274] pci_bus 0000:03: resource 0 [io 0xe000-0xefff] [ 0.517282] pci_bus 0000:03: resource 1 [mem 0x80000000-0x803fffff] [ 0.517290] pci_bus 0000:03: resource 2 [mem 0xfbf00000-0xfbffffff 64bit pref] [ 0.517300] pci_bus 0000:04: resource 4 [io 0x0000-0x0cf7] [ 0.517308] pci_bus 0000:04: resource 5 [io 0x0d00-0xffff] [ 0.517316] pci_bus 0000:04: resource 6 [mem 0x000a0000-0x000bffff] [ 0.517324] pci_bus 0000:04: resource 7 [mem 0x000d0000-0x000dffff] [ 0.517333] pci_bus 0000:04: resource 8 [mem 0x80000000-0xdfffffff] [ 0.517342] pci_bus 0000:04: resource 9 [mem 0xf0000000-0xfed8ffff] [ 0.517435] NET: Registered protocol family 2 [ 0.517623] IP route cache hash table entries: 32768 (order: 5, 131072 bytes) [ 0.518214] TCP established hash table entries: 131072 (order: 8, 1048576 bytes) [ 0.519224] TCP bind hash table entries: 65536 (order: 7, 524288 bytes) [ 0.519721] TCP: Hash tables configured (established 131072 bind 65536) [ 0.519729] TCP reno registered [ 0.519739] UDP hash table entries: 512 (order: 2, 16384 bytes) [ 0.519761] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes) [ 0.520091] NET: Registered protocol family 1 [ 0.520297] pci 0000:01:00.0: Boot video device [ 0.520333] PCI: CLS 32 bytes, default 64 [ 0.521427] audit: initializing netlink socket (disabled) [ 0.521451] type=2000 audit(1333022587.516:1): initialized [ 0.576993] highmem bounce pool size: 64 pages [ 0.577009] HugeTLB registered 4 MB page size, pre-allocated 0 pages [ 0.591540] VFS: Disk quotas dquot_6.5.2 [ 0.591736] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [ 0.593951] fuse init (API version 7.16) [ 0.594272] msgmni has been set to 1680 [ 0.595397] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) [ 0.595490] io scheduler noop registered [ 0.595497] io scheduler deadline registered [ 0.595551] io scheduler cfq registered (default) [ 0.595839] pcieport 0000:00:1c.0: setting latency timer to 64 [ 0.595906] pcieport 0000:00:1c.0: irq 40 for MSI/MSI-X [ 0.596157] pcieport 0000:00:1c.2: setting latency timer to 64 [ 0.596215] pcieport 0000:00:1c.2: irq 41 for MSI/MSI-X [ 0.596408] pcieport 0000:00:1c.3: setting latency timer to 64 [ 0.596469] pcieport 0000:00:1c.3: irq 42 for MSI/MSI-X [ 0.596746] pcieport 0000:00:1c.0: Signaling PME through PCIe PME interrupt [ 0.596755] pci 0000:01:00.0: Signaling PME through PCIe PME interrupt [ 0.596763] pci 0000:01:00.1: Signaling PME through PCIe PME interrupt [ 0.596772] pcie_pme 0000:00:1c.0:pcie01: service driver pcie_pme loaded [ 0.596815] pcieport 0000:00:1c.2: Signaling PME through PCIe PME interrupt [ 0.596823] pci 0000:02:00.0: Signaling PME through PCIe PME interrupt [ 0.596832] pcie_pme 0000:00:1c.2:pcie01: service driver pcie_pme loaded [ 0.596874] pcieport 0000:00:1c.3: Signaling PME through PCIe PME interrupt [ 0.596882] pci 0000:03:00.0: Signaling PME through PCIe PME interrupt [ 0.596891] pcie_pme 0000:00:1c.3:pcie01: service driver pcie_pme loaded [ 0.596943] pci_hotplug: PCI Hot Plug PCI Core version: 0.5 [ 0.597055] pciehp 0000:00:1c.0:pcie04: HPC vendor_id 8086 device_id 27d0 ss_vid 1025 ss_did 47a [ 0.597105] pciehp 0000:00:1c.0:pcie04: service driver pciehp loaded [ 0.597128] pciehp 0000:00:1c.2:pcie04: HPC vendor_id 8086 device_id 27d4 ss_vid 1025 ss_did 47a [ 0.597173] pciehp 0000:00:1c.2:pcie04: service driver pciehp loaded [ 0.597197] pciehp 0000:00:1c.3:pcie04: HPC vendor_id 8086 device_id 27d6 ss_vid 1025 ss_did 47a [ 0.597242] pciehp 0000:00:1c.3:pcie04: service driver pciehp loaded [ 0.597264] pciehp: PCI Express Hot Plug Controller Driver version: 0.4 [ 0.597435] intel_idle: MWAIT substates: 0x10 [ 0.597455] intel_idle: v0.4 model 0x1C [ 0.597460] intel_idle: lapic_timer_reliable_states 0x2 [ 0.597724] input: Power Button as /devices/LNXSYSTM:00/device:00/PNP0C0C:00/input/input0 [ 0.597738] ACPI: Power Button [PWRB] [ 0.597874] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 [ 0.597885] ACPI: Power Button [PWRF] [ 0.597949] ACPI: acpi_idle yielding to intel_idle [ 0.603865] thermal LNXTHERM:00: registered as thermal_zone0 [ 0.603874] ACPI: Thermal Zone [THRM] (44 C) [ 0.604348] thermal LNXTHERM:01: registered as thermal_zone1 [ 0.604356] ACPI: Thermal Zone [THRS] (39 C) [ 0.604430] ERST: Table is not found! [ 0.604658] isapnp: Scanning for PnP cards... [ 0.604701] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled [ 0.957998] isapnp: No Plug & Play device found [ 0.963155] Freeing initrd memory: 13328k freed [ 1.003612] Linux agpgart interface v0.103 [ 1.006540] brd: module loaded [ 1.007845] loop: module loaded [ 1.008858] Fixed MDIO Bus: probed [ 1.008912] PPP generic driver version 2.4.2 [ 1.009009] tun: Universal TUN/TAP device driver, 1.6 [ 1.009014] tun: (C) 1999-2004 Max Krasnyansky [ 1.009189] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 1.009248] ehci_hcd 0000:00:1d.7: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.009278] ehci_hcd 0000:00:1d.7: setting latency timer to 64 [ 1.009285] ehci_hcd 0000:00:1d.7: EHCI Host Controller [ 1.009379] ehci_hcd 0000:00:1d.7: new USB bus registered, assigned bus number 1 [ 1.009410] ehci_hcd 0000:00:1d.7: using broken periodic workaround [ 1.009424] ehci_hcd 0000:00:1d.7: debug port 1 [ 1.013308] ehci_hcd 0000:00:1d.7: cache line size of 32 is not supported [ 1.013345] ehci_hcd 0000:00:1d.7: irq 23, io mem 0xfeafbc00 [ 1.028030] ehci_hcd 0000:00:1d.7: USB 2.0 started, EHCI 1.00 [ 1.028286] hub 1-0:1.0: USB hub found [ 1.028297] hub 1-0:1.0: 8 ports detected [ 1.028440] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 1.028470] uhci_hcd: USB Universal Host Controller Interface driver [ 1.028536] uhci_hcd 0000:00:1d.0: PCI INT A -> GSI 23 (level, low) -> IRQ 23 [ 1.028548] uhci_hcd 0000:00:1d.0: setting latency timer to 64 [ 1.028555] uhci_hcd 0000:00:1d.0: UHCI Host Controller [ 1.028642] uhci_hcd 0000:00:1d.0: new USB bus registered, assigned bus number 2 [ 1.028678] uhci_hcd 0000:00:1d.0: irq 23, io base 0x0000cc00 [ 1.028939] hub 2-0:1.0: USB hub found [ 1.028949] hub 2-0:1.0: 2 ports detected [ 1.029066] uhci_hcd 0000:00:1d.1: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.029078] uhci_hcd 0000:00:1d.1: setting latency timer to 64 [ 1.029084] uhci_hcd 0000:00:1d.1: UHCI Host Controller [ 1.029171] uhci_hcd 0000:00:1d.1: new USB bus registered, assigned bus number 3 [ 1.029223] uhci_hcd 0000:00:1d.1: irq 19, io base 0x0000c880 [ 1.029479] hub 3-0:1.0: USB hub found [ 1.029489] hub 3-0:1.0: 2 ports detected [ 1.029599] uhci_hcd 0000:00:1d.2: PCI INT C -> GSI 18 (level, low) -> IRQ 18 [ 1.029611] uhci_hcd 0000:00:1d.2: setting latency timer to 64 [ 1.029617] uhci_hcd 0000:00:1d.2: UHCI Host Controller [ 1.029703] uhci_hcd 0000:00:1d.2: new USB bus registered, assigned bus number 4 [ 1.029750] uhci_hcd 0000:00:1d.2: irq 18, io base 0x0000c800 [ 1.030002] hub 4-0:1.0: USB hub found [ 1.030011] hub 4-0:1.0: 2 ports detected [ 1.030122] uhci_hcd 0000:00:1d.3: PCI INT D -> GSI 16 (level, low) -> IRQ 16 [ 1.030133] uhci_hcd 0000:00:1d.3: setting latency timer to 64 [ 1.030139] uhci_hcd 0000:00:1d.3: UHCI Host Controller [ 1.030217] uhci_hcd 0000:00:1d.3: new USB bus registered, assigned bus number 5 [ 1.030264] uhci_hcd 0000:00:1d.3: irq 16, io base 0x0000c480 [ 1.030517] hub 5-0:1.0: USB hub found [ 1.030527] hub 5-0:1.0: 2 ports detected [ 1.030757] i8042: PNP: No PS/2 controller found. Probing ports directly. [ 1.031193] serio: i8042 KBD port at 0x60,0x64 irq 1 [ 1.031225] serio: i8042 AUX port at 0x60,0x64 irq 12 [ 1.031558] mousedev: PS/2 mouse device common for all mice [ 1.031844] rtc_cmos 00:03: RTC can wake from S4 [ 1.031993] rtc_cmos 00:03: rtc core: registered rtc_cmos as rtc0 [ 1.032050] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs [ 1.032289] device-mapper: uevent: version 1.0.3 [ 1.032473] device-mapper: ioctl: 4.20.0-ioctl (2011-02-02) initialised: dm-devel@redhat.com [ 1.032548] EISA: Probing bus 0 at eisa.0 [ 1.032555] EISA: Cannot allocate resource for mainboard [ 1.032560] Cannot allocate resource for EISA slot 1 [ 1.032565] Cannot allocate resource for EISA slot 2 [ 1.032570] Cannot allocate resource for EISA slot 3 [ 1.032575] Cannot allocate resource for EISA slot 4 [ 1.032580] Cannot allocate resource for EISA slot 5 [ 1.032585] Cannot allocate resource for EISA slot 6 [ 1.032590] Cannot allocate resource for EISA slot 7 [ 1.032594] Cannot allocate resource for EISA slot 8 [ 1.032598] EISA: Detected 0 cards. [ 1.032614] cpufreq-nforce2: No nForce2 chipset. [ 1.032761] cpuidle: using governor ladder [ 1.033007] cpuidle: using governor menu [ 1.033012] EFI Variables Facility v0.08 2004-May-17 [ 1.033616] TCP cubic registered [ 1.033934] NET: Registered protocol family 10 [ 1.035167] NET: Registered protocol family 17 [ 1.035212] Registering the dns_resolver key type [ 1.035263] Using IPI No-Shortcut mode [ 1.035478] PM: Hibernation image not present or could not be loaded. [ 1.035500] registered taskstats version 1 [ 1.053994] Magic number: 4:944:77 [ 1.054118] rtc_cmos 00:03: setting system clock to 2012-03-29 12:03:08 UTC (1333022588) [ 1.054172] BIOS EDD facility v0.16 2004-Jun-25, 0 devices found [ 1.054176] EDD information not available. [ 1.054430] Freeing unused kernel memory: 696k freed [ 1.054814] Write protecting the kernel text: 5340k [ 1.054899] Write protecting the kernel read-only data: 2192k [ 1.091514] udevd[89]: starting version 173 [ 1.205188] r8169 Gigabit Ethernet driver 2.3LK-NAPI loaded [ 1.205237] r8169 0000:03:00.0: PCI INT A -> GSI 19 (level, low) -> IRQ 19 [ 1.205295] r8169 0000:03:00.0: setting latency timer to 64 [ 1.205370] r8169 0000:03:00.0: irq 43 for MSI/MSI-X [ 1.206944] r8169 0000:03:00.0: eth0: RTL8168e/8111e at 0xf8012000, d0:27:88:aa:96:95, XID 0c200000 IRQ 43 [ 1.223314] ahci 0000:00:1f.2: version 3.0 [ 1.223349] ahci 0000:00:1f.2: PCI INT B -> GSI 19 (level, low) -> IRQ 19 [ 1.223452] ahci 0000:00:1f.2: irq 44 for MSI/MSI-X [ 1.223574] ahci 0000:00:1f.2: AHCI 0001.0100 32 slots 4 ports 3 Gbps 0xf impl SATA mode [ 1.223586] ahci 0000:00:1f.2: flags: 64bit ncq pm led clo pio slum part [ 1.223598] ahci 0000:00:1f.2: setting latency timer to 64 [ 1.227026] scsi0 : ahci [ 1.227482] scsi1 : ahci [ 1.229807] scsi2 : ahci [ 1.230152] scsi3 : ahci [ 1.230609] ata1: SATA max UDMA/133 abar m1024@0xfeafb800 port 0xfeafb900 irq 44 [ 1.230620] ata2: SATA max UDMA/133 abar m1024@0xfeafb800 port 0xfeafb980 irq 44 [ 1.230630] ata3: SATA max UDMA/133 abar m1024@0xfeafb800 port 0xfeafba00 irq 44 [ 1.230639] ata4: SATA max UDMA/133 abar m1024@0xfeafb800 port 0xfeafba80 irq 44 [ 1.524046] usb 2-1: new low speed USB device number 2 using uhci_hcd [ 1.548039] ata4: SATA link down (SStatus 0 SControl 300) [ 1.548080] ata3: SATA link down (SStatus 0 SControl 300) [ 1.548113] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) [ 1.548146] ata2: SATA link down (SStatus 0 SControl 300) [ 1.590266] ata1.00: ATA-8: WDC WD3200BEVT-00A23T0, 01.01A01, max UDMA/133 [ 1.590273] ata1.00: 625142448 sectors, multi 0: LBA48 NCQ (depth 31/32), AA [ 1.592503] ata1.00: configured for UDMA/133 [ 1.592745] scsi 0:0:0:0: Direct-Access ATA WDC WD3200BEVT-0 01.0 PQ: 0 ANSI: 5 [ 1.593225] sd 0:0:0:0: Attached scsi generic sg0 type 0 [ 1.593262] sd 0:0:0:0: [sda] 625142448 512-byte logical blocks: (320 GB/298 GiB) [ 1.593494] sd 0:0:0:0: [sda] Write Protect is off [ 1.593501] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.593591] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.645039] sda: sda1 sda2 sda3 sda4 < sda5 sda6 > [ 1.646065] sd 0:0:0:0: [sda] Attached SCSI disk [ 1.731653] input: Chicony 2.4G Multimedia Wireless Kit as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input2 [ 1.731884] generic-usb 0003:04F2:0963.0001: input,hidraw0: USB HID v1.11 Keyboard [Chicony 2.4G Multimedia Wireless Kit] on usb-0000:00:1d.0-1/input0 [ 1.794904] input: Chicony 2.4G Multimedia Wireless Kit as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.1/input/input3 [ 1.795451] generic-usb 0003:04F2:0963.0002: input,hiddev0,hidraw1: USB HID v1.11 Mouse [Chicony 2.4G Multimedia Wireless Kit] on usb-0000:00:1d.0-1/input1 [ 1.795509] usbcore: registered new interface driver usbhid [ 1.795517] usbhid: USB HID core driver [ 2.352882] EXT4-fs (sda5): INFO: recovery required on readonly filesystem [ 2.352890] EXT4-fs (sda5): write access will be enabled during recovery [ 7.155870] EXT4-fs (sda5): orphan cleanup on readonly fs [ 7.250088] EXT4-fs (sda5): ext4_orphan_cleanup: deleting unreferenced inode 4718613 [ 7.250282] EXT4-fs (sda5): 1 orphan inode deleted [ 7.250288] EXT4-fs (sda5): recovery complete [ 8.396589] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 20.539786] udevd[289]: starting version 173 [ 20.599480] lp: driver loaded but no devices found [ 20.652757] Adding 2095100k swap on /dev/sda6. Priority:-1 extents:1 across:2095100k [ 20.680210] cfg80211: Calling CRDA to update world regulatory domain [ 20.691828] wmi: Mapper loaded [ 20.755271] rt2800pci 0000:02:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 20.755295] rt2800pci 0000:02:00.0: setting latency timer to 64 [ 20.758698] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 20.758710] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758719] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 20.758729] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758738] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 20.758748] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758756] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 20.758766] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758774] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 20.758783] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758791] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 20.758801] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758809] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 20.758818] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758827] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 20.758836] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758845] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 20.758854] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758863] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 20.758872] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758881] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 20.758891] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758899] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 20.758909] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758917] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 20.758927] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.758935] cfg80211: Updating information on frequency 2484 MHz for a 20 MHz width channel with regulatory rule: [ 20.758945] cfg80211: 2474000 KHz - 2494000 KHz @ KHz), (600 mBi, 2000 mBm) [ 20.779212] nvidia: module license 'NVIDIA' taints kernel. [ 20.779223] Disabling lock debugging due to kernel taint [ 20.780135] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht' [ 20.783701] Registered led device: rt2800pci-phy0::radio [ 20.783873] Registered led device: rt2800pci-phy0::assoc [ 20.784073] Registered led device: rt2800pci-phy0::quality [ 20.870423] type=1400 audit(1333037008.309:2): apparmor="STATUS" operation="profile_load" name="/sbin/dhclient" pid=427 comm="apparmor_parser" [ 20.871960] type=1400 audit(1333037008.309:3): apparmor="STATUS" operation="profile_load" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=427 comm="apparmor_parser" [ 20.872423] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro [ 20.873405] type=1400 audit(1333037008.313:4): apparmor="STATUS" operation="profile_load" name="/usr/lib/connman/scripts/dhclient-script" pid=427 comm="apparmor_parser" [ 21.005154] HDA Intel 0000:00:1b.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 21.005264] HDA Intel 0000:00:1b.0: irq 45 for MSI/MSI-X [ 21.005323] HDA Intel 0000:00:1b.0: setting latency timer to 64 [ 21.062026] hda_codec: ALC662 rev1: BIOS auto-probing. [ 21.081365] HDA Intel 0000:01:00.1: PCI INT B -> GSI 17 (level, low) -> IRQ 17 [ 21.081377] hda_intel: Disabling MSI [ 21.081469] HDA Intel 0000:01:00.1: setting latency timer to 64 [ 21.512739] cfg80211: Updating information on frequency 2412 MHz for a 20 MHz width channel with regulatory rule: [ 21.512752] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512761] cfg80211: Updating information on frequency 2417 MHz for a 20 MHz width channel with regulatory rule: [ 21.512770] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512778] cfg80211: Updating information on frequency 2422 MHz for a 20 MHz width channel with regulatory rule: [ 21.512787] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512795] cfg80211: Updating information on frequency 2427 MHz for a 20 MHz width channel with regulatory rule: [ 21.512804] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512812] cfg80211: Updating information on frequency 2432 MHz for a 20 MHz width channel with regulatory rule: [ 21.512821] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512829] cfg80211: Updating information on frequency 2437 MHz for a 20 MHz width channel with regulatory rule: [ 21.512838] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512846] cfg80211: Updating information on frequency 2442 MHz for a 20 MHz width channel with regulatory rule: [ 21.512855] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512863] cfg80211: Updating information on frequency 2447 MHz for a 20 MHz width channel with regulatory rule: [ 21.512873] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512881] cfg80211: Updating information on frequency 2452 MHz for a 20 MHz width channel with regulatory rule: [ 21.512890] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512898] cfg80211: Updating information on frequency 2457 MHz for a 20 MHz width channel with regulatory rule: [ 21.512907] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512915] cfg80211: Updating information on frequency 2462 MHz for a 20 MHz width channel with regulatory rule: [ 21.512923] cfg80211: 2402000 KHz - 2472000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512931] cfg80211: Updating information on frequency 2467 MHz for a 20 MHz width channel with regulatory rule: [ 21.512941] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512949] cfg80211: Updating information on frequency 2472 MHz for a 20 MHz width channel with regulatory rule: [ 21.512958] cfg80211: 2457000 KHz - 2482000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512966] cfg80211: Updating information on frequency 2484 MHz for a 20 MHz width channel with regulatory rule: [ 21.512975] cfg80211: 2474000 KHz - 2494000 KHz @ KHz), (300 mBi, 2000 mBm) [ 21.512984] cfg80211: World regulatory domain updated: [ 21.512990] cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [ 21.512998] cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 21.513006] cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 21.513015] cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm) [ 21.513024] cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 21.513033] cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm) [ 21.520151] init: failsafe main process (651) killed by TERM signal [ 21.651740] type=1400 audit(1333037009.089:5): apparmor="STATUS" operation="profile_load" name="/usr/lib/lightdm/lightdm-guest-session-wrapper" pid=734 comm="apparmor_parser" [ 21.663286] type=1400 audit(1333037009.101:6): apparmor="STATUS" operation="profile_load" name="/usr/lib/cups/backend/cups-pdf" pid=742 comm="apparmor_parser" [ 21.666065] type=1400 audit(1333037009.105:7): apparmor="STATUS" operation="profile_load" name="/usr/sbin/cupsd" pid=742 comm="apparmor_parser" [ 21.681730] type=1400 audit(1333037009.121:8): apparmor="STATUS" operation="profile_replace" name="/sbin/dhclient" pid=735 comm="apparmor_parser" [ 21.683175] type=1400 audit(1333037009.121:9): apparmor="STATUS" operation="profile_replace" name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=735 comm="apparmor_parser" [ 21.684122] type=1400 audit(1333037009.125:10): apparmor="STATUS" operation="profile_replace" name="/usr/lib/connman/scripts/dhclient-script" pid=735 comm="apparmor_parser" [ 21.689989] type=1400 audit(1333037009.129:11): apparmor="STATUS" operation="profile_load" name="/usr/lib/telepathy/mission-control-5" pid=738 comm="apparmor_parser" [ 21.928126] HDMI status: Pin=5 Presence_Detect=0 ELD_Valid=0 [ 21.960057] HDMI status: Pin=5 Presence_Detect=0 ELD_Valid=0 [ 21.963774] init: apport pre-start process (792) terminated with status 1 [ 21.992217] HDMI status: Pin=5 Presence_Detect=0 ELD_Valid=0 [ 21.997749] init: apport post-stop process (834) terminated with status 1 [ 22.024078] HDMI status: Pin=5 Presence_Detect=0 ELD_Valid=0 [ 22.040552] input: HDA NVidia HDMI/DP,pcm=9 as /devices/pci0000:00/0000:00:1c.0/0000:01:00.1/sound/card1/input4 [ 22.041048] input: HDA NVidia HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:1c.0/0000:01:00.1/sound/card1/input5 [ 22.041495] input: HDA NVidia HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1c.0/0000:01:00.1/sound/card1/input6 [ 22.041942] input: HDA NVidia HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1c.0/0000:01:00.1/sound/card1/input7 [ 22.392404] phy0 -> rt2800pci_mcu_status: Error - MCU request failed, no response from hardware [ 24.041118] ADDRCONF(NETDEV_UP): wlan0: link is not ready [ 24.182497] nvidia 0000:01:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 24.182518] nvidia 0000:01:00.0: setting latency timer to 64 [ 24.182530] vgaarb: device changed decodes: PCI:0000:01:00.0,olddecodes=io+mem,decodes=none:owns=io+mem [ 24.183188] NVRM: loading NVIDIA UNIX x86 Kernel Module 280.13 Wed Jul 27 16:55:43 PDT 2011 [ 24.335539] r8169 0000:03:00.0: eth0: link down [ 24.335555] r8169 0000:03:00.0: eth0: link down [ 24.336183] ADDRCONF(NETDEV_UP): eth0: link is not ready [ 25.404626] vesafb: mode is 640x480x32, linelength=2560, pages=0 [ 25.404643] vesafb: scrolling: redraw [ 25.404653] vesafb: Truecolor: size=8:8:8:8, shift=24:16:8:0 [ 25.406055] vesafb: framebuffer at 0xcf000000, mapped to 0xf8280000, using 1216k, total 1216k [ 25.406266] fbcon: VESA VGA (fb0) is primary device [ 25.406449] Console: switching to colour frame buffer device 80x30 [ 25.406499] fb0: VESA VGA frame buffer device [ 25.489591] ppdev: user-space parallel port driver [ 25.949861] r8169 0000:03:00.0: eth0: link up [ 25.950262] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 25.996882] Bluetooth: Core ver 2.16 [ 25.996968] NET: Registered protocol family 31 [ 25.996974] Bluetooth: HCI device and connection manager initialized [ 25.996980] Bluetooth: HCI socket layer initialized [ 25.996985] Bluetooth: L2CAP socket layer initialized [ 25.997164] Bluetooth: SCO socket layer initialized [ 26.006560] Bluetooth: RFCOMM TTY layer initialized [ 26.006577] Bluetooth: RFCOMM socket layer initialized [ 26.006583] Bluetooth: RFCOMM ver 1.11 [ 26.010468] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 26.010475] Bluetooth: BNEP filters: protocol multicast [ 27.270755] HDMI hot plug event: Pin=5 Presence_Detect=1 ELD_Valid=0 [ 27.276053] HDMI status: Pin=5 Presence_Detect=1 ELD_Valid=0 [ 27.297390] HDMI hot plug event: Pin=5 Presence_Detect=1 ELD_Valid=1 [ 27.304034] HDMI status: Pin=5 Presence_Detect=1 ELD_Valid=1 [ 28.076042] HDMI: detected monitor VT2730 [ 28.076046] at connection type HDMI [ 28.076053] HDMI: available speakers: FL/FR [ 28.076061] HDMI: supports coding type LPCM: channels = 2, rates = 44100 48000 88200, bits = 16 [ 30.051700] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=0 [ 30.733528] init: plymouth-stop pre-start process (1434) terminated with status 1 [ 36.064042] eth0: no IPv6 routers present [ 36.707191] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=0 [1663667.144702] HDMI hot plug event: Pin=5 Presence_Detect=1 ELD_Valid=0 [1663667.152046] HDMI status: Pin=5 Presence_Detect=0 ELD_Valid=0 [1663668.514504] HDMI hot plug event: Pin=5 Presence_Detect=1 ELD_Valid=0 [1663668.520045] HDMI status: Pin=5 Presence_Detect=1 ELD_Valid=0 [1663668.540787] HDMI hot plug event: Pin=5 Presence_Detect=1 ELD_Valid=1 [1663668.548050] HDMI status: Pin=5 Presence_Detect=1 ELD_Valid=1 [1663669.320815] HDMI: detected monitor VT2730 [1663669.320822] at connection type HDMI [1663669.320829] HDMI: available speakers: FL/FR [1663669.320839] HDMI: supports coding type LPCM: channels = 2, rates = 44100 48000 88200, bits = 16 [2151375.072061] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x6 frozen [2151375.072071] ata1.00: failed command: FLUSH CACHE EXT [2151375.072085] ata1.00: cmd ea/00:00:00:00:00/00:00:00:00:00/a0 tag 0 [2151375.072088] res 40/00:00:00:4f:c2/00:00:00:00:00/00 Emask 0x4 (timeout) [2151375.072094] ata1.00: status: { DRDY } [2151375.072105] ata1: hard resetting link [2151380.432028] ata1: link is slow to respond, please be patient (ready=0) [2151385.080031] ata1: COMRESET failed (errno=-16) [2151385.080042] ata1: hard resetting link [2151390.440030] ata1: link is slow to respond, please be patient (ready=0) [2151395.088028] ata1: COMRESET failed (errno=-16) [2151395.088039] ata1: hard resetting link [2151400.448029] ata1: link is slow to respond, please be patient (ready=0) [2151430.128029] ata1: COMRESET failed (errno=-16) [2151430.128041] ata1: limiting SATA link speed to 1.5 Gbps [2151430.128047] ata1: hard resetting link [2151435.152029] ata1: COMRESET failed (errno=-16) [2151435.152038] ata1: reset failed, giving up [2151435.152044] ata1.00: disabled [2151435.152052] ata1.00: device reported invalid CHS sector 0 [2151435.152071] ata1: EH complete [2151435.152146] sd 0:0:0:0: [sda] Unhandled error code [2151435.152152] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.152160] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 17 51 d9 88 00 00 08 00 [2151435.152178] end_request: I/O error, dev sda, sector 391240072 [2151435.152185] end_request: I/O error, dev sda, sector 391240072 [2151435.152211] sd 0:0:0:0: [sda] Unhandled error code [2151435.152218] sd 0:0:0:0: [sda] [2151435.152222] Aborting journal on device sda5-8. [2151435.152229] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.152235] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 21 d2 e2 e8 00 00 08 00 [2151435.152258] end_request: I/O error, dev sda, sector 567468776 [2151435.152270] Buffer I/O error on device sda5, logical block 50393437 [2151435.152286] sd 0:0:0:0: [sda] Unhandled error code [2151435.152296] EXT4-fs warning (device sda5): ext4_end_bio:258: I/O error writing to inode 12582985 (offset 0 size 4096 starting block 70933598) [2151435.152312] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.152322] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 17 4f 58 00 00 00 08 00 [2151435.152343] end_request: I/O error, dev sda, sector 391075840 [2151435.152352] quiet_error: 21 callbacks suppressed [2151435.152359] Buffer I/O error on device sda5, logical block 28344320 [2151435.152366] lost page write due to I/O error on sda5 [2151435.152402] JBD2: I/O error detected when updating journal superblock for sda5-8. [2151435.160068] sd 0:0:0:0: [sda] Unhandled error code [2151435.160076] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.160085] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 21 d4 46 40 00 00 08 00 [2151435.160104] end_request: I/O error, dev sda, sector 567559744 [2151435.160116] Buffer I/O error on device sda5, logical block 50404808 [2151435.160140] EXT4-fs warning (device sda5): ext4_end_bio:258: I/O error writing to inode 12582929 (offset 0 size 4096 starting block 70944969) [2151435.160190] sd 0:0:0:0: [sda] Unhandled error code [2151435.160195] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.160202] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 21 d4 46 58 00 00 08 00 [2151435.160219] end_request: I/O error, dev sda, sector 567559768 [2151435.160226] Buffer I/O error on device sda5, logical block 50404811 [2151435.160236] EXT4-fs warning (device sda5): ext4_end_bio:258: I/O error writing to inode 12583925 (offset 0 size 4096 starting block 70944972) [2151435.160281] EXT4-fs error (device sda5) in ext4_reserve_inode_write:5638: Journal has aborted [2151435.160342] sd 0:0:0:0: [sda] Unhandled error code [2151435.160348] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.160355] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 09 cb 58 00 00 00 08 00 [2151435.160371] end_request: I/O error, dev sda, sector 164321280 [2151435.160377] Buffer I/O error on device sda5, logical block 0 [2151435.160382] lost page write due to I/O error on sda5 [2151435.160411] EXT4-fs (sda5): Remounting filesystem read-only [2151435.160524] sd 0:0:0:0: [sda] Unhandled error code [2151435.160530] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2151435.160538] sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 21 d4 46 40 00 00 08 00 [2151435.160555] end_request: I/O error, dev sda, sector 567559744 [2151435.160563] Buffer I/O error on device sda5, logical block 50404808 [2151435.160569] lost page write due to I/O error on sda5 [2151435.160601] JBD2: Detected IO errors while flushing file data on sda5-8 [2151435.160628] journal commit I/O error [2152066.722715] sd 0:0:0:0: [sda] Unhandled error code [2152066.722723] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2152066.722732] sd 0:0:0:0: [sda] CDB: Read(10): 28 00 1e cf 94 80 00 00 20 00 [2152066.722750] end_request: I/O error, dev sda, sector 516920448 [2152066.722821] sd 0:0:0:0: [sda] Unhandled error code [2152066.722827] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2152066.722834] sd 0:0:0:0: [sda] CDB: Read(10): 28 00 1e cf 94 80 00 00 08 00 [2152066.722851] end_request: I/O error, dev sda, sector 516920448 [2152066.723003] sd 0:0:0:0: [sda] Unhandled error code [2152066.723008] sd 0:0:0:0: [sda] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK [2152066.723016] sd 0:0:0:0: [sda] CDB: Read(10): 28 00 1e cf 94 80 00 00 08 00 [2152066.723032] end_request: I/O error, dev sda, sector 516920448 Maybe related? [1] [1] https://bugs.launchpad.net/ubuntu/+source/libatasmart/+bug/445852 Entry: Screensaver? Date: Mon Apr 23 12:14:15 EDT 2012 Might be causing crashes through unhandled event. Found ~/bin/dpms: xset -display :0 dpms force $1 Display switches off and it starts leaking: 2786832 ./dist/build/hgl/hgl Glut receives (Char '\EOT') when this happens. I'm switching it off using: xset -display :0 -dpms This is only engergy star. I beleive there's also an X screensaver option that needs to be turned off. Entry: Bullets Date: Mon Apr 23 13:51:40 EDT 2012 This bullet stuff is a hack. The proper way of course is to make those boxes independent, so they can just be serialized and time-distributed. So.. how to make it work? Entry: Stretch animation time over multiple frames. Date: Mon Apr 23 18:05:53 EDT 2012 Trouble is that frame duration isn't well-defined. However, it can probably be tuned manually. So, use the LifeTime attrib for images too. Entry: Version 2 Date: Tue Apr 24 07:34:26 EDT 2012 - ditch FTGL, go with FreeType library directly to obtain raw vertex arrays and kerning tables for further processing. - cleanup layout, maybe use Knuth's algo. - ditch current map/fold animation approach in favor of FRP. - go online (JavaScript / HTML / CSS) Entry: Image transitions Date: Wed Apr 25 09:28:19 EDT 2012 Problem is the alpha blending white - fade - fade Wait: white - 0.7 % flag followed by fade image. Let's try that. Infrastructure +- there: now just fix the white background. Next: fix blending. Image seems to dark now. Need to figure out how to add the effect of the interpolation twice. Problem is that it turns into a polynomial.. Let's think about this later. Almost there now. Probably simplest to lighten the images by hand in gimp, then use transparency only for fading + make some mechanism. Roadmap: - remove white + alpha mixing: use pre-whitened images instead - re-encode the transitions using a single data structure Images: - scaled web - performed "whitening" Ok, the image transition has 4 states: 1 2 3 4 -> fade in one of 4 quadrants 0 -> 0.5 5 -> fade in full quadrant Entry: Param query Date: Thu Apr 26 11:33:27 EDT 2012 Problem: optional parameters with defaults. Interesting is that I don't see how to do projections like this in an automatic way, i.e. without the default case: data Opts = A | B | C | D project A = True project _ = False The thing is that "==" can be used if there is an Eq instance, but that doesn't allow payloads. What it needs really is a projection function that strips parameters, and then use ordinary pattern matching. class tagProject ctor where selector :: ctor -> Int Probably this is just making it too difficult... Google for "haskell optional parameters". Why not put this in a monadic interface? Use a class with "setXYZ", and an implementation that uses a state monad to fill it out. Trouble is that this then needs a monadic spec/syntax. Entry: gl-capture Date: Tue Oct 16 11:45:01 EDT 2012 Added gl-capture[1] to the main loop. It now saves each frame as a ppm based on the frame number. Next is to make it run only one iteration, and fix the frame rate to say 60Hz or 59.99Hz. -> I had to hack this for now. The hack is reverse-patched in: Sun Nov 4 21:51:56 EST 2012 tom@zwizwa.be * disable frame dump hack So, a summary. Saving to ppm works fine. After that I made some mistakes. Basically, the ppms are quite large so I started converting them to png first using this makefile[2]. # -*- makefile -*- # Converter rule IN := ppm OUT := png %.$(OUT): %.$(IN) pnmtopng <"$<" >"$@" # Generic converter rules for pipe conveters. .DELETE_ON_ERROR: INS := $(shell ls *.$(IN)) OUTS := $(patsubst %.$(IN),%.$(OUT),$(INS)) .PHONY: all debug all: $(OUTS) debug: @echo INS $(INS) @echo OUTS $(OUTS) #-------------------------------------------------- Then convert the series of .png to .mov using: ffmpeg -r 60 -vsync 1 -qscale 5 -f image2 -i frame%06d.png -vcodec mjpeg movie.mov The makefile fragment has a bug: when the input frame has only 2 colors it will produce a BW PPM/PNG, not sure where it starts. tom@zoo:~/png$ file -b * | sort | uniq ISO Media, Apple QuickTime movie PNG image data, 1364 x 766, 1-bit colormap, non-interlaced PNG image data, 1364 x 766, 2-bit colormap, non-interlaced PNG image data, 1364 x 766, 8-bit/color RGB, non-interlaced The 1-bit/2-bit colormaps are the problem. Basically, all the 1-bit colormaps need to be changed to 8-bit before they can be recorded in a stream. (Different types actually works in the .mov but doesn't display properly). [1] http://hackage.haskell.org/packages/archive/gl-capture/0.1.0.0/doc/html/Graphics-Rendering-OpenGL-Capture.html [2] http://zwizwa.be/darcs/pool/mk/ppm2png.mk Entry: Changing the bitmaps Date: Tue Nov 6 10:22:18 EST 2012 0: backup the files 1: sort the pics by type for i in *; do TYPE=$(file -b $i); mkdir "$TYPE"; mv $i "$TYPE"; done 2: convert them manually. Maybe it doesn't even need sorting. Since this is a one-time op and it's not lossy I don't really care how long it takes. "convert $in $out" with some params should do it. By default it seems to convert to greyscale. After some digging (it's not "-colorspace RGB") what works is "-type TrueColor". $ file test.png test.png: PNG image data, 1364 x 766, 1-bit colormap, non-interlaced $ convert -type TrueColor test.png test_out.png $ file test_out.png test_out.png: PNG image data, 1364 x 766, 8-bit/color RGB, non-interlaced To do all the files: $ for i in *.png; do convert -type TrueColor $i $i; done Ok, works. Last frame is display frame023223.png so i moved the rest to end/*.png $ ffmpeg -r 60 -vsync 1 -qscale 5 -f image2 -i frame%06d.png -vcodec mjpeg eyes_wide_open.mov [1] http://www.imagemagick.org/discourse-server/viewtopic.php?f=2&t=6888