text:
Become a fan of Slashdot on Facebook

Forgot your password?
Compare cell phone plans using Wirefly's innovative plan comparison tool ×

Cuban Video Game Recreates Revolutionary History 199

Hugh Pickens writes writes "The Guardian reports that Cuban programmers have unveiled a new 3D video game that puts a revolutionary twist on gaming, letting players recreate decisive clashes from the 1959 uprising in which many of their grandparents fought. 'The player identifies with the history of Cuba,' says Haylin Corujo, head of video game studies for Cuba's Youth Computing Club and leader of the team of developers who created Gesta Final – roughly translated as 'Final Heroic Deed'. 'You can be a participant in the battles that were fought in the war from '56 to '59.' The game begins with the user joining the 82 rebels who in 1956 sailed to Cuba from Mexico aboard the Granma. Players then fight their way through swamps shoulder-to-shoulder with bearded guerrillas clad in the olive green of Fidel Castro and Ernesto 'Che' Guevara to topple 1950s Cuban dictator Fulgencio Batista. The game lets you pick from three player profiles, one in an olive hat similar to the one Fidel Castro was known for, another wearing a Guevara-style beret and the last with the kind of helmet worn by the ill-fated Camilo Cienfuegos in many revolution-era photographs. Rene Vargas, a 29-year-old gamer who tried his hand at 'Gesta Final' when it was presented at a technology fair in Havana last week, says the graphics were surprisingly sophisticated. 'Bearing in mind the level of technical support there is in Cuba, it looks pretty good,' says Vargas. There are about 783,000 computers in this country of some 11 million inhabitants, according to government statistics from 2011. Private ownership of computers is low, but many Cubans access them at work, school or cyber cafes. 'We developed (it) keeping in mind the purchasing power and reality of Cubans,' says Corujo. 'It doesn't require incredible technological features.'"
This discussion has been archived. No new comments can be posted.

Cuban Video Game Recreates Revolutionary History

Comments Filter:
  • by Anonymous Coward

    Yeah Castro and his boy Che Che are real fucking heros. Che ran Castro's death camps and got off murdering people. HEROS!!

    • by TarPitt ( 217247 )

      You should take advantage of our amazing free enterprise system and create a counter-game called "Free Market: Chile"

      I'm sure the thrilling scenes of political opponents being thrown from helicopters into the Pacific Ocean will take your breath away.

      All in the interests of defending freedom of course

      Show those Cubans what real freedom is all about

  • by sandytaru ( 1158959 ) on Sunday March 31, 2013 @10:02AM (#43324029) Journal
    Seems no different in premise than the Call of Duty games or any of the other war games that USians love to play. Too bad it appears to be a single player game and not an MMO - that would be rather awesome.
  • Screenshots (Score:5, Informative)

    by Paul Slocum ( 598127 ) on Sunday March 31, 2013 @10:18AM (#43324109) Homepage Journal
    This article [] has screenshots and more details about gameplay.
  • by Required Snark ( 1702878 ) on Sunday March 31, 2013 @10:29AM (#43324169)
    Maybe there could be a following for this in the US. Right wingers could play to loose, and fulfill their fantasies about blotting Castro's Cuba out of history. Plus, if they can get it for free on the web, they could feel like they're ripping off Cuba.

    I wonder if it has DRM? Is it FOSS? What does that mean in a socialist state?

    Maybe the Cubans could give the game platform to Viet Nam, and they could come up with a plotline where you follow Ho Chi Min to his defeat of the imperialist US invaders. There's jungles and tropical climate in both situations, right.

    In China, they could have the Long March MMOG.

    On a somewhat more serious note, this is somewhat an exercise in jumping the shark. If you're at the point where you promote your history/ideology by turning it into a video game, it's ceased to be current experience, and has moved into the realm of cultural myths.

    In the US, the number of people who have combat experience is dwarfed by the the ranks of the FPS gamers. The real experience of war has been eclipsed by the glamorized painless video version. It's likely that the sanitized version has displaced reality in the minds of a lot of people. This can't be a good thing.

    • by dbIII ( 701233 )
      Either way the clock here shows April 1 and some Slashdot contributiors are in this timezone.

    • America's Army was released free to the public. I would imagine this game would be as well, coming from the Ministry of Communications (which strangely does not have a website).

      Cuba itself just hosted on IP conference. Here's the program [], and here's a snippet of it:

      Tuesday, March 19, 2013
      9:05 - 10:30
      Challenges of Protecting Intellectual Property on Social Networks (Software Industry)
      Rafael Ortín, Marquez, Henriquez, Ortin & Valedon,
      Slobodan Petosevic, Petosevic, Belgium

      This says nothing about Cuban

    • Obligitory grammar nitpick: surely you mean play too loose?

  • are the Tropico games banded there??

    • by thewolfkin ( 2790519 ) on Sunday March 31, 2013 @11:26AM (#43324527) Homepage Journal
      was Call of Duty banned there? I thought I recalled hearing about a mission where you assassinated Fidel Castro which I thought was rather ballsy considering Castro was alive at the time and not at war with the country. That'd be like the NAACP making a game where you assassinate former President Bush.
      • No have no idea what the NAACP is, do you?

      • by AdamHaun ( 43173 )

        was Call of Duty banned there? I thought I recalled hearing about a mission where you assassinated Fidel Castro...

        That was the first mission in Call of Duty: Black Ops. You play a special forces team sent in with the failed Bay of Pigs invasion in 1961. The goal of the mission is to kill Castro, but you only end up killing a body double. (It's based on a real historical event, so they couldn't actually have him get killed.)

  • by Anonymous Coward

    I'm sure his fanboys will make excuses, but here are the words of Che Guevara:

    "The blacks, those magnificent examples of the African race who have maintained their racial purity thanks to their lack of an affinity with bathing, have seen their territory invaded by a new kind of slave: the Portuguese."

    "The black is indolent and a dreamer; spending his meager wage on frivolity or drink; the European has a tradition of work and saving, which has pursued him as far as this corner of America and drives him to ad

    • by orzetto ( 545509 ) on Sunday March 31, 2013 @04:50PM (#43326491)

      Fanboi here. That's a passage from his younger diaries, when he had barely had contact with blacks and was certainly not politically defined as he would become later. He wrote that when he was about 24. Later, he wrote the following []:

      Those who kill their own children and discriminate daily against them because of the color of their skin; those who let the murderers of blacks remain free, protecting them, and furthermore punishing the black population because they demand their legitimate rights as free men — how can those who do this consider themselves guardians of freedom?

      It might be noted he later actually fought and bled in Congo fighting against Mobutu along Congolese revolutionaries.

      That's not to say everything he did was right. He was a proponent of death penalty, something a man of his education (he was a doctor) should have abhorred already in the 60s. He heavily miscalculated the campaigns in Congo and Bolivia. But racist? No way.

  • by Python ( 1141 ) on Sunday March 31, 2013 @03:35PM (#43326115)

    Oh boy, I sure hope this game lets you blind fold and shoot people that didnt go along with the glorious Cuban revolution! []

    • I bet you're still waiting for a computer game where you get to sit in a helicopter and mow down unarmed Vietnamese rice farmers. Oh wait, would that be a double standard I hear?
      • by khallow ( 566160 )

        Oh wait, would that be a double standard I hear?

        For who? Certainly not for the Castros who seem to have no qualms about shooting people in cold blood.

        • For anyone and everyone. There can't have been a single army in history that wasn't involved in looting, indiscriminate killing, torture or rape. And no-one seems to complain that Call of Duty doesn't have an Abu Ghraib level....

Failure is more frequently from want of energy than want of capital.


Content-Type: application/http; msgtype=response

WARC-Truncated: length

WARC-Type: response

text:
Wherever Golf is Played – Really.

Through the years, Par Aide or rather our logo and/or products have shown up in countless media, both print and video, non golf locations, and even retail stores. We are proud that to think that our logo not only says golf but is either recognizable enough or of enough perceived value to be worn/used in these many ways. From ads for Pepsi, Golf Galaxy, GOP wearables, and even as the only visual saying golf for a Hilton Head vacation promo, we are always amazed to hear about or see another.

Most recently, we have received unsolicited photos taken by friends to show us that we are Wherever Golf is Played and in a number of spots where it isn’t. Thank you Mike, Bob, and Charlie. Assuming we get some more, I will post them here in the future. Of course, if you are a Supt or vendor in our industry, I would be pleased to send you a hat for inclusion in your photo.

20121201_195530 20121202_215003 2012-11-14_14-22-56_370 155 (2) 107

The guy posing with ball washers is Charlie Miller, Supt, Goodrich GC, Maplewood, MN – Charlie takes advantage of his months off (city golf course) obviously travelling and playing golf. He sent in photos from Hawaii, Scottsdale, Sanibel Isl, Door County, etc.

The photo from football game is Mike Posey, Pine Tree CC, Birmingham, AL. This was the taken at the SEC Championship game this past fall. The one photo is Mike and his wife and the second is a frame from the national telecast.

Finally, Bob Frank, MTI (local Toro dealer), Plymouth, MN. Colorado trip with Don Belkengren, retired turf sales rep, (St Paul, MN)

4 thoughts on “Wherever Golf is Played – Really.

  1. I’m sad that paul resorts to cheapshots attacking 2 of the hardest working people in the golf industry. Everybody knows that Bob and I are constanly searching for new ideas to make our companies better no matter how far we have to travel.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

warcinfo:
robots: classic
hostname: ip-10-153-172-175.ec2.internal
software: Nutch 1.6 (CC)/CC WarcExport 1.0
isPartOf: CC-MAIN-2016-36
operator: CommonCrawl Admin
description: Wide crawl of the web for August 2016
publisher: CommonCrawl
format: WARC File Format 1.0
conformsTo: http://bibnum.bnf.fr/WARC/WARC_ISO_28500_version1_latestdraft.pdf


text:
Another guy on the radar

A great media source just informed the Hoyas recently went to to see a 6'9", Class of 2014 forward. This player attends school in Virginia.
The likes of WVU, North Carolina State, North Carolina, and a host of others have offered, or are recruiting him.
Ok, enough with the cloak and dagger routine. It's Isaac Copeland.
Discuss him further on our Premium Court message board.


text:
Will Fox Buy YouTube?

Let the bidding for YouTube begin. Except for a rumoured outrageous valuation, YouTube is a clear near-term acqusition candidate. Loren Baker at Search Engine Journal covers a Hitwise report that shows YouTube and MySpace to be the dominant entities in the nascent online video market. Here's the Hitwise traffic breakdown:

· YouTube — 42.94%

· MySpace Videos — 24.22%

· Yahoo! Video Search — 9.58%

· MSN Video Search — 9.21%

· Google Video Search — 6.48%

· AOL Video — 4.28%

· iFilm (owned by MTV/Viacom) — 2.28%

The bottom line here is that YouTube has emerged as the dominant player (so to speak) in online video. This makes the site an almost immediate candidate to be acquired. Yahoo! or Fox (MySpace's parent) are the logical acquirers. But in the second group would be everyone else: TW/AOL, MSN and Google whose own video site has failed to gain the kind of momentum the company hoped it would. Yet imagine the combination of YouTube video monetized with Google's Click to Play video ads.

I've heard that YouTube has conjured up an outrageous valuation for itself. But the traffic growth seems to justify some sort of premium. It will be bought relatively soon before it gets even more expensive to do so. Why? My understanding is that the company has a very high "burn rate" and it may be mindful of the lesson of Friendster — once hot, then not. They also don't have an effective monetization strategy going (though one may be in the "roadmap").

All those things, plus the interest of the major players, add up to an acquisition. It may turn into a bidding war because a number of these companies have equally strong interest in the space.

Here's more from MediaPost (reg. req'd). Here's some comScore data on general video viewing trends.

4 Responses to “Will Fox Buy YouTube?”

  1. LeeAnn Prescott Says:

    I added some more perspecitve to this story by examining page views for the video sites.

  2. Greg Sterling Says:

  3. Screenwerk » Blog Archive » Yahoo!’s New Video Site Launches Says:

    […] Previously announced on Analyst Day, Yahoo! has launched its new, more social and more personalized video site. All the major portals and engines are chasing breakout video star YouTube (the “MySpace of video”) and don’t really want to have to buy the site if they can avoid it. However, Yahoo!, because of its Flickr and del.icio.us acquisitions and general emphasis on “social media” is the most likely would-be suitor. […]

  4. lloyd Says:

    um… just so everyone knows, You Tube has already turned down a one billion offer from Yahoo… it’s gonna take some mighty deep pockets to aquire this killer app…

Comments are closed.

Get every new post delivered to your Inbox.

Join 137 other followers

%d bloggers like this:


text:
Marketers Trying to Get into Craigslist

This ClickZ article (via MarketingVox) discusses how marketers and spammers are struggling to get into Craiglist, given how effective and popular the site is. Why does the site work?

  • Trust in the brand
  • Engaged community
  • It works for people

The site, with its awkward user experience, testifies to the power of integrity and trust on the Internet. Without necessarily intending to build a giant brand they’ve done so by adhering to certain core principles and taking a long-term view.

Here’s my most recent post on Craigslist, “Why Craigslist Makes Analysts Crazy.”

3 Responses to “Marketers Trying to Get into Craigslist”

  1. earlpearl Says:

    Is there a community/regional/ site that approximates Craigslist? I doubt it. Can’t wait for the next site that begins to draw traffic like craigslist.

    One other thing about it. It is inexpensive. In many markets it has supplanted newspaper classified in effectiveness and killed the vital classified advertising revenues. At the same time its so inexpensive that it limits the effectiveness of competitors.

    Its a fascinating site.

  2. Greg Boser - Search Marketing Consultant - aka WebGuerrilla - News, Rants, Opinions, and Gossip From the Search Engine Marketing Industry » Craigslist Spam Says:

    […] I came across three different posts today talking about spam on Craigslist. What I found most interesting about all the stories is the fact that no one seemed to get the SEO connection. […]

  3. Jeanne Van Hook Says:

    I want to list things on Craigs List but do not know how – Can you help me?

Comments are closed.

Get every new post delivered to your Inbox.

Join 137 other followers

%d bloggers like this:


text:
cyclin dependent kinase inhibitor 1C

The CDKN1C gene provides instructions for making a protein that helps regulate growth. This protein acts as a tumor suppressor, which means that it keeps cells from growing and dividing too fast or in an uncontrolled way. It also is involved in controlling growth before birth, preventing the developing fetus from becoming too large.

People inherit one copy of most genes from their mother and one copy from their father. Both copies are typically active, or "turned on," in cells. However, the activity of the CDKN1C gene depends on which parent it was inherited from. In most tissues, the copy of the gene inherited from a person's mother (the maternally inherited copy) has much higher activity than the copy inherited from the father (the paternally inherited copy). This sort of parent-specific difference in gene activation is caused by a phenomenon called genomic imprinting.

CDKN1C is part of a cluster of genes on the short (p) arm of chromosome 11 that undergo genomic imprinting. A nearby region of DNA known as imprinting center 2 (IC2) or KvDMR controls the parent-specific genomic imprinting of CDKN1C and several other genes thought to help regulate growth. The IC2 region undergoes a process called methylation, which is a chemical reaction that attaches small molecules called methyl groups to certain segments of DNA. Methylation, which occurs during the formation of an egg or sperm cell, is a way of marking or "stamping" the parent of origin. The IC2 region is normally methylated only on the maternally inherited copy of chromosome 11.

Beckwith-Wiedemann syndrome is a condition that causes overgrowth and has other signs and symptoms that affect many parts of the body. At least half of all cases of Beckwith-Wiedemann syndrome result from changes in methylation of the IC2 region. Specifically, the maternally inherited copy of the IC2 region has too few methyl groups attached (hypomethylation). This abnormality disrupts the regulation of several genes that are normally controlled by IC2, including CDKN1C. Because this gene normally restrains cell growth and division, a reduction in its activity leads to overgrowth and the other features of Beckwith-Wiedemann syndrome.

In a few cases, Beckwith-Wiedemann syndrome has been caused by deletions of a small amount of DNA from the maternally inherited copy of the IC2 region. Like abnormal methylation, these deletions disrupt the activity of several genes, including CDKN1C.

Beckwith-Wiedemann syndrome can also result from mutations within the maternally inherited copy of the CDKN1C gene. More than two dozen such mutations have been identified. Some of these genetic changes lead to an abnormally short, nonfunctional version of the CDKN1C protein, while others alter single protein building blocks (amino acids) or delete a small number of amino acids from the protein. All of these mutations are described as "loss-of-function" because they alter the structure of the CDKN1C protein such that it can no longer control growth effectively. The resulting problems with growth regulation lead to overgrowth and the other features of Beckwith-Wiedemann syndrome.

Intrauterine growth restriction, metaphyseal dysplasia, adrenal hypoplasia congenita, and genital anomalies, commonly known by the acronym IMAGe, is a rare syndrome that affects the growth of many parts of the body. The condition is characterized by slow growth before and after birth, skeletal abnormalities, hormonal changes, and genital abnormalities in males. At least six mutations in the CDKN1C gene have been found to cause this condition. Because this gene is paternally imprinted, IMAGe syndrome results only when the mutation is present on the maternally inherited copy of the gene.

The CDKN1C gene mutations that cause IMAGe syndrome replace single amino acids in a region known as the proliferating cell nuclear antigen (PCNA)-binding domain near the end of the gene. These mutations appear to increase the stability of the CDKN1C protein, preventing it from being broken down normally. These changes increase the amount of the protein that is available to restrain cell growth and division. Because these mutations enhance the protein's usual function, they are described as "gain-of-function." The excess CDKN1C protein leads to IMAGe syndrome by impairing normal growth and development starting before birth.

Cytogenetic Location: 11p15.5, which is the short (p) arm of chromosome 11 at position 15.5

Molecular Location: base pairs 2,883,218 to 2,885,804 on chromosome 11 (Homo sapiens Annotation Release 108, GRCh38.p7) (NCBI)

Cytogenetic Location: 11p15.5, which is the short (p) arm of chromosome 11 at position 15.5
  • BWCR
  • cyclin-dependent kinase inhibitor 1C
  • cyclin-dependent kinase inhibitor 1C (p57, Kip2)
  • cyclin-dependent kinase inhibitor p57
  • KIP2
  • p57
  • p57KIP2


text:
Chapters ▾ 2nd Edition

4.4 Git on the Server - Setting Up the Server

Setting Up the Server

Let’s walk through setting up SSH access on the server side. In this example, you’ll use the authorized_keys method for authenticating your users. We also assume you’re running a standard Linux distribution like Ubuntu. First, you create a git user and a .ssh directory for that user.

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Next, you need to add some developer SSH public keys to the authorized_keys file for the git user. Let’s assume you have some trusted public keys and have saved them to temporary files. Again, the public keys look something like this:

$ cat /tmp/
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
dAv8JggJICUvax2T9va5 gsg-keypair

You just append them to the git user’s authorized_keys file in its .ssh directory:

$ cat /tmp/ >> ~/.ssh/authorized_keys
$ cat /tmp/ >> ~/.ssh/authorized_keys
$ cat /tmp/ >> ~/.ssh/authorized_keys

Now, you can set up an empty repository for them by running git init with the --bare option, which initializes the repository without a working directory:

$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/

Then, John, Josie, or Jessica can push the first version of their project into that repository by adding it as a remote and pushing up a branch. Note that someone must shell onto the machine and create a bare repository every time you want to add a project. Let’s use gitserver as the hostname of the server on which you’ve set up your git user and repository. If you’re running it internally, and you set up DNS for gitserver to point to that server, then you can use the commands pretty much as is (assuming that myproject is an existing project with files in it):

# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master

At this point, the others can clone it down and push changes back up just as easily:

$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

With this method, you can quickly get a read/write Git server up and running for a handful of developers.

You should note that currently all these users can also log into the server and get a shell as the git user. If you want to restrict that, you will have to change the shell to something else in the passwd file.

You can easily restrict the git user to only doing Git activities with a limited shell tool called git-shell that comes with Git. If you set this as your git user’s login shell, then the git user can’t have normal shell access to your server. To use this, specify git-shell instead of bash or csh for your user’s login shell. To do so, you must first add git-shell to /etc/shells if it’s not already there:

$ cat /etc/shells   # see if `git-shell` is already in there.  If not...
$ which git-shell   # make sure git-shell is installed on your system.
$ sudo vim /etc/shells  # and add the path to git-shell from last command

Now you can edit the shell for a user using chsh <username>:

$ sudo chsh git  # and enter the path to git-shell, usually: /usr/bin/git-shell

Now, the git user can only use the SSH connection to push and pull Git repositories and can’t shell onto the machine. If you try, you’ll see a login rejection like this:

$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.

Now Git network commands will still work just fine but the users won’t be able to get a shell. As the output states, you can also set up a directory in the git user’s home directory that customizes the git-shell command a bit. For instance, you can restrict the Git commands that the server will accept or you can customize the message that users see if they try to SSH in like that. Run git help shell for more information on customizing the shell.


text:
Tim Morgan edited this page Apr 9, 2016 · 30 revisions

OneBody is a private member portal for churches, built with Ruby on Rails.

You can see screenshots and a feature list at https://church.io.

Install Now

Install on DigitalOcean

See the Installation page for other ways to install OneBody.

Get Help

Improve OneBody

Check out the Readme if you want to get everything set up in a dev environment. Then start hacking!

Join our Slack Chat and discuss your ideas.

We've assembled some common questions and answers in FAQs for Contributors.

Check out the Roadmap to see where we're (most likely) going with the project.

See Translations for more information about how we make OneBody work in different languages.


text:
AirMozilla is the video broadcasting site for the Mozilla project
Python JavaScript HTML CSS Brightscript Makefile Other
Failed to load latest commit information.
airmozilla fixes bug 1268717 - misc key/value store for events (#744) Aug 26, 2016
bin bug 1292937 - upgrade pip in docker (#728) Aug 11, 2016
docs Add gitkeep files instead of empty gitignore files to denote empty di… Sep 16, 2011
lib/product_details_json Revert "Removed the old hard-coded product details since it's in a su… Nov 14, 2011
mysql2postgres fixes bug 897167 - Tag Cloud page Sep 24, 2013
roku fixes bug 1141318 - Trending videos on Roku Mar 9, 2015
vidlyserver fixes bug 1132249 - Switch to using AddMediaLite Feb 19, 2015
wsgi add root to sys.path Oct 22, 2015
.coveragerc ignore some more things Jul 29, 2016
.editorconfig we use 2 spaces for HTML indentation Feb 26, 2015
.eslintrc fixes bug 1167368 - Selfies Jun 2, 2015
.gitignore fixes bug 1215675 - Stop using funfactory Oct 18, 2015
.gitmodules fixes bug 1119531 - Ditch playdoh-lib in favor of using peep instead Jan 16, 2015
.pep8 upgrade pipstrap Jan 28, 2016
.travis.yml remove references to git submodules Jan 28, 2016 added note about [good first bug] Oct 27, 2014
Dockerfile bug 1292937 - upgrade pip in docker (#728) Aug 11, 2016
LICENSE fixes bug 1220749 - Switch from django-compressor to pipeline Nov 11, 2015 More pythonic Playdoh layout: no top level __init__, no apps Jan 9, 2012 minor updates Jun 16, 2016
contribute.json New whatsdeployed URL Dec 14, 2015
dev-requirements.txt upgrade coverage and pyflakes Jul 29, 2016 fixes bug 1280589 Edited instructions in (#704) Jun 17, 2016
docker-compose.yml fixes bug 1132723 - Drop test-utils Oct 15, 2015 fixes bug 1215741 - Resolve all RemovedInDjango18Warning warnings Oct 22, 2015
package.json fixes bug 1239131 - Switch to uglify-js (#701) Jun 14, 2016
requirements.txt upgrade lxml (#735) Aug 12, 2016 Renamed project module to airmozilla Jun 7, 2012

Air Mozilla

Build Status Coverage Status

Live: Stage: Dev:

Air Mozilla is the Internet multimedia presence of Mozilla, with live and pre-recorded shows, interviews, news snippets, tutorial videos, and features about the Mozilla community.

Wiki page:

Most of this information is also available on

How to get it running locally from scratch

First of all...

All of these manual steps can be done with one optimistic script. All you need is to have Python (2.7) installed.

Download this file and manually run:

It will ask you a series of questions and how and where you want it installed.

Doing it the manual way...

This section assumes you know about and are using a virtualenv. If you're not familiar with virtualenv, that's fine. You can use your "system python" but a virtualenv is advantageous because you get a self-contained python system that doesn't affect and isn't affected by any other python projects on your computer.

Also, these instructions are geared towards developers working on the code. Not system people deploying the code for production.

Step 1 - The stuff you need

You're going to need Git, Python 2.7, a PostgreSQL database (partially works with MySQL and SQLite too) and the necessary python dev libraries so you can install binary python packages. On a mac, that means you need to install XCode and on Linux you'll need to install python-dev.

This article on has a lot of useful information.

Make sure that your pip in your virtualenv is version 8 or higher! To check it might look like this:

$ pip --version
pip 8.0.2 from /Users/peterbe/virtualenvs/airmozilla/lib/python2.7/site-packages (python 2.7)

Once you have a virtualenv you want to use, you need to install all the dependencies. You do this with:

pip install -r requirements.txt
pip install -r dev-requirements.txt

The second file is necessary so you can

Step 2 - Get the code

Note: We're assuming you have already activated a virtualenv which will have its own pip.

git clone
cd airmozilla
pip install -r requirements.txt
pip install -r dev-requirements.txt

Step 3 - Create a database

To create a database in PostgreSQL there are different approaches. The simplest is the createdb command. How you handle credentials, roles and permissions is generally out of scope for this tutorial.

createdb -E UTF8 airmozilla

You might at that point need to supply a specific username and/or password. Whichever it is, take a note of it because you'll need it to set up your settings.

Step 4 - Set up the settings

The first thing to do is to copy the settings "template".

cp airmozilla/settings/ airmozilla/settings/

Now open that airmozilla/settings/ in your editor and we'll go through some essential bits.

    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'airmozilla',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': '',
        'PORT': '',
    # 'slave': {
    #     ...
    # },

Here, replace username and password accordingly. If you want to use MySQL, which should work except the Search, you replace the ENGINE setting with django.db.backends.mysql.

For local development, make sure the following lines are uncommented:

DEBUG = True

Since Air Mozilla uses a lot of AJAX calls, it may not be useful for errors to show up in the browser when they happen. It may be more useful to have all the errors appear in the terminal console. This is a matter of personal taste, but if you want all the errors to appear in the terminal add this line:

And, since you're probably going to run the local server NOT on HTTPS you uncomment this line:

For security, you need to enter something into the SECRET_KEY.

SECRET_KEY = 'somethingnotempty'

By default, you need a Memcache server up and running. The connection settings for that is not entered by default. So if you have a Memcache running on the default port you need to enter it for the LOCATION setting like this:

    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'KEY_PREFIX': 'airmoz',
        'TIMEOUT': 6 * 60 * 60,
        'LOCATION': 'localhost:11211'

If you want to use a local in-memory cache instead, use the following CACHES setting:

    'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        'LOCATION': 'unique-snowflake'

By default, all the default settings are geared towards production deployment. Not local development. For example, the default way of handling emails is to actually send them with SMTP. For local development we don't want this. So uncomment the line EMAIL_BACKEND to:

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Note! See below on How to Debug Emails for a more extensive exploration on this.

The majority of the remaining settings are important security details for third-party services like AWS,, Mozillians, Twitter, and Sentry.

Getting actual details there is a matter of trust and your relationship to the project. Some things will obviously not work without these secrets, the file upload for example won't work without AWS credentials. But things aren't necessary should be something you can just go around. If something doesn't work at all without having certain security settings, it's considered a bug.

Step 5 - Running for the first time

The very first thing to run are these commands:

./ migrate

The syncdb command will ask you to set up a first default superuser. Make sure you use an email address that you can log in to Persona with.

And last but not least:

./ runserver

Now you should be able to open http://localhost:8000.

Step 6 - Running the Celeryd message queue worker

We use a message queue to execute some slow tasks in the background. By default it doesn't need neither RabbitMQ or Redis to hold the jobs. Instead, by default, it uses our own Django and PostgreSQL which we use for everything else.

To start the message queue worker use:

./ celeryd

To test that this is working, once you've signed in to the site for the first time, and signed in as a super user you will get an extra link in the Management pages called "Tasks Tester". Click that to make a test that your message queue is working.

Random/Sample data

Now that you have a working version running you'll find that it has nothing in it. This will make it harder to get a feel for certain features and it definitely makes it hard to optimize things where there's so little there.

There is a command that is under active development and creates the bare minimum. If you find it's not creating certain type of data that you need then feel free to send in a patch on the code.

You can run this command repeatedly and it should not break.

./ generate-fake-data 1000

The number at the end is how many events you want to generate.

This will also create various other things like random Regions, Locations, VideoTemplates, Pictures, Users etc.

How to get it running with Docker Compose

You need to install Docker and Docker Compose in your machine and then you can build the image, but first you have to modify your airmozilla/settings/ file so it can connect to the database and memcached.

    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'postgres',
        'USER': 'postgres',
        'HOST': 'db',
        'PORT': '',

    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'KEY_PREFIX': 'airmoz',
        'TIMEOUT': 6 * 60 * 60,
        'LOCATION': 'memcached:11211'

After this you can run the app by doing:

docker-compose up

With this the Django test server will we running, so if your are on Linux you can connect to localhost:8000 or to if you are on Windows or Mac. Due the fact that on Windows and Mac docker uses boot2docker this ip can change at some point, to know the exact ip address you can execute boot2docker ip.

If you want to run regular tests you can execute:

docker-compose run web ./ test

If you want to run all included selenium tests, don't forget to add RUN_SELENIUM_TESTS = True and then execute:

docker exec -it airmozilla_web_1 ./ test

Also if you want to ssh into the running container for debugging you should execute:

docker exec -it airmozilla_web_1 bash

How to contribute

There are levels of contribution. All are appreciated.

Filing bugs

The best start you can get is to file bugs when you spot things that are broken or could be made better. Don't be shy with filing bugs that are actually feature requests. Your voice will always be appreciated.

To file a bug go to this URL

Taking bugs/Finding bugs to work on

If you spot a bug that you would like to work on, you can either just get started and when you present your patch you hope that nobody else was working on it at the same time. Or you can post a comment on the bug saying you'd like to work on this.

An even better way would be to jump into IRC on the #airmozilla-dev channel and ask around about the feature/bug you intend to work on.

We don't assign bugs to people until after the bug is resolved.

Writing code patches

All code patches have to be submitted as GitHub Pull Requests on

When a pull request is made, our automation will check a couple of things:

  1. Strict PEP8 and pyflakes standards. If your patch introduces code with incorrect indentation or lines too long the pull request will fail. This rule is there to remove any debate about how to style code as per how a machine likes it. It makes it non-subjective and clear.

  2. All tests are run on Travis in Python 2.7. If any test fails, the pull request fails.

  3. Test coverage regression. Test coverage is measured for every pull request and if you introduce a patch that has more features/changes than it has test coverage the test coverage percentage goes down and this doesn't necessarily fail the pull request but it will be less likely to be merged.

When you start working on a patch, please try to make it only about the bug you're working on. Try to avoid fixing other things that aren't related to the issue at hand.

Always start your work in a new git branch. Don't start to work on the master branch. Before you start your branch make sure you have the most up-to-date version of the master branch then, make a branch that ideally has the bug number in the branch name.

Also, your git commit message should contain the bug number. If you think by merging this patch it should resolve the bug you can add the prefix "fixes" before the bug number. Like this for example:

git pull origin master
git checkout -b bug123456789-fixing-that-thing work work...
git commit -a -m "fixes bug 123456789 - Fixing that thing"
git push myforkremote bug123456789-fixing-that-thing

When you have created a pull request on GitHub, take the URL to the pull request and post that as a comment on the bug on Bugzilla.

Rebasing branches

Oftentimes, when you start on a branch and make a pull request you might be asked to correct things and add more commits to it until the tests pass and it's ready to be merged.

You might then be asked to rebase and squash your branch into a single succinct commit. This makes it easier to look back into the commit history when we reflect on what we've done in the year or last year.

If you're unfamiliar with rebasing, there are plenty of tutorials online but you can also say so and we can rebase it for you manually.

Easy does it

Any change is a good change. Getting warmed up and familiar with the code base is best done in incremental steps. Try to start small and go through the steps until the code has landed. The sense of accomplishment for getting your name into the commit log history is a great boost for tackling more advanced features or bugs.

Code style

Consistency is key. Mixing conventions and styles makes code look un-maintained and sticking to one way makes it easier to just do instead of having to think about style choices.

For Python, all code must be PEP8 and pyflakes compliant. See the section on PEP8 and pyflakes. There are some things that flake8 can't automatically check for. For example some choices on indentation using newlines to split code up.

# bad
channel = Channel.objects.create(name="Something",

# ideal
channel = Channel.objects.create(

For Javascript, use the notation of spaced before and after brackets.

// bad
if(number < 42){
    return 'less';

// ideal
if (number < 42) {
    return 'less';

For both Javascript and Python there is no rule on using single quotation marks (') or double quotation marks ("). But what ever the file is using, try to stick to that.

For CSS ideally we avoid one-liners. Feel free to use plenty of space.

/* bad */
.event, h2.summary{background-color:#fff;font-size:10px}

/* ideal */
h2.summary {
    background-color: #fff;
    font-size: 10px;

Getting help

The best place to get help on development is to go to the #airmozilla-dev IRC channel on

Tests and test coverage

Included is a set of comprehensive tests, which you can run by: ./ test

If you want to run selenium tests don't forget to add RUN_SELENIUM_TESTS = True in your airmozilla/settings/ file.

To see the tests' code coverage, use: ./ test --with-coverage --cover-erase --cover-html --cover-package=airmozilla

Then, when it completes, open the file ./cover/index.html.

You can run tests with any level of granularity: To run a specific file, use: ./ test -s -x airmozilla/manage/tests/

To run a specific test case class in a file: ./ test -s -x airmozilla/manage/tests/

To run a specific test in a class in a specific file: ./ test -s -x airmozilla/manage/tests/

The -s makes it so that any print statements aren't swallowed if tests pass. The -x means it bails as soon as 1 test fails.

Deprecated Files

Make sure you don't have a ./vendor or ./vendor-local directory. This functionality has been deprecated. All dependencies are now contained in the requirements.txt file.

Unable to sign in

There are several reasons why sign in might not work. A common problem is that you have problems with CSRF and those are usually because of caching not working. Or a security setting.

If you see this in the runserver logs:

15/Oct/201X 14:53:37] "POST /browserid/login/ HTTP/1.1" 403 2294

It means that the server gave you a cookie which couldn't be matched and checked when sent back to the server later.

To check that caching works run these blocks:

./ shell
>>> from django.core.cache import cache
>>> cache.set('some', 'thing', 60)
>>> ^D

(^D means Ctrl-D which means to exit the shell) then

./ shell
>>> from django.core.cache import cache
>>> cache.get('some')

If it doesn't say 'thing' it means it wasn't able to cache things. This is most likely because you have configured django.core.cache.backends.memcached.MemcachedCache as your preferred cache backend but that server isn't up and running.

Consider then to either figure out how to start your memcache server or switch to django.core.cache.backends.locmem.LocMemCache.

Another common mistake is to not have SESSION_COOKIE_SECURE = False in your airmozilla/settings/ but using http://localhost:8000 to reach the site.

Tests are slow

By default when you run ./ test ... it will re-create the database for every run. This takes 5-10 seconds extra time every time. If you know that the testing process doesn't involve any complexities in terms of migrations, you can speed up the tests a lot by setting the environment variable REUSE_DB=1. For example like this:

REUSE_DB=1 ./ test

Or to make it stick, use:

export REUSE_DB=1
./ test

To generate a schema migration, make changes to, then run:

./ makemigrations main

If you, for example, made a migration to the main app.

To generate a blank data migration, use:

./ makemigrations main --empty

Then fill in the generated file with logic, fixtures, etc.

To apply migrations:

./ migrate

See the requirements/ directory for installation dependencies. This app requires a working install of PIL with libjpeg and libpng.

First run

./ migrate

If you'd like to create a default set of example groups with useful permissions (Event Organizers, Experienced Event Organizers, PR, Producer):

./ create_mozilla_groups

Logging in

We use Persona to handle all log in. If you haven't used it before, it's fine. It's free and easy and works with any email address.

Because the code is built to only allow people with certain email address domains, (e.g. you might need to fake this if you don't have a email address. To do that, open the file airmozilla/settings/ and add to the bottom this:

...assuming your preferred email address is a one. But note, only enter the domain of your email address. Not the whole email address.

Becoming a Superuser

Superusers have full unbound permissions to do anything and everything.

On a blank database with no content, the only way to become a Superuser is to sign in once, then go to the command line and manually change the data so that you're now a superuser.

./ shell
>>> from django.contrib.auth.models import User
>>> my_user = User.objects.get(email='')
>>> my_user.is_superuser = True
>>> my_user.is_staff = True

Optimizing thumbnails

By default, the thumbnails that are generated from uploads of PNG files get generated as .png thumbnail files. These tend to be pretty large and can be optimized down without virtually any visual difference. To enable it, install pngquant and the override the local settings and set it like this:

Adding a sample video

Once you're a superuser, the simplest way to add sample content is to use existing media from Air Mozilla. We're first going to create a template, then create content based on this template.

Let's create the Video template:

  • Go to the management page at http://localhost:8000/manage
  • Click on Video templates in the left menu, and initiate a template with New template
  • Fill the Name with ""
  • Fill the Content with

    <iframe frameborder="0" allowfullscreen width="896" height="504" name="vidly-frame"
     src="{{ tag }}&new=1&autoplay={{autoplay}}&hd=yes"></iframe>
  • Save changes

We're now going to initiate an event with this template:

  • Click on Initiate event in the left menu of the management page
  • Choose the template
  • Replace the Template environment with tag=7u9u1i
  • Change status to Scheduled
  • Choose a title, a description, a start time, a channel (Main) and a placeholder image
  • Save and submit

You should now see your video in the Event manager (http://localhost:8000/manage/events/) and on the main page (http://localhost:8000/)!

How to Debug Emails

Air Mozilla depends on pretty emails to be sent to real people. To debug these emails that we send, you don't want to have to rely on actually sending them for reals.

To get actual .eml files (that can be opened with Mail, Airmail or Thunderbird) on your file system, add this to your airmozilla/settings/

EMAIL_BACKEND = 'airmozilla.base.utils.EmlEmailBackend'
EMAIL_FILE_PATH = '/tmp/captured-emails/'

Now, to actually send some emails, you can either click around and perform various actions that trigger sending an email. Then you can inspect the files that get created in that directory set EMAIL_FILE_PATH to. Or, you log in to the management pages as a superuser and click the "Email Sending" tool in the bottom of the navigation bar.

Cron jobs

All cron jobs are managed by two files: First airmozilla/manage/ where you kick things off. Then, later the crontab file is compiled and installed by bin/crontab/crontab.tpl. These are the two files you need to edit to change, add or remove a cron execution.

To test tweeting locally, what you need to do is set up some fake authentication credentials and lastly enable a debugging backend. So, add this to your settings/

TWITTER_USERNAME = 'airmozilla_dev'

Now, to avoid actually using HTTP to post this message to instead add this to your settings/

TWEETER_BACKEND = 'airmozilla.manage.tweeter.ConsoleTweeter'

That means that all tweets will be sent to stdout instead of actually being attempted.

To send unsent tweets, you need to call:

./ cron send_unsent_tweets

This can be called again and again and internally it will take care of not sending the same tweet twice.

If errors occur when trying to send, the tweet will be re-attempted till the error finally goes away.

Deployment of dev, stage and prod is all done using Chief. More will be written about it soon. URL Shortener

To generate a access token you need the right email address and password. If you have access you can go to

To generate it use this command:

That will spit out a 40 character code which you set in settings/ for the BITLY_ACCESS_TOKEN setting.

About the database

Even though we use the Django ORM which is database engine agnostic, we have to have PostgreSQL because we rely on its ability to do fulltext index searches.

PEP8 and pyflakes

All (with some few exceptions) code needs to be fully pep8 and pyflakes compliant. And line length for Python is expected to be under 80 characters wide.

The help yourself enforce this automatically, you need to set up the following git hooks. First, in your virtualenv, install this:

pip install -U flake8

Next you need to create (or amend) the file:

.git/hooks/pre-commit contain the folllowing...:

for file in `git diff --cached --name-only --diff-filter=ACM | sort | uniq`
        if [ ${file: -3} == ".py" ]; then
            flake8 $file
            if [ "$?" -ne "0" ]; then
        if [ ${file: -3} == ".js" ]; then
            jshint $file
            if [ "$?" -ne "0" ]; then

if [ "$exit_code" -ne "0" ]; then
    echo "Aborting commit.  Fix above errors or do 'git commit --no-verify'."
    exit 1

And make sure it's executable by running:

chmod +x .git/hooks/pre-commit

Next time you type git commit -a -m "fixes bug" it might block you and spit out a message like this instead:

airmozilla/main/ F401 'Sum' imported but unused
airmozilla/main/ E501 line too long (81 > 79 characters)
Aborting commit.  Fix above errors or do 'git commit --no-verify'.


text:
Alice in Wonderland! ^-^

Hello loves!😀 Finally, I’ve got a new look and tutorial for you! I’m continuing my Alice in Wonderland series, by doing a look inspired by Alice herself!🙂 She has a blue and white dress, so I’ve used lots of blue eyeshadows and one of my favorite glitters (Varsity Blue by TheNailDazzle). I’ve only used a little bit of white. x)

Alice has this cute bow in her hair, so I wanted to try and create bows on my eyes. In the video, I’m showing you a pretty easy way of creating them!😉

Products used:

  • Lime Crime – Candy eyed eyeshadow helper
  • Lime Crime – eyeshadow in Parasol
  • NYX – Jumbo pencil in Milk
  • Sugarpill – Eyeshadow in Afterparty
  • Sugarpill – Eyeshadow in Velocity
  • Sugarpill – Eyeshadow in Tako
  • Sugarpill – Eyeshadow in Buttercupcake
  • Sugarpill – Loose eyeshadow in Royal Sugar
  • Sugarpill – Lashes in Flutter
  • Sigma – Flare palette in Publicize
  • Too Faced – Liquif Eye eyeshadow transformer
  • L’Oreal – Super liner in Carbon Gloss
  • Maybelline – One by one mascara
  • Too Faced – Brow envy kit
  • DUO – Eyelash adhesive
  • Gem from Ebay

Most of the eyeshadows in this look, are from Sugarpill!

I hope that you enjoyed the look and the tutorial!❤

20 thoughts on “Alice in Wonderland! ^-^

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text:
Learn more about Lingua Translation  »

Mumbai, India attacks 2008

On November 26, 2008 the city of Mumbai in India came under attack in at least seven different locations in an unprecedented sort of terror. A combination of gun fire, blasts, grenade blasts have been used to attack cinema halls, hotels, hospitals, and other public places. According to media sources 26 armed terrorists came to Mumbai in rubber boats and landed at the Gateway of India. They captured vehicles from the street on gun-point and moved to various targets which included Taj Mahal Hotel, Oberoi Trident Hotel, Ramada Hotel, restaurant Leopold Cafe, Mumbai Chhatrapati Shivaji Terminus (CST) railway station, Metro movie hall, Cama Hospital, police headquarters and other prominent places in the city.

The terrorists so far killed 195 people and injured more than 300. Media reports say that the terrorists searched for British and US nationals in the hotels and at least 100 people have been held hostage at the Taj Mahal and Oberoi Trident hotels.

An organization called Deccan Mujahideen has taken responsibility for the attack. The police have seized the boats which carried the terrorists.

(Image of the Taj Hotel by USELESSNANO)

Global Voices coverage about the Mumbai attacks

Dec 1 – Israel: Mourning Mumbai
Dec 1 – India: Poets on Mumbai Terror
Nov 29 – Pakistan: Blame Game On Mumbai Terror – The Blogosphere Speaks
Nov 29 – India: Kashmir and Mumbai
Nov 28 – Caribbean: Watching Mumbai
Nov 28 – Mumbai and Terror: The Day After
Nov 28 – Israel: Updates on the Chabad Home Hostage Operation in Mumbai
Nov 28 – India: Who are they, and what is the Media saying?
Nov 28 – India: Mistakes, Media and Mumbai
Nov 27 – Mumbai: The Taj Hotel Burns
Nov 27 – War, Terror and Mumbai
Nov 27 – Middle East: Mumbai Terror Attack “Crazy and Inhumane”
Nov 27 – Israel: Sending Help and Sympathy to Mumbai
Nov 27 – Terror in Mumbai: Theories, strategies and more Media
Nov 27 – Pakistan: Blogosphere Stands United With India Against Terrorism
Nov 27 – India: Political will, terrorism and Mumbai
Nov 27 – India: Twitting The Terror
Nov 27 – India: Media, Mumbai and Terror Attacks
Nov 27 – Bangladesh: Bangla blogs react to the Mumbai terror attacks
Nov 27 – Middle East: Shock and Anger at Mumbai Terror Attacks
Nov 26 – India: Terror attacks continue in Mumbai
Nov 26 – India: First photographs of Mumbai blasts on Flickr
Nov 26 – India: Blasts, Gunfire and Terror in Mumbai

Link posts:

Dec 2 – India: Mumbai Limps Back To Life
Dec 1 – Jamaica, Bermuda: Quotes on Mumbai
Dec 1 – India: Will Mumbai Be The Same Again?
Dec 1 – India: Perspectives On The Mubai Attack
Nov 30 – The Baltics, India: “The Dangers of Turning a Minority into an Underclass”
Nov 29 – India: Advice from a Sri Lankan
Nov 29 – India: Interview With The Mumbai Terrorists
Nov 28 – Madagascar: Designer is one of the victims of the Mumbai Attacks
Nov 28 – Pakistan: In solidarity with Mumbai
Nov 28 – India: A Muslim Speaks
Nov 28 – India: Responding To The Terrorist Attacks
Nov 28 – India: Lack of Original Citizen Media Reporting
Nov 28 – Two Egyptian Hostages in Mumbai
Nov 27 – India: Updates On Hostage Situation
Nov 27 – India: Where Is The Leadership?
Nov 27 – India: Sensationalism of TV Media
Nov 27 – India: List of casualties in Mumbai attacks

Annotated Google map tracking the attack points:

View Larger Map

Other resources:
Wikipedia page on the November 26 Mumbai attacks
– Timeline: Two days of terror – The New York Times
– Timeline: Mumbai under attack – BBC
Twitter feed for #mumbai (see live feed graphic below)
– Gauravonomics blog post rounding up citizen media responses to the attacks.
– List of blogs live Blogging the attacks at Gauravonomics Blog, Blog Adda and
Mumbai Help blog
Mumbai Metblogs
NowPublic coverage
– Coverage at Indian citizen media sites – Instablogs and Merinews
Mahalo coverage
GroundReport coverage
Podcast by SAJA at Blog Talk Radio
Mumbai terrorist attack map by GeoCommons
– Facebook groups:
# In Remembrance of the 11/26 Mumbai Bombings & All Those Affected
# In Honor of the Bombaby Blasts 11/26- 11/… : Wear a White Shirt on Monday Dec 1
The Big Picture at
– Flickr photoset by Soumik Kar
– Flickr photos from Vinu's Online Cloud

#mumbai Twitter Search

Receive great stories from around the world directly in your inbox.

Sign up to receive the best of Global Voices
Email Frequency

No thanks, show me the site


text:
Guitar World Interview: Guitarist Lee Ritenour Delivers ‘Rhythm Sessions’

In a career that spans five decades and more than forty albums, guitarist Lee Ritenour has developed a unique balance between the wisdom of experience and the enthusiasm of youth. Ritenour’s 2010 album, “6 String Theory” focused primarily on guitar and featured the winners of his 2009 guitar competition alongside guest appearances by guitar greats BB King, Steve Lukather and Slash among others.

For his new album, “Rhythm Sessions” Ritenour has added the winners of his 2012 Rhythm Section Competition which includes aspiring keyboardists, bassists and percussionists as well. The result is an album of sonic euphoria. From catchy songs like “The Village” and “LA By Bike” to the hypnotic vocal of Zamajobe on a remake of Stereophonics “Maybe Tomorrow”, there are elements that will appeal to both guitar and jazz fans alike.

I had the chance to speak with Ritenour about Rhythm Sessions, the competition and a really cool story about his days as a session player.

Check out the rest of my Guitar World interview with Lee Ritneour Here!

About James Wood

Influenced by life, love and the pursuit of the perfect song is what best describes my passion. I’m a closeted classic rock/metal-head from the 80′s who loves to write.

Posted on November 6, 2012, in Album Reviews, Guitar World Interviews, Music and tagged , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Get every new post delivered to your Inbox.

Join 279 other followers

%d bloggers like this:


text:
Tag Archives: magic

My Engagement Story is Better Than Your Engagement Story

"I know. It WAS better than yours!"

I like to think of myself as Old Money. Not because I have, or have ever had, any sort of real money, I just think if I did, I wouldn’t brag about it. I wouldn’t buy a McMansion on Millionaire Row and send my kids to ivy-covered prep schools, and I definitely wouldn’t drive a BMW. (I would buy a real mansion on secluded acreage, send my kids to boarding school, and have a chauffeur.)

What I’m trying to say is, I know I shouldn’t brag about my engagement. It’s just that, well, I’m so POSITIVE it’s better than yours (and am excited to read your comments to this effect), that it seems like I owe it to you to tell you that you can stop trying now. You’re welcome.

Four years ago, I said to my boyfriend something like, “My entire sense of self-worth is riding on how you propose, so I really need you to pull out all the stops.”

Unbeknownst to me, he took my words to heart and began plotting. When we flew to Las Vegas for my 25th birthday, he already had the whole thing planned. We arrived the day before my birthday, and on the morning of April 30, 2007, I couldn’t figure out why he wouldn’t let his decrepit-yet-metrosexual shoulder bag out of his sight. I started to become suspicious, but when he took a shower and I poked around, no ring was to be found.

I tried not to sound disappointed when he gave me a toothbrush as a gift. I’m very passionate about dental hygiene, so it was quite a thoughtful token.

I won some money on the slots and we went to the Paris restaurant for dinner. Things were looking up. We were excited to go see Amazing Johnathan perform at the Sahara. I’d been wanting to see him live for FOREVER.

When we arrived at the Sahara, my boyfriend made a big to-do about going to get our tickets, and someone ushered me straight to the front of the theater as if they knew me. The suspicion returned.

The show began and, to my horror, my boyfriend started texting.

“Who are you texting!?” I hissed, reminding him through my narrowed eyes that not only were we two feet from the stage, but also that I knew how to make his life miserable because only one of us could cry on command.

He put his phone away and Amazing Johnathan asked if there were any volunteers in the audience whose name began with “E.” My boyfriend, Ed, raised his hand and was selected to go on stage. Amazing Johnathan asked if Ed was with anyone, and he replied,

“Yes, my girlfriend, Julie.”

This is it, I thought, and smiled. As I gracefully walked on stage, I can assure you that I was not shaking in the slightest (because that would be the normal reaction, and I was clearly far from normal, living out the most outstanding engagement story that was or ever would be told). Amazing Johnathan asked me to put my hand on an orange while he cut around it. It would have been an embarrassingly unfunny trick -for both of us- except that when he opened the orange, there was indeed a diamond ring inside! It looked so sparkly…and sticky.

“Do you know what that is?” Amazing Johnathan said, rather dumbly if you ask me, because we all knew why we were there, and Ed got down on one knee.

“Will you marry me?” Ed asked, and I tried to think of something interesting to say. Why had I not been rehearsing this for the last 25 years?

“I suppose,” I replied, sure my wit would go unappreciated.

Amazing Johnathan congratulated me and then kissed me on the lips while everyone howled. Well, at least I can be the vehicle for someone else’s applause, I thought graciously.

For some reason, Amazing Johnathan decided to continue with his show after that, while I spent the remainder of the night grinning and cleaning orange pulp out of my new accessory.

Four years later, I’ve yet to hear a better engagement story, but if I do, I’m willing to give you my ring. I can’t wear it. It makes me break out.


text:
The Big Freeze of January 1979

Hi, Joey.  Thought you might want to post the attached photos sometime this month.
There always seem to be photos of Gloucester Harbor freezing in the early 1900’s, but have you ever seen photos of a frozen Ipswich Bay?
Here’s the proof!
It has been 25 years since Ipswich Bay froze so solid that my brother, Dan Brown, and his friend, Russell Hazelgard, walked out from Bay View to the bell bouy off Wingaersheek Beach at the entrance to the Annisquam River. January of 1979.  We haven’t seen a freeze since then!
Laura Brown

Winter 1979-1aWinter 1979-2aWinter 1979-3a

Leaving a comment rewards the author of this post- add to the discussion here-

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text:
Climate change consensus study examined

By: Dr. Jeff Masters , 02:08 PM GMT on Ιούνιος 21, 2006

I've had several people ask about the study Al Gore talked about in his movie, which found no scientific papers disputing the reality of human-caused climate change over the past ten years. Well, to be sure, there have been a few papers disputing the reality of human-caused climate change published in the past ten years, but they didn't happen to have the key words "global climate change" included in their citations. The study Gore cites was published in December 2004 in Science magazine by Naomi Oreskes, a professor at UC San Diego. The article examined peer-reviewed studies in the world's major scientific journals between 1993 and 2003 containing the phrase "global climate change" as keywords. Oreskes found that 75% of the 928 articles with those key words in their citations agreed with the consensus position stated by the UN's panel on climate change, that the observed global warming over the past 50 years has been caused in part by human activity. The other 25% of the papers took no position, and none of the papers disagreed with the consensus view. While the study is not a perfect measure of the scientific uncertainty in the published literature, the study does show that an overwhelming majority of published scientific research supports the idea that human activity is significantly modifying Earth's climate.

As Gore noted in his movie, the situation is quite different in the media, where about half of the stories in the study he cited cast doubt on the reality of human-caused climate change. The media are fond of trying to report both sides of an issue, so in the name of journalistic fairness, the public is receiving a highly skewed view of the scientific debate on climate change. In many cases, the opposing views presented by the media are from fossil fuel industry-funded "think tanks" that routinely put out distorted and misleading science intended to confuse the public.

I've collected a list of climate change position papers put out by the major governmental scientific institutes of the world that deal with the atmosphere, ocean, and climate. All of these organizations agree that significant human-caused climate change is occurring:

United Nations IPCC
American Meteorological Society
U.S. National Academy of Sciences
American Geophysical Union
National Center for Atmospheric Research
Royal Society of the United Kingdom
Canadian Meteorological and Oceanographic Society

Science Council of Japan, Russian Academy of Science, Brazilian Academy of Sciences, Royal Society of Canada, Chinese Academy of Sciences, French Academy of Sciences, German Academy of Natural Scientists Leopoldina, Indian National Science Academy, Accademia Nazionale dei Lincei (Italy), Royal Society (UK)

Australian Academy of Sciences, Royal Flemish Academy of Belgium for Sciences and the Arts, Brazilian Academy of Sciences, Royal Society of Canada, Caribbean Academy of Sciences, Chinese Academy of Sciences, French Academy of Sciences, German Academy of Natural Scientists Leopoldina, Indian National Science Academy, Indonesian Academy of Sciences, Royal Irish Academy, Accademia Nazionale dei Lincei (Italy), Academy of Sciences Malaysia, Academy Council of the Royal Society of New Zealand, Royal Swedish Academy of Sciences, and Royal Society (UK)

If anyone can find examples of governmental scientific organizations that deny the consensus position, I'd be happy to make a second list of links. Saudi Arabia and Kuwait have long been hostile to international climate change negotiations, so their scientific organizations may well have official positions opposing the consensus. However, the Saudis are apparently changing their stance, as announced in May 2006 at a U.N. sponsored meeting in Germany. "I believe the petroleum industry should actively engage in policy debate on climate change as well as play an active role in developing and implementing carbon management technologies to meet future challenges," said the president of the Saudi state-run oil industry giant, Aramco. In 2005, both Saudi Arabia and Kuwait signed and ratified the Kyoto Protocol to limit greenhouse gases. The Protocol does not call on them to reduce their emissions.

In summary, there is an overwhelming level of scientific consensus on human-caused climate change. Those who defend the contrary view are fond of pointing out that we shouldn't stifle their opposing point of view, since heroes like Galileo with his sun-centered solar system view and Wegener with his continental drift theory both challenged the overwhelming scientific consensus of their day and were proved to be correct. That is true. However, Galileo and Wegener did not have the public relations staff of multi-billion dollar companies helping them promote their contrary views. I'm not too worried about the contrarian view of human-caused climate change being stifled, and contrarians are encouraged to publish in the peer-reviewed scientific literature. I would like to see the media sharply reduce their coverage of the contrary views of such think tanks as the Competitive Enterprise Institute, George C. Marshall Foundation, and scientists such as S. Fred Singer of SEPP. Getting one's climate science information from these sources it similar to getting one's news from a tabloid newspaper. Sure, some of the stories are true, but a lot of the material is of questionable quality, to say the least. The media should focus on getting their scientific information from leading scientists who regularly publish in the peer-reviewed scientific literature.

Jeff Masters

Reader Comments

Comments will take a few seconds to appear.

Post Your Comments

Please sign in to post comments.

Log In or Join

Not only will you be able to leave comments on this blog, but you'll also have the ability to upload and share your photos in our Wunder Photos section.

Display: 0, 50, 100, 200 Sort: Newest First - Order Posted

Viewing: 147 - 97

Page: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8Blog Index

147. atmosweather
4:30 PM EDT on June 21, 2006
Its amazing what Andrew did though. It rivaled any other storm for rapid deepening and took everyone by surprised. As you say, Katrina and Wilma were the same way, so I don't think anyone can fault the NHC for their underestimations. Additionally, flight level conversions were a lot lower back in 1992, so surface winds were automatically adjusted lower than the storms actually produced (the reason why Andrew was upgraded to a Category 5 landfall in Florida in 2002).
Member Since: Σεπτέμβριος 24, 2005 Posts: 33 Comments: 9265
145. TampaCat5
8:32 PM GMT on June 21, 2006
BTW, the difference between advisory landfall intensity and (well, many years later) agreed upon landfall intensity is dramatic. 115 knots vs. 155 knots.
Member Since: Posts: Comments:
144. TampaCat5
8:28 PM GMT on June 21, 2006
Charley was forecast to be a Cat 3 at landfall. I remember this distinctly.
Member Since: Posts: Comments:
143. Weather456
8:30 PM GMT on June 21, 2006
thats 50mph
Member Since: Ιούλιος 24, 2005 Posts: 407 Comments: 19076
142. rwdobson
8:28 PM GMT on June 21, 2006
"If we had a storm like Andrew headed for Florida this year with ~36-48 hours from landfall with winds at 85 knots I bet you that the NHC wouldn't predict a category 5 landfall either."

but brave bloggers would fact, they would have predicted CAT 5 for every storm that season but only been right on this
Member Since: Posts: Comments:
141. Weather456
8:27 PM GMT on June 21, 2006
agree with redefined....even with alberto this wasnt supose to go above 50knots.

they are excellent with track forecast but very poor in intensity....
Member Since: Ιούλιος 24, 2005 Posts: 407 Comments: 19076
140. redefined
8:20 PM GMT on June 21, 2006
How has NHC progressed? Look at hurricane Charley in 2004 - it went from a cat 2 to a cat 4 in one day and made landfall as a cat 4 hurricane. I don't think anyone expected it to be more than a category 2 at landfall. Same with Katrina - we only began forecasting a possible category 4 landfall after it intensified to a category 5 hurricane. What about Wilma? Went from a tropical storm one day to a category 5 hurricane the next. Nobody expected it.

Hurricane intensity is still very hard to predict. If we had a storm like Andrew headed for Florida this year with ~36-48 hours from landfall with winds at 85 knots I bet you that the NHC wouldn't predict a category 5 landfall either.
Member Since: Posts: Comments:
139. KShurricane
3:13 PM CDT on June 21, 2006
Wow, 48 hours before landfall and they said Andrew would only be a Cat 2? Try telling that to the old NHC radar unit. Just shows you much we didn't (and still don't) know about the factors controlling hurricane intensity.
Member Since: Posts: Comments:
138. TampaCat5
8:13 PM GMT on June 21, 2006
Correction ~36 hours!
Member Since: Posts: Comments:
137. TampaCat5
8:01 PM GMT on June 21, 2006
Have been reading through the Andrew Forecast discussions. It's amazing how the NHC has progressed. Read this. ~48 hours before a Cat 5 landfall and that is all anyone had to go by.
Member Since: Posts: Comments:
136. ProgressivePulse
7:56 PM GMT on June 21, 2006
Actually looks like that convection that broke off is shielding the disturbance from the shear a little bit.
Member Since: Αύγουστος 19, 2005 Posts: 5 Comments: 6622
135. Ldog74
8:01 PM GMT on June 21, 2006
Andrew did'nt just turn into a Cat 5 a day after it was born scotsman, it almost diminished.
Member Since: Posts: Comments:
134. Ldog74
7:56 PM GMT on June 21, 2006
Gulfman, read prelim 01 and through the second full paragraph of prelim 02, Andrew encountered strong vertical shear and the pressure rose considerably,(up to 1015 mb) but flight level winds were still reported at 70kts.
Member Since: Posts: Comments:
133. TampaCat5
7:59 PM GMT on June 21, 2006

11 AM EDT THU AUG 20 1992

Member Since: Posts: Comments:
132. ProgressivePulse
7:50 PM GMT on June 21, 2006
It is starting to back into the High behind it, not travel to much further east.
Member Since: Αύγουστος 19, 2005 Posts: 5 Comments: 6622
130. Tazmanian
7:47 PM GMT on June 21, 2006
time 205 update

An active tropical wave is along 76w S of 20n moving W 15-20 kt.
Strong well-defined low/mid level curvature signature is
observed on satellite imagery

129. NAtlanticCyclone
7:45 PM GMT on June 21, 2006
The western side of the system seems to be developing convection and we could see a big blow up tonight and maybe depression status before tomorrow's 5pm update timeframe.
Member Since: Posts: Comments:
128. ProgressivePulse
6:53 PM GMT on June 21, 2006
Looks like "Clash of the Titans" on the NW ATL WV Loop. Ought to see some action tonight, if there is to be any that is.
Member Since: Αύγουστος 19, 2005 Posts: 5 Comments: 6622
127. NAtlanticCyclone
7:32 PM GMT on June 21, 2006
If you look at the shear maps on the tropical weather page of wunderground you can see that a corridor of less shear develops around the disturbance and all the way up the East Coast after the trough moves by. This will be interesting to watch as the yellow indicates some shear but I believe its caused by the Bahamaian disturbance something to look at though none the least.
Member Since: Posts: Comments:
126. NAtlanticCyclone
7:21 PM GMT on June 21, 2006
The northern convection(old convection) looks to be currently taken northeasterly with the trough that has just passed south of New England this morning. This will now definitely allow the low to spin up deeper and deeper convection closer to the center and then the pressure will begin to fall as we get closer to the dinurnal maximum when the heat energy is the greatest stored over the open waters. This will begin to dwindle a little bit tomorrow as the dinurnal minimum aprroaches, but then will take off and that's when our depression forms and maybe tropical storm Beryl is here for the weekend.
Member Since: Posts: Comments:
125. rwdobson
7:24 PM GMT on June 21, 2006
53rd with another enthusiastic prediction. But a "wide open" circulation is not a TD. it has to have a closed circulation. May still become a TD but is not yet one.
Member Since: Posts: Comments:
124. Weather456
3:15 PM AST on June 21, 2006
Didn't stormtop say nothing until July 4th. Well the US got an early independence.
Member Since: Ιούλιος 24, 2005 Posts: 407 Comments: 19076
123. 53rdWeatherRECON
6:59 PM GMT on June 21, 2006
The area of convection has grown considerably in the past 12hrs and been very persistant(also throwing up some new really tall, cold, cloud tops. So what I am going on abscent 1008 and all the other criteria is that this convection will cause the pressure to start falling. The aforementioned "swirl and outflow" will form some what of a disorganized (wide open) but present Low level circulation and at that time(5pm est Thurs) This should be TD2! I will definitly give the credit where credit is due. This time NAtlanticCyclone and I think weatherboyfsu were pointing torwards development of this system before the CMC. This will definitly form TD2 there is just no stopping these convection bursts from all quadrants therefore Tropical Depression status will be attained.
Member Since: Posts: Comments:
122. Weather456
3:05 PM AST on June 21, 2006
tampacat 5 go to my blog....look at the my links and click "FLhurricane"

then you'll see tropical weather outlook above history and you'll be taken to it......

I cant add a link to the page somethiing kinda wrong.
Member Since: Ιούλιος 24, 2005 Posts: 407 Comments: 19076
121. thelmores
7:04 PM GMT on June 21, 2006
knew i shoulda learned html....LOL
Member Since: Posts: Comments:
120. NAtlanticCyclone
7:00 PM GMT on June 21, 2006
The disturbance near Panama is really showing signs of organization. I believe its a low pressure system that is trying to form there. The Bahamas disturbance is also trying to develop outflow to the north and east, but on the WV it shows its trying to get moisture on the west side too. If this keeps up we could have a depression by 5pm tomorrow or maybe a little earlier. The models are not accurate in trying to see where as it will make landfall yet or it's intensity would finally be, but keep an eye on this we could be seeing a tropical storm beryl from this along with the disturbance to the north of Panama. These are the only areas to pay attention to right now, and maybe Africa to with that strong wave that has just moved off the coast.
Member Since: Posts: Comments:
119. thelmores
6:54 PM GMT on June 21, 2006
img src=""

looks like we are getting an increase in the cold cloud tops......
Member Since: Posts: Comments:
118. Ldog74
6:58 PM GMT on June 21, 2006
Yea SJ you right, Andrew in '92 was a 40kt tropical storm with a reported central presure of 1015 mb (it was noted as astonishgly high by the NHC).

There are weak highs with that pressure all the time.
Member Since: Posts: Comments:
115. Weather456
2:55 PM AST on June 21, 2006
some people dont seem to understand and learn from last year storms and recently alberto.

Wind sheer and sea surface temps donot always matter for a storm to develop.

The systems nowadays donot care about climatology. Once you have a disturbance its need to be watch....

Cant judge a storm by its appearance.
Member Since: Ιούλιος 24, 2005 Posts: 407 Comments: 19076
112. TampaCat5
6:54 PM GMT on June 21, 2006
I was just looking through the NHC tropical weather outlook between June 1 and July 15. boy were they off....they only was sure on tropical storm Arlene and Hurricane Dennis...but poorly off on Bret (because of its proxmity to land) cindy the same and Emily they said upper level winds

Where are these archives found?
Member Since: Posts: Comments:
111. HAARP
6:51 PM GMT on June 21, 2006

lol controlling the weather

it is possible to do this the proof is irrefutable...

the chinese just made it rain to stop a dust storm...

Member Since: Posts: Comments:
109. StormJunkie
6:50 PM GMT on June 21, 2006
Hey Gulf, Afternoon.

Don't take this the wrong way, just good debate for all to learn by.

2 and 3 are not facts and I am not sure that 1 is either.

Last year storms formed in shear over 15kts (TD10/TD12/Katrina) and ssts below 80. I know this is not the norm, but it has happened.

Member Since: Αύγουστος 17, 2005 Posts: 26 Comments: 17216
107. HAARP
6:46 PM GMT on June 21, 2006
OK Dr Masters...

Tell me why any organization would produce a paper that would basically cut off the money flowing into there pockets???

I see my days of supporting your great website are becoming numbered...your political views are creeping into the forefront of this blog and that is sad...

stick to the weather and try to be unbiased ...saying all the papers that oppose your theory are put out by special intrests without proof is so irresponsible it is sickening
Member Since: Posts: Comments:
2:41 PM EDT on June 21, 2006
It looks like I'm seeing anti-cyclonic outflow from the N, W to the SW side of the blob. I also see outflow on the E side, but it does not have the anti-cyclonic signature. It seems to be trying to get it's act togeather.
Member Since: Posts: Comments:
104. IKE
1:38 PM CDT on June 21, 2006
That buoy 120 NM east of Cape Canavarel has a pressure of 30.13. That's awfully high.
Member Since: Posts: Comments:
103. IKE
1:36 PM CDT on June 21, 2006
Freeport in the Bahamas has a WNW wind. Must be a low around....

But they show wind speeds at 105 mph. Uh...that's probably a little off.
Member Since: Posts: Comments:
102. jeffB
6:22 PM GMT on June 21, 2006
Slowchaos wrote:

With that statement you seemed to be promoting the idea of either overtly or covertly suppressing free speech by having the news media ignore the contrary view. You attempt to give weight to your argument with the sheer number of those on your side, as if you should be heard more loudly because of numbers on your side.
The sheer number of believers equates to nothing in my book. NOTHING.

It's certainly possible for the vast majority of believers to be wrong!

There are lots of people who believe that governments are secretly controlling the weather. Some of them even post here. Do you think "the media" owe them coverage equal to that given conventional forecasts?

There are people who believe that they see faces, buildings, cities, amusement parks in photos returned from Mars. Do you think the media owe them coverage equal to that given NASA researchers?

There are people who believe that conventional medical care goes against God's will, and no illness should be treated with anything other than prayer. The next time there's an outbreak of a communicable disease in your area, do you think the media should divide their time equally between treatment and prevention tips and exhortations to prayer?

Holding a minority belief doesn't make you wrong, but neither does it somehow entitle you to an equal share of the public's attention.
Member Since: Posts: Comments:
99. Levi32
10:02 AM AKDT on June 21, 2006
53rd, colorado state site has floater one on the Bahamas system, and has since Monday. Link

I'll be back on later this afternoon. See you all later!
Member Since: Posts: Comments:
98. FLCrackerGirl
1:54 PM EDT on June 21, 2006
Jedkins, Gulfstream Boost?
PBG00, Vero?
You'All Maybe Right.

(sigh) Not Again...
(I Really Hate Being in "Break Point" City)
Fran From Vero Beach

Member Since: Posts: Comments:

Viewing: 147 - 97

Page: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8Blog Index

Top of Page
Ad Blocker Enabled

Dr. Jeff Masters' WunderBlog

Dr. Masters co-founded wunderground in 1995. He flew with the NOAA Hurricane Hunters 1986-1990. Co-blogging with him: Bob Henson, @bhensonweather

Local Weather

70 ° F

JeffMasters's Recent Photos

Pictured Rocks dunes and clouds
Grizzlies in Lake Clark National Park
Mount Redoubt Lava Dome
Matanuska Glacier


text:
Reading minidump files, part 2 of 4: Using MiniDumpReadDumpStream

All code is available on my CodePlex project.

In the first post in this series I discussed memory mapped files and how to access them in C#. Now that we have those sorted we can move on to calling MiniDumpReadDumpStream() to read information out of a minidump file.

Here’s a reminder from the last post on what the method signature of

looks like (from MSDN):

BOOL WINAPI MiniDumpReadDumpStream(
    _In_ PVOID BaseOfDump,
    _In_ ULONG StreamNumber,
    _Out_ PVOID *StreamPointer,
    _Out_ ULONG *StreamSize
BaseOfDump [in] A pointer to the base of the mapped minidump file. The file should have been mapped into memory using the MapViewOfFile function.
StreamNumber [in] The type of data to be read from the minidump file. This member can be one of the values in the MINIDUMP_STREAM_TYPE enumeration.
Dir [out] A pointer to a MINIDUMP_DIRECTORY structure.
StreamPointer [out] A pointer to the beginning of the minidump stream. The format of this stream depends on the value of StreamNumber. For more information, see MINIDUMP_STREAM_TYPE.
StreamSize [out] The size of the stream pointed to by StreamPointer, in bytes.

To call

we’ll tell it where to read from (BaseOfDump), what we want it to read (StreamNumber) and where we want the read information saved (StreamPointer and StreamSize). Don’t worry about “Dir” for now, we won’t be using it.

I covered BaseOfDump in the previous post so you can read up on it there. For the purposes of this article all we need to know is that PVOID maps to IntPtr in C# (don’t forget I’ve put a page up here with all of the C++/C# type mappings).

We use the second parameter, StreamNumber, to tell MiniDumpReadDumpStream() which stream of information we want to read.

Minidump files contain “streams” of information, similar to tables in a database. We can access the different streams by passing in different values to StreamNumber using the MINIDUMP_STREAM_TYPE enumeration. You’ll recall that when I spoke about MiniDumpWriteDump we had to specify what information to save using the DumpType parameter. Your choice of flags for DumpType will control what streams were saved in the minidump file and thus which ones you can read using StreamNumber. As an example: you can’t read the MINIDUMP_STREAM_TYPE.ThreadInfoListStream stream if you didn’t include MINIDUMP_TYPE.MiniDumpWithThreadInfo in your DumpType parameter.

From an interop point of view StreamNumber is a ULONG which is defined as a “32-bit unsigned integer”. Looking at our C# data types we see uint is also “Unsigned 32-bit integer”, so we’ll use it.

The values you can pass in are defined in the MINIDUMP_STREAM_TYPE enumeration. Here’s my mapped C# version:

public enum MINIDUMP_STREAM_TYPE : uint
    UnusedStream = 0,
    ReservedStream0 = 1,
    ReservedStream1 = 2,
    ThreadListStream = 3,
    ModuleListStream = 4,
    MemoryListStream = 5,
    ExceptionStream = 6,
    SystemInfoStream = 7,
    ThreadExListStream = 8,
    Memory64ListStream = 9,
    CommentStreamA = 10,
    CommentStreamW = 11,
    HandleDataStream = 12,
    FunctionTableStream = 13,
    UnloadedModuleListStream = 14,
    MiscInfoStream = 15,
    MemoryInfoListStream = 16,
    ThreadInfoListStream = 17,
    HandleOperationListStream = 18,
    LastReservedStream = 0xffff

Before I talk about the next 3 parameters (Dir, StreamPointer and StreamSize) there’s one very important thing to note about all of them: they’re all [Out] pointer parameters. Up until now all of the functions we’ve called have had [In] parameters – they only read values from us. If they returned anything it was a return value. None of them have returned information in their parameters. This time around these parameters will be returning information to us. Well that’s the simple version. I’m not going to go into the differences between out and ref now, if anyone wants details you’re welecome to ask and I’ll try and explain it. For now, suffice to say we need to pass each of the 3 using the ref keyword.

Dir is of type MINIDUMP_DIRECTORY and is a custom DbgHelp structure. It also contains a field of type MINIDUMP_LOCATION_DESCRIPTOR. Here are both of their definitions.

  ULONG32 DataSize;
  RVA     Rva;

typedef struct _MINIDUMP_DIRECTORY {
  ULONG32                      StreamType;

I’m not going to explain either of them yet, as they’re not important for the moment. As far as mapping the types go: ULONG32 is an unsigned 32 integer (we’ll use UInt32) and RVA (defined in DbhHelp.h line 3697) is a DWORD, so uint for us.

The C# versions are as follows:

    public UInt32 DataSize;
    public uint Rva;

    public UInt32 StreamType;

The last 2 parameters, StreamPointer and StreamSize tell us where the information was saved and how many bytes were saved. I’ll explain StreamPointer in more detail next time when I discuss how to interpret the information we get back. For now we just need to know that PVOID maps to IntPtr and ULONG maps to uint.

Here is the final version of our PInvoke mapping for MiniDumpReadDumpStream():

[DllImport("dbghelp.dll", SetLastError = true)]
public static extern bool MiniDumpReadDumpStream(IntPtr BaseOfDump,
        uint StreamNumber,
        ref IntPtr StreamPointer,
        ref uint StreamSize);

Next time we’ll invoke the function and read one of the information streams (MINIDUMP_STREAM_TYPE.ModuleListStream)!

This entry was posted in Crash Dumps and tagged , , , . Bookmark the permalink.

9 Responses to Reading minidump files, part 2 of 4: Using MiniDumpReadDumpStream

  1. Pingback: Reading minidump files part 3 of 4: Reading stream data returned from MiniDumpReadDumpStream | Greg's Blog

  2. DY says:

    very helpful🙂 !!

  3. Pingback: Reading minidump files, part 1 of 4: Accessing memory mapped files from C# | Greg's Blog

  4. Pingback: Reading minidump files, part 4 of 4: Putting it all together | Greg's Blog

  5. Will says:

    Linkbug: the link to the 3rd page at the top actually links back to this page.
    Thanks for this info, it’s all very useful!

    • Greg says:

      Thanks for the feedback Will, links updated. Sorry for the epically late reply, been working on the next set of code/posts🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


text: Release notes for GStreamer 0.11.92 "High Hopes" The GStreamer team is proud to announce a new release in the 0.11.x unstable series of the core of the GStreamer streaming media framework. The 0.11.x series is an unstable series targeted at developers and will eventually lead up to the stable 1.0 series. It is not API or ABI compatible with the stable 0.10.x series. It is, however, parallel installable with the 0.10.x series. The 0.11.x series has improved memory management and features various cleanups and enhancements. This module, gstreamer, only contains core functionality. For actual media playback, you will need other modules. gst-plugins-base contains a basic set of well-supported plug-ins gst-plugins-good contains a set of well-supported plug-ins under our preferred license gst-plugins-ugly contains a set of well-supported plug-ins, but might pose problems for distributors gst-plugins-bad contains a set of less supported plug-ins that haven't passed the rigorous quality testing we expect Features of this release * Parallel installability with 0.10.x series * API cleanup and minor API improvements * GstTagList is a refcounted type now * Lots of bugfixes, cleanup and other improvements There were no bugs fixed in this release ==== Download ==== You can find source releases of gstreamer in the download directory: The git repository and details how to clone it can be found at ==== Homepage ==== The project's website is ==== Support and Bugs ==== We use GNOME's bugzilla for bug reports and feature requests: Please submit patches via bugzilla as well. For help and support, please subscribe to and send questions to the gstreamer-devel mailing list (see below for details). There is also a #gstreamer IRC channel on the Freenode IRC network. ==== Developers ==== GStreamer is stored in Git, hosted at, and can be cloned from there (see link above). Interested developers of the core library, plugins, and applications should subscribe to the gstreamer-devel list. Applications Various applications have early ports to GStreamer 0.11 including Totem, RhythmBox, Webkit, Jokosher, Transmageddon and others. We're working on porting more applications. Contributors to this release * Alban Browaeys * Andre Moreira Magalhaes (andrunko) * Anton Belka * Bastien Nocera * Brian Cameron * Edward Hervey * Havard Graff * Josep Torra * Luis de Bethencourt * Mark Nauwelaerts * Mike Ruprecht * Sebastian Dröge * Sreerenj Balachandran * Stefan Sauer * Tim-Philipp Müller * Wim Taymans