ASUS PCE-AC68 Blue Screen of Death

Since building a new computer, my Windows 10 installation would sometimes crash. The error reported on the blue screen of death would always be page fault in nonpaged area. Interestingly, the system would be fine for months and then suddenly crash a few times per day — always when using Deluge, a torrent client. After some testing, it turned out that downloading a torrent with Deluge would reliably crash the system within an hour.

Debugging the crash minidump with Windows Debugger (WinDBG), it turned out the driver bcmwl63a was likely at fault. This driver is developed by Broadcom for 802.11 wireless network adapters. The driver was being used for my ASUS PCE-AC68 network adapter.

I was using version 7.35.338.0 of the Broadcom drivers for the adapter, supplied through the ASUS product utility version 2.1.1.5 that is available on the ASUS support website. The issue can be fixed by upgrading to version 7.35.351.0 of the Broadcom drivers, which ASUS supplies in version 2.1.4.3 of their utility. The issue can likely also be fixed by downgrading to version 6.30.223.228 (utility version 2.0.8.8), but I have not tested this. See this thread for more information.

First uninstall the old driver through Windows Device Manger (and uninstall the utility through the Control Panel, if installed). Then, instead of installing the new utility, I would recommend installing only the new driver (supplied in the same zip-file as the utility). This can be done manually in Device Manager by updating driver software for the PCE-AC68. Note that after uninstalling the old drivers, the adapter might show up as an unrecognized device, so be sure to check that if the PCE-AC68 is no longer present in the device list.

 

Hibernation and Hybrid Sleep on Ubuntu 17.04, Gnome 3.24

I was having trouble using suspend, hibernate and hybrid sleep functionality on Ubuntu 17.04 using Gnome 3.24. The troubles started immediately after installing the uswsusp package:

I was hopeful and typed systemctl hibernate, but the system got stuck on Snapshotting system.

After a hard shutdown, the system was no longer bootable. It would only boot in recovery after waiting for 5 minutes on /scripts/local-premount.

These issues were caused by having an encrypted swap file, but soon other issues surfaced, rooted in shaky support for hibernation in both Ubuntu and Gnome.

So, here’s a guide to how I set up hibernation.

Continue reading “Hibernation and Hybrid Sleep on Ubuntu 17.04, Gnome 3.24”

mIRC Smart Join/Part Filtering

Though internet relay chat (IRC) is old technology, many people still use it daily. One of the most popular IRC clients for Windows is mIRC. This client is impressively feature-complete. However, it does not offer a way to satisfyingly solve one of the grievances of many IRC users: the flood of join and part messages in big channels, caused by the constant stream of people coming in and leaving. mIRC only offers the option to either show or hide all join and part messages completely; but does not allow for any fine-tuning.

What I was looking for was a way to show or hide join and part messages based on the size of the channel. If a channel has only few people, I’d like to see all joins and parts. If, however, a channel has many users (e.g., more than 25), this quickly becomes a nuisance. In addition, even in big channels, I’d like to see all joins and parts of people who were recently active in the channel, so as not to accidentally reply to someone who has left in the meantime.

With this specific need, I created a solution, which I have made available on github. It can be added to mIRC by loading it as a script (Tools -> Scripts Editor -> File -> Load). Configure it by right clicking in a chat window, and select Join/Part Filter -> Settings.

Smart join/part filter
The smart join/part filter setting screen

Programming this solution using mIRC’s scripting language was definitely a fun project: the scripting language is quite basic with little documentation, and as mIRC’s interpreter offers hardly any assistance when things go wrong, it quickly turns into a puzzle. However, it’s also quite powerful and allows you to access and modify many things within mIRC.

A Bot to Log Discord Voice Events

Discord is a great platform for text and voice chatting. However, one feature has been seriously lacking for a while now: the ability to see a log of people joining and leaving voice chat rooms.

Luckily, Discord provides a way to create bots. These bots have access to a variety of events occurring on a Discord server, including voice chat events. Of specific interest to us, bots can track events of people joining and leaving voice chat rooms.

I set out to create a simple bot able to log these events to a specific Discord channel. I programmed the bot in Python, using the discord.py library (v0.16.7). My code is open source and available on github. See the bot in action in the video below:

If you’d like to use this bot, feel free to use the code provided; you’ll probably need to create a new developer application on Discord and turn it into a bot user, and read the read-me.

Machine Translation Turing Test

Machine Translation
Will computers ever reach the quality of professional translators?

The U.S. government spent 4.5 billion USD from 1990 through 2009 on outsourcing translations and interpretations [4]. If these translations were automated, much of this money could have been spent elsewhere. The research field of Machine Translation (MT) tries to develop systems capable of translating verbal language (i.e. speech and writing) from a certain source language to a target language.

Because verbal language is broad, allowing people to express a great number of things, one must take into account many factors when translating text from a source language to a target language. Three main difficulties when translating are proposed in [6]: the translator must distinguish between general vocabulary and specialized terms, as well as various possible meanings of a word or phrase, and must take into account the context of the source text.

Machine Translation systems must overcome the same obstacles as professional human translators in order to accurately translate text. To try to achieve this, researchers have had a variety of approaches over the past decades, such as [3, 2, 5]. At first, the knowledge-based paradigm was dominant. After promising results on a statistical-based system ([2, 1]), the focus shifted towards this new paradigm.

Continue reading “Machine Translation Turing Test”


References

  • [1] P. F. Brown, V. D. J. Pietra, S. D. A. Pietra, and R. L. Mercer, “The mathematics of statistical machine translation: parameter estimation,” Computational linguistics, vol. 19, iss. 2, pp. 263-311, 1993.
    [Bibtex]
    @article{Brown1993,
    title={The mathematics of statistical machine translation: Parameter estimation},
    author={Brown, Peter F and Pietra, Vincent J Della and Pietra, Stephen A Della and Mercer, Robert L},
    journal={Computational linguistics},
    volume={19},
    number={2},
    pages={263--311},
    year={1993},
    publisher={MIT Press}
    }
  • [2] P. F. Brown, J. Cocke, S. D. A. Pietra, V. D. J. Pietra, F. Jelinek, J. D. Lafferty, R. L. Mercer, and P. S. Roossin, “A statistical approach to machine translation,” Computational linguistics, vol. 16, iss. 2, pp. 79-85, 1990.
    [Bibtex]
    @article{Brown1990,
    title={A statistical approach to machine translation},
    author={Brown, Peter F and Cocke, John and Pietra, Stephen A Della and Pietra, Vincent J Della and Jelinek, Fredrick and Lafferty, John D and Mercer, Robert L and Roossin, Paul S},
    journal={Computational linguistics},
    volume={16},
    number={2},
    pages={79--85},
    year={1990},
    publisher={MIT Press}
    }
  • [3] D. A. Gachot, “The systran renaissance,” in Mt summit ii, 1989, pp. 66-71.
    [Bibtex]
    @inproceedings{Gachot1989,
    title={The SYSTRAN renaissance},
    author={Gachot, Denis A},
    booktitle={MT SUMMIT II},
    pages={66--71},
    year={1989}
    }
  • [4] D. Isenberg, Translating For Dollars, 2010.
    [Bibtex]
    @misc{USSpend,
    author = {David Isenberg},
    title = {{Translating For Dollars}},
    howpublished = "\url{http://www.huffingtonpost.com/david-isenberg/translating-for-dollars_b_735752.html}",
    year = {2010},
    note = "[Online; accessed 2-October-2013]"
    }
  • [5] P. Koehn, F. J. Och, and D. Marcu, “Statistical phrase-based translation,” in Proceedings of the 2003 conference of the north american chapter of the association for computational linguistics on human language technology-volume 1, 2003, pp. 48-54.
    [Bibtex]
    @inproceedings{Koehn2003,
    title={Statistical phrase-based translation},
    author={Koehn, Philipp and Och, Franz Josef and Marcu, Daniel},
    booktitle={Proceedings of the 2003 Conference of the North American Chapter of the Association for Computational Linguistics on Human Language Technology-Volume 1},
    pages={48--54},
    year={2003},
    organization={Association for Computational Linguistics}
    }
  • [6] A. K. Melby, Some difficulties in translation, 1999.
    [Bibtex]
    @misc{TTT1999,
    author = {Alan K. Melby},
    title = {{Some difficulties in translation}},
    howpublished = "\url{http://www.ttt.org/theory/difficulties.html}",
    year = {1999},
    note = "[Online; accessed 2-October-2013]"
    }

The Future of Big Data in Healthcare

medical record
In the United States and other countries, healthcare service providers are rapidly adopting Electronic Health Records (EHRs). These records are real-time, digital versions of patients’ charts. They provide a variety of patient-centered information such as medical history, diagnoses, and medications. In 2014, 83% of physicians in the United States utilized EHRs, compared to just 42% in 2004 [1]. A number of other countries already have better adoption of the technology, with over 90% of healthcare service providers in Australia, the Netherlands, New Zealand, Norway and the United Kingdom having adopted EHRs in 2012 [4].

Additionally, through progress in healthcare and technology, and the ensuing societal changes, people are becoming more conscious of their health and actively seek to better manage their health and lifestyle [3]. With improvements in computer technology, mobile health monitoring devices are available; both through dedicated devices and through “apps” on personal mobile phones.

Most importantly, these developments are generating extensive datasets of previously unattainable proportions. As a result, hospital-centered healthcare is changing to patient-centered care. Where the goal formerly was to find general treatments for ailments, the goal is now shifting towards early detection of risks, prevention of further complications, and improvement of treatments through patient feedback. Though reducing costs should not be a primary motivator in healthcare, it has been estimated that usage of big data methods in healthcare could cause a 12% reduction of the baseline United States’ healthcare costs [2]. In this essay we will look at leading-edge developments related to big data in healthcare. Recognizing those developments, we will consider which near-future accomplishments can be expected and we will reflect on the desirability thereof.

Continue reading “The Future of Big Data in Healthcare”


References

  • [1] D. Heisey-Grove and V. Patel, “Any, certified, and basic: quantifying physician ehr adoption through 2014,” Onc data brief, vol. 28, pp. 1-10, 2015.
    [Bibtex]
    @article{heisey2015any,
    title={Any, Certified, and Basic: Quantifying Physician EHR Adoption through 2014},
    author={Heisey-Grove, Dustin and Patel, Vaishali},
    journal={ONC Data Brief},
    volume={28},
    pages={1--10},
    year={2015}
    }
  • [2] B. Kayyali, D. Knott, and S. Van Kuiken, “The big-data revolution in us health care: accelerating value and innovation,” Mc kinsey & company, 2013.
    [Bibtex]
    @article{kayyali2013big,
    title={The big-data revolution in US health care: Accelerating value and innovation},
    author={Kayyali, Basel and Knott, David and Van Kuiken, Steve},
    journal={Mc Kinsey \& Company},
    year={2013}
    }
  • [3] A. Lymberis, “Smart wearables for remote health monitoring, from prevention to rehabilitation: current r&d, future challenges,” in Information technology applications in biomedicine, 2003. 4th international ieee embs special topic conference on, 2003, pp. 272-275.
    [Bibtex]
    @inproceedings{lymberis2003smart,
    title={Smart wearables for remote health monitoring, from prevention to rehabilitation: current R\&D, future challenges},
    author={Lymberis, A},
    booktitle={Information Technology Applications in Biomedicine, 2003. 4th International IEEE EMBS Special Topic Conference on},
    pages={272--275},
    year={2003},
    organization={IEEE}
    }
  • [4] C. Schoen, R. Osborn, D. Squires, M. Doty, P. Rasmussen, R. Pierson, and S. Applebaum, “A survey of primary care doctors in ten countries shows progress in use of health information technology, less in other areas,” Health affairs, vol. 31, iss. 12, pp. 2805-2816, 2012.
    [Bibtex]
    @article{schoen2012survey,
    title={A survey of primary care doctors in ten countries shows progress in use of health information technology, less in other areas},
    author={Schoen, Cathy and Osborn, Robin and Squires, David and Doty, Michelle and Rasmussen, Petra and Pierson, Roz and Applebaum, Sandra},
    journal={Health Affairs},
    volume={31},
    number={12},
    pages={2805--2816},
    year={2012},
    publisher={Health Affairs}
    }

Inductively Defined Lists and Proofs

In this post, we will explore an inductive data structure as a type for lists of elements. We define two recursive functions that can be applied to lists of this type; namely, an operation to append two lists and an operation to reverse a list. With these definitions, we set out to mathematically prove a number of properties that should hold for these functions by means of induction.

A list is a data structure of a collection of elements in a certain order. A list can be defined in multiple ways. One way is to define a list as being an element (the “head” of the list) followed by another list (the “tail” of the list). Inductively, this could be formalized as follows:

This means that a list l with elements of type  a is either cons x tail, with x of type  a and with tail of type list a, or l is the empty list nil. Let’s look at some example lists with elements of the whole numbers.

Note that because we have lists of integers, following our definition the list l is of type list integer.

Multiple list operations can be defined, such as append and reverse. We defined our list inductively, and so it would make sense to define these operations inductively (also known as recursively) as well. Because of our neat data structure and operations, we should then be able to prove that certain properties of the operations hold.

Continue reading “Inductively Defined Lists and Proofs”