Sunday, December 5, 2010

Reactions to Rob Bell's Velvet Elvis

Velvet Elvis, by Rob Bell

Velvet Elvis made me realize for the first time that as a congregant, I can not only affect and change my church, but that I am actually connected to the first-generation Christians from the book of Acts.
And so these first Christians passed on the faith to the next generation who passed it on to the next generation who passed it on to the next generation until it got to ... us. Here. Today. Those who follow Jesus belong to his church. And now it is our turn. It is out turn to step up and take responsibility for who the church is going to be for a new generation. It is our turn to redefine and reshape and dream it all up again. (p. 164)
I copied this down when I read it because it beautifully put into words what I had been feeling and realizing: that I am an adult now, I am a member of First Pres Berkeley, I serve on a committee, people listen to me, I introduce myself to new people, I have lots of friends there, I know the staff, it is my church, I am part of it, and therefore I can change it and affect it.

Basically, I realized that I must both connect the church I attend with the crazy stuff that the apostles were doing in Acts (planting churches, getting arrested, writing letters, founding Christianity), and realize that I am part of it and I can change it. It was founded in 30 AD or whatever, and what we're part of now is the same thing, and we have the same power to change it that the founders had. If I want it to be a certain way, then I can push it in that direction.

The church is nothing but a group of people with common beliefs who come together to worship, serve, love, question, struggle, give, take, communicate, sing, play, eat, reach out, listen, and pray. I am one of those people, and I do all of those things, so how I do them is part of what defines my church. My church is, literally, whatever I make it.

Image source: amazon.com

The second important point that the book drove home for me was the concept of unconditional service as evangelism. From page 167:
And this is because the most powerful things happen when the church surrenders its desire to convert people and convince them to join. It is when the church gives itself away in radical acts of service and compassion, expecting nothing in return, that the way of Jesus is most vividly put on display. To do this, the church most stop thinking of everybody primarily in categories of in or out, saved or not, believer or nonbeliever. Besides the fact that these terms are offensive to the "un" and "non," they work against Jesus's teachings about how we are to treat each other. Jesus commanded us to love our neighbor, and our neighbor can be anybody. We are all created in the image of God, and we are all sacred, valuable creations of God. Everybody matters. To treat people differently based on who believes what is to fail to respect the image of God in everyone. As the book of James says, "God shows no favoritism." So we don't either.

Oftentimes the Christian community has sent the message that we love people and build relationships in order to convert them to the Christian faith. So there is an agenda. And when there is an agenda, it isn't really love, is it? It's something else. We have to rediscover love, period. Love that loves because it is what Jesus teaches us to do. We have to surrender our agendas. Because some people aren't going to become Christians like us no matter how hard we push. They just aren't. And at some point we have to commit them to God, trusting that God loves them more than we ever could. (p. 167)
To me, Rob Bell's point--as well as the point of a large chunk of the New Testament--is that we should just love everyone, all the time, unconditionally. Yes it's impossible. Yes it's inspiring.

15 Reasons Why I Love Open Source

Open source software is free in two senses of the word: It is free as in beer, and free as in speech. The "source" part of open source refers to the actual lines of computer code that to compile to form the final software package. "Open" means that anyone can download that code, look at it, change it, use it, re-compile it, improve it, learn from it, adapt it, and integrate it his or her own projects.

  1. The community. Open source communities comprise friendly, helpful, enthusiastic, passionate, generous people. They appear on list-serves, discussion groups, IRC channels, blogs, forums, and other arenas to discuss nearly every open source project or topic you can think of.
  2. The teamwork. On large projects, community members typically contribute only small bits of code at a time, sometimes only one line. Some users don't contribute code at all, but focus on graphics or documentation.
  3. The licenses. MIT license, GNU license, Mozilla license, and others. People have put a lot of thought into making these licenses fair, solid, and protective of open source ideals. Most open source software projects apply one of these licenses, which assure the users that the software will always be free and open source.
  4. The cost. With an open source license attached, the software is free, always, with no exceptions, ever.
  5. The quality. It's constantly improving, and it has spawned some of the greatest software available. In the realm of web development, nearly all of the best packages are community-driven and open source, such as the Apache web server (which serves 59% of all web pages), the Linux OS, the WordPress platform, and Wikipedia (the underlying software, not the content).
  6. The evolution. The software industry changes rapidly, and the nothing beats the open source community at riding, pushing, adapting to, benefiting from, and gaining from that change. For example in the Ruby on Rails community, a popular authentication module called restful_authentication discontinued development as the Rails core itself moved on to more sophisticated technology; as a result, along came Devise, a better, faster, cleaner, and more elegant solution. The community evolved.
  7. The add-ons. Ruby and Ruby on Rails has Gems. R has packages. Firefox has add-ons. The modularity bult into these popular programs allows the community to easily contribute functionality, and it allows user to easily adopt that new functionality.
  8. The software. The software itself is great. I use Ubuntu Linux, Open Office, Ruby on Rails, R, Firefox, and others. Open source software virtually can't be bad--otherwise users would flee and development would cease and the project would die.
  9. The updates. I love getting updates. I love downloading the newest versions and reading about all the improvements that volunteers have made. I love it when I get a slick new version of Ubuntu every six months. In the private software world, programs sometimes stagnate. Microsoft released Internet Explorer 6 in 2001, then essentially ceased developing it for years until Firefox (open source) took over a huge piece of its market.
  10. The security. Linux, the open source operating system that can replace Windows, has no viruses that I know of. Ruby on Rails provides security fixes so fast they once tripped over their own feet and broke their own code base.
  11. The distribution. Open source projects sometimes have hundreds or thousands of contributors. The wide distribution of volunteers means that popular projects will virtually never stall.
  12. The transparency. An open source project will typically provide plenty of information about what developments are currently underway, where the project is headed, and when to expect updates and new releases.
  13. The competition. Open source projects compete with each other for users, and they compete with private industry groups for users. This healthy competition forces both sides to continue producing good software, and on the private side, it helps drive costs down for proprietary software. In many cases, it has lead to private companies releasing their software for free (while keeping their code "closed-source"). Free software: Skype, Internet Explorer, Adobe Reader. Without open-source equivalents, these companies might have no reason not to charge for this software.
  14. The equivalents. For many proprietary software packages, the open source community has created free equivalents. Microsoft Office has Open Office; Adobe Photoshop has GIMP; Microsft Windows and Apple OsX have Linux. See Open Source as Alternative (osalt.com) for a complete list.
  15. The names. The open source community gives creative, apt, and frequently humorous names to its creations. For example, Cinerella is a movie movie studio package, and Pidgin is an instant messenger platform that "speaks" to many different services.
Look around your computer at the programs you use the most, and consider trying out an open source alternative. Beginners: Start by replacing Internet Explorer with Firefox. More advanced users: Download Open Office instead of paying hundreds of dollars for the next release of Microsoft Offce (NB: MS Office has legitimately better features, but only power users can tell the difference). Advanced: Download Ubuntu and try a whole new operating system.

Thursday, December 2, 2010

What is LaTeX?

LaTeX (pronounced "lay-tech") is for typesetting documents. Microsoft Word is also for typesetting documents, but there are a few major differences between Word and LaTeX. The biggest difference is that Word provides a what-you-see-is-what-you-get (WYSIWYG) editor as a graphical user interface (GUI). LaTeX by itself does not a WYSIWYG editor or any sort of GUI. Instead, LaTeX requires the user to edit raw, unformatted, plain text, much as if he were writing HTML. In that way, creating a LaTeX document is like creating an HTML web page.

To create an HTML page (hypertext markup language), you type in the content you want in your document, then you "mark up" the content using HTML tags such as headings, paragraphs, lists, tables, and links. The HTML file itself a plain-text file with a ".html" file extension, such as "example.html". The HTML page is associated with a CSS file (cascading style sheets) which applies visual styles to the marked up text. Then a web browser like Internet Explorer or Firefox renders the document in the browser window. To summarize, the HTML file holds the marked-up content, the CSS file controls how the marked-up content looks, and the browser renders the final product.

LaTeX works much the same way. But instead of using HTML tags to mark up the content, one uses LaTeX tags to mark up the content. And instead of using a ".html" extension, a LaTeX file has a ".tex" extension, such as "example.tex". And instead of a CSS file to define the visual style, the LaTeX program itself defines the visual style. And instead of rendering the final product in a browser, LaTeX typically renders the final product as a PDF file.

If that seems restrictive, that's because it is. With no CSS file to define the visual layout of the document, the new user has little control over how the rendered document looks. But therein lies the power of LaTeX: Behind the scenes, LaTeX has thousands of rules and algorithms for determining the best way to visually present the content. A Stanford University math professor created the foundation for LaTeX in the 1970s, and with 40 years of development behind it, LaTeX does a very good job of deciding how to render your content. Users of LaTeX argue convincingly that authors should worry about content and let document designers worry about layout.

LaTeX is best used for creating text documents--essentially anything you would create in Microsoft Word is a fair candidate for LaTeX. For the beginning user, it is not the best choice for creating graphics or flow charts or slide presentations.

To get started using LaTeX (it's free), use the excellent installation instructions in the "Get LaTeX" page at www.latex-project.org.

Friday, October 22, 2010

How to prepare the master schedule for the macro run

Before you run the main parsing macro on a new master schedule, you need to set up a lookup table with Excel sheet ids in one column and the corresponding rulemaking id in another.
  1. Create a new tab at the front of the workbook called "Rulemakings."
  2. Run the macro called PrintWorkSheetNames(). This will populate the Rulemakings tab with a list of all the rulemakings in that workbook and their corresponding Excel sheet indexes.
  3. Use MySQL Workbench (or some tool) to copy the production version of the rulemakings table into the Rulemakings tab. Leave an empty column between the first set of columns (created by the macro) and the second set of columns (which you just pasted in) so that each group can be sorted independently.
  4. Sort each group by the rulemaking abbreviation. These SHOULD be unique, and they should be the same.
  5. When you are sure that each row lines up properly as a match all the way across, delete the empty separating row (thus locking them together for the sort).
  6. Make the "sheet index" the first column and the "rulemaking_id" the second column.
  7. Sort it by sheet index. This is so that vlookup() works properly.
  8. Highlight the whole range of those two columns and name the range "rulemakings." This is used by the product_tabs_to_dates() macro.
With those steps complete, the workbook is now ready to run the product_tabs_to_dates() macro.

How to prepare a csv file for import to ead5

When a new weekly master schedule is released and the data has been parced in excel, that data needs to be imported to the server. Follow these steps to produce a csv file that can be imported to the server with the new milestone data.

  1. Make a copy of the latest version of the file. Either look on the server. It's probably called something like "milestones_20_revision.csv" or similar.
  2. Rename the file by incrementing the revision number.
  3. Copy all the rows from the most recent master schedule, and append them to the end of the "milestones_20_revisions_file.csv" file.
  4. Expand the id field so that it assigns new sequential ids to the new rows.
  5. Reformat the 'milestone' field to SQL format.
    1. In Excel, highlight the column -> Format Cells -> Number -> Custom.
    2. Type in "yyyy-mm-dd" in the "Type:" field.
    3. Click okay.
  6. Reformat the created_at and updated_at fields to SQL format:
    1. In Excel, highlight both columns -> Format Cells -> Number -> Custom.
    2. Type in "yyyy-mm-dd hh:mm:ss" in the "Type:" field.
    3. Click okay.
  7. Save and close the file.
NB: If you reopen the csv file in Excel, Excel will reformat the dates. Before saving, re-reformat the dates back into SQL format.

Saturday, October 2, 2010

How to createa new revision to complete an import of new milestones

When you have successfully imported a csv file of new milestones, you have to tell Ruby on Rails about it.
  1. Log in to the production server (ead5.lbl.gov) through a web browser. Note that you must log in as an administrator.
  2. Check to make sure the date showing on the home page is the date of the last revision imported, and not the most recent one.
  3. Navigate to http://ead5.lbl.gov/revisions and click on "new revision."
  4. Enter the date of the revision (usually indicated by the filename, so named by DOE)
  5. Click submit. A new revision is created, with an automatically incremented revision_number. Note that this is not the same as the revision_id. That is just a database identifier. We only care about the revision_number. These may or may not be the same.
  6. Navigate back to the home page and check that date has been updated, and that data still properly loads.
  7. You're done.

How to import the milestones.csv file to MySQL rvb_production on ead5.lbl.gov


  1. Put the CSV file on the ead5.lbl.gov server under your home directery: /home/arsturges. In Windows you can do this using F-secure, or in Linux via the command line.
  2. Then copy the file to /var/lib/mysql/rvb_production using the following commands:
    sudo mv milestones_19_revisions.csv /var/lib/mysql/rvb_production [then enter password]. Why can't you just upload it directly to the mysql directory? Because of permissions. I don't know how to do it.
  3. Check to see if the move was successful: sudo ls /var/lib/mysql/rvb_production
  4. Now move over to MySQL Workbench. Open a connection to ead5.lbl.gov.
  5. Put the following code in the SQL editor window:
    use rvb_production;
    LOAD DATA INFILE 'milestones_17_revisions.csv'
    INTO TABLE milestones
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    (id, rulemaking_id, phase_id,
    task_id, date_category_id, milestone, revision_number,
    created_at, updated_at);
    The above code is much the same as what one would find with a google search, but here we don't use the LOCAL keyword in line 2.
  6. Try running the code. It should throw a "duplicate entry" error, which is good because the database is already populated.
  7. When you're sure this code will actually work, move over to a command line to truncate the milestones table. You have to have an empty table to import to. From the command line on the ead5 server:
    mysql -u root -p
    [password]
    use rvb_production;
    truncate table milestones;
    select * from milestones;

  8. Now go back to MySQL Workbench and run the import script. With 100k rows, it should take about 15 seconds, so give it time to complete.
  9. Now check in MySQL that it worked: select count(*) from milestones;