Football: Klopp hails 'focused' Liverpool after Man City win
LIVERPOOL: Liverpool boss Jurgen Klopp hailed his side's "incredible goals" after they beat Manchester City 3-1 on Sunday (Nov 10) to move nine points clear of the defending Premier League champions.
The European champions took a huge step towards a first top-flight title in 30 years by opening an eight-point lead at the top of the table, with Leicester City in second place.
Goals from Fabinho and Mohamed Salah gave Liverpool a dream start before Sadio Mane's diving header early in the second half sealed City's fate.
Bernardo Silva pulled a late goal back but a third defeat in eight league games leaves City down in fourth, nine points behind Liverpool, and with a mountain to climb if they are to claim a third straight league title.
"They (City) were good," Klopp told the BBC. "Oh they were good and we had to defend with all we had but we scored incredible goals.
"It was so tough to play, the intensity of the game was so clear. It was all worth it, really great."
"The boys were completely focused and concentrated," he added. "It was so good. It is the only way we can beat City. Maybe other teams can do it a different way but this is the only way we can beat them."
City boss Pep Guardiola said his side had shown why they were Premier League champions.
"What happened today we showed why are champion," Guardiola told Sky Sports.
"I am so proud of my team, more than ever. We can be proud of how we played against the strongest team in Europe."
"We played like back-to-back champions," he added. "We cannot deny how good Liverpool are but the way we played, the personality, it was good."


We are Themesberg
Themesberg is an independent branding & experience design company working at the intersection of culture, design, and technology.
Our worksAudience
At Themesberg, we use human, brand, and cultural insights to unlock strategic business opportunities for clients.
Branding
Despite being cautioned not to judge a book by its cover, we all do it every day. We making your site looks better.
Production
Today, truly creative sells. Get innovative ideas and polished finish pieces from our creative agency.
Design with us, Develop Anything.
Themesberg is an experienced and passionate group of designers, developers, project managers, writers and artists. Every client we work with becomes a part of the team. Together we face the challenges and celebrate the victories.
Our small team is active in the creative community, endlessly interested in what’s next, and generally pleasant to be around.


Select your device
[V1.0]Desktop 1280x720
[V1.0]Desktop 640*360
[V1.0]Mobile
[V1.1]Desktop 960*540
[V1.2]Desktop 960*540. Please select me as I am the latest version


Lesson 5
What is an immutable object
An object can not be changed
What is use of final
value once defined, can not be changed
What is use of try/catch
Exception Handling
Best book on java
Effective Java - Joshua Bloch


Membership to the RegexD Workspace
Here. I've turned down pretty much everyone's membership request to the RegexD workspace not because I don't want new members, but because I want to see one proposed change to RegexD before approving anyone as a member w/ write priviledges to the code.
If you want to be a member, send include a link to an initial change in your request message so that I can check it out before approving your membership.


Recommender Systems
Experimentation Platform
Enter
Nabeel Tariq
MSBA 2018
Emory University - Goizueta Business School


Hello, world!
just now
×
This is a basic toast message.
Hello, world!
5 minutes ago
×
This is another toast message.


Blah blah blah, Boo hoo hoo, I'm a graphic web designer and this part of the page is meant to be a little detail about me. Making it bigger in size. Techron Digital made this website for me. That's all for now thank you


5G-powered smart campus goes live at UBC
Partnership aims to fund academic research in 5G applications and applied sciences
by The Canadian PressWhat’s believed to be Canada’s first 5G-powered smart campus has gone live at the University of British Columbia.
A statement from Rogers Communications said Tuesday university researchers can use it to test real-time 5G applications, as the company prepares to unveil a national network of the ultra high-speed mobile wireless system next year.
The system is the fifth generation of mobile wireless, offering speeds of up to 100 gigabits per second, making it about 100 times faster than 4G technology.
It also has the potential for nearly instantaneous links between devices and cellphone towers.
The university’s Point Grey campus includes several 5G towers and a computing and data storage facility similar to the cloud, but it saves time and bandwidth because it’s closer to where it’s required.
The smart campus initiative is part of a multimillion-dollar partnership with Rogers aimed at funding academic research in 5G applications and applied sciences.
Rogers said several research projects are underway, including development of earthquake and tsunami detection technology that takes advantage of the one- to two-millisecond connection time between transmitters and devices.
READ MORE: Huawei 5G wireless decision to wait until after election, feds say
The company said it’s continuing to test 5G in Montreal, Ottawa, Toronto and Vancouver.
The Canadian Press


Timeline.less
Timeline.less is a less based version of Timeline.css by Christian Fei with some php ressources and tricks.
Timeline.less is mobile-first and works great with the third version of Twitter Bootstrap. You can see it in action on my portfolio.
This code is not universal ! You have to set-up .item
width in the timeline.less file to make it work with your respnsive layout !
The current configuration work with a custom Boostrap 3 grid (15px padding on the .container
after the tablet media query).
If you find a way wich work with percents, you can make a pull-request or open an issue on Github.


{% extends 'base.html' %} {% block title %} Password Reset Complete - {{ block.super }} {% endblock title %} {% block analytics %} analytics.page("Password Reset Complete"); {% endblock %} {% block content %}
Your password has been reset! Click here to access your book dashboard.


WATCH | California school shooting injures four, suspect in custody
At least four people were injured in a shooting at a high school north of Los Angeles on Thursday, triggering a police hunt for the suspect who was later taken into custody.
Police and ambulances swarmed the area around Saugus High School in Santa Clarita, 65km north of Los Angeles, after the early morning shooting sent panicked children running from the area.
"Update regarding the shooting at #SaugusHigh, suspect is in custody and being treated at a local hospital," tweeted Los Angeles Country Sheriff Alex Villanueva.
The suspect was described as a male Asian. Local media reports said he was 15 years old.
Officials at the nearby Henry Mayo Hospital in Valencia said they were treating a total of four patients from the high school - three of whom were in critical condition.
Police spokesperson Bob Boese, speaking on the local NBC news channel, cautioned that it was not clear if all victims had been located.
"Our deputies are doing a systematic search of the campus," Boese said. He said one weapon had so far been recovered.
The Santa Clarita Valley Sheriff's department had earlier tweeted that it believed there was only one suspect involved.
A White House spokesman said President Donald Trump is "monitoring the ongoing reports."
'Always been worried'
Aerial video from the local NBC affiliate showed students with hands raised being escorted by officers from the building, and led to a nearby church, as others stood outside the perimeter on their cell phones.
Denzel Abesamis, a student at the school, told the Los Angeles Times he was arriving at campus when he saw classmates fleeing the scene.
He called a friend who was hiding in a classroom with five other students.
"I've always been worried about something like this would happen since it was my actual school," he said, adding that the school had been locked down due to reports of a threat a few years earlier.
"Saugus has emphasised the importance of making sure to always be cautious of anything that may happen like an active shooter," he said.
At least three ambulances were at the school campus, opposite a residential area, along with dozens of squad cars.
Agents from the federal Bureau of Alcohol, Tobacco, Firearms and Explosives were among those responding.
The Santa Clarita Valley Sheriff's department had warned residents to stay clear of the area.
California senator Kamala Harris, a Democratic candidate for the 2020 election, said she was "heartbroken and praying for Santa Clarita".
"Our children and communities are being terrorised. We can't accept this," she tweeted.


A configuration object that describes a route.
Add to specify an activation strategy if it is always the same and you do not want that to be in your view-model code. Available values are 'replace' and 'invoke-lifecycle'.
When true is specified, this route will be case sensitive.
Indicates that when route generation is done for this route, it should just take the literal value of the href property.
The URL fragment to use in nav models. If unspecified, the RouteConfig.route will be used. However, if the RouteConfig.route contains dynamic segments, this property must be specified.
The moduleId of the view model that should be activated for this route.
A unique name for the route that may be used to identify the route when generating URL fragments. Required when this route should support URL generation, such as with Router.generate or the route-href custom attribute.
When specified, this route will be included in the Router.navigation nav model. Useful for dynamically generating menus or other navigation elements. When a number is specified, that value will be used as a sort order.
The navigation model for storing and interacting with the route's navigation settings.
A function that can be used to dynamically select the module or modules to activate. The function is passed the current NavigationInstruction, and should configure instruction.config with the desired moduleId, viewPorts, or redirect.
A URL fragment to redirect to when this route is matched.
The route pattern to match against incoming URL fragments, or an array of patterns.
Arbitrary data to attach to the route. This can be used to attached custom data needed by components like pipeline steps and activated modules.
The document title to set when this route is active.
The view ports to target when activating this route. If unspecified, the target moduleId is loaded
into the default viewPort (the viewPort with name 'default'). The viewPorts object should have keys
whose property names correspond to names used by
Generated using TypeDoc
A configuration object that describes a route.


Comments
-
Greg Hurrell
Thanks for the report David. I purposely left it that way because I wasn't sure what to do. You'll notice that within the Genres and Artist menus the submenus are all alphabetically sorted. But when it comes to sorting actual track names it's a little harder to know what to do. (For now Synergy Advance just sticks them in the menus in the order in which iTunes returns them.)
For example. I have an album like which has names like this "01 A track", "02 Another track" (in other words, the song title has the track number in it). If I sort them alphabetically then they come out in the right order.
In other albums, however, the tracks might not have track numbers in the titles and if they appear on the album in order "A, D, C, B" and I sort them alphabetically then I'll get "A", "B", "C", "D" which is alphabetically correct (good) but doesn't match the order of things on the album (bad).
I think that the best solution would be to do a fairly complex sorting operation, but it will slow things down a fair bit. Basically, for each song added to the submenu, I would have to look at not only its name, but also its album name, track number, disc number and artist. The exact sorting criteria would depend on which submenu is being sorted.
For example, in the submenu "Artists" -> "Sting" -> "All albums", I could sort by:
1. Album 2. Disc number 3. Track Number 4. Track Title
Some other submenus are not so easy to decide. For example, in the "Genres" -> "All" submenu, what do I sort by?
1. Genre 2. Artist 3. Album 4. Disc number 5. Track number
This produces non-alphabetical listing, could be confusing. But sorting by alphabetical order could lead to some pretty ugly side effects (like all tracks beginning with "01" being bunched together, for example). I could clean it up by putting in separators between the genres and I think this is a good idea. (The other question is, how far do I carry that idea? It clearly makes sense to put this kind of separator in a long menu like the "All Genres" submenu, but what about a shorter menu like an "All albums" menu for an artist where there are only two albums for that artist?)
I am going to leave this bug report open so that people can leave their comments and suggestions, seeing as I am not sure exactly how to proceed. This is not like an NSTableView (like you see in apps with Finder-like windows) where you can sort stuff by clicking on a column header. There are a very small number of apps out there which provide advanced sorting functionality in table views where you can specify not only the primary search criterion but a bunch of secondary criteria as well. Doing it for table views is one thing but for menus is another matter entirely. I *could* provide a user interface in the preferences for determining the sort order but I can't think of a way to make such an interface that is not cluttered, complicated and ugly, so I won't do it. Basically I'd like to figure the best/most intuitive/correct way to sort and apply it automatically.
-
David Ameeti
My gut reaction: you're way overthinking this problem. Let's go back to the basics. If I'm looking at the Artists submenu and I select "All" sub-submenu, I'm not trying to do anything complicated -- I'm just trying to list some songs performed by that artist so I can play one (since, by definition, if I select by All songs by that artist, aren't I'm trying to ignore the enclosing album relationship?). The simple answer: I'm not looking for albums, I'm not looking for song/title relationships -- I'm looking for a title so I can hear the pretty song. Period.
Given that, give me a list of titles by that artist and I'm happy. Once you get to that simplistic realization, then sorting alphabetically seems like the only one that sounds reasonable (and no subsorting by album/date/etc. would seem to be necessary).
As far as within an album (i.e., the submenus below the All submenu), I would carry the same logic forward -- if I need to see it by track number (or any other complex title/artist/album relationship), I go to the program (iTunes) and do my fancy lookups there. That's where you do the complex stuff -- and *you* do what you do best: "control the player" and play the funky music. :-)
When I'm viewing them through your program, I *just* want to see the titles so I can pick a pretty song to hear it. I would still use the same logic as above: namely sort them in title order so I can pick a pretty song to play. Sometimes simple is the very best logic you can use.
Think of it this way: when I'm at a jukebox and I'm looking for a song to play, I'm not looking through all the song titles with some complex thought about "I want the 4th title on the 2rd album" -- no, I just want "White Christmas" by Bing Crosby... so I look for "White Christmas" and press the buttons on the jukebox.
As far as track numbers being prefixed to the song title, I don't understand that concept. iTunes can already sort by track number (w/o changing the song titles) so if someone wants them in order (within iTunes), wouldn't they just click on the track number column? I'm completely at a loss as to why would anyone modify the song title (but I accept that they do) so that they could never display the songs in true alphabetical order ever again -- they've lost that ability forever. (Just like why would someone put the employee ID's in front of the name in an employee roster? It just sounds odd to me.) I say let the program do what it does well (sort by various criteria) and don't modify the data to do the same job.
However... given that some people do actually that, if you want to be nice to those people, then look at the first two characters and if you see 3+ entries in a row that are "dd aaaaaaaaa" format, then drop the first two characters from any entry in that format (for sorting purposes only) and *then* sort it (in name order). Later (as an option in the future) you can allow the user to always ignore or always respect the extra prefix characters as a preference. That would be my vote.
-
Greg Hurrell
(In reply to comment #2)
My gut reaction: you're way overthinking this problem.
Hehe. Now that you've written that essay I think you're overthinking too! But that's good; "overthinking" is necessary if you want software that's professional and polished (and I do). Thanks for the suggestions.
As far as track numbers being prefixed to the song title, I don't understand that concept. iTunes can already sort by track number (w/o changing the song titles) so if someone wants them in order (within iTunes), wouldn't they just click on the track number column? I'm completely at a loss as to why would anyone modify the song title (but I accept that they do) so that they could never display the songs in true alphabetical order ever again -- they've lost that ability forever.
I agree. They shouldn't do it, but some people do. And if people download a lot of mp3s then the chances of getting poorly tagged files with silly naming convention are increased. I just wanted to point out that it's something that can and does happen, even if it is a bad idea.
Anyway, like I said. Thanks for the comments.
-
Greg Hurrell
Changing assignment to reflect my new email address.
http://wincent.com/a/news/archives/2006/05/change_of_email.php
Add a comment
Comments are now closed for this issue.


System Architect Definitions, Encyclopedia:"D:\DATA\SYSARCH\HCM\GEN_DATA\SUBJECT\V01\CURRENT\"
Basis For Differentiation (Class Attribute)
- Class Name:
"Classification Element"
- Derived:
F
- &Value Type:
String
- Optional:
F
- Unique:
F
- Const:
F
- Description:
A statement of the basis on which the genus "Category" has been speciated. For example, if
"Infection" has the species "Bacterial Infection" and "Viral Infection", the basis for
differentiation would be "Causing Organism".
Basis For Hypothesis (Class)
- Description:
"Property Qualifier" being the association between a "Hypothesis" and another "Subject Property"
forming all or part of the basis for the deduction.
- Source:
HcM QA
- State Type:
F
- &Abstract:
F
- Value:
F
basis (Association)
- From Class:
"Actual Property"
- To Class:
"Projected Property"
basis (Association)
- From Class:
"Subject Property"
- To Class:
"Basis For Hypothesis"
basis (Association)
- From Class:
"Classification System"
- To Class:
"Classification System Version"


Detroit takes on Boston on 4-game skid
by The Associated PressBoston Bruins (11-2-2, first in the Atlantic Division) vs. Detroit Red Wings (4-12-1, eighth in the Atlantic Division)
Detroit; Friday, 7 p.m. EST
BOTTOM LINE: Detroit aims to end its four-game losing streak when the Red Wings take on Boston.
The Red Wings are 1-4-0 against opponents in the Atlantic Division. Detroit scores 2.1 goals per game, the least in the NHL. Anthony Mantha leads them with nine total goals.
The Bruins are 2-1-2 against the rest of their division. Boston is third in the league averaging 3.7 goals per game, led by David Pastrnak with 15.
The teams meet Friday for the first time this season.
TOP PERFORMERS: Tyler Bertuzzi leads the Red Wings with eight assists and has collected 14 points this season. Andreas Athanasiou has collected one goal and five assists over the last 10 games for Detroit.
Pastrnak has recorded 30 total points while scoring 15 goals and totaling 15 assists for the Bruins. Brad Marchand has collected 21 points over the last 10 games for Boston.
LAST 10 GAMES: Bruins: 7-1-2, averaging 4.4 goals, 6.8 assists, 4.4 penalties and 11.7 penalty minutes while allowing 2.7 goals per game with a .912 save percentage.
Red Wings: 1-8-1, averaging 1.7 goals, 3.2 assists, 3.4 penalties and 7.3 penalty minutes while giving up 3.8 goals per game with a .882 save percentage.
Red Wings Injuries: Mike Green: day to day (illness).
Bruins Injuries: Jake DeBrusk: day to day (lower body).
___
The Associated Press created this story using technology provided by Data Skrive and data from Sportradar.


A computer science undergraduate student with an interest in networking, programming, advertising, and social media. I’m truly passionate about my work and always eager to connect with other people. I’m currently pursuing new opportunities and can be reached through this profile.
Specialties
• Programming at different platforms
• Social networking and marketing
• Web Designing
• Microsoft Offices (Word, PowerPoint, Excel)
• Networking and Security
Directing and participating in programming activities, determining operational feasibility, evaluating system performance, designing and implementing new programs and features.
Developing and assisting with business case. Coming up with technical solutions to business problems. Also, managing requirements at project level in order to advance sales.
Converting word files to latex code, reference management, error handling and getting the files in a template.
Researching about the latest happenings and the updates on cybersecurity world and generating content on current security issues and hacks.
Preparing sets of questions on different computer science subjects.
Creating website's traffic and ranking the site higher than the millions of other sites in response to a search query.
• Benchmarking Affimity with the existing social networks like facebook and twitter.
• Helping bring more users who are looking to share their passions on Affimity.
• Promoting company brand and engaged fans through Facebook and WhatsApp.
• Increasing user activity and interaction on Affimity app.
CGPA: 7.76
Percent Grade: 96%
Apart from being a web developer, I also have interest in stock market. Sometimes I go out and play badmintion or basketball.
When forced indoors, I enjoy playing chess and follow a number of sci-fi and fantasy genre movies and television shows, I am an aspiring chef, and I spend a large amount of my free time exploring the latest technology advancements in the front-end web development world.
Using system call traces for apps in Android platform to create behavioural graph for every illustration and then categorise them into benign and malicious apps.
Full Stack Development for a website based movie ticket booking system using HTML, CSS and jQuery for Front-end development and PHP, MySQL for backend.


It allows you to register different types of endpoints containing author data
| Selection | Status | Access | Organization | Type | Operations | Extraction Date |
|---|
| Organization | |
| Type |
| SPARQL URL | |
| Graph | |
| File CSV | |
| OAI-PMH URL | |
| Severe extraction (Only articles authors) | |
| OJS OAI-PMH Main URL | |
| Aditional URLs (separate with ";") | |
| OAI_CERIF Main URL | |
| Create aditional endpoints for others affiliations | |
| No parameters needed. | |
| VIVO URL | |
| VIVO URL | |
| |
|


The Coronavirus pandemic has changed the way we work, the way we interact, the way we eat, etc. In Fact the pandemic has totally changed the way we conduct ourselves to even affect our beliefs.
At times likes this, we need to be very careful of where we ground ourselves as the pandemic is like a wind blowing all over and it's only those grounded on strong foundations who will stand it. Yes there is neither proven medication nor vaccination and no one seems to have a correct answer even of what are the symptoms of COVID-19 the illness caused by the virus but there is still hope to those who will be grounded on the right foundation. And Jesus Christ is that foundation. That is what I believe.
Now the question is, In the midst of the pandemic, am I trusting the Lord with all my heart? and so are you?. If yes, why fear gathering in the house of the same lord while you go shopping? Why can't you spend as much time to learn from what the same Lord has to say for you as you spend time learning how to protect yourself from the infection?. By this, I'm not saying it's bad to spend time learning how to protect ourselves or taking any kind of measures but the issue is if you compare your investments in getting closer to God and seeking guidance from him with what you invest to protect yourself using manly means are they relative? Which one outweigh the other?
One may say that I'm abiding with what the secular leaders are instructing us to do. There is no bad in being obedient to our leaders but remember Shadrack, Meshach and Abednego who requested that they are allowed not to eat the portion of king's meat and wine against king's order and the end of the story we all praise the God of Daniel but it took them bold steps sometimes going against the orders.


I have a Bachelor of Science in Analytical Chemistry from the University of Washington and worked as an analytical chemist for a little over a year. As a chemist in the pharmaceutical industry, I had the responsibility of optimizing mass spectrometry methods unique to each drug and providing timely and accurate data to clients.
I saw that supporting technology was unable to adapt to these scientific innovations due to a misunderstanding of user needs and specific technical knowledge.
I decided to learn to code.
Now, I'm a full-stack web developer with an eye for beautifully functional design.
In the science community visual representation of complex data can seem unimportant but good data visualization is paramount to communicating discoveries to a diverse audience.
But design isn't just about appearances. Good design opens the door to new and efficient ways of solving complex challenges. The ultimate objective is to find the intersection of user needs and software accessibility.
So I decided to focus on learning good design.
I'm looking for opportunities to build beautifully practical software with the goal of one day building well-designed, user-focused, and intelligent software for chemical instrumentation.
Let's build something beautiful together.


Participant: Kenta Sato (@bicycle1885)
Mentor: Daniel C. Jones (@dcjones)
Thanks to a grant from the Gordon and Betty Moore Foundation, I've enjoyed the Julia Summer of Code 2015 program administered by the NumFOCUS and a travel to the JuliaCon 2015 at Boston. During this program, I have created several packages about data structures and algorithms for sequence analysis, mainly targeted for bioinformatics. Even though Julia had lots of practical packages for numerical computing on floating-point numbers, it lacked efficient and compact data structures that are fundamental in bioinformatics.
Recent development of high-throughput DNA sequencers has enabled to sequence massive numbers of DNA fragments (known as reads) from biological samples within a day. The first step of sequence analysis is locating positions of these fragments in other long reference sequence, then we can detect genetic variants or gene expressions based on the result. This step is called sequence mapping or aligning, and because reference sequences are most commonly genome-scale (about 3.2 billions length for human), a full-text search index is used to speed up this alignment process. This kind of full-text search index is implemented in many bioinformatics tools, most notably bowtie2 and BWA, whose papers are cited thousands of times.
The main focus of my project was creating a full-text search index in Julia that is easy to use and efficient in practical applications. In the course towards this destination, I've created several packages that are useful as a building block for other data structures. I'm going to introduce you these packages in this post.
IntArrays.jl is a package for arrays of unsigned integer. So, is it useful? Yes, it is! This is because the IntArray
type implemented in this package can store integers as small space as possible. The IntArray
type has a type parameter w
that represents the number of bits required to encode elements in an array. For example, if each element is an integer between 0 and 3, you only need to use two bits to encode it and w
can be set to 2 or greater. These 2-bit integers are packed into a buffer and therefore the array consumes only one fourth of the space compared to the usual array. The following is a case of a byte sequence of [0x01, 0x03, 0x02, 0x00]
:
index: 1 2 3 4 byte sequence (hex): 0x01 0x03 0x02 0x00 byte sequence (bin): 0b00000001 0b00000011 0b00000010 0b00000000 packed sequence (w=2): 01 11 10 00 in-memory layout: 00101101
The full type definition is IntArray{w,T,n}
, where w
is the number of bits for each element as I explained, T
is the type of elements, and n
is the dimension of the array. This type is a subtype of the AbstractArray{T,n}
and will behave like a familiar array; allocation, random access and update are supported. IntVector
and IntMatrix
are also defined as type aliases like Vector
and Matrix
, respectively.
Here is an example:
julia> IntArray{2,UInt8}(2, 3)
2x3 IntArrays.IntArray{2,UInt8,2}:
0x00 0x00 0x01
0x00 0x00 0x03
julia> array = IntVector{2,UInt8}(6)
6-element IntArrays.IntArray{2,UInt8,1}:
0x00
0x00
0x03
0x03
0x02
0x00
julia> array[1] = 0x02
0x02
julia> array
6-element IntArrays.IntArray{2,UInt8,1}:
0x02
0x00
0x03
0x03
0x02
0x00
julia> sort!(array)
6-element IntArrays.IntArray{2,UInt8,1}:
0x00
0x00
0x02
0x02
0x03
0x03
And the memory footprint of IntArray
is much smaller:
julia> sizeof(IntVector{2,UInt8}(1_000_000))
250000
julia> sizeof(Vector{UInt8}(1_000_000))
1000000
Since packing and unpacking integers in a buffer require additional operations, there are overheads in operations and IntArray
is often slower than Array
. I've tried to keep this discrepancy as small as possible, but the IntArray
is about 4-5 times slower when sorting it:
julia> array = rand(0x00:0x03, 2^24);
julia> sort(array); @time sort(array);
0.488779 seconds (8 allocations: 16.000 MB)
julia> iarray = IntVector{2}(array);
julia> sort(iarray); @time sort(iarray);
2.290878 seconds (18 allocations: 4.001 MB)
If you have a great idea to improve the performance, please let me know!
The next package is IndexableBitVectors.jl. You must be familiar with the BitVector
type in the standard library; types defined in my package is a static but indexable version of it. Here "indexable" means that a query to ask the number of bits between an arbitrary range can be answered in constant time. If you are already familiar with succinct data structures, you may know this is an important building block of other succinct data structures like wavelet trees, LOUDS, etcetera.
The package exports two variants of such bit vectors: SucVector
and RRR
. SucVector
is simpler and faster than RRR
, but RRR
is compressible and will be smaller if 0/1 bits are localized in a bit vector. Both types split a bit vector into blocks and cache the number of bits up to the position. In SucVector
, the extra space is about 1/4 bits per bit, so it will become ~25% larger than the original bit vector.
The most important query operation over these data structures would be the rank1(bv, i)
query, which counts the number of 1 bits within bv[1:i]
. Owing to the cached bit counts, we can finish the rank operation in constant time:
julia> using IndexableBitVectors
julia> bv = bitrand(2^30);
julia> function myrank1(bv, i) # count ones by loop
r = 0
for j in 1:i
r += bv[j]
end
return r
end
myrank1 (generic function with 1 method)
julia> myrank1(bv, 2^29); @time myrank1(bv, 2^29);
0.714866 seconds (6 allocations: 192 bytes)
julia> sbv = SucVector(bv);
julia> rank1(sbv, 2^29); @time rank1(sbv, 2^29); # much faster!
0.000003 seconds (6 allocations: 192 bytes)
julia> rrr = RRR(bv);
julia> rank1(rrr, 2^29); @time rank1(rrr, 2^29); # much faster, too!
0.000004 seconds (6 allocations: 192 bytes)
The select1(bv, j)
query is also useful in many cases, which locates the j
-th 1 bit in the bit vector bv
. For example, if a set of positive integers is represented in this bit vector, you can efficiently query the j
-th smallest member in the set.
Let's see the internal representation of SucVector
to understand the magic. A bit vector is separated into large blocks:
type SucVector <: AbstractIndexableBitVector
blocks::Vector{Block}
len::Int
end
Each large block contains 256 bits and consists of four small blocks which contain 64 bits respectively, a large block stores global 1s' count up to the starting position of it and a small block stores local 1s' count staring from the beginning position of its parent large block. Bits itself are stored in four bit chunks corresponding to small blocks:
immutable Block
# large block
large::UInt32
# small blocks
# the first small block is used for 8-bit extension of the large block
# hence, 40 (= 32 + 8) bits are available in total
smalls::NTuple{4,UInt8}
# bit chunks (64bits × 4 = 256bits)
chunks::NTuple{4,UInt64}
end
Since the bit count of the first small block is always zero, we can exploit this space to extend the cache of the large block (red frame). When running the rank1(bv, i)
query, it first picks a large and small block pair that the i
-th bit belongs to and then adds their cached bit counts, finally counts remaining 1 bits in a chunk on the fly.
As I mentioned, this data structure can be used as a building block of various data structures. The next package I'm going to introduce is one of them.
You may already know about the wavelet tree, which supports the rank and select queries like SucVector
and RRR
, but elements are not restricted to 0/1 bits. In fact, the rank and select queries are available on arbitrary unsigned integers. The wavelet tree can be thought as a generalization of indexable bit vectors in this respect. What I've implemented is not the well-known wavelet tree, a variant of it called "wavelet matrix". You can find an implementation and a link to a paper at WaveletMatrices.jl. According to the authors of the paper, the wavelet matrix is "simpler to build, simpler to query, and faster in practice than the levelwise wavelet tree".
The WaveletMatrix
type takes three type parameters: w
, T
, and B
. w
and T
are analogous to those of IntArray{w,T,n}
, and B
is a type of indexable bit vector.
julia> using WaveletMatrices
julia> wm = WaveletMatrix{2}([0x00, 0x01, 0x02, 0x03])
4-element WaveletMatrices.WaveletMatrix{2,UInt8,IndexableBitVectors.SucVector}:
0x00
0x01
0x02
0x03
julia> wm[3]
0x02
julia> rank(0x02, wm, 2)
0
julia> rank(0x02, wm, 3)
1
julia> xs = rand(0x00:0x03, 2^16);
julia> wm = WaveletMatrix{2}(xs); # 2-bit encoding
julia> sum(xs[1:2^15] .== 0x03)
8171
julia> rank(0x03, wm, 2^15)
8171
The details of the data structure and algorithms are relatively simple but beyond the scope of this post. For people who are interested in this data structure, the paper I mentioned above and my implementation would be helpful. There are more operations that the wavelet matrix can run efficiently and those operations will be added in the future.
80% of sequence analysis in bioinformatics is about sequence search, which includes pattern search, homologous gene search, genome comparison, short-read mapping, and so on. The FM-Index is often regarded as one of the most efficient indices for full-text search, and I've implemented it in the FMIndexes.jl package. Thanks to the packages I've introduced so far, the code of it looks really simple. For example, counting the number of occurrences of a given pattern in a text can be written as follows (slightly simplified for explanatory purpose):
function count(query, index::FMIndex)
sp, ep = 1, length(index)
# backward search
i = length(query)
while sp ≤ ep && i ≥ 1
char = convert(UInt8, query[i])
c = index.count[char+1]
sp = c + rank(char, index.bwt, sp - 1) + 1
ep = c + rank(char, index.bwt, ep)
i -= 1
end
return length(sp:ep)
end
A unique property of the FM-Index is that an index itself is just a permutation of characters of an original text and counts of characters contained in it. This permutation is called Burrows-Wheeler transform (also known as BWT), and the permuted text is stored in a wavelet matrix (or a wavelet tree) in order to efficiently count the number of characters within a specific region. Therefore, the space required to index a text is often smaller than that of other full-text indices (actually, in practice, efficiently finding positions of a query needs auxiliary data as well). Moreover, this transform is bijective, and thus the original text can be restored from an index.
Building an index for full-text search is ridiculously simple: just passing a sequence to a constructor:
julia> using FMIndexes
julia> fmindex = FMIndex("abracadabra");
The FMIndex
type supports two main queries: count
and locate
. The count(query, index)
query literally counts the number of occurrences of the query
string and the locate(query, index)
locates starting positions of the query
. In order to restore the original text, you can use the restore
function. Here is a simple usage:
julia> count("a", fmindex)
5
julia> count("abra", fmindex)
2
julia> locate("a", fmindex) |> collect
5-element Array{Any,1}:
11
8
1
4
6
julia> locate("abra", fmindex) |> collect
2-element Array{Any,1}:
8
1
julia> bytestring(restore(fmindex))
"abracadabra"
As an example, for bioinformaticians, let's try several queries on a chromosome. You also need to install the Bio.jl package to efficiently parse a FASTA file. The next script reads a chromosome from a FASTA file, build an FM-Index, and then serialize it into a file for later use (I love the serializers of Julia, they are available for free!):
index.jl
using Bio.Seq
using IntArrays
using FMIndexes
# encode a DNA sequence with 3-bit unsigned integers;
# this is because a reference genome has five nucleotides: A/C/G/T/N.
function encode(seq)
encoded = IntVector{3,UInt8}(length(seq))
for i in 1:endof(seq)
encoded[i] = convert(UInt8, seq[i])
end
return encoded
end
# read a chromosome from a FASTA file
filepath = ARGS[1]
record = first(open(filepath, FASTA))
println(record.name, ": ", length(record.seq), "bp")
# build an FM-Index
fmindex = FMIndex(encode(record.seq))
# save it in a file
open(string(filepath, ".index"), "w+") do io
serialize(io, fmindex)
end
OK, then create an index for chromosome 22 of human (you can download it from here):
$ julia4 index.jl chr22.fa
chr22: 50818468bp
$ ls -lh chr22.fa.index
-rw-r--r--+ 1 kenta staff 74M 9 26 06:30 chr22.fa.index
After construction finished (this will take several minutes), read the index in REPL:
julia> using FMIndexes
julia> fmindex = open(deserialize, "chr22.fa.index");
Now that you can execute queries to search a DNA fragment:
julia> using Bio.Seq
julia> count(dna"GACTTTCAC", fmindex) # this DNA fragment hits at 111 locations
111
julia> count(dna"GACTTTCACTTT", fmindex) # this hits at 3 locations
3
julia> locate(dna"GACTTTCACTTT", fmindex) |> collect # the loci of these hits
3-element Array{Any,1}:
36253071
47308573
34159872
julia> count(dna"GACTTTCACTTTCCC", fmindex) # found a unique hit!
1
julia> locate(dna"GACTTTCACTTTCCC", fmindex) |> collect
1-element Array{Any,1}:
36253071
julia> @time locate(dna"GACTTTCACTTTCCC", fmindex); # this can be located in 32 μs!
0.000032 seconds (5 allocations: 192 bytes)
This locus, chr22:36253071, is the starting position of the APOL1 gene.
My aim of having created these packages was to prove that it is practicable to implement high-performance data structures for bioinformatics in Julia. I'm pretty sure that it is true, but it may be skeptical to others. So, I'm going to prove it by writing useful and performant applications using these packages. Now I'm working on FMM.jl, which aligns massive amounts of DNA fragments to a genome sequence using the FM-Index and other algorithms. This is still a work in progress, there would be many bugs and unusual cases I should care about, but its performance is not so bad compared to other implementations.
The BioJulia project is also under active development. The packages I made are intended to work with the Bio.jl package. If you are interested in the BioJulia project, we really welcome your contributions!


| Things to consider |
Done Well |
To Be Improved |
Language
- Control: fluency, clarity, precision
- Inventiveness, selectivity and originality in description
- Use of the senses
- Balance between dramatization and exposition (showing and telling)
- Use of cliché generalization and repetition
|
|
|
Character
- Convincing, complex, well realized
- Motive and conflict well realized
- Psychology well presented
- Dialogue reveals character and advances plot
|
|
|
Setting
- Fictional world vivid and convincing
|
|
|
Structure
- Coherent, good control of plot development
- Evidence of good judgment in choice of form for theme
- Management of time: control of flashbacks/forwards
- Management of point of view
- Narrative arc well-realised
|
|
|
Theme/Content
- Originality and inventiveness
- Insightful
- Powerful
- Engaging
- Demonstrates emotional/intellectual depth
|
|
|


dataset does not support internally sorting or filtering of keys. It does support data frames which can be used to do that via external tools.
frame
verb containing the
field “.given” and the record “.id”frame-objects
verb.frame
verb.NOTE: In the example below I’ve used jsonrange and jsoncols for iterating and filtering our objects. These are provided by datatools. See filtering-keys.bash.
#
# Frames, filter for given name "Mojo"
#
# Step 1.
dataset frame friends.ds "unfiltered" "._Key=id" ".given=given" ".family=family">/dev/null
# Step 2. do our filtering iterating over the unfiltered frame (piping the results)
for OBJ in $(dataset frame-objects friends.ds unfiltered | jsonrange -values ); do
GIVEN=$(echo "${OBJ}" | jsoncols -i - .given | sed -E 's/"//g')
# This is the filter, we're checking if the record is about Mojo.
if [ "${GIVEN}" = "Mojo" ]; then
echo "${OBJ}" | jsoncols -i - .id | sed -E 's/"//g'
fi
done |\
# Step 3. create a filtered frame
dataset -i - frame friends.ds filtered "._Key=id" ".given=given" ".family=family">/dev/null
echo "We now have a frame with only Mojo."
dataset -pretty frame friends.ds filtered


Hr system
Add Empployee
Name
Email
Department
Call-Center
Information-Technology
Human-Resources
Total