Recently, I started to explore using Git to maintain and organize my data. This includes both the primary data I work from as a linguist and the various kinds of data I produce in the form of written material (books, papers, etc..). As a field linguist, I primarily work with text that is transcribed from audio and video recordings. Early on I developed an archiving system to preserve the original files in their raw form as much as possible, but I didn't develop a similar system for maintaining my working files, and ended up with lots of duplicates of files that I had copied various places for various purposes.
In this fifth post on Linguistic tools (the overview of which is here), I plan to describe the way I am trying to overcome this issue and become more organized by adopting a version control system. Mostly, though, I'll just try to explain what Git is and what I use it for. This is by no means a complete tutorial, since other people have done that better, but hopefully it will provide some direction for others who are interested in streamlining and organizing their workflow.
When I started learning to program in Python and was introduced to Git, I saw the benefits for coding, but began to wonder if it was possible/useful to use it for other organizational tasks in relation to other kinds of writing and data structures. There are a few blog posts about using git for paper writing here and here and here, but they are written primarily for coders who also write papers (I'm looking at you, academic comp-sci folks!) and don't translate super well for my use case.
What is Git?
First, what is Git? Git is a version control system, which means it tracks changes in a repository (or 'repo'), basically serving as a series of backups for your work. It also has tools that allow you to make a copy (or 'branch'), work on it separately, and then when you're ready, you can see the changes made to individual files and 'merge' them together into a new version. For a simple tutorial, see here, and here is a great visual walkthrough.
Most explanations of Git use the example of a tree or a river, which do help to understand the process, but for total newbies (and possibly to address the difficulty of finding a good metaphor) I came up with the following metaphor, and find it to be a bit more useful.
The Git Metaphor
Imagine you have a drawing project. You have an empty piece of paper - this is your initial blank Git repository. Now you draw a picture on the piece of paper and decide it's an ok version - this is a snapshot that is your first 'commit'. You then decide you want to make some adjustments to the drawing, but you want to preserve the initial drawing, so you take out another piece of paper, lay it on top of the first, trace out the shape in pencil, and then begin to modify the edges of the drawing or the background by erasing or adding new bits. When you're happy with that you 'commit' it, and then every time you modify it, you repeat the process of first tracing it out on a piece of paper. Each of these pieces of paper stack, so if you want to go back to an earlier drawing, you can, without losing any of the other drawings.
Now let's say your friend wants to work on the same drawing project. You can give him your latest drawing, he can copy it and work on it in the same way. Then when he's done he can give it back to you and you can choose which bits of his version you want to incorporate into your current version. This is super useful for projects with lots of collaborators, especially if you're writing code, which are basically text files and relatively easy to merge based on differences in lines.
[Note that this isn't exactly what the Git system does - it doesn't actually create a NEW version of the repository, like the tracing paper, but instead uses the most recently committed version as the new base/foundation for future modifications.]
The most important thing I've had to keep in mind is to write myself detailed commit messages, and to figure out a good protocol or format for these messages. This is because once you've committed something, you can go back and search through your commits (save states), but this is only easy IF YOU KNOW WHAT THE COMMIT CONTAINS!!! Using the full filename of the committed file, for example, is much better than writing out 'New version of Paper'. Giving more information, such as about what you changed in the file, is even better.
My Use Case
My use case, however (as opposed to collaborating on code with a large team), is for a single repository of data in which I will occasionally share a single paper with collaborators. What I want is a bit more like a backup system (think Apple's Time Machine or the versioning system in Mac OS) but with a lot more control. Git, for example, works on the command line and requires you to provide messages for each commit you make, which also requires you, the user, to be clear about what changes are and why they were made. This (ideally) means less clutter and assists with organization.
In thinking about my needs and doing research, I discovered a drawback of version control systems like Git. If I have a single repository but am working on multiple papers at once (like I often do), guess what happens when I save changes on document A and then checkout a previous version of paper B? Yup, everything reverts to the state it was before, and I 'lose' all the changes I just made to A. I put 'lose' in quotes here because I don't actually lose anything, as long as I had committed it properly, but I'd then have to checkout the commit, copy the file, and then revert... anyway it's annoying.
What I need
So what I REALLY need is a single Git repository with the ability to track individual folders/files separately with their own version histories (like embedding repositories). Git can do this in several ways, none of which are particularly intuitive: submodules, subtrees, subrepo, and simple embedding. The first two are designed for somewhat different use cases than mine, namely using (part of) someone else's code in your own project. They're not really meant to create sub-repositories in your local repo to track separate histories. The third, subrepo, looks quite promising but requires that you run everything from the root of your main repo, and since I have lots of organizational subfolders, typing the names every time just gets tedious. So, I use the strategy of simple embedding.
By simple embedding, I refer to navigating to a subfolder within my main repo that I want to track and running the command 'git init'. This does two things:
This is probably a hack, and not the way Git was intended to be used, but it works for me. The only problem I foresee happening is making too many Git repositories, and not being able to keep track of the multiplicity. So I plan to use this sparingly. For the most part, I'm ok with committing changes across the whole repository, since one of the real benefits of using a VCS is the freedom to throw things away.
Some other great posts on version control systems include this one on the benefits of version control, this one on several different version control systems for writers, this post on the limitations of Github for writers - the last of a 6-part series worth reading if you are debating whether to start on the Git/version control journey. And finally, this one is about one person's suggestions for academic writing and Git.
In any case, Git or another VCS is definitely worth checking out. I also recently discovered that Git repos are supported 'out of the box' by LyX, my go-to LaTeX editor! More on that to come... I also recently discovered SRC (Simple Revision Control), which focuses on tracking revisions on single files. This might actually be what I need. I'm still exploring this, and it might not be necessary since my LaTeX editor supports Git. We'll see.
This is the fourth installment in a series of blog posts where I discuss some of the tools I use for linguistic analysis. In a previous post I described the tools I use for processing and converting video and audio. This is partly important for using the audio with Praat for acoustic analysis, but also because ultimately I want to transcribe the recordings and analyze the grammatical structure (using the transcriptions) while remaining linked to the recordings. Ideally, such a link would allow me to play back the recording from within the program that I use to analyze the grammatical structure of the language, so I'm not constantly having to open the sound files and scrub to the correct part of the WAV.
Fortunately, this IS possibile, and it currently involves using two larger programs, Transcriber and Toolbox, along with a small tool/script that I wrote for conversion (you can read more details about the script HERE). The original workflow, which my supervisor Alec Coupe taught me, depended on another script developed by Andrew Margetts, which was very useful but required internet access - possibly problematic if one was on fieldwork. Then a few years ago the site went down and conversion became a multi-step process involving emails. So I wrote my own script. But I'm getting ahead of myself.
The first step in this process is getting your audio file transcribed. It is possible to do this in Transcriber (thus the name), and the newly repackaged version for Mac works pretty well (as does 1.5.1 on Windows or in a Windows VirtualBox). You can also use another program to play back the audio (i.e. Audacity, which can slow down the audio for you and let you boost the signal, etc) while transcribing in a text editor. Then you copy/paste the text to Transcriber for time-alignment.
I use Transcriber for time-alignment because it's simple, it allows for extremely short time-stamped windows, and it produces text files (basically) as output. There are other tools such as SayMore (Windows only) that also allow you to transcribe and directly output files for use with Toolbox, but in using it I found that SayMore was a bit of a memory hog and wouldn't let me create time-stamped sections shorter than half a second, which could be problematic for short interjections. And it kept freezing, so that it took a really long time to transcribe a short example.
So with Transcriber I simply open the audio file that I want to time-align, copy the block of text that I've transcribed, and then listen to the audio file, follow along in the text, and insert timestamps ('enter' or 'return' key) at the correct points. Once this is done for the whole file (time-consuming, but not as time-consuming as the transcription) I save the file (a '.trs' format).
Once you have the 'TRS' file, you get to use this converter, which you download to your computer. The converter runs as either a Python script or a Windows executable file that you run in the folder that has your 'TRS' file. When you run it for the first time it asks you for the field names in your Toolbox settings, and creates a configuration file in the folder to store the settings. If it doesn't find the settings file the next time, it will ask again. When it has the settings, it outputs a 'TXT' file for each 'TRS' file in the folder.
Once you've got the 'TXT' file, you can open it up to view it. If you already work with Toolbox, you can see that it is already (mostly) in the correct format. If you don't work with Toolbox, try installing it and go through the tutorials with a new project. Then open the Toolbox-created text file and compare it to the one created by my script from the Transcriber file. You should be able to copy/paste the content of the newly-created text file into your Toolbox project text file with no issues. Now when you open your Toolbox project file in Toolbox, you should be able to see the timestamps and play the sound file (and portions of it) from within Toolbox, provided you put the audio file in the correct location.
This may seem a bit cumbersome, begging the question "Why use Toolbox at all?"
A final note (ELAN)
As I end this post, I should note that many linguists use ELAN for transcription and annotation of video/audio. In fact, that the suggestions made by the 'trs2txt' script are for start and end codes labeled ELANBegin and ELANEnd, respectively, and the code for participants is labeled ELANParticipant, which should facilitate importing into ELAN. Unfortunately, I haven't found ELAN to otherwise be particularly useful for my purposes, primarily because it doesn't have the dictionary linking functions that Toolbox has, at least the last time I looked at it. It does have a Toolbox import function, so I have seen people import a Toolbox file, re-link their video, and output an html web page with embedded video for display on a website (thus the code labels in the script). Maybe you could also transcribe in ELAN, export to Toolbox, do your analysis, and import back to ELAN. For now, though, I think I'll stick with the Transcriber-Toolbox workflow.
In this third post about linguistic tools, I'll be discussing software that I use for acoustic analysis. Praat is one of the premier acoustic analysis tools available for computers. While there are probably commercial software products out there that are more powerful and with more bells and whistles, Praat offers some of the best ways to visualize and manipulate sound while being free and cross-platform. While it's not completely intuitive, it is quite easy to explore the sound space of a recording, especially recorded speech, and I ran a workshop on the basics of how to use it, with online materials that you can practice with if you want to learn more. There are also other great tutorials online that you should search for.
One of the best features of Praat is the ability to segment sounds using TextGrids, which are basically text files that identify sections of a sound file using timestamps. The benefit of this is that once you have properly annotated a sound file you can use scripts to automate analyses, which saves a lot of time that would otherwise be spent taking individual measurements. When I first started my PhD I spent a good amount of time learning to write Praat scripts, which turned out to be a continuation of the programming I learned when I was younger (Basic, QBasic) and a worthy introduction to programming languages like Python.
Since this has turned out to be a post that discusses Praat scripting, I'm going to introduce/attach some of the scripts I wrote/use for acoustic analysis, and link to some of the many other places you can find scripts for your particular use case. In my case these scripts are mainly in service of documentation and description of endangered and unwritten languages, but maybe others will find them useful as well.
Automatically measuring sounds:
This script ("dur_f0_f1_f2_f3_intensity.praat") is one that I modified (originally from this script but more recently I based it on this script) to give automatic measurements of segmented sounds in a TextGrid. It is an updated version of the “msr&check…" file that I made available along with the workshop I linked to above. At the time, I had recorded several wordlists in Pnar, and I spent countless hours segmenting the sounds in each word. My thinking was that even if my segmentation wasn't precise, the sheer number of sounds and their tabulation would allow me to run valid quantitative analyses. As it worked out, this was mostly the case, and I was able to target the outliers for closer examination. I also got better at recognizing Pnar sounds from all the time I spent with the words. I have now updated this script to work nicely with the following script, which plots vowels for you in the Praat picture window, which can produce print-publication-friendly images.
Vowel plot for formants:
Another that I wrote/modified from other bits takes a comma-delimited CSV spreadsheet with formant values and plots them (in the standard vowel chart format) as a Praat drawing with an oval marking their standard deviation (“draw_formants_plot_std_dev.praat”). I wrote this primarily to produce a clearer image than the one produced by JPlotFormants for my PhD thesis. Thanks also to the Praat User Group for their help with getting the script right.
I recently modified this script to work nicely with the automatic measurement script above. What this means is that you can segment all your words using TextGrids, run the script above to produce a CSV, and then just run this script to plot characters from that CSV. I implemented a 'Sequential' option for the plot so you can plot one vowel at a time, which means that you can leave all the segmented consonants (and VOT annotations) in the CSV file for later analysis. Or you can remove them, up to you. Just keep in mind that if you do have consonants in the CSV, it WILL try to plot them on the chart unless you choose the Sequential option.
The third script linked here (“tone_analysis.praat”) I recently wrote in order to take continuous measurements of tones without normalization. This is more for exploration of tonal systems on a per-speaker basis, allowing the investigator to identify whether length is potentially a factor in the characteristics of a particular tone. I am planning to modify it to allow for percentage-based analysis (and thus normalization) of tones, which could be used by the investigator to create clearer plots once they identify the characteristics of the individual tones. But I haven’t gotten around to it yet. I'll write another blog post when I do.
As a final note, these scripts are really just the tip of the iceberg when it comes to the kind of analysis you can do in Praat. For more on Praat scripting, check out this great tutorial, Will Styler's excellent blog, the scripts he uses/maintains, these resources at UW and these from UCLA. You can also follow along with Bartlomiej Plichta as he leads you through some scripting lessons in his videos, which are very useful.
When you discuss doing language documentation and description, one of the first things to know is that you have to collect language data. The primary source of language data is people who speak the language you're interested in, which then begs the question of how you record the data. There are some great books and papers on doing linguistic fieldwork of a documentary nature (more than what I've linked to here), but this post is focused more on the tools you use to process your data once it is recorded, as a continuation of my 'Linguistic Tools' post. I'll also plan to write a longer post on recording audio/video in the field, but for now I'll assume that you've recorded it already. I'll just briefly say that I like using a digital SLR like the Canon Rebel along with a unidirectional mic, in conjunction with a digital audio recorder like the Zoom H4N (ideally with a lapel mic of some kind).
Once you have your data recorded, the next step is to copy it to your computer for processing. Often the digital recordings will be rather large and cumbersome, and you may want to split them into smaller files, depending on how many stories/interactions you recorded. I find post-processing is important because it means you can focus on the interaction during the recording and then during processing you make notes of all the files, their content, and other metadata that will help later when you're not in the field and can't remember all the details.
In this processing stage you also want to do two very important things:
I use two programs for converting video: Media Converter and MPEG Streamclip. You could use just MPEG Streamclip (which has a Windows version), but on a Mac I find that Media Converter is much simpler/easier for reducing the size of the file, stripping out the audio, or other purposes. MPEG Streamclip is great, though, for combining multiple clips or splitting one clip into several. In each conversion you want to ensure that the video/audio quality is not compromised, depending on what you want to use it for. In my case I am mostly doing acoustic analysis, so I'm more interested in preserving the audio at CD quality (16 bit, 44.1 khz) which is the standard for acoustic analysis and archiving. In any case, since I've backed up the raw files, I can always copy from them if I mess up my working files and need to restore the quality.
To process/convert and work with audio I use Audacity - this is primarily for processing audio, not for acoustic analysis. Audacity supports a large range of encodings and formats, and you can select portions of the sound file to do basic processing like boosting the signal, removing noise, etc. These are generally not the best things to do to an audio signal, but they can be useful. In my case, this is particularly for when I'm playing the audio back and need to hear what someone said in the background during a conversation, or do other kinds of manipulations.
I can't stress enough the importance of backing up data and copying your data files to a new (staging) folder. This really ensures that you can always rewind the clock and reset, while being confident in exploring the data itself in your working folder. This should become an important part of your workflow so that it is second nature. In some cases we will make mistakes, but understanding the importance of backing up and creating metadata for your backups will help to mitigate perhaps catastrophic events. Happy converting!
When I started my PhD program in Linguistics (language documentation and description), I had some experience with linguistic analysis, but not to the degree that I had to learn in order to complete my PhD. I had tuned my ear to be able to hear the sounds of the IPA, and had practice transcribing and learning a range of languages, but I had never analyzed an unwritten language completely by myself. During the course of my PhD I learned much more about how to analyze languages 'from the ground up', so to speak.
Along the way, I discovered that there were some excellent tools that made me much more effective and efficient at the task of documenting and describing an unwritten language. I was fortunate that I already had a good foundation in recording and processing audio from my experiences recording, mixing, and releasing my music, so the fact that the audio data I recorded would form the basis of my analysis didn't phase me. However, there were another whole set of tools that would allow me to investigate the details of the language I planned to work on.
Each of these programs is open source or free, though some are developed for Windows and others are developed for MacOS, which might be a problem for some people. Since I grew up with DOS and Windows but then later switched to a Mac, I'm comfortable with both systems. The Apple/Mac laptop build quality was my first choice for travel and portability combined with power. I say 'was' since some of Apple's recent design choices mean I might be switching back to Windows on my next laptop. But for now I run an old Windows version on my Mac via Virtualbox or bundle Windows software in a Wine port so I can run it as a native app in MacOS.
I'll plan to describe each of these tools in more detail in future posts, but for now here's
A list of the tools I currently use for my linguistic work:
Tools other linguists use, but that I don't use much:
Just a quick blog post to mention that one of the tools I use in language documentation and description, Transcriber, is newly repackaged for use with OS X El Capitan! This is a big deal because previous versions (from 2013) failed to work, then the program was supposedly 'updated' (and didn't work), so I've been using the 2005 Windows version in a virtual box. But I just tested the new release (new as of 4 hours ago) and it works great on my Mac (just have to update the settings to default to UTF-8 for character encoding) and also with my trs2txt converter for Toolbox! Happy transcribing!
Recently I've been thinking about what I wish I knew about PhD study before I began. When you start out to do a PhD, there are many things you have to learn that are not necessarily directly related to your proposed topic. This blog post isn’t intended to highlight all of them, since everyone who pursues a PhD has a slightly different situation: the location, institution, department, course of study, expected thesis format (and page length) are going to drastically affect the individual’s experience. There may be many other blog posts that target your particular context (some are linked below), but here are some practical considerations that I think apply to everyone.
1) Research your (potential) supervisor before starting a PhD.
I was personally very fortunate to find a good supervisor. I didn’t do much research on my primary supervisor beforehand, but things really worked out. His teaching/mentoring style really matched my learning style, and I was able to get enough support from him that I learned a ton and became aware of how much more there was/is to learn. I was also fortunate to find a co-supervisor that I worked well with and learned a lot from, which meant I wasn't stuck when my primary supervisor was unavailable. I also received quite a bit of practical support and can say that both my supervisor and co-supervisor are still important friends and mentors. But I know of other people that received much less support, and in some cases it meant they were unable to finish their PhD. If you’re going to pursue a PhD, make sure that your potential supervisor isn’t someone who is likely to be a cause of difficulty along the way, either causing you to drop out of the program or give you a bad reference later. Of course some things cannot be predicted, and sometimes bad things happen, but do your best to research the person and their track record, or at least their character and interpersonal relationships with (former) students.
2) Learn/develop organizational skills.
By the time I started my PhD I had learned organizational skills for keeping track of bills and projects as an independent musician. But in my first year of PhD study I had to learn how to keep drafts in folders, organize papers, and otherwise have a filing system that helped me find stuff. Even so, I occasionally find duplicate files in random folders on my hard drive. The digital organizational tools you use are only as good as the systems you have in place to help you manage your work. After my PhD I discovered that there was a much better way to organize my files, data, and workflow (more on that in another post), but I would have been even more productive if I had learned these things early on.
3) Get practical advice on finding a job after your PhD, and learn some skills/abilities outside of your main subject area.
Fortunately I had mentors who had their own life experience and had done things in between academic jobs. In some cases they had worked odd jobs after their PhD while applying for everything and anything in their subject area. I learned that the basic post-PhD pattern is: complete PhD, apply for lots of jobs (postdocs, lectureships, professorships), get a few interviews, get a lot of rejections, keep applying, work odd jobs in the meantime, write/submit lots of papers (and receive lots of rejections), finally get a job. It’s a pretty rough deal, but if you’re willing to travel for jobs you have a decent chance. And secondary skills (like how to program or be a barista) can tide you over until you can get back to doing what you REALLY want.
4) Don’t sweat the small stuff.
Doing a PhD is hard. Sometimes you’ll wonder if it’s worth it. For some people it’s probably not. But if you pursue it, realize that there are some things you should get really pissed off about, and there are some things that you’re better off letting go. Having people steal your work is worth getting pissed off about, but most other things aren't. For example:
a) Let go of thinking that you’re better than the next guy. Accept instruction from your mentor(s) who really DO know better/more than you. Even the cleaner in your hall might have specialized knowledge that can help you out.
b) Let go of thinking your thesis must be perfect. Your knowledge will never be perfect, and your thesis is only a snapshot of what you know at the beginning of your journey. Don't let this fact stop you from submitting it to your supervisor - let them be the final arbiters of whether it's acceptable or not.
These are just a few of the things I've learned in pursuing and completing a PhD. If you're interested in learning more, and you're actively thinking about graduate school, you might find this UK blog post helpful, or this Australian one. Some other practical advice, as this post notes, is to publish early and publish often, even during grad school. You should also consider searching more specific criteria related to your area of interest, but hopefully these four suggestions will get you started.
This website is newly updated! I just redesigned the layout and will be making it a bit more writing-oriented over the coming days and weeks. The reason for this is because of a realization that while I still enjoy writing and producing music (and you can still link to all my music-related content via the navigation menu), my focus and life/work trajectory has really shifted.
Another reason I haven’t updated this site more regularly and done more blogging is that at the end of 2015 I thought the AI website builder of the future was right around the corner (thegrid.ai). As you can read from this post, I (and so many other people) were wrong.
I can’t really complain though - I think I got quite a lot from what I spent on the product, including a curiosity about A.I. and an understanding of how far we have to go before computers defeat humans and run our lives. I also got a website that I’m too embarrassed to link here because it basically looks like a really bad Tumblr account... like my old (now essentially defunct) Tumblr.
Anyway, I’ll keep checking my AI website periodically, and maybe I’ll be able to finally move everything from here to that site and my life will achieve some semblance of integration.
This is my first update in a long while, as I notice that this blog hasn’t been updated since 2015. I blame life and the ease of posting short updates on Instagram, Twitter, and Facebook. Since my last post I started a new job, started dating an amazing lady and got married. No raised eyebrows please! It HAS been over a year and a half; things happen.
What this probably means is that updates are not super-likely to come daily or weekly. It’s hard to change habits, particularly when writing on a blog is not on the top of my list (being replaced with research, family, etc..). However, I am working on a few processes to write a bit more frequently, since it’s good practice and I have a lot of thoughts rattling around my brain.
In particular, I enjoy sharing what I know, whether it’s about products I find useful (like the Hanvon that I reviewed in a series of blog posts [Part 1, Part 2, Part 3]) or about processes. The processes I have been developing in the past year are related to data management and workflow, some of which I was taught, some of which I taught myself, and some of which I learned from the internet.
My initial work as a PhD student in linguistics involved Language Documentation and Description, which I hope to continue to do. Now I’m doing more Python programming and data analysis, which I find requires a somewhat different skill set, yet one informs the other. In what I hope will be a series of blog posts, I’ll try to unpack these things, in hopes that they will be useful for other people traveling similar roads.
This is the final installment of my review of the Hanvon e920 (PLUS) - you can read Part 1 (my reasoning behind purchasing it) HERE and Part 2 (how I got it and changed the language mode) HERE. In this post I'll discuss how I set it up, the features I really like, and some of the issues I have had to get used to. I've also embedded a video review here for those who want to watch a live demo. For further usage details, read on below the video.
Set Up - Navigation: After changing the language mode to English, I decided to look through the Home screen options. You can navigate to the 'home' screen at any point by selecting the house icon at the top left of the screen. The e920 has two modes: finger touch and stylus. The finger touch mode is not as responsive as the Kindle Paperwhite (check THIS article for possible reasons why), and I find that using the stylus gives a better response, however both modes work fine (registering over 80% of taps, impressionistically). The default setting is to automatically switch between the two modes, though this can be changed. The stylus is located in the device at the top right (back), and when it is removed the reader enters stylus mode - otherwise it is in touchscreen mode. There are more options while reading in stylus mode, but I'll discuss that a bit later.
Along with touch navigation, there are several buttons on the lower part of the Hanvon, below the screen. These buttons can be used for navigation and are arranged in three parts: left, center, and right. The left button scrolls between pages, including menu pages (left=left, right=right). The right button scrolls between menu options (left=up, right=down). An underline (on menus) or an arrow (on files) identifies the current highlighted item. The center buttons include a 'MENU' key, an 'OK', and a 'back/return'. As you would imagine, the menu key brings up menu options, the OK key selects the highlighted item/option, and the 'back/return' goes up a level to the previous menu/page.
Using the left button I was able to look through the Home screen options. A radial counter at the bottom right showed me which page of the Home screen I was on - so far, there are three pages of 19 total Home menu options. Selecting 'Library' allows you to view folders on your device's internal storage. Selecting the 'SD' icon at the bottom of the screen allows you to view the contents of your Micro SD card. You can also use the web browser and visit the Hanvon bookstore, but since everything was in Chinese (and the browser defaults to the Hanvon site) and because they ask you to set up a Hanvon account, I gave up on that.
I wanted to set up a dictionary since I found it useful to have one on the Kindle. Unfortunately there are not very many options for English dictionaries on the Hanvon, that I'm aware of (perhaps if I set up a Hanvon bookstore account there would be more options). Setting up a dictionary is quite easy, however, and is simply a matter of selecting the 'Dictionary' Home menu option, on the second page of the Home menu. My English language options were the Longman Dictionary and Internet Glossary (which only works if you connect it to the internet via WiFi). Neither seemed to work terribly well while reading, and there is no way to highlight text while using Ebooks, which seems an oversight.
Wifi is relatively easy to set up, either by pushing the power button in the opposite direction, or selecting the WiFi icon in the top right of the screen. Again, buttons and sensitivity leave something to be desired, but with some patience it works. One issue is that there seems to be support only for networks that just require a password. When I tried to connect to my school network (which requires a domain\username and password) a logon authentication window popped up after a minute or two, but the onscreen keyboard did not, meaning there was no way to input the appropriate information. This seems like something that a firmware update could fix. Passwords and wireless networks are automatically saved.
Connecting to a computer is quite simple - either by using the included mini USB cable, or by using a micro SD card. More on the SD card later. When you connect via USB, your computer will recognize the drive as 'Untitled'. I have no idea if there is any way to change this. There are several folders with Chinese names, some of which contain files and some of which do not. One folder contains images, another contains audio files - you can put your images and audio files in these folders, respectively. Images which you put into the folder within the images folder will be used for the lock screen background - for best results, crop any images you wish to use as backgrounds to 1200x1600 and place them in this folder, removing images you do not want to have displayed. The device will choose one of these images at random when you lock the device.
Using an SD card is simply a matter of treating it as you would a USB drive or any other storage device. Keep in mind that for best cross-platform results you should format it as FAT 32. You may also notice that if you copy files to the SD card (and to the internal memory, for that matter) from a Mac, some oddly-named files will be created on the card. These are tiny files which OS X creates for indexing and which are hidden on OSX but are clearly visible to the Hanvon's Win CE environment. To keep this from becoming an issue, I use a program like CleanEject, which deletes these files from the SD card or device just before ejecting it from my Mac.
Reading PDFs is where this device is most useful (to me). With your finger you can select menu options for the text-to-speech mode, darkness, and display area along with a few others. However, with the stylus there are more options, namely annotation (with optional embedding) and highlighting/extracting text into a text file that corresponds to the name of your PDF document. The annotations are particularly useful for highlighting elements of PDFs that don't have selectable text (i.e. scanned documents and/or PDFs created over 10 years ago). The extracted text is great for pulling out quotes for later incorporation into papers.
Reading ebooks is OK. Unfortunately, unlike with my Kindle Paperwhite (and unlike the PDF options just described for the Hanvon e920), there is no way to select text in Ebooks (i.e. highlight for dictionary or store it for later) neither in finger nor pen touch modes. This seems quite an oversight. There is also only a single font available for Ebooks, though the font size can be adjusted. Overall, I found ebook reading to be pleasant, but not as pleasant as the Paperwhite, which I will probably keep around for just that purpose.
All in all, I am very happy with my purchase of the Hanvon e920. It does everything I want for PDFs. The main issues that make the experience less than fully enjoyable are the slower response (and inconsistent registering) of the touch screen both in finger and pen modes, and the lack of dictionary support or fonts. However, after a week of acclimation, I have gotten used to the response time and am enjoying it much more. The audio player, expandable SD card slot, and other features are simply pluses to an already enjoyable and useful device. I'm sure I'll discover more about it as I continue to use it.
As a final note, the Hanvon e920 uses Windows CE Core 5 as its operating system. However, I have not been able to figure out how to add fonts to the system (despite posts like THIS), which I think would give a better reading experience. Perhaps there is a hack which would allow such a thing, but there may also be some licensing restrictions.
I'm a linguist and singer-songwriter. I write about life, travel, language and technology.