Pages

Showing posts with label code-browsing. Show all posts
Showing posts with label code-browsing. Show all posts

Friday, July 8, 2011

Understanding DOM with DOMC source code browsing

Understanding DOM with DOMC (a C implementation of DOM - minus a few features)

Use the Source Luke!!

Note: DOMC is freely available under the MIT License
  1. Download the DOMC source code (200 KB)
  2. Download the libmba helper code (200 KB)
  3. cd domc/src
  4. ctags *
  5. vim domc.h
  6. Navigate through the struct Document, Node, NodeList etc to understand the utter simplicity of the DOM C implementation
domc.h and node.c are THE most important files.

Core implementation

a) DOM_Node is THE struct to understand and it's very very simple
It's recursively defined - a tree is a node containing other nodes/nodelists.
1) Fixed part - common to all nodes from document to attribute
struct DOM_Node {
    DOM_String *nodeName;
    DOM_String *nodeValue;
    unsigned short nodeType;             //Used as selector on union of variable parts below
  
    //Pointers to other Nodes
    DOM_Node *parentNode;
    DOM_NodeList *childNodes;

    DOM_Node *firstChild;
    DOM_Node *lastChild;
    DOM_Node *previousSibling;
    DOM_Node *nextSibling;

    DOM_NamedNodeMap *attributes;
    DOM_Document *ownerDocument;
[...]
2) Variable part - DOMNode.nodeType above selects between document vs element vs attribute vs processing-instruction
union {
        struct {
            DOM_DocumentType *doctype;
            DOM_Element *documentElement;
                        DOM_DocumentView *document;
                        DOM_AbstractView *defaultView;
                        DOM_Node *commonParent;
                        DOM_String *version;
                        DOM_String *encoding;
                        int standalone;
        } Document;
        struct {
            DOM_String *tagName;
        } Element;
        struct {
            DOM_String *name;
            int specified;
            DOM_String *value;
                        DOM_Element *ownerElement;
        } Attr;
        struct { // small code stripped out for clarity } DocumentType;
        struct { // small code stripped out for clarity } CharacterData;
        struct { // small code stripped out for clarity } Notation;
        struct { // small code stripped out for clarity } Entity;
        struct { // small code stripped out for clarity } ProcessingInstruction;
    } u;
b) DOM_NodeList itself is a doubly-linked list with head/tail pointers
struct NodeEntry { struct Node *data; NodeEntry *before, *after; };
struct DOM_NodeList { NodeEntry *first, *last; DOM_NodeList *list; }
Don't need the documentation at all but here it is anyway :
DOMC - A C Implementation of DOM docs

Tuesday, November 30, 2010

Learning Python Coding Techniques and Idioms by Browsing Python Source Code


Study the standard libraries source code for good examples of Python coding.


Using Pythonic Idioms and Style:
Definition of "Pythonic" here
Presentations:
How to Write Pythonic" code by Christopher Arndt
Presentation on "Code Like a Pythonista: Idiomatic Python" by David Goodger
Presentation on "Code Like a Pythonista: Idiomatic Python" (Crunchy Remix) by Jeff Hinrich 

Bruce Eckel's community contributed book: Python 3 - Patterns & Idioms


See Also:
My blog on Learning Python

Learning by Source Code Browsing Miniaturized Open Source Software

Links:

[Networking]
Tiny Http daemon: thttpd (tiny http web server), apache's httpd at trunk - GitHub
Pion : (Web Analytics Server written in C++ Boost under Boost Open Source license)
Pion binary downloads for Redhat, Ubuntu, OSX and Windows are available at: http://www.atomiclabs.com/pion-web-analytics/download.php
1) Pion Core Platform: Pion Core is an open source software platform for building stream computing (also known as complex event processing) applications.
2) Pion-Net Library:The Pion Network Library (pion-net) is a C++ development library for implementing lightweight HTTP interfaces. (C++ Boost STL Multithreading Asio Networking Library) Download the source code here


ACE:

  • ACE is an open-source framework that provides many components and patterns for developing high-performance, distributed real-time and embedded systems. ACE provides powerful, yet efficient abstractions for sockets, demultiplexing loops, threads, synchronization primitives.

  • TAO (The ACE ORB) is an open-source implementation of a CORBA Object Request Broker (ORB) built using components and patterns in the ACE framework.

  • CIAO (Component Integrated ACE ORB) is an open-source implementation of the CORBA Component Model (CCM) built on top of TAO.

  • DAnCE is an open-source implementation of the Deployment and Configuration standard (D&C) built on top of TAO.



  • Download ACE, TAO and CIAO source code  (Distributed Network Middleware Framework and ORB)

    uIP (Micro implementation of TCP/IP stack)
    Download - uIP source
    Memcached distribute caching: memcached - Google Code, memcached - GitHub



    [STL]
    SGI STL Site and Resources (Design docs, FAQs, Books)
    Download SGI STL source code (C++ Standard Template Library implementation)
    (Related to STL)
    A standard allocator for C++ STL on sourceforge
    Database Template Library - DTL on sourceforge
    DTL docs
    Download DTL source code

    [Other]
    VideoLAN - VLC media player source code
    LXR Cross Referencer  (Online Source code Browser)