Feed aggregator

Course Design Tips

Convergence - Fri, 2014-11-21 10:05

Managing an online course can range from straightforward to complicated, and can become overwhelming at times. It is also uncommon to receive a manual when you are tasked with developing an online course. Not to worry – help is here! As learning technologies staff, we live and breathe the CLE!

With a little planning and development, we can build the foundation of a great CLE course. Below are just a few CLE course design tips and resources we identify as valuable. We hope these generate conversation and new ideas within your course, school, and department.


Design for mobile

The number one tip for this blog post is… design CLE courses for students using both laptops and mobile devices! Data shows students are accessing CLE courses using mobile devices more and more. This means we need to rethink the way we design courses in the CLE, specifically how we format images and text.

The CLE 2014 Refresh brought responsive design to the CLE. The CLE now responds and displays according to the device being used by the student. This means no more small, unreadable text when accessing the CLE from a mobile device such as an iPhone or Galaxy.

Here is a practical tip for improving the learning experience for students accessing the CLE from either a mobile device or a desktop computer – remove tables from CLE courses that are being used to format text and images. Replace these tables with images and text wraps that are designed to properly respond to students’ devices. Sound complicated? Maybe a little, but not to worry, we are simply replacing tables with images and text to create better designed, more user-friendly CLE courses!

For the purposes of this example, we will add a Label to a course to display an image and a summary of the week’s learning as seen below.

In the past we would have used a table to keep the image and text aligned in the label. This works well when viewed on a laptop or desktop computer, but once the content is accessed from a mobile device, the text does not display correctly on the smaller screen (in other words, the text does not “respond”). When tables are used for formatting text and images, students using mobile devices may experience cumbersome horizontal scroll bars (see images below), text that runs off the screen, and images that do not display correctly.

So how do we fix this? Just remove the tables that are used to format images and text in CLE courses and replace these with image wraps. Below is a side-by-side comparison of the two design workflows, as well as screenshots of how the two will display on a mobile device:

And here is a comparison of how both will display on a mobile device:

Here is how to apply an image wrap in a Label. Add a Label to a CLE course and insert text and an image into the text editor. While adding the image, navigate to the Appearance tab in the Insert/edit image pop-up (shown in the image to the right). From the Alignment drop down menu, choose Left to align the image to the left of the text (there are other alignment options available). From the Horizontal space field (how much space is added between the image and text), I entered 10 (pixels) for this example, which worked well. Click Update to continue.

That is it! You can now replicate this design workflow in other labels in your CLE course – creating a consistent learning experience for students. Questions? Comments? Post a comment below and let us know if students in your course are using mobile devices to access the CLE and if you have design tips of your own!

Block Management

The second course design tip is better Block Management. Blocks are items that can be added to the left or right column of any CLE course. There are a number of different types of Blocks in the CLE and some may already be used in your course.

The first step to good Block management is understanding the different types of Blocks. Take a look at the Standard Blocks via Moodle Docs and explore the different types of Blocks available in the CLE (with editing turned on!).

The next step is to add only the Blocks that add value to the online experience. If a Block is not used, or has little value, consider removing it from the CLE course to conserve space for learning. Spend 10-15 minutes before each semester reviewing your Blocks, as well as considering how different types of Blocks can be used to improve the online learning experience for both students AND faculty.

CLE courses are divided into three columns and Blocks are typically located in the left and/or right columns. The middle column is where the course content is displayed and where students spend the majority of their time learning while in the course. To maximize the amount of real estate in this middle column, consider moving all of your Blocks to the left column. Once all of the Blocks have been moved from the right column to the left, the middle column becomes wider, extending to the end of the right column and providing more space for learning. See the images below for a visual comparison of the impact of better Block management:

Have questions about managing Blocks? Visit the CLE Knowledge Base for more information!


So you are probably thinking, “this is useful information, but I need CLE course design support now!” Not to worry, below is a list of resources that we find helpful when creating CLE courses:

find examples of well-designed online courses

The best to way to be motivated and inspired to improve your CLE course is took look at examples of other well-designed online courses. These courses do not need to be in the CLE, or even Moodle courses necessarily. By getting a better understanding of the successes that other educators have had with online course design, we can create better online learning environments for students. Below are resources with good examples of online course design:

Attend a Tech Clinic

Need one-on-one support? Attend a Tech Clinic held on the second and forth Friday of every month. We also offer a CLE Basics training at the start of each Clinic that we highly recommend new faculty and staff attend. Register today!

Create a CLE Test Course

Not quite ready to test the course design tips in an active CLE course, but want to get a head start on next semester? Request a CLE test course where you can test design workflows and tryout new CLE activities.

LTG consultation using WebEx

Whether you are a rookie or a veteran of the CLE, questions come up! The Learning Technologies Group can setup a WebEx session to help troubleshoot CLE related issues and assist in course design suggestions – all from the comfort of you own office. Contact the Learning Technologies Group to schedule a CLE WebEx consultation.

Have fun designing your CLE course and please share you successes and challenges in the comment section below!

Image Credits:

Blocks” designed by Lukasz M. Pogoda from the Noun Project.
Responsive-Design” designed by Pham Thi Dieu Linh from the Noun Project.
Graphic-Design” designed by Anna Weiss from the Noun Project.

Categories: Convergence

Through the Eyes of an Intern

Brought to Light Blog - Thu, 2014-11-20 15:04

Hi everyone, my name is Armani Fontanilla and I am an undergraduate student at the University of San Francisco interning at the UCSF Archives & Special Collections.

At the archives, I am currently tasked with the processing of small box collections, or the creation of box level inventories and the digitizing, and creation of, metadata for the archives that have yet to be placed into the virtual catalog. Other projects that I am potentially tasked with are research for the upcoming 150th Anniversary of UCSF on the level of researching stories, scanning images, and looking for documents, as well as helping with the vast inventory of the Medical Artifacts collection.

It’s restricted for a reason. We can’t reveal why. All you need to know is Maggie has the really cool “restricted” stamp. It’s actually really cool.

And wow is our inventory big… Get it? Because the texts are big?

Even though the potential projects are only potential projects, my senior co-workers, Maggie and Kelsi have both taught me a lot in the projects that I am currently working on. For example, Kelsi has taught me about her work with the Medical Artifacts collection: How the UCSF catalogs have changed from one form to another, and that cross-referencing catalogs with each new edition that has come through the library archives since 1864, one also has to decipher the writings and annotations of previous archivists, as well as come up with new ways to reorganize the collections in our possession.

Maggie, on the other hand, has taught me how to do the projects that I am currently doing, as opposed to the potential projects that Kelsi lets me shadow every so often. She has taught me proper labeling procedure, and storage techniques, as well as projects that mirror the one that Kelsi is currently doing, which would be creating catalogs for documents in storage.

Cataloging kind of like this, but more modern.

Finally, the first project (that I am still working on when I’m not being taught by Maggie or Kelsi, is the creation of a digital inventory of UCSF affiliates and members. Fortunately, most of the physical inventory is in English, and it is all on-site. Unfortunately, the physical inventory itself is not backed up – folders that are not archival standard need to be replaced, labels need to be printed out because of the inconsistent handwriting of previous archivists (and this intern’s), and more files need to be created for the ever expanding role of UCSF affiliated persons who are recognized in the news worldwide – from China, to America, to Brazil, to the Philippines, UCSF’s impact on the world is growing. And my first, and current job, is to help sort the files so that we can keep track of them for people to use and peruse in the future.

Before this data can hit the internet, I need make sure they’re all in order.

Within these jumbled folders, however, lie treasures that I am so excited to find. While often the files just contain one or two articles, some contain as many as ten plus! And these articles are often varied – they come in the form of obituaries, photocopied documents, magazine clippings, newspaper articles, biographies, and more! But instead of letting me describe them, let me show you some examples.

A button with 1989 Nobel Prize Winners Michael Bishop and Harold Varmus.

Brown, Leatha. School of Nursing, Class of 1928.

Holt A. Cheng, 1904. He was the first Chinese to be licensed to practice medicine in California after graduating from the College of Physicians and Surgeons in San Francisco. After returning to China, he established the Guang Hua Medical Society, the first medical college of western medicine established by the Chinese, for the Chinese, and the first medical school to accept female applicants.

And finally, the UCSF archives are not only home to just Western schools of thought in medicine, but include Eastern Thought as well. On site and in a state-of-the art archival room, various Eastern texts in Chinese and Japanese are stored, either purchased by the Head Archivist, donated to UCSF, or willed by their owners.

Chinese medical texts in the archival room.

Japanese medical texts.


Armani Fontanilla

Armani is currently a senior majoring in History with an emphasis on European and Asian Studies in the University of San Francisco (USF) public history program. After he graduates, he hopes to be able to earn a teaching position at his old high school, Bellarmine College Preparatory, and eventually pursue a Masters. In choosing the UCSF archives through the USF internship program, he hopes to not only practice skills that can only be found through working at an established institution but to also enhance his ability to do archival work and explore history of Western medicine at the archives.


Categories: Brought to Light

Reporting on the CLE Refresh Survey

Convergence - Tue, 2014-11-18 08:46

On August 2, 2014, the CLE underwent a major refresh with the installation of a completely new user interface. While this update also included a number of important performance and course-building enhancements, the crucial new feature — one that impacts all CLE users — was the new interface. Finally, we were able to fulfill easily the most requested CLE feature for the past few years — make it so that the CLE works better on smartphones and tablets. The new interface is now mobile-friendly, and incorporates responsive web design principles, which means it seamlessly conforms to the screen size of the device viewing it, be it a 27-inch desktop monitor, iPad Mini, iPhone or Android smartphone. Along with the refresh, we also released a short survey on August 2 to start gathering some feedback about the changes. We received seventy-three submissions through August. In this blog post, we report on some of the survey results and some directions for the future.

The survey asked everyone to grade the CLE refresh. Over 71% gave the refresh a C or better, and half of all respondents gave a grade of B or better. Here is a sampling of some of the comments:

This look is much clearer, cleaner and user friendly!

The graphics/skin of the interface is clean. All functions appear to be intact. No major re-learning required for average user.


It is clean looking and more up to date.

I like the clean look. There are less extras that take your attention away from the content. The colors are softer and cleaner as well.

Looks less cluttered which helps with visual appearance.

Much more mobile friendly.

It looks more updated and seems to be less buggy. Also, it seems to work better with Chrome than the old version.

Given that this refresh brought some major changes, this was a good start. But while most gave the new CLE a passing grade or better, there were also some who felt that the new CLE look and feel didn’t quite past muster:

I do not like the mobile version nor do I like the new homepage, too sparse and it doesn’t highlight my interest like the login button.

There is too much blank space for each menu. That has made it a bit too bulky and can’t fit all the necessary information without scrolling.

I usually use CLE to get to UCSF’s library resources like Pubmed, and it has been difficult for me to figure out how to navigate to this page.

There needs to be a drop down menu for lecture capture. Having all the classes on the same screen with the calendar is too cluttered and overwhelming.

The calendar does not fit, I needed to drag every time I need to move to the next week for see Friday.

The CLE team has already incorporated some of this feedback into a recent update. Some felt that the blocks (e.g., Navigation, Administration) that appear in CLE courses on the left and/or right were taking up too much space. We were able to reduce the block footprint so that there is now more room in the center area where the main course content resides. Other survey comments will be reflected in upcoming updates, including:

  • Reduce the block footprint even more so that the main course content takes precedence.
  • Make sure that on smaller screen sizes, the blocks do not take up valuable space so that important course content, such as the Ilios calendar, doesn’t get squished.
  • Making the Log In link consistently visible at the top for all screen sizes. Currently, the Log In link is no longer visible on small screens — it gets hidden inside the menu icon when the screen size gets small, making it difficult to locate.
  • Add a Maximize this page button on all CLE pages that will allow the main content area to immediately fill the entire screen.

Future updates to the underlying Moodle learning management system that powers the CLE will also bring new features, such as much improved responsive behavior for all screen sizes and a user menu in the header that provides quick access to personal pages. Other survey comments suggested what would essentially be entirely new features, such as a way to provide quicker and less cluttered access to lecture capture recordings.

We invite you to continue providing feedback — the good, bad and ugly. The August 2014 refresh placed the CLE on a solid foundation from which to grow and improve. Your comments, feedback, and feature requests will be absolutely vital in this process. We plan to release new short surveys over the coming months. We also invite you to send any and all feedback to the Learning Technologies Group.

Categories: Convergence

EndNote Update X7.2 Provides More Features for Collaboration

In Plain Sight - Thu, 2014-11-13 12:13

EndNote has released it’s latest update, X7.2. The major new feature is the ability to use an EndNote online account to share a library with up to 14 collaborators. You’re also given unlimited online storage so you can store and share as many files as you need.

On opening EndNote X7 you’ll be prompted to update to X7.2.

With X7.2 you can:

  • share a library with anyone who’s using EndNote X7 (with up to 14 people)
  • sync attachments, notes, and annotations in real-time for collaboration
  • share your entire EndNote library, including references, PDFs, and annotations
  • share just groups
  • add to, annotate and use the library – at the same time as others

For more information:









Categories: In Plain Sight

UCSF Archives Lecture: Karl F. Meyer, California’s Forgotten Microbe Hunter, December 5, 2014

Brought to Light Blog - Thu, 2014-11-13 09:31

Join us on Friday, December 5th as Mark Honigsbaum, PhD, gives a lecture in a series launched by UCSF Archives & Special Collections.

Date: Friday, December 5th, 2014
Time: 12 pm-1:20 pm
Location: Lange Room, UCSF Library, 530 Parnassus, 5th floor
This lecture is free and open to the public. Light refreshments provided.
Please RSVP to reserve a seat.

In the 1930s California’s rapid population growth and the incursion of agricultural settlers into valleys and deserts teeming with exotic pathogens resulted in outbreaks of ‘new’ infectious diseases. To divine the cause of these outbreaks and trace the epidemics to their source, health officials turned to San Francisco’s premier ‘microbe hunter,’ Karl Friedrich Meyer.

Karl F. Meyer in his office.

All but forgotten today, Meyer was once a nationwide figure renowned for his feats of disease detection. As director of the George Williams Hooper Foundation for Medical Research at UCSF in the 1920s, Meyer – a Swiss-born veterinarian and bacteriologist – spearheaded investigations into botulism, mussel poisoning, and brucellosis. By the 1930s he focused increasingly on parasitic diseases of birds and other animals.

These included ‘parrot fever,’ a deadly disease caused by a bacterium in parakeet droppings, and ‘staggers’ (equine encephalitis), a viral disease of horses spread by mosquitoes that bred in irrigation ditches. Most famously, they also included outbreaks of ‘sylvatic’ plague along the California-Oregon border – outbreaks that Meyer traced to migrations of squirrels and other flea-infested rodents. What linked these outbreaks is that, one way or another, they were all ‘man-made’ – the result of human interference with animal ecologies.

Drawing on Meyer’s papers at the UCSF and Bancroft libraries, this talk reviews Meyer’s feats of microbial detection and his pioneering investigations of disease ecology. Dr. Honigsbaum views Meyer as an important bridge figure in mid-20th century medical research who sought to link microbial behavior to broader environmental and social factors that impact host-pathogen interactions and the mechanisms of disease control.

Mark Honigsbaum

Mark Honigsbaum, PhD, is a medical historian and journalist with wide-ranging interests encompassing health, science, technology and contemporary culture. A specialist in the history of epidemics and pandemics, he is the author of four books, including The Fever Trail: In Search of the Cure for Malaria and A History of the Great Influenza Pandemics: Death, Panic, and Hysteria, 1830-1920. He is currently working on a history disease ecology as a Wellcome Research Fellow at Queen Mary University of London.

About the UCSF Archives & Special Collections Lecture Series

UCSF Archives & Special Collections launched this lecture series to introduce a wider community to treasures and collections from its holdings, to provide an opportunity for researchers to discuss how they use this material, and to celebrate clinicians, scientists, and health care professionals who donated their papers to the archives.

Categories: Brought to Light

Got Videos? Media Sharing Now Available on the CLE!

Convergence - Thu, 2014-11-13 08:54

For some time now, UCSF has been in need of a place to store and manage video files to be shared across the University and for the public. Although Vimeo has been a resource on campus, the uploading process has traditionally not been available to all UCSF users, such as students. The time is finally here! The UCSF Library is now pleased to present a fully-functional system available to all staff, students, and faculty, called Media@UCSF.

Media@UCSF is an online video-hosting platform powered by Kaltura and provides the UCSF community with a centralized system for managing and distributing digital video content. Media@UCSF is fully integrated into the CLE, providing instructors and students with the tools to create, edit, and share videos in a course.

Anyone at UCSF can start using Media@UCSF now by logging into media.ucsf.edu. This blog post, however, will focus on the CLE integration.

Check out this support document to learn more about the different components that integrate with the UCSF CLE:

The Learning Technologies Group has also created documentation on the following topics:

  • Uploading Media
  • Sharing Media in the CLE
  • Inserting and Grading a Media Assignment

Find these step by step instructions in our new Support Center.

To learn more, join us tomorrow at the Collaboration Roundtable hosted by the Library’s Learning Technologies Group. This month’s Roundtable will focus solely on Media@UCSF and takes place from 12 – 1pm in CL-215 in the Parnassus Library. Register to let us know your coming and feel free to bring your lunch while you learn about this new tool.

Image Credits: dsathiyarajErin Standley

Categories: Convergence

Commemorating UCSF Dental Alumni WWI Veterans

Brought to Light Blog - Mon, 2014-11-10 08:57

In honor of Veterans’ Day this year, we bring you a scrapbook from our collection, titled Dental College Alumni Serving in the First World War, 1917-1919. The scrapbook is filled with letters written to Dr. Guy S. Millberry by both former and on-leave students during their military service. Millberry began working at UCSF in 1906, was appointed Professor in 1910, and became Dean of Dentistry in 1914– a role he continued in for twenty-five years.

The collected letters were written from a variety of places– Camp Greenleaf, GA; Camp Fremont, CA; Vancouver, WA; Royat, France; Oakland, CA; Camp MacArthur, TX; San Pedro, CA; Camp Lewis, WA; Khabarovsk, Siberia; New York, NY; Fort D.A. Russell, WY; Camp Greene, NC; Camp Shelby, MS; Camp Lee, VA; La Ferte, France. They were sent from forts, camps, ships, submarines, and hospitals. Most of the the letters are handwritten, a few are typewritten.

Dental College Alumni Serving in the First World War, 1917-1919 scrapbook


The soldiers ask Dr. Millberry for letters of recommendation, job advice, proof of graduation, if their leave of absence will be honored or extended to allow them return to school after the war ends, and give updates on their lives. One soldier, who wrote on September 21, 1918, included a copy his records detailing the dental work he did in one week.

Dental College Alumni Serving in the First World War, 1917-1919 scrapbook

A graduate of the 1917 UC College of Dentistry class, Edwin Busse, wrote a letter on October 18, 1918 from his station in Paimboeuf, France that included several photographs (the letter is transcribed in full at the end of this post). Busse is pictured in the 1917 Blue and Gold UC yearbook as a member of the Psi Omega dentistry fraternity. Below, a photograph of the Arch de Triumph in Paris, France. The caption reads: “Note how French have protected statue on right with sandbags.”

Dental College Alumni Serving in the First World War, 1917-1919 scrapbook

Included with same letter, a photograph of a “portable dental outfit.”

Dental College Alumni Serving in the First World War, 1917-1919 scrapbook

As well as a photograph of a “dental office at Paimboeuf.”

Dental College Alumni Serving in the First World War, 1917-1919 scrapbook


Clark R. Giles received his Degree of Doctor of Dental Surgery from UC in 1914 and had been an instructor in Prosthetic Dentistry here before serving in World War I. He wrote a detailed letter to Millbery on on October 7, 1918 from Royat, France describing the work that goes on at Base Hospital 30, the war, his recent leave, and even mentions Busse.


Dental College Alumni Serving in the First World War, 1917-1919 scrapbook

Royat France
Oct 7, 1918

My dear Dr. Millberry:

I have been a long time in writing to you but rest assured it is not because I have not thought many times of you and of the University.

We are located in Royat near Claremont-Ferrand a city of 60 thousand. We have the hospital well established in 17 or 18 summer hotels and at present have a little more than 1700 patients and within a few months expect to be able to care for 3 thousand if necessary.

Our department is very comfortably (not lavishly, naturally) equipped and just at present we are five dentists and six assistants. However we expect to lose our extra help ere long but in all probabilities they will be replaced by men from incoming organizations. We are kept very busy for example last month we saw some 650 patients and we try to have each man who comes in, go out with his mouth in a completed condition. We naturally have a great amount of routine work to do but mixed with it are also numerous very interesting wound and fracture cases from which we learn a great deal in the surgical and fracture line. All cases involving facial or other structures than the jaws or teeth are as you probably know handled in conjunction with the surgical department.

Click through to read the rest of the letter written by Giles followed by the letter from Busse that included the photographs, written to Millberry a week later than Giles’, also from France. 

One case it has been my good fortune to handle was of two huge cysts involving one, almost the entire body of the sup. maxilla, and the other leaving just a shell of the mandibula running back under the first molars of each side. They were the largest things of the sort I have ever seen but at present new tissue is building very nicely and I hope for a nice final result in time.

We at most times have one or two fractured mandibules on hand so I feel that if when I return to San Francisco and see a fractured jaw come in I won’t be very badly excited by it. I feel that I learned a considerable number of points about such cases from Dr. Winters clinics in the two weeks we spent with him in New York. But must add that after visiting the colleges in New York I felt proud to have received my training in the U. of C. and then and there decided that you do not have to “go fast” to get the good things of the profession.

Have only met one of our men since I have been over here (now nearly six months) Maurice Gloyier, who is with an ammunition train that is in a camp nearby just at present. Have rec’d letters from Edwin Busse but do not know of the whereabouts of any of the others.

I have just returned from my first “leave” having had 7 days exclusive of travelling time. I went to Marseille, Nice, Nîmes, Monaco, Monte Carlo, Menton, crossed the Italian border and came back by way of Lyon. I surely had a wonderfully interesting and beautiful trip. Would like to have gone to Paris but at present that is “out of bounds” but hope to get there later by some method or other.

Things are surely going beautifully on the “Front” of late and from the declaration of day before yesterday guess we must have the old Kaiser standing first on one foot than the other.

Well we anxiously await the results of this huge diplomatic week and hope always for peace.

If you are not too busy, and I have never seen you too busy to take on some new task, I would be more than pleased to hear from you.


Clark R. Giles
Base Hospital 30


Dental College Alumni Serving in the First World War, 1917-1919 scrapbook

Paimbeouf, France
October 18,1918

Dear Doctor;

I am enclosing a few pictures which may be of some interest to you and for which you asked some time ago.

Of course over here the problem is films and paper. So far I have not been able to get any that fit my camera, and as you may see, those I brought from home have suffered from age and have made spotted prints.

The work over here continues to be far from interesting. This is due no doubt to the very limited means we have of doing any great amount of dentistry in these isolated stations. The commanding officer of this station has been very much interested in the work and has had me give blackboard lectures both to the men and officers.

I have written on the back of the pictures about each one.

Sincerely yours,

Edwin K. Busse


Categories: Brought to Light

Curing Cancer (No, Not Really) With HTML5 (Sort Of)

CKM Blog - Wed, 2014-11-05 09:49

Here’s a talk about federated search and Amalgamatic that I gave at HTML5DevConf in October. Hopefully, the conference will post a better quality video where you can actually see the demos. But for now, this is what I recorded.

Categories: CKM

Medicine Chest Video and UC Public Records

Brought to Light Blog - Tue, 2014-11-04 09:12

Watch the film to see Polina, Head of the UCSF Archives & Special Collections, show off a medicine chest we recently accessioned from the California Historical Society. Medicine chests were once things of beauty: hand-written labels, silver leaf coatings for pills, delicate bottles. The chest belonged to the family of Joseph Donoghue of San Francisco and was used during their travels to Hong Kong and Europe. We’ll bring you a longer post of the history of the chest soon.


The chest includes 19th century pharmaceutical drugs from a pharmacy owned by a figure important in UCSF history– William Searby– that was located on Market Street. Searby was was a key player in the founding of the California College of Pharmacy (later UCSF School of Pharmacy). In addition to being the school’s first professor of Materia Medica, and later professor of pharmacy, he was also the second dean of the college. (We recently conserved a portrait of Searby from the 1880’s– read about that process here!)

The University of California Public Records project is on a quest to celebrate UC’s bevy of unique treasures. The University of California houses an incredible diversity of museums, libraries and other collections. Some are small and eclectic; others are recognized as world-class. Many are open to the public, and all are cared for by passionate curators, historians and scholars. Take a behind-the-scenes peek at UC’s incredible collections.


Categories: Brought to Light

Exploring the Archives for 150: Happy Halloween

Brought to Light Blog - Fri, 2014-10-31 08:33

In preparation for UCSF’s 150th anniversary celebration exhibits, we’ve been doing a bit of exploring in the vaults. For the next several months, I’ll be posting some of the treasures we’ve discovered!

It’s Halloween and you know what that means…time for us to post some spooky artifacts! The first items come from the collection of UCSF founder Richard Beverly Cole. Cole facilitated the transfer of Toland Medical College to the UC in 1873 and served as the first dean of the UC Medical Department. These two quirky pieces seemed perfect for All Hallows’ Eve in the archives, enjoy!

Skeleton Pin with Blue and Gold Ribbons, circa 1880

Humidor, circa 1880

Cole received this ceramic humidor in the shape of skull wearing a Sou’wester from the students of the UCSF Medical Department. For those non-smoking, non-seafarers out there, a humidor like this is used to store loose tobacco and a Sou’wester is a waterproof hat often worn by fishermen and sailors. Why the humidor is in the shape of a skull wearing a Sou’wester remains a mystery.

Humidor, circa 1880

Next we have illustrations from Dr. Alfred Augustus Crawford Williams. Williams served as a surgeon for the Union Army during the American Civil War. His surgical instrument case is one of the items in our artifact collection. In the case, tucked beside the scalpels and bone saws, are several small illustrations of skeletons engaged in a variety of activities.

Illustration by Alfred Augustus Crawford Williams, circa 1865

Illustration by Alfred Augustus Crawford Williams, circa 1865

Illustration by Alfred Augustus Crawford Williams, circa 1865

Happy Halloween!

Categories: Brought to Light

Got questions? October 30 Is #AskAnArchivist Day!

Brought to Light Blog - Mon, 2014-10-27 09:00

On October 30, archivists around the country will take to Twitter to answer your questions about any and all things archives! This day-long event, sponsored by the Society of American Archivists, will give you the opportunity to connect directly with archivists in your community—and around the country—to ask questions, get information, or just satisfy your curiosity.

Postcard depicting the Affiliated Colleges, San Francisco, California, ca. 1900s

We are eager to respond to diverse questions you have about archives and archival work. Not sure what to ask? Here are a few sample questions we commonly get…

•    Who was the first chancellor of UCSF?
•    When the university was officially named UCSF?
•    How to archive a website?
•    What’s the most unusual thing you’ve come across in your collections?
•    How can I see you collections?
•    How can I volunteer in the archives?
•    Can you help me digitize VHS tapes?
•    I have old dental school yearbooks, can I donate them to archives?

#AskAnArchivist is open to everyone—all you need is a Twitter account! To participate, just tweet a question and include the hashtag #AskAnArchivist in your tweet. Your question will be seen instantly by archivists around the country who are standing by to respond directly to you.
If your questions are specifically for the UCSF archives, be sure to tweet them to @ucsf_archives using the hashtag #AskAnArchivist on October 30th from 9 a.m. to 4 p.m.
We may not know every answer right away, but we will get back to you after we’ve had the chance to do some digging.
The archives team will be on-hand to answer your questions. Click here to tweet.

Categories: Brought to Light

Using Zotero for Collaboration

In Plain Sight - Thu, 2014-10-23 13:54

Zotero is a free, easy-to-use application to help you collect, organize, cite, and share your research sources. In our experience one of its strengths is the option to create shared libraries, known as Groups, allowing you to collaborate with other Zotero users. The ease with which Groups can be set up facilitates a wide range of collaborative activities.

Zotero was originally developed as a FireFox extension but a recently introduced  “standalone” version allows you to use it with other browsers. With the local component on your computer you can add citations and bibliographies to Word documents.

To use Zotero groups you must also create an online account at Zotero.org.  Zotero’s online syncing allows you to access your Zotero library on any computer with internet access and Zotero installed.  The two components are then kept synchronized.  Zotero Groups offer users the option to create shared libraries and collaborate with other Zotero users.

To create a group login to your online account and select Groups:









Give your group a name. Note that you can choose who has access to it:

Click here for more information on using Zotero Groups.

Categories: In Plain Sight

History Exhibit at UCSF’s 150th Anniversary Block Party 8

Brought to Light Blog - Tue, 2014-10-21 10:31

We had a great time at UCSF’s Block Party, held October 8th on the Mission Bay campus. The event celebrated the university’s growth over the past 150 years and featured live music, food, and entertainment.

The archives team in a Wells Fargo stagecoach at the Block Party. UCSF founder Hugh Toland reportedly used the company’s services in the mid-nineteenth century to transport pharmaceuticals to patients throughout California.

We organized an exhibit for the event that highlighted key moments and individuals from UCSF’s rich history. The displays featured artifacts and photos from the Archives and Special Collections, including Hugh Toland’s surgical instruments, a student nurse’s uniform, Guy Millberry’s dental equipment, and pharmacist William Searby’s brand-name medications.

School of Medicine artifacts. UCSF founders Richard Cole and Hugh Toland are pictured along with Lucy Wanzer, UCSF’s first female graduate.

We also brought duplicate copies of UCSF’s student yearbooks and invited visitors to flip through them. One woman found a wild picture of her dentist from when he was a student in 1985!

School of Nursing artifacts. Margaret Tracy and nursing students are pictured. Tracy served as director and dean of the UCSF School of Nursing from 1934-1956

School of Pharmacy and School of Dentistry artifacts. William Searby and Guy Millberry are pictured. Searby helped found the California College of Pharmacy in 1872 and later served as dean of the School of Pharmacy. Millberry served as Dean of Dentistry from 1914-1939.

It was a lot of fun to share our collections. Thanks to everyone who stopped by the exhibit.

Categories: Brought to Light

Chunked Uploads with JQuery File Upload and Ruby on Rails

CKM Blog - Tue, 2014-10-21 08:13

I was inspired by this thread on the Google Hydra-Tech forum to put together a short tutorial on chunked uploads with jQuery file upload and Ruby on Rails.

There’s a nice example on GitHub for using this plugin with Rails, so we don’t need to do this from scratch. To see how this plugin works without chunked file uploads, clone the example


bundle, rake:db, rails server, and go to port 3000. You should see a nice UI for file uploads.

Try uploading a small file (under 500k). It works well, has a nice looking upload bar that flashes for just a few moments, and allows you to delete or cancel an upload. Now try uploading something a little bigger, maybe around 500MB. The progress bar will really come in handy here, but once it is complete, your server will most likely hang for a few minutes (at least). A file a few GB in size, while permitted, will take even longer and may slow down your web browser and localhost server to the point where it is unusable, and you need to go off to terminate a few processes manually through the command prompt.

At some point, you’ll probably start wanting to use the chunked file uploads feature, which splits the file into smaller pieces and submits them, one after the other, across the wire to your server.

To activate chunked file uploads, open the jquery-fileupload-rails-paperclip-example app and navigate to the views/uploads/index.html.erb file. At the bottom of this file (line 118 on my system), you’ll see a call to:


To use chunked file uploads, replace the above bit of code with:

$('#fileupload').fileupload({ maxChunkSize: 1000000 maxFileSize: 1000000 * 10000 });

Note – these values were chosen to illustrate the app working, you may want different values in production. For more on chunked file uploads, check the documentation.

Give it another try (you may need to reload the javascript for your change to take effect. Upload that medium size (at least a few dozen MB to see the full effect) and watch your dev server spin. You’ll notice that the controller for processing a file is getting called repeatedly for each chunk.

Watch your server log as rails processes the upload, and you’ll see that the controller is called repeatedly as you upload the file. The file uploader is splitting the medium sized file into 1 mb sized chunks and submitting them sequentially to the server.

Great, except.. refresh the page.

The rails app is processing each chunk as if it were a separate upload. Keep in mind, this has nothing to do with the jquery file uploader plugin, it’s doing exactly what we asked it to do – split up a file into small pieces and submit each one to the server. We just need to change how we’re processing this on the server side.

Before we go on, go ahead and delete those files (the fastest way is to check the box next to the upper menu delete button).

To process each chunk as part of a single file, rather than as a separate independent file upload, take a look at the create method in the uploads_controller.rb controller.

The first line

@upload = Upload.new(params[:upload])

creates a new upload object and processes it as a single file upload. You’ll need modify this to process it as a chunk rather than as a complete file.

There are plenty of ways to do this. To keep it all contained in an example, I’ll just go ahead and hack the controller. Remove the line above and replace it with the following code (entire method posted to avoid confusion about what to paste where)…

def create @temp_upload = Upload.new(params[:upload]) @upload = Upload.where(:upload_file_name => @temp_upload.upload_file_name).first if @upload.nil? @upload = Upload.create(params[:upload]) else if @upload.upload_file_size.nil? @upload.upload_file_size = @temp_upload.upload_file_size else @upload.upload_file_size += @temp_upload.upload_file_size end end p = params[:upload] name = p[:upload].original_filename directory = "uploads" path = File.join(directory, name.gsub(" ","_")) File.open(path, "ab") { |f| f.write(p[:upload].read) } respond_to do |format| if @upload.save format.html { render :json => [@upload.to_jq_upload].to_json, :content_type => 'text/html', :layout => false } format.json { render json: {files: [@upload.to_jq_upload]}, status: :created, location: @upload } else format.html { render action: "new" } format.json { render json: @upload.errors, status: :unprocessable_entity } end end end

Note – to keep things simple, I hard coded a new upload directory into the method, so you’ll need a top level “uploads” directory in your rails app for this to work.

In this method, we are now reading the upload parameters into a temporary upload object. We then look for an upload object with that file name (yes, different uploads could have the same file name, so you’d need a different approach for production). If that object doesn’t exist, create it, and treat the file chunk as if it were a new upload. If it does exist, retrieve it and append the newly uploaded chunk to the existing file. You do this over and over until the last chunk is processed (there’s also a running counter for file size).

Give it a try and refresh the screen. This time, you should see only one file upload, and you should be able to retrieve that file from your uploads directory. You may also notice that the long lag time between the status bar completion and the actual file upload completion is much shorter now, as the file is getting written to disk in small increments (you don’t have to convert the entire temp file upload on the server at once after upload, just the last chunk).

One note – some of the functionality of the upload plugin (such as delete) will no longer work with the new directory location.

So, should I do chunked file uploads?

The general approach above, with some modifications, does make it possible to process bigger files and stick with a pure ruby solution, and it could take care of the problem of medium file uploads that need to be chunked but perhaps don’t require an industrial strength solution.

However, if you want to allow really big file uploads, you might want to consider a solution that allows a user to upload a file to box, dropbox, google drive, etc, and then transfer it to your server from there as a background job. In fact, there’s a very nice gem from hydra labs called “browse everything”  that provides this functionality and integrates nicely with sufia. If you’re already using the “browse everything” type approach, you might just go ahead and limit direct non-chunked uploads to small sized files that won’t tax the system rather than managing the complexity overhead of a solution that sits in between.

In addition to the obvious problems I dismissed with a bit of hand waving and vague excuses about this being for to a sample exercise, there are other issues to consider with large file uploads. What do you do about partial uploads? Partially uploaded files where the user closed the connection or lost the network connection? Checksums (we can check the sum on each chunk, but were the chunks assembled properly on the server)?

Chunked file uploads are a very useful way to get that middle ground, and I suspect many of your users would really appreciate being able to upload medium size files without having to create an external account. I just want to emphasize that will the above approach can work, there’s a lot to consider here.

Categories: CKM

Introducing Amalgamatic

CKM Blog - Thu, 2014-10-16 07:40
“Search!” by Jeffrey Beall licensed CC BY-ND 2.0

Academic libraries offer many resources, but users cannot be expected to search in, say, a half dozen different interfaces to find what they’re looking for. So academic libraries typically offer federated search.

Sometimes, a solution is purchased. Many libraries, for example, use 360 Search.

Here at UCSF, we are among the libraries that have built our own federated search. Twice.

There are (at least) three ways to pull data out of other resources in real time.

  1. Cool, they have an API for that!
    This almost never happens.

  2. I will screen-scrape the #*%!?@ out of your website!
    This is by far the most common scenario.

  3. Web New-dot-Oh: It’s full of JavaScript that injects the content.
    An edge case, but one that is becoming more important all the time. Make friends with PhantomJS to scrape these sites.

When trying to implement these solutions, a common scenario is to build your screen-scraping federated search tool with traditional server-side languages like Java or PHP.

These strategies and technologies bring with them pitfalls to be avoided. Recompiling your WAR every time one of your target systems modifies their HTML layout, anyone?

Here’s another pitfall: Our group built a solution years ago (our first one) that is implemented in Drupal with no external facing API. So, if I want to experiment with a different results interface, I need to write it in Drupal. This tight coupling prevents experimentation with other technologies or things that don’t fit neatly into the Drupal paradigm.

A lot of the pitfalls can be avoided by following sound software architecture principles. But one thing should be uncontroversial:

No programming language has a more robust and widely-understood set of conventions and tools for processing blobs of HTML than JavaScript.

So how about building your federated search server using Node.js? Or maybe even take it a step further and just let your user’s browser execute the federated search entirely by itself, no need to talk to your server! If it’s all just JavaScript, why not?

That is our approach this second time around.

First, we wrote a pluggable, extensible federated search tool called Amalgamatic.

Second, we wrote the plugins that we needed to search the resources we were interested in:

In the course of writing these plugins, we used all three of the techniques described above (API, scraping HTML, and using a headless browser to get JavaScript-generated content).

Third, we used Amalgamatic to expose federated search on our API server. (source code)

Fourth, we set up a prototype search interface to use that API. (source code)

Lastly, because we could, we used Browserify to create a demo showing how to use Amalgamatic so that all the retrieval and processing happens in the browser—no need for an intermediary API or search server! (source code)

I hope others find this work useful. Use Amalgamatic, ask questions, file issues for bugs or feature requests, and write and publish your own plugins.

(Or tell me about your project that already does this better and I need to fold up shop or at least steal all your ideas.)

While I’m at it with the small-text thing, here’s a caveat on the Browserify-ed version: The one thing the browser couldn’t do was launch the PhantomJS headless browser for scraping sites that depend on JavaScript execution to display results. Fortunately for us, that was needed in the LibGuides plugin only. And LibGuides offers an API, so if we really wanted LibGuides results, we could use the API. We initially implemented it that way, actually, but found that the API results differed from the LibGuides search page results. We thought that might be confusing to users, so we went with PhantomJS-assisted scraping.

Categories: CKM

The Anatomy of the Human Body: Illustrated by One Hundred & Fifty Eight Plates

Brought to Light Blog - Wed, 2014-10-15 07:43

We bring you some images from the rare book collection to kick off your October:

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. I.

I like to think of it as “Dancing Skeletons.” Doesn’t it look as though they’re mid-twirl?

Andrew Fyfe (1754-1824) was a Scottish anatomy professor at Edinburgh University where he lectured and performed dissections. He later went on to create anatomy textbooks and engravings. The above volume, The Anatomy of the Human Body: Illustrated in One Hundred & Fifty Eight Plates, was published after Fyfe’s death in 1830. It’s comprised solely of detailed engravings of human anatomy.

This book, along with 1,316 others, were digitized during the UCSF Google Books Project and is now available in full on HathtiTrust.

A few more– the thoracic cavity,

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. XVII.

teeth and jaw,

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. LXXII.

nerves and muscles on the neck and head,

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. CV.

the brain,

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. LII.

and last but not least, a child skeleton and skulls on books. Now, who is ready for Halloween?

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. XXVII.

Fyfe, Andrew, The Anatomy of the Human Body… 1830, Tab. IX.

Categories: Brought to Light

100+ Years of UCSF Yearbooks Accessible Online: UCSF Partners with Google Books for Digitization Project

Brought to Light Blog - Fri, 2014-10-10 09:00

The UCSF library is an important UC contributor to the Google Books digitization project. Through the collaboration with the California Digital Library (CDL) digitization team 1,317 volumes from the general and rare book collections were scanned and uploaded to Google Books and HathiTrust, a central repository for digital books.

As part of this project, we also digitized the university publications (yearbooks, announcements, departmental newsletters). These materials are among the most heavily used in archives and requested not only by university departments, but also by people doing genealogical research and alumni. As a result, 460 of these volumes are now full-text accessible on Google Books and HathiTrust sites.

Chaff’98, v.2, yearbook of the College of Dentistry, University of California. College of Dentistry baseball team, 1897-98.

With hundreds of volumes digitized proper organization assures quick and efficient discoverability of these treasures by diverse users. With the help of HathiTrust colleagues at CDL and the University of Michigan, we set up two collections:

University of California, San Francisco collection

This collection contains books, pamphlets, UCSF University Publications, and yearbooks dating back from 16th century through 2000s held at the University of California, San Francisco Library and Special Collections.

UCSF University publications

This collection contains materials published by UCSF schools, programs, and research institutes (course catalogs, announcements, student publications, annual reports, newsletters, etc.) as well as yearbooks dating back from 1864 held at the UCSF Archives. Among them is “The Introductory address delivered by Professor H. H.Toland at the Toland Medical College, San Francisco on Monday, October 24, 1864.”

Please read the full story on the UC Libraries web site and CDL blog.

UCSF Library Google Books Team. Front row: Andy Panado, Polina Ilieva, Bea Mallek, Karen Butter. Back row: Eric Peterson, Art Townsend, Alberto Luna, Tyrone McCloskey, Don Ciccone, Bazil Menezes, David Campbell, Anneliese Taylor. Not pictured: Margaret Hughes, Julia Kochi, Bertha Hall, Lucy Friedland, Mark Zanandrea, David MacFarland, Alan Daniel, Jubeda Azam, Deborah Freeze, Susan Boone and Kirk Hudson.

About CDL
The CDL was founded by the University of California in 1997 to take advantage of emerging technologies that were transforming the way digital information was being published and accessed. Since then, in collaboration with the UC libraries and other partners, CDL assembled one of the world’s largest digital research libraries and changed the ways that faculty, students, and researchers discover and access information. In 2006, CDL and the University of California libraries partnered with Google on a project to digitize millions of books from the campus collections.

About HathiTrust
HathiTrust Digital Library is a digital preservation repository and highly functional access platform. It provides long-term preservation and access services for public domain and in copyright content from a variety of sources, including Google, the Internet Archive, Microsoft, and in-house partner institution initiatives.  Launched in 2008, HathiTrust has a growing membership, currently comprising more than 90 partner libraries. Over the last six years, the partners have contributed more than 11 million volumes to the digital library. More than 3.7 million of the contributed volumes are in the public domain and freely available on the Web. For more information, visit the HathiTrust About page.

Categories: Brought to Light

Random Forests and Datashare at the CDL Code Jam

CKM Blog - Fri, 2014-09-05 10:28

The California Digital Library hosted a code jam earlier this month at the Oakland City Conference center.

This gathering brought together librarians and developers from University of California campuses for a series of working meetings with an eye toward system-wide projects, especially involving data curation.

In the spirit of an informal, code-jam style meeting, I presented a bit on my recent experiments using machine learning to categorize data. As a starting example, I applied a random forest to suggest subject keywords for data sets uploaded to the recently launched DataShare website.

A researcher who uploads a data set to Datashare through the datashare-ingest app is prompted to provide keyword information along with other metadata describing the data set. One relatively common keyword is “middle-aged”.


For the code jam, I showed one possible way to use these existing records to train a random forest to determine whether a new dataset should be tagged with the keyword “middle-aged”.

For this particular exercise, there isn’t a great deal of data – we’d need a much larger data set to really apply this. However, the small dataset has some advantages for exploring the use of random forests, as it’s possible to visually inspect the input and gain a better understanding of how the random forest categorization is working.

“Middle aged” is a relatively good term to use for an experiment, as it isn’t as obvious (or as objective) more technical terminology. Highly technical keywords often show up repeatedly in the data set, and are often very predictable. More subjective and less technical keywords such as “middle aged” may apply to a wide range subjects, and they may show up in some records but not in others, as some researchers include the keyword and others don’t. Random Forest classification can be particularly useful in this case, as these subjective keywords are more likely to be applied when they don’t show up in the description, title, or technical methods for a particular dataset.

For example, here’s a record tagged with the keyword “middle aged”.

To get started, I approached this with a simple “bag of words” approach, with a small modification. Rather than taking a very large bag of words for all records (or a sample of all records) in Datashare, I limited the count to words that show up in records with the keyword “middle aged”.

data: 14
changes: 12
disease: 12
alzheimer: 11
diffusion: 10
dti: 9
subjects: 9
images: 9
slice: 9
brain: 8
ftd: 8
imaging: 8
axial: 7
white: 7
matter: 7
tracts: 7
reductions: 7
acquired: 7
gwi: 7
center: 7
diffusivity: 7
thickness: 6
type: 6
symptoms: 6

(for the full list, run the wordcount_summary.py script in the github repo).

I used this bag of words to populate a random forest. For each record, I created a vector indicating the word count for each of the most common words in each dataset, using the title, abstract, and methods as text fields.

Here’s the bag of words for a single record that includes the “middle-aged” subject tag:

data 1
changes 7
disease 0
alzheimer 0
diffusion 6
dti 5
subjects 2
images 4
slice 0
brain 2
ftd 0

And here’s the bag of words for a single record that doesn’t contain this keyword:

data 5
changes 6
disease 4
alzheimer 4
diffusion 0
dti 0
subjects 16
images 1
slice 0
brain 10
ftd 0

Each of these records is converted into a vector containing the word count along with information about whether it was tagged with the keyword “middle-aged” (for the python scikit-learn library, I expressed this as a binary 0 or 1).

A categorization problem like this, where a bag of words is used as the basis for determining whether a record belongs in a particular category, can be approached with a number of different supervised learning techniques. Logistic Regression and Decision Trees are common approaches, and Random Forest is a particularly accessible and often effective algorithm for many categorization problems. I used a Random Forest classifier here, though other algorithms might turn out to be more effective.

For this application, I converted each record into a vector representing the bag of words, with each position representing a common term, and each value representing the number of instances of that word. I ignore a number of stop words and common terms, but there’s a lot more that could be done here, especially around identifying common phrases rather than single words. Each vector, along with an indicator representing whether this record was tagged with the subject “middle aged”, is then used to train a random forest classifier.

The rforestDS-Middle-Age.py script contains python code using scikit-learn to train and evaluate a random forest classifier on the Datashare records for the “middle aged” keyword tag, using the strategy described above.

Note that if you run this multiple times, you’ll get slightly different output. This is probably amplified by the relatively small number of training samples.

The train data score indicates how well the random forest categorizes the records that were used to train it. Because of the small sample size and relatively specific vocabulary, the assessment is fairly high.

Train data score: 0.941176470588

While it is interesting to observe the Random Forest’s assessment of how it performs on its own training set, a common practice is to split the training data into a training set and testing set (often at a two-thirds training, one-third testing ratio). You can then use the testing data (which was not used to build or train the random forest) to evaluate the accuracy of the classifier. I didn’t in this particular case, as the training set was very small and this is a small experiment/exercise, but it would be an important step on a larger dataset where we plan to make real use of a classifier.

Random Forests can also estimate the relative importance of the classifiers (in this case, the importance of the word count for each of the most common words in determining whether a record has been tagged with the subject “middle aged”). Here’s the feature importance estimate for a run of the random forest. The numbers will change slightly each time the forest is run.

data: 0.115221184049
changes: 0.0497659524022
disease: 0.0414350226064
alzheimer: 0.0438029075727
diffusion: 0.0870807358224
dti: 0.0287297792369
subjects: 0.0548861615427
images: 0.0783953700445
slice: 0.401884434536
brain: 0.0378775508884
ftd: 0.0609209012994

Although such a small sample size isn’t ideal for building a useful classifier, it can be illuminating, as the data set is small enough to hint at why certain words are so important. “Slice”, for instance, probably wouldn’t be such a strong predictor for whether a record should be tagged as “middle aged” in a larger data set. This is almost certainly a quirk related to our small sample size.

The output for this script is stored in the “categories” folder in a file named “1-Middle-Aged.txt”.


To apply the random forest to all subject tags, run the rforestDS.py script. You should see similar output for each keyword tag, along the training data score and feature importance estimates. To assemble all the estimates into a single file, run the MergeFiles.py script.

GitHub repository for this exercise

Github repository for Dash (formerly Datashare)

Categories: CKM

Redesign Your Website in 4,000 Easy Steps

CKM Blog - Tue, 2014-08-12 15:33

Earlier this month, Rich Trott and I delivered a session at the University of California Computing Services Conference (UCCSC) in San Francisco. It was about our experience using an approach of continuous iterative improvements and frequent feedback to help keep our site fresh and meeting user needs. We talked about why this approach has been working better than the tradition complete redesign that might happen every few years (or not.)

If you can’t wait to hear more, see the slides with notes.

Or if you’re more of the video type, you can check that out too.

Let us know about your experiences using this kind of approach to website upkeep and positive user experience. What works for your site or organization?

Photo by chexee

Categories: CKM

Announcing Symfony Ember.js Edition

CKM Blog - Tue, 2014-08-05 12:30

We’ve spent a lot of time getting the configuration right for setting up Ember.js and EmberData to work with a Symfony backend. So we have decided to release a working example of getting this right:

Symfony Ember.js Edition


The Ilios project is investigating a migration to Ember.js. Because we have a lot of PHP experience and a lot of PHP code, it makes sense to serve the content using Symfony. We chose Ember.js because of its convention over configuration approach and wanted to make as few customizations as possible.

EmberData provides a clean way to represent your data models in JavaScript and bind them to templates and controllers. It also has built-in REST functionality for keeping those models up to date on the server.

Specific Fixes Compiling Handlebars templates

Ember expects compiled Handlebars templates to be in the JavaScript Ember.TEMPLATES object instead of Handlebars.template. That’s fine if you put all of your templates in index.html like they do in most examples. In that case, Ember does the compilation itself.

However we wanted separate templates and routers in different files. This required pre-compiling the templates for Ember. Thankfully there is a Node.js application for doing this already called ember-precompile.

It is even supported in the latest version of Assetic. However AsseticBundle hasn’t been updated in a while, so we had to mess with the Composer definition to get this working. The Assetic compiler will fail silently if you don’t have ember-precompile installed in /usr/bin/ember-precompile. Hopefully a fix for that will be available soon.

Testing the API

We want test coverage for our API, but actually getting the right input proved to be a bit complicated. There is a demo controller test and a base test in the AcmeApiBundle in this distribution. You can use it as a starting point to make writing other tests easier.

JS Dependencies

We use Bower to install all of our dependencies, include them in the layout, and manage their version without checking the code into our repo.

None of this would have been possible without:

Categories: CKM
Syndicate content