Skip to content

Instantly share code, notes, and snippets.

View rupertbates's full-sized avatar

Rupert Bates rupertbates

  • Guardian News and Media
  • London
View GitHub Profile
@rupertbates
rupertbates / WebviewArticlePresenter.java
Last active December 25, 2016 08:43
Work out the maximum scroll extent of an Android WebView
int maxScrollExtent = (int) ((mOverlayTop.getContentHeight() * mOverlayTop.getScale()) - mOverlayTop.getHeight());
@rupertbates
rupertbates / fastReadTextFromFile.java
Created May 2, 2013 15:33
Read text from a file using a FileChannel and MappedByteBuffer
public static String fastReadTextFromFile(File file) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
FileChannel ch = inputStream.getChannel();
MappedByteBuffer mb = ch.map(FileChannel.MapMode.READ_ONLY,
0L, ch.size());
byte[] barray = new byte[Math.min(mb.remaining(), BYTE_ARRAY_SIZE)];
int getSize;
StringBuilder sb = new StringBuilder();
@rupertbates
rupertbates / parse-ophan-ip-and-dt.sh
Created July 11, 2013 16:21
Use sed to print the client IP and date time stamp from each line of an Ophan log file
sed 's_.*clientIp\":\"\([^\"]*\)\".*dt\"\:\"\([^\"]*\)\".*_\2 \1_'
@rupertbates
rupertbates / rename-prepend.sh
Created November 4, 2013 21:16
Rename - prepend a string onto all files in a director
rename 's//text-to-prepend/' *.jpg
@rupertbates
rupertbates / DataFrame.R
Created June 10, 2014 21:20
Select from R data frame
good[(good$Ozone > 31) & (good$Temp > 90), ]
@rupertbates
rupertbates / getContributorCountsFunctional.java
Last active August 29, 2015 14:10
getContributorCounts method in a functional style
public List<ContributorCount> getContributorCounts(){
List<ArticleView> articleViews = getArticleViews();
return articleViews
.map(a -> a.contributor) //Get the contributor names from the article views
.sort(Ord.stringOrd) //Need to sort before grouping
.group(Equal.stringEqual) //Group by contributor name
.filter(l -> l.length() > 1) //remove any contributors who only appear once
.map(l -> new ContributorCount(l.head(), l.length())); //Map to the return type
}
@rupertbates
rupertbates / getContributorCountsImperative.java
Last active August 29, 2015 14:10
getContributorCounts method in an imperative style
public List<ContributorCount> getContributorCounts() {
List<ArticleView> articleViews = getArticleViews();
//First iterate over the articles counting the occurrences of
//each contributor
HashMap<String, Integer> contributorCounts = new HashMap<String, Integer>();
for (ArticleView articleView : articleViews) {
Integer count = contributorCounts.get(articleView.contributor);
if (count == null)
contributorCounts.put(articleView.contributor, 1);
@rupertbates
rupertbates / ArticleWithImageImperative.java
Created November 28, 2014 14:10
ArticleWithDisplayImage
public class Article {
DisplayImage mainImage;
//Rest of the class declaration
public DisplayImage getMainImage(){
//What happens if there is no main image on this article?
return mainImage;
}
//Imperative style of dealing with an Option type
if(article.getMainImage().isSome())
setArticleImage(article.getMainImage().some());
//Functional approach using map
article.getMainImage().map(this::setArticleImage);
//Checking for null through an object graph quickly becomes unwieldy
if (article.getContributor() != null &&
article.getContributor().getImage() != null &&
article.getContributor().getImage().getSize() != null) {
Size size = article.getContributor().getImage().getSize();
setContributorImageSize(size.getWidth(), size.getHeight());
}
//Chaining multiple optional values using bind and map