This is an exercise aimed at improving your Chinese
reading comprehension. You will be quizzed on individual
words but they're always shown in a complete sentence.
This way you will not only learn how to recognize Chinese
characters, you will also see how they're used in real
day-to-day situations.
How do I complete the exercise?
A few of the words in the Chinese sentence will be missing. It
is your task to fill in the missing pieces. It will look a bit
like this:
This
is missing.
In the above example, you have to type in
word, 字, zi
(without tone mark) or zì (with tone mark).
The four answers are all considered correct.
Why is the English translation hidden?
Translations are a crotch that will slow your learning if you're
not careful. While translations are immensely useful when you're
stuck, it is best to train your brain to think directly in
Chinese.
So, in short, use the translations when you're confused or in
doubt. But try to understand the meaning of the Chinese in its
own right
Why are sometimes more than one pinyin spelling?
Some Chinese words can be pronounced in different ways to give
different meanings. Selecting the right meaning automatically
is beyond the capabilities of this website but you can do it
manually. Simply click on the Chinese characters and select
the most sensible defintion from the pop-up dictionary.
Do I have to use the mouse to continue to the next exercise?
No, you can simply press enter to proceed to the next
exercise. The exercises have been designed such that you hands
never have to leave the keyboard.
I don't know some of these words. Is there a dictionary?
Yes, there's a built-in dictionary that you can open by clicking
on a given Chinese word. However, words that you are currently
practising will not show up in the dictionary because that would
be cheating.
{{#with card}}
{{#each sentences}}
{{! Chinese text on the left side. Main focus is here }}
{{#each blocks}}
{{#if showPinyin ../..}}
{{#each selectedPinyin}}
{{this}}
{{/each}}
{{! FIXME. selectedPinyin can be empty }}
{{else}}
{{/if}}


Zelda Tracker is an app designed to easily and clearly show progress of one or more Zelda 1 speedrunners. Operated with the mouse, the tracker shows which of the 8 Triforce pieces a player has, as well as which important items they've gotten.
There'll be more information down here regarding features, instructions, and downloads.


DIE HARD WITH A VENGEANCE A film review by Jeffrey Haber Copyright 1996 Jeffrey Haber
** (out of ****)
Having enjoyed the first two "Die Hard" installments, I was really looking forward to this new sequel. With John McTiernan returning to the director's chair and Jeremy Irons and Samuel L. Jackson in the cast, my hopes were high. But what a huge disappointment it turn out to be.
The movie stars Bruce Willis as John McClane, the blue-collar hero who always seems to be up against impossible odds. This time, we find him separated from his wife, down on his luck, and back with the New York Police Department. McClane's precinct gets a call from a mysterious German named Simon (Jeremy Irons) who turns out to be the brother of Hans Gruber, the terrorist from the first film. Simon has already blown up a department store, and threatens to go ahead with more bombings unless McClane goes to Harlem wearing a racist sign. McClane obeys, and is reluctantly saved by a white-hating electronics store owner, Zeus Carver (Jackson). For most of the film, Simon phones in cryptic riddles and leads McClane and Zeus on a wild chase around Manhattan to diffuse bombs at various locations, including parks, subways, and schools. All of this, however, is designed to keep the cops occupied while Simon's gang steals $100 billion from the Federal Reserve vault.
One of the problems with "DHWAV" is that it never really generates any tension between McClane and the bad guys. Unlike the first two films, there are surprisingly few gunfights and hand-to-hand fisticuffs; even those that do appear in the film are awkwardly shot (annoying, jerky camera movements are used in some of the scenes). Most of the action comes from generic explosions and car crashes, and after seeing this for a while, it no longer holds up as a source of excitement.
Jonathan Hensleigh's script needed a serious rewrite. There are acres of plot holes (where did Simon's army come from? How did they break into the Federal Reserve so easily?), the ending is conveniently slapped on, and the characters are poorly conceived. McClane loses a lot of his likability; the script unwisely gives him a hangover at the beginning of the film, so instead of the street-smart, take-charge character from the first two movies, we are given a sluggish, slow-footed McClane. Meanwhile, Samuel Jackson's role is written as a wide-eyed, disbelieving black guy who can't stand the white cop he must work with. The relationship plays out like a bad ripoff of the Mel Gibson/Danny Glover "Lethal Weapon" tandem.
Could "DHWAV" have been done better? Absolutely, and that's the shame of it all. Considering the talent involved and the previous history of the "Die Hard" films, it's disconcerting to see such a bomb go off.
-- Jeff Haber<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Event Location:
Quest Conference Center
8405 Pulsar Place, Columbus, Ohio
Columbus, Ohio
Abstract:
Do you cringe whenever you have to look at an XML document? Does the very thought of XML data living in your database make you scream? Do you have a panic attack any time you have to parse XML? If you answered yes to any of these questions, then this session is for you! We'll start with reasons why having XML in SQL Server might be a good thing, then we'll face our fears and turn tabular data into XML, and finally we'll confront the true source of our anxiety by parsing XML back into tabular data using xQuery. If you survive this session, you'll have faced your fears about XML in SQL Server, you'll have a solid understanding of creating XML from tabular data, and you'll know how to use xQuery to parse XML.
Speaker(s): Adam Belebczuk,
Abstract:
With a little T-SQL experience, you can create a stored procedure that completes a task. But it's harder to formulate a stored procedure solution with the big picture in mind. In this session, we will work through a real world scenario to develop a thorough solution. You will learn about: Asking the right questions to set yourself up for success Making the case for stored procedures over ad hoc code and other objects Pro tips for standardization and cross-version compliance Reevaluating and expanding on your solution Limiting inputs to reduce unexpected behaviors and errors Choosing between alternate solutions Evaluating for performance This session is for data professionals who can write T-SQL, but haven't spent a lot of time in SQL development.
Speaker(s): Jennifer McCown,
Abstract:
SQL Server Service Broker is often seen as a black box. Messages go in, and hopefully they come out on the other side. But when they don't, DBAs typically don’t know where to look. Trying to figure out what’s wrong quickly turns into a guessing game. It’s not that complicated once you understand how it all works. Service Broker is an asynchronous messaging technology built into SQL Server that allows you to scale out your application, replicate data or perform ETL, all while guaranteeing messages are delivered and processed in the right order. In this session, we'll discuss the basics of the Service Broker architecture, its components, and deployment options. We will discuss troubleshooting tips and performance best practices to help you deploy a Service Broker solution in your own environment.
Speaker(s): Colleen Morrow,
Abstract:
Quite frankly, some aspects of building out a business intelligence solution are tedious. As you cycle through iterations of your star schema, you’ll find that even a simple data type change in the data warehouse requires you to make corresponding changes to staging tables, and SSIS packages that take a considerable amount of time to implement. But there’s a better, faster way!In this session, we’ll explore lessons from a project that required implementation of a framework to easily generate BI objects based on reusable patterns. We’ll walk through the decision points in the framework design, review the implementation steps, and see demonstrations of how easily you can make iterative changes to your BI solution’s design by using reusable design patterns. Whether you simply want to accelerate change management or reproduce objects in bulk on demand, this session will give you practical tips for automating these processes.
Speaker(s): Stacia Varga,
Abstract:
People often dream of becoming a consultant, but what does that actually mean? Is consulting really the right path for you? Many choices are available when deciding to become a consultant, but these options can be overlooked. Contracting, consulting for an established team, going out on your own, or looking to build a larger business are all great options, depending on your vision and future goals. This session will help you ask the right questions to better chose and prepare for your path. We then explore the various realities and strategies of each path. Real-life experiences will be shared to help you make the most informed decision on which path is best for you, and how to accelerate your career as a consultant.
Speaker(s): David Klee,
Abstract:
Regular expressions can help you perform incredible tasks with very little effort. Need to create 1700 logins from an email request? Developers give you a single script with 300 stored procedures, filled with table variables, instead of temp tables? Need to move 500 databases to a different drive? Any of these tasks can take a long time to code, but regular expressions cut that work from hours or days to minutes or even seconds. Stop writing code manually and let regular expressions do it for you. Learn: • The most useful regular expression commands • The appropriate times to use regular expressions • How to use regular expressions to write code for you • How to incorporate regular expressions into large tasks and combine them with other methods
Speaker(s): Sean McCown,
Abstract:
Your cold data growth is getting out of control, storage consumption is increasing faster than your budget, your end-users won't (or can't) tell you what can delete or truncate, but they demand their cold or archived data always be online and available. Now you have tables so big that you dread re-indexing, and you have to look for ever more creative solutions to manage this data, while still remaining compliant. #160; There’s a solution that lets you take advantage of the Cloud, on your terms, all without impacting your existing end-user applications or queries. #160; Come find out how you can move your data securely and transparently, free up disc space and reduce your enterprise storage consumption, while retaining full control from the on-premises SQL Server. You’ll reduce maintenance operations time and resources, plus lower overall cost. Learn how SQL Server Stretch database will simplify your journey to the Cloud!
Speaker(s): Anthony van Gemert,
Abstract:
This presentation is a quick introduction for the DBA or developer who was just told that their boss promised a major new customer a scalable, well designed database. The customer will pay a lot of cash and years of ongoing business using this database… If you deliver it this week! You’ll get a big bonus if you build this right, but you also remember what your co-workers did to the person who bungled the last database design… and wonder if that designer ever recovered! This session will introduce you to the fundamentals of Datatypes, Relational Algebra, and Normalization to help you avoid the major pitfalls and maybe get some sleep too! This presentation is a survey of Data Architecture for the Intermediate DBA, it is not intended for experienced Data Modelers.
Speaker(s): Pat Phelan,
Abstract:
You can build basic SSIS packages, or you can build packages that perform. In this session, you'll learn about the internals of Integration Services. Using this knowledge, we'll review the DOs and DON'Ts that lead to improved ETL performance. (This session applies to SSIS versions from 2008, 2012, 2014 and 2016.)
Speaker(s): Ravi Kumar,
Abstract:
Most of the time you’ll see ETL being done with a tool such as SSIS, but what if you need near-realtime reporting? You need to get the updates in your OLTP database to the Data Warehouse quickly, but with minimal impact on your application. Asynchronous messaging with Service Broker makes this simple and painless. This session will walk through the basic transformations to build a Kimbal-style data warehouse from an OLTP database and demonstrate how to keep your data warehouse updated using Service Broker messages from your OLTP database.
Speaker(s): Allen White,
Abstract:
Gender Bias is something we're all guilty of. It's typically unconscious and often stems from long held misperceptions about women and job responsibilities. We'll learn about the origins of some of these biases and how to identify gender bias when we see it. We'll discuss some strategies for how both men and women can combat this at work and in our every day lives. This session is about developing positive solutions to a problem that often goes undiscussed.
Speaker(s): Rie Irish,
Abstract:
Ever feel like you are just doing busy work while creating new SSIS packages? Feel like you are doing the same thing over and over while changing the names to protect the innocent? Ever wonder if there is a better way? Well wonder no more. Come learn about the magical world of BIML and how it can help transform your environment by increasing your productivity while reducing the possibility of errors. Come with intrigue and leave with a fundamental understanding of BIML!
Speaker(s): Jonathan Stewart,
Abstract:
This session is an introduction into the PROCESS of queries. This includes how queries are Parsed, Resolved, Optimized, Compiled and Executed. We will see how this effects Batches, Transactions, and Errors. We will also briefly discuss the differences between Heaps, Clustered Indexes, and Non-Clustered Indexes. Finally we introduce Execution Plans and Statistics. The session is led by an expert Microsoft Certified Trainer (MCT) who regularly teaches the SQL Server certification courses.
Speaker(s): John Deardurff,
Abstract:
With so many languages around to extract, transform, analyze, and visualize data, Microsoft introduced yet another language : U-SQL. In this session, we'll take a look at what U-SQL is, what it brings to the table, and how it differs from (or overlaps with) the existing constructs (T-SQL, SQL CLR, DAX/MDX, PowerQuery/M, R etc.,). We'll go over step-by-step in getting started with U-SQL, and review some use case scenarios.
Speaker(s): Azhagappan Arunachalam,
Abstract:
Would a database by any other name smell as sweet? Our databases are filled with words. By mining our text for patterns and meanings, we can extract the emotional content, track changes over time, ferret out plagiarism, find common phrases and usage, and even predict future text. Learn how to dig through your library of language to make your data better.
Speaker(s): Dave Mattingly,
Abstract:
Heartbroken over Microsoft’s neglect of SSRS over the years? Well the 2016 release might start healing that broken heart. This upcoming release boast a handful of great new items; from connecting SSRS PowerBI to mobile report publishing. Join me while I walk you through the best of 2016 for Business Intelligence and help you fall in love with Microsoft BI again.
Speaker(s): Tamera Clark,
Abstract:
Tired of job boards and recruiter spam? There’s a better way to manage your career growth. Networking is something that doesn’t come naturally to many people, but it’s a tool that every tech professional should have in their tool belt. In this talk, you’ll learn tips for growing your professional network online and offline. You’ll also learn strategies for intentionally fostering relationships. A good network means fewer strangers, more free lunches, and a better path to finding your next opportunity.
Speaker(s): Cassandra Faris,
Abstract:
SQL Server has so many options for data redundancy, how do you know when you should use replication, or log shipping or AlwaysOn, etc? We will use real world examples where data redundancy is needed and discuss which is the appropriate technology and why. This is more than just a high availability vs disaster recovery discussion. If you have ever been confused or overwhelmed by all of the options, they will be broken down and made clear in this session.
Speaker(s): Wendy Pastrick,
Abstract:
The Power BI Suite has been around for less than a year and is changing every week. However, the technology behind it has been around for years now. It can be confusing trying to understand PowerThis and PowerThat. In this session, we will cover the different parts of PowerBI and what makes it new and exciting. We will look at how PowerBI fits into the existing Microsoft BI ecosystem. Finally, we will go over the process of creating and publishing a dashboard.
Speaker(s): Eugene Meidinger,
Abstract:
Many database developers today do not have a Computer Science degree and may also have begun their career developing software using procedural programming languages (Java, C#, etc.). As a result, they may not have the background needed to conceptualize solutions in terms of sets of data and therefore may not be able to develop efficient set-based queries. In this session, we will review the basics of set theory and how it applies to database development to enable you to turn cursors, loops, and other procedural programming practices into efficient set-based operations that make the most use of a relational database engine.
Speaker(s): Aaron Cutshall,
Abstract:
Microsoft Power BI is going great places. Its great visualizations, easy-to-use tools, and robust sharing capabilities are improving with new releases almost every time you turn around. But, what if uploading or storing your company's data in the cloud is a potential deal-breaker? Fortunately, the Microsoft Power BI Gateway - Enterprise make it possible to live query data in an on-premises SSAS instance for display in Power BI. In this session, we will go through what this gateway does, how it works, and how it is installed to show that BI in the cloud doesn't require data in the cloud.
Speaker(s): Kerry Tyler,
Abstract:
Head starting to explode from all the technical information you’re absorbing? Come spend a session with us while we play games with Reporting Services…literally! Come watch as Stacia and Dean Varga introduce you to some word play, all wrapped up in SQL Server Reporting Services. They'll push the limits with what can be built in SSRS and show you how to have fun while doing it. Board games and SQL…who could ask for more?
 Or maybe your storage budget and tight and you don't want to have your databases in two places with one of the other highly available options that SQL provides. Let's learn what a cluster is and why it might be the right thing for you. We'll explore the system, network, storage and database administration sides of the equation. And, when it's all said and done we'll even have built a SQL clustered instance!
Speaker(s): Paul Popovich Jr,
Abstract:
Recovery in the cloud is now easier and more convenient than ever. This session describes some common scenarios and reviews the steps needed to prepare for a disaster with a recovery in Azure.
Speaker(s): Carlos L Chacon,
Abstract:
Have you ever thought about speaking at a user group, SQL Saturday, or even the PASS Summit, but weren't quite sure how to get started? If so, this session is for you! Technical speaking is loads of fun, great for your career, and you get to hang out with some terrific people. This session will provide the tools necessary to get your first session off the ground, and prep you to be a great speaker. Attend this session and you'll be able to: * Identify your topic and submit it to a conference, * Design and build the presentation, and * Prepare and deliver your first session.
Speaker(s): Eddie Wuerch,
Abstract:
Let’s face it, using SQLPS prior to SQL Server 2016 was like installing training wheels on a Ducati. Then, some community feedback was incorporated before SQL 2016 shipped and presto, SQLPS is actually useful all of a sudden. There is a faster way to manage and even SQL Servers using PowerShell. I will show you what the new features in SQLPS and why you will probably find it useful, even if you aren't a "DBA".
Speaker(s): Aaron Nelson,
Abstract:
R is the premiere language for data analysis. If the world of data science sounds fun and exciting, now is the time to get into R. We will walk through the core constructs of R, learn how to retrieve data from flat files and databases, and get a peek at the power behind R. This session will also give resources on where to go in order to become more familiar with statistics, R the language, and the R package ecosystem.
Speaker(s): Kevin Feasel,
Abstract:
PowerPoint can enhance the presentation of any speaker or business professional, but using it effectively in your sessions or presentations can be difficult without practice. In this session, you will learn how to take your PowerPoint skills to the next level, using more advanced transitions, animations, and media forms in your presentations. This will help you engage your audience and communicate visually instead of just verbally, making your presentations more effective. After attending this session, you can feel confident that your PowerPoint skills have improved.
Speaker(s): Evelyn Maxwell,
Abstract:
As DBAs, our most important job is protecting the data. Making sure our backups are running successfully gets us halfway there, but those backups are useless if we can’t restore them. Join me for this session to learn how to use Powershell to automate a restore process for backup validation.
Speaker(s): Frank Gill,
Abstract:
In this session we’ll explore several methods of hacking into SQL Server instances. Some methods assume you have Windows Administrator privileges on the box; others only require access to your physical network. We will cover SQL injection, memory dumps, man-in-the-middle, pass-the-hash, and other attack vectors. Armed with this knowledge, you should be able to go back to your job and make a difference in your network security.
Speaker(s): Argenis Fernandez,
Abstract:
Azure SQL Databases are still something that is new and not completely understood by many data professionals. There is a definite shift from installing SQL Server on a machine to creating and using a Microsoft's Platform-as-a-Service database. This session will cover the basics of what an Azure SQL Database is, how we create one, and what it takes to access and use this database. After attending this session, you will have a solid understanding of what Azure SQL Database is, how to configure it, and how to use in your own environment.
Speaker(s): Michael Fal,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
LinkedIn: http://www.linkedin.com/pub/rie-irish/2/34a/78/
Rie lives with her family just north of Atlanta, Georgia. She worked as a SQL Server DBA, manager director for over 20 years. She's worked in many industries including the non-profit sector, education, big pharma, and e-commerce. She was awarded the MVP in the Data Platform 3 times beginning in 2017 and gave that up to accept her role as a Senior Program Manager with Microsoft in 2019. She is very involved with the Atlanta MDF User Group, SQL Saturday Atlanta and is co-leader of the PASS Women in Tech virtual group.
Anthony has more than 14 years in IT leadership positions, including 8 years of program management with Microsoft leading and managing diverse teams globally. He currently works with the SQL data systems engineering team on SQL Stretch database, part of the SQL Server 2016 release. His focusing on front end UX, customer engagement, and the upgrade experience.
Contact: http://geocache11blog.wordpress.com
Evelyn Maxwell is a 10th grade student at Gahanna Lincoln Highschool, and an attendee and presenter at local SQL Saturdays. Since 4th grade, (age 10) Evelyn has been working with presentation software and has given multiple school presentations was well as three SQL Saturday presentation, and a webinar for WIT. She currently has 0 years of IT experience.
LinkedIn: https://www.linkedin.com/in/sqlrv
Contact: http://sqlrv.com
Aaron N. Cutshall is an Enterprise Data Architect with 20 years of experience in analysis, design and development for applications and databases in manufacturing and warehousing plus over 15 years in the Healthcare Informatics field. His primary focus is in designing and developing solutions for extremely large data sets that perform quite well in SQL Server. He is active in the SQL Server community and speaks at SQL Saturday sessions across the country.
LinkedIn: https://www.linkedin.com/in/sqlvariant
Contact: http://sqlvariant.com/
Aaron Nelson is an author, public speaker, blogger, and leader in the community. He has over 15 years of experience in architecture, Business Intelligence, development, and performance tuning of SQL Server. Aaron has received many certifications and is a six time winner of the Microsoft MVP Award. Aaron leads the PowerShell Virtual Group of PASS (SQLPS.io), is a board member of PowerShell.org, and is a volunteer at his PASS Local Group, AtlantaMDF.
LinkedIn: http://www.linkedin.com/pub/colleen-morrow/2a/95a/651/
Contact: http://colleenmorrow.com
Colleen Morrow is a database professional living in Cleveland, OH who has been working with database systems since 1996. For more than 12 years, she was a Database Administrator at a large law firm where she developed an appreciation for auditing, automation, and performance tuning. Since that time she has worked with clients in the healthcare, manufacturing, software, and distribution/freight delivery industries. Colleen is currently a Senior Consultant at Fortified Data. She is an active member of the Ohio North SQL Server User Group and has presented at many SQLSaturday events as well as PASS Summit 2014 and 2015.
LinkedIn: http://www.linkedin.com/in/JohnDeardurff
Contact: https://www.sqlmct.com
John has been a Microsoft Certified Trainer (MCT) for over 20 years teaching Azure, SQL Server, Exchange Server, and Windows Server networking courses. He is currently a SQL Premier Field Engineer for Microsoft. He is an MCT Regional Lead for the Eastern United States and a former Data Platform MVP.
Contact: http://wendyverse.blogspot.com
Wendy Pastrick is from Chicago, IL, and for the past 15 years has served as a Database Administrator supporting both development and production environments. Her many years of involvement with PASS include WIT Virtual Chapter and the Chicago Suburban User Group, serving as Regional Mentor, and as a PASS Board member since 2013. Wendy has organized several highly successful SQLSaturday events in Chicago.
LinkedIn: https://www.linkedin.com/in/sqllocks/
Contact: https://sqllocks.net/
Jonathan Stewart is a Business Intelligence consultant specializing in data visualization, data warehousing, and data management technologies. An advocate for educating others, he is a public speaker, teacher and blogger, continually teaching people about the Microsoft BI Stack. Since 2000, he has been working in the database field with industry leaders in healthcare, manufacturing, financial, insurance and federal, state and local governments. Jonathan is very active in the community. He has presented on SQL Server, SSIS, Reporting Services, Power BI and Business Intelligence at numerous SQLSaturday events, local user groups, and conferences throughout the United States and around the world. He participates in webcasts, podcasts, and on
LinkedIn: https://www.linkedin.com/pub/kevin-feasel/7/716/504
Contact: http://www.catallaxyservices.com
Kevin Feasel is a Microsoft Data Platform MVP and CTO at Envizage, where he specializes in data analytics with T-SQL and R, forcing Spark clusters to do his bidding, fighting with Kafka, and pulling rabbits out of hats on demand. He is the lead contributor to Curated SQL (https://curatedsql.com), president of the Triangle Area SQL Server Users Group (https://www.meetup.com/tripass), and author of PolyBase Revealed (https://www.apress.com/us/book/9781484254608). A resident of Durham, North Carolina, he can be found cycling the trails along the triangle whenever the weather's nice enough.
LinkedIn: http://www.linkedin.com/in/davidaklee
Contact: http://davidklee.net
David Klee is a Microsoft Data Platform MVP and VMware vExpert with a lifelong passion for technology. David spends his days focusing on the convergence of data and infrastructure as the Founder of Heraflux Technologies. His areas of expertise include cloud, virtualization, performance, and business continuity. David speaks at a number of national and regional technology related events, including PASS Summit, VMware VMworld, SQLBits, SQL Saturday events, and many SQL Server User Groups.
LinkedIn: https://www.linkedin.com/in/michaelfal/
Contact: http://mikefal.net
Mike is a specialist in data management technologies. As a community advocate, public speaker, and blogger, Mike is a practicing thought leader for data and automation. He is passionate about DevOps and data, building platforms to optimize, protect, and use data efficiently. Since 1999, Mike has been working in the database field, focusing primarily on SQL Server and specializes in automating data solutions to improve the reliability and efficiency of his environments. He has been caught playing trombone in public on more than one occasion.
I have over 12 years of experience working with SQL Server and Business Intelligence Technology. My current focus is cloud technologies: Power BI, Azure Analysis Services, Azure SQL Data Warehouse, Azure Data Factory. As a PFE at Microsoft, I regularly deliver 2 - 4 day training workshops.
LinkedIn: https://www.linkedin.com/in/carloslchacon
Contact: http://sqldatapartners.com/blog
Carlos Chacon is the managing partner of SQL Data Partners LLC and co-host of the popular SQL Data Partners Podcast. While getting his start as a typical accidental DBA, Carlos has sat on Microsoft exam review panels, served as regional mentor and chapter leader. He enjoys traveling and has been to four continents, speaks Spanish and can eat his weight in raspberries (not yet proven). He and his family live in Richmond, Virginia.
Contact: http://www.sqlgene.com
Eugene Meidinger works as a BI consultant and full time Pluralsight author. He currently focuses on content on Power BI and related products. He also leads the Pittsburgh Power BI User Group. He is certified in querying and administering SQL Server.
LinkedIn: http://www.linkedin.com/in/eddiewuerch
Contact: http://www.indydba.com
Eddie Wuerch has 20 years of experience as a SQL Server specialist in a much-longer IT career. A Microsoft Certified Master, Eddie spends his days in the Salesforce Marketing Cloud, focusing on performance, scale, and uptime for the massive SQL Server backend. These SQL Servers churn billions of transactions daily against trillions of rows of data in a 24x7 continuously-available online system accessed by millions worldwide every day.
LinkedIn: http://www.linkedin.com/in/argenis
Contact: http://blog.purestorage.com/author/argenisfernandez/
Argenis is a Principal Architect at Pure Storage. He works with customers around the world to make sure they don’t have to worry much about their infrastructure for Data. He is a former Data Platform MVP, former VMware vExpert, Microsoft Certified Master, and more recently worked in the Microsoft Azure Data/SQL Server engineering team as a Principal PM in the Tiger team.
LinkedIn: https://www.linkedin.com/in/phelanp
Pat Phelan first joined a computer user group (DECUS) in High School, and has joined many more since then. Pat worked many jobs in high school and college, and over twenty years for a major accounting firm. Pat started working for Involta in 2007 and is now the database mentor and a member of the Engineering team. Involta builds, owns and operates world class colocation datacenters and also provides managed services and support staff to clients.
LinkedIn: http://http://www.linkedin.com/profile/view?id=22766305amp;trk=tab_pro
Contact: http://skreebydba.com/
Frank Gill is a Senior Data Engineer at Concurrency With 21 years of IT experience, the first 8 as a mainframe programmer, he has developed a love of all things internal. Over the past several years, he has worked extensively with SQL Server solution in Azure, including Managed Instance. When not administering databases or geeking out on internals, Frank volunteers at the Art Institute of Chicago and reads voraciously.
LinkedIn: http://www.linkedin.com/in/itacb
Contact: http://www.sqldiablo.com/
Adam Belebczuk is the Owner amp; Principal Consultant at Belebczuk Consulting Services, LLC and has more than 10 years of experience in IT, ranging from customer service to server/network administration to software and database development and administration. Adam is the Chapter Leader for the Ohio North SQL Server Users Group, a frequent speaker and volunteer at PASS events, and specializes in SQL Server development, performance tuning, high availability, and disaster recovery.
Az Arunachalam has been working with SQL server since v4.21/SQLNT. He started his career with troubleshooting at chip level, worked as a network engineer managing Novell NetWare networks, graduated into managing Windows NT, moved onto development, administered databases, and is currently working as a database architect. He#39;s excited about all the cloud offerings that Microsoft and others have made possible, and in sharing his findings with aspiring data enthusiasts.
LinkedIn: http://www.linkedin.com/pub/allen-white-sql-server-mvp/5/784/b08/
Contact: http://dataperfpro.com/blog/
Allen White is a Data Platform consultant. He has been both a developer and an administrator, so he understands both perspectives towards database technology. He loves sharing his experiences and helping people learn how to use SQL Server. Allen has spent over 40 years in IT, using SQL Server since 1992, and has been awarded Microsoft’s MVP Award for the last 13 years. Allen was a PASS Director from 2016 - 2018.
LinkedIn: https://www.linkedin.com/in/cassandrafaris
Cassandra Faris is passionate about the human side of technology. Her career has focused on supporting tech professionals through community outreach, hiring, mentoring, and employee engagement. She is an international speaker who specializes in teaching people how to be more effective team members and advance their careers. She is also the President of the Microsoft and open source conference, DogFoodCon, and a Per Scholas Advisory Board member. She has an MBA in Organizational Leadership. When she's not busy with the tech community, she is avid tabletop gamer, runner, and soccer fan who travels as much as possible.
LinkedIn: http://www.linkedin.com/in/staciavarga
Contact: http://blog.datainspirations.com
Stacia Varga is a Microsoft Data Platform MVP and SSAS Maestro with a Bachelor’s Degree in Social Sciences. A consultant, educator, author, and principal of Data Inspirations, her career spans more than 30 years, with a focus on improving business practices through technology. Since 2000, Stacia has provided consulting and education services for Microsoft's Business Intelligence technologies. As Stacia Misner, she also authored several books covering the Microsoft BI stack.
Contact: http://www.midnightdba.com/dbarant
Sean McCown is a Certified Master with 23 years of experience in databases. He is also founder and co-owner of the MidnightDBA.com website, where he records free SQL Server training videos. He also writes the popular Minion Maintenance suite, the most configurable maintenance solution on the planet.
LinkedIn: https://www.linkedin.com/in/paul-popovich-jr-2a03b692?trk=hp-identity-name
Contact: https://pmpjr.wordpress.com/
Paul Popovich Jr. has been in the IT space for his whole career and tinkering with computers since his 486 PC back in the mid 1990s. Professionally he is a senior DBA for a large hospital system. You can find on twitter @pmpjr, email at<EMAIL_ADDRESS>LinkedIn: http://www.linkedin.com/in/staciavarga
Contact: http://blog.datainspirations.com
Stacia Varga is a Microsoft Data Platform MVP and SSAS Maestro with a Bachelor’s Degree in Social Sciences. A consultant, educator, author, and principal of Data Inspirations, her career spans more than 30 years, with a focus on improving business practices through technology. Since 2000, Stacia has provided consulting and education services for Microsoft's Business Intelligence technologies. As Stacia Misner, she also authored several books covering the Microsoft BI stack.
LinkedIn: http://www.linkedin.com/in/jennifermccown
Contact: http://www.MidnightDBA.com/Jen
Jen McCown is CEO of MinionWare, LLC; a Microsoft Certified Master for SQL Server; and an independent consultant. She is Senior Editor at MidnightDBA.com, where she creates training videos, the DBAs at Midnight webshow, blogs, reviews, and podcasts. Jen is a member, volunteer, and speaker in PASS, and the PASS Women in Technology Virtual Group.
LinkedIn: http://www.linkedin.com/in/blackwyrm
Contact: http://www.davemattingly.net
Dave Mattingly has spent thirty years of designing, developing, databasing, documenting, and directing a variety of projects in many industries. In the past, he’s worked on space travel, fraud prevention, data accuracy, and virtual reality for industries such as games, ecology, health, religion, and money. He also writes, publishes, orates, teaches, and preaches.
LinkedIn: https://www.linkedin.com/in/kerrytyler
Contact: http://airbornegeek.com
Kerry Tyler is a SQL Server, Business Intelligence, and Azure consultant. His initial IT experience was in network engineering and Windows system administration before moving into the data realm. This infrastructure background builds a firm foundation for performance tuning and cloud infrastructure design and implementation. Kerry has full-time DBA experience in SQL Server since version 2000 and business intelligence architecture since SQL Server 2005. In addition to consulting work, he delivers presentations and training on SQL Server administration, business intelligence, and Azure data and infrastructure components.
LinkedIn: http://www.linkedin.com/in/tameraclark/
Contact: http://tameraclark.com
Tamera Clark has been involved in the IT industry for greater than ten years, with experiences ranging from systems analysis/engineering to SQL Server and SSRS administration/development. She is an active member of the SQL Server community, participating in the Women in Technology Virtual Chapter, Co-leading the Nashville BI Chapter, assisting the Nashville PASS Chapter and serving as a Regional Mentor. Tamera is also the event chair of SQLSaturday Nashville.
The following is a list of sponsors that helped fund the event.


I was looking on most downloaded crates on crates.io the other day and I noticed something interesting. Most downloaded crates are not the most popular crates. I posted an issue on crates.io repository, but I also wanted to add it here.
I looked at top 30 of "All-time Downloads" and "Recently Downloads" crates.
I found lot of crates that I have never used, heard of and probably won't use.
Examples: thread_local
, aho-corasick
, num-traits
, memchr
Implement new download counter, counting only "direct dependencies downloads" and allow to sort using it.
The name of the sort is open to a debate. The main idea is this:
Each time a library downloads a crate, it would only count a download if downloaded crate was mentioned in cargo.toml
file as a direct dependency. All crates dependent on direct dependencies would not count as a download. For example:
[dependencies]
regex = "*"
Downloading regex
crates also downloads dependencies of regex
. After downloading regex
crate, only regex
would count as a "direct download". regex
dependencies download count would not change.
This type of sort would really indicate what crates are most popular. This type of sort would help to increase popular high-level crates discoveries. It would move tokio
, Rocket
or other similar crates more to the top and decrease the noise of crates most people probably won't use.
This would probably require some additional implementation in the cargo's code.


The Labor in Vain
Chicago, IL
A production company.
about
Shop
Games Blog
Discord
brand
GitHub
kdm-manager
the KD:M API
software
" Bad News Travels Fast "


Open Angel Arena 4.5.2 Update
General Changes
Fixed Ward Stack buffs being dispellable.
Deactivated vanilla DotA experience gain and rubberband because it randomly malfunctions above levels 30-33.
Because of this there was a 'bug' that gave some heroes absurd amount of xp after killing a level 33 hero - making them level 50 (max level).
Bounty Runes
Bounty Runes Initial Team Gold reduced from 40 to 20.
Basically gold gain from bounties is reduced by 50%.
Bounty Runes Initial Team Experience reduced from 20 to 10.
Basically xp gain from bounties is reduced by 50%.
Previous
Home
Next


Yes, WW are my initials. I'm considering changing my middle name to Wendell. Or Wensleydale. I do enjoy a good cheese.
This means that not only can I assist in site development - I can help you move your office too.
Sadly, none of them involve cheese or powerlifting. But there's always hope for the future! A girl can dream...


onscreen keyboard compatible with the kinesis framework
kinect sdk required to control with kinect sensor or kinect simulator


My Web Design:
Sampacks:A personal/ entrepreneurial website made for an amateur movie/music production company(not real, just fictional) |
|
Italian Stallion:A business website made for a fictional 6 star restaurant located in Tucson, Arizona. The restaurant is part of a famous waterpark complex built by Tatar Industries, the restaurant is accompanied also by a 6 star hotel. |
|
Starbuzz:A website built for a Coffee Shop called Starbuzz, who clearly took inspiration from the well-know Starbucks coffee shop chain. |


Good Boy, Bad Driver
by Jennings BrownA Labrador retriever had a dizzying adventure in a Florida cul-de-sac on Thursday after getting stuck in a car that that spun in circles like a dog chasing it’s own tail.
Port St. Lucie police told a NBC local affiliate that the pooch’s owner stepped out of the car but left the engine running. Then the furry motorist, tempted with a good time, switched the gear to reverse.
Neighbourhood resident Anna Sabol only noticed the doughnut-driving doggo when the cop cars started showing up. “I laughed. I thought they should give that dog a licence to drive,” Sabol told WPTV. “He was a better driver than a lot of them I’ve seen.”
The cops stood around perplexed for a while, unsure how to stop the car.
“He was doing pretty good until he hit the mailbox. He went around for about an hour without hitting anything at all,” Sabol added.
That’s when the car slowed down and officers were able to type in the passcode to unlock the door. The dog escaped, uninjured.
Sabol told the news outlet that she witnessed the good boy wagging its tail after the joyride.


Skips backwards in the current media queue. ## Syntax
skipBack(point: <#Type (WFSkipBackBehavior)#>)
skipBack(point: Beginning)


Phase diagram of LiH/Al/H 2 and Li 3AlH 6. The blue line represents the equilibrium. Data adapted from reference [ 86]: ln ( p ) = − 0.22 R T + 13.89 ; where (in the original formula) p is in atm, T in Kelvin and Δ H R = 0.22 eV . For visual reference (bottom and right) the equilibrium of Ti-doped Na 3AlH 6 (blue zone) and NaH + Al (yellow zone) phases were included [ 88].


WITNESS LIST Higher Education Committee June 27, 2005-9:00A HB 6 For: Montford, John (Greater San Antonio Chamber of Commerce) Rocha, Susan C. (City of Round Rock) On: Calvert, Stanton C. (Texas A&M University System) Dickey MD, Nancy W. (Texas A&M Health Science Center) Gogue, Jay (Univer of Houston System) Matthews, Charles R. (Texas State Univ. System, Thomas J. Rusk Building, 200 E. 10th, Suite 600, Austin, TX 78701) Morton, Jack (University of North Texas System) Rogers, Jesse W. (Midwestern State Univ. Wichita Falls, TX) Shine, Kenneth (University of Texas System) Stuart, Ann (Texas Woman's Un.) Sullivan, Teresa (The University of Texas System) Whitmore, John (Texas Tech Univeristy) Wilson, M. Roy (Texas Tech University Health Sciences Center)


Mac Os X Snow Leopard Free Download Dvd Iso Webforpc
Mac Os X Snow Leopard 10 6 Iso And Dmg File Direct Download Isoriver
Mac Os X 10 6 8 Released Ready To Download Osxdaily
Mac Os X Snow Leopard Macintosh Garden
Need To Download Mac Os X Snow Leopard Or Leopard Adc Has It Osxdaily
Macos Safari 用ベストパスワードマネージャー 1password
Mac Os X Snow Leopard 10 6 Dmg Mac Free Download 6 1 Gb
Cleanmymac Classic Download First Version Of Cleanmymac For Your Macos
Macx Youtube Downloader 5 1 6 Download For Mac Free
Mac Os X Snow Leopard Wikipedia
Download Apple Logic Pro 9 1 8 For Macos X
Firefox For Mac Download Free 2021 Latest Version
Crossover For Mac Download Free 2021 Latest Version
Download Zoom For Mac Make It Easier With Step By Step Guide
Utorrent For Mac Download Free Latest Version Macos
How To Download And Install Old Versions Of Macos Infographic Of Mac Os Evolution
How To Upgrade Install Os X El Capitan On Your Mac
Mac Os Mojave 非対応macへのmacos Mojaveインストール手順 Ifixit リペアガイド
初めからmacで利用できる壁紙が入っているフォルダの場所 Inforati
4k Video Downloader For Mac Download Free 2021 Latest Version
How To Download Os X 10 9 Mavericks For Free Extremetech
1
Anydesk For Mac Download
Download And Install An Older Version Of Adobe Reader On Mac Os
Arduino Macosx
Os X Mountain Lion Wikipedia
How To Use Internet Explorer 11 In Mac Os X The Easy Way Osxdaily
Bluestacks For Mac Download Free 2021 Latest Version


Myths and Legends of Ancient Greece and Rome
by E.M. Berens
Cover Page
Table of Contents
About Page
Family Tree
Name
Chapters Mentioning


Cloud Print Sunset
Google Cloud Print will be shut down on December 31, 2020
Print from right here instead of print from anywhere
by Philip BerneWhat you need to know
- Google is shutting down its web-based Cloud Print service on December 31, 2020.
- Chrome OS devices will rely on native printing and app drivers instead of Cloud Print.
- Support for external print servers and more administrative printing controls will come to Chrome OS.
After offering printing from any device, from any location, to any web-connected printer with Cloud Print, Google is shutting down the service that has technically been a beta product since 2010. Cloud Print will be gone by the end of next year and users will need to find an alternative before December 31, 2020. Chrome OS, which originally relied on Cloud Print entirely for printing needs, eschewing the need to develop native printing controls, is now going full native.
Chrome OS already handles some administrative tasks for printers that use the Common Unix Printing System (CUPS). Google promises to expand administrative options through the end of the year, and add more robust support for external print servers and other security policy administration in 2020. Since Chrome OS and its apps relied entirely on Cloud Print, Google will also be developing APIs for third-party developers to handle printing tasks.
It is unclear why Google would move away from a multi-platform, cloud-based printing solution and leave the task to local, native hardware. Perhaps the company sees third-party printer makers developing their own cloud solutions, with most office environments handling printing through their own IT methods. It is still disappointing to see Google abandon a useful app or service, and hopefully this won't become more of a trend than it already is.
Portable Printing
Canon PIXMA iP110 Wireless Mobile Printer
Great printing from anywhere
This Canon printer not only prints in amazing quality, thanks to its 9600x2400 dpi, but it also allows you to print them straight from your phone with no hassle. Plus, this is ultra-lightweight so that you can take it with you if you need to leave your home but want to print some pictures.
We may earn a commission for purchases using our links. Learn more.


Account Login
Username:
Password:
Forgot your password?
Reset Now!
Don't have an account?
Register Now!


Tag: linux
- January 16, 2011 Opened the MeeGo Porting project(Unofficial) on gitorious!
- November 12, 2010 Japan Linux Conference 2010 Porting MeeGo to Android platforms 20101112
- November 6, 2010 MeeGo 1.1 for NexusOne status part2 and how to work(Using microSD and No fastboot! You can also dualboot both of MeeGo and Android).
- November 3, 2010 MeeGo 1.1 for NexusOne status and how to work(Using microSD and Boot vi fastboot).
- October 4, 2010 LinuxCon Japan 2010 my summary and review
- September 30, 2010 LinuxCon Japan 2010 Porting MeeGo to Other devices 20100927
- September 12, 2010 MeeGo 1.1 Development Release(<IP_ADDRESS>.20100831.1) for N900 status
- July 24, 2010 Memo: dmesg and X.org.0.log on the MeeGo + Nexus One
- July 1, 2010 My CFP has been accepted LinuxCon Japan
- May 27, 2010 MeeGo 1.0 for N900 status
- April 7, 2010 About MeeGo, MeeGo Netbooks UX screenshots
- March 6, 2010 My crazy and funny desktop screenshot ;-)
- February 27, 2010 Chromium OS(Chrome OS) partitioning
- December 31, 2009 My synthesis in 2009
- December 2, 2009 Another request pulications about Chrome OS
- November 28, 2009 Ordered a PS3 (CECHA00)
- September 2, 2008 執筆したい
- August 16, 2008 周りの意識もメンテナに
- August 10, 2008 日経Linux9月号
- July 24, 2008 実は今執筆を…


Menu |
|---|
| Home | Menu | Deals | Order | About us |
|---|
| S.no | Item | Price |
|---|---|---|
| 1. | Margherita Pizza | $7.99 |
| 2. | Double Cheese Margherita | $7.99 |
| 3. | Corn and onion | $7.99 |
| 4. | Hawaiian | $7.99 |
| 5. | New York Pizza Slice | $0.99 |
| 6. | Deep Dish | $7.99 |
| 7. | Pasta Pizza | $7.99 |
| 8. | Garlic Bread | $7.99 |
| 9. | Coca Cola | $7.99 |
| 10. | Pepsi | $7.99 |
| 11. | Ginger Ale | $7.99 |
| 12. | Mojito | $7.99 |


{{ item['title'] }}
{{ item['intro'] }}
{% extends 'layout.html' %} {% from 'images/macro.njk' import image %} {% block pageTitle %} NHS England and Improvement - About us {% endblock %} {% block header %} {% include "partials/header.html" %} {% endblock %} {% block beforeContent %} {{ breadcrumb({ href: "/home ", text: "Home" }) }} {% endblock %} {% block content %}
From 1 April 2019 NHS England and NHS Improvement came together as a single organisation. We set the strategic direction for the NHS through the NHS Long Term Plan and fund key priorities for improvement.
We are also responsible for overseeing NHS foundation trusts, NHS trusts and some independent providers. We support them to give patients consistently safe, high quality, and responsive care within local integrated care systems that are financially sustainable. By holding providers to account and, where necessary, intervening, we help the NHS to meet its operational goals and its longer term strategy.


The domain model. This is the heart of the application. Each aggregate is contained in its own sub-package, along with the repository interface, factories and exceptions where applicable.


Get All To-Do
Limit:
Search Body:
Search Owner:
Search Category:
Sort By:
Search
Choose Complete or Incomplete Last
Complete
Incomplete
Json will go here


You have to be logged in to add a new place.
Please submit a suggestion about a place you would like to see on our website.


Methods
assignEachPointToFace(polygon, points)
Parameters:
| Name |
Type |
Description |
polygon |
*
|
|
points |
*
|
|
- Source:
Returns:
Object with props 0-n where n is number of faces
distanceFromLineTo(line, point)
Calculates the distance of a point from a line
Parameters:
| Name |
Type |
Description |
line |
Array
|
Array of two points [ [x,y], [x,y] ] |
point |
Array
|
Array [x,y] |
- Source:
- Tutorials:
-
- Tutorial: https://stackoverflow.com/a/6853926
distanceFromTo(point1, point2)
Parameters:
| Name |
Type |
Description |
point1 |
*
|
|
point2 |
*
|
|
- Source:
generatePoints(number, maxHeight, maxWidth)
s
Parameters:
| Name |
Type |
Description |
number |
*
|
|
maxHeight |
*
|
|
maxWidth |
*
|
|
- Source:
getFarthestAwayPoints(points)
Parameters:
| Name |
Type |
Description |
points |
*
|
|
- Source:
getMinMaxPoints(points)
Parameters:
| Name |
Type |
Description |
points |
*
|
|
- Source:
isPointInPolygon(polygon, point)
Parameters:
| Name |
Type |
Description |
polygon |
*
|
|
point |
*
|
|
- Source:
- Tutorials:
-
- Tutorial: http://alienryderflex.com/polygon/
(generator) quickHull(points)
Parameters:
| Name |
Type |
Description |
points |
*
|
|
- Source:
removePoints(array, points)
Removes points from array
Parameters:
| Name |
Type |
Description |
array |
*
|
|
points |
*
|
|
- Source:


public class Event extends java.util.EventObject implements IEvent
To define a new type of event, a client should subclass this class, and
optionally extend addCategories(List)
if there is a need to classify
the event under categories other then event type. However, clients may
implement IEvent
directly if they need to.
IEventSource
,
Serialized Form| Constructor and Description |
|---|
Event(IEventSource eventSource,
java.lang.String eventType)
Creates a new event with the given event source and event type.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
addCategories(java.util.List categoryList)
Adds additional categories for this event to the given list.
|
java.util.List |
getCategories()
Returns the non-empty list of categories for this event.
|
IEventSource |
getEventSource()
Returns the event source that originated this event.
|
java.lang.String |
getEventType()
Returns the type of event that has occurred.
|
public Event(IEventSource eventSource, java.lang.String eventType)
eventSource
- the event source; must not be null
eventType
- the type of event that has occurred; never null
public final IEventSource getEventSource()
IEvent
getEventSource
in interface IEvent
null
public final java.lang.String getEventType()
Events types are unique strings that follow package naming convention.
getEventType
in interface IEvent
null
public final java.util.List getCategories()
An event listener is registered against a category, entitling it to
receive notifications of events in that category. The list always
includes the event's event type as returned by getEventType()
,
allowing client to register listeners for specific types of events.
The Event
implementation of this IEvent
method computes the list of categories by calling
addCategories
.
getCategories
in interface IEvent
null
categories
(element type: Object
); the list is never
null
; the list is immutableprotected void addCategories(java.util.List categoryList)
null
objects that can be compared with equals
.
The Event
implementation of this method does nothing.
Subclasses should extend this method if they have additional categories.
Extended methods must call super.addCategories(categories)
to include categories contributed by superclasses.
categoryList
- the list of categories (element type: Object
);
never null


/**
* @module TallyLabIAM
*/
/**
* @external orbit-db-access-controllers
* @see https://github.com/orbitdb/orbit-db-access-controllers
*/
/**
* @external orbit-db-identity-provider
* @see https://github.com/orbitdb/orbit-db-identity-provider/
*/
/**
* Note: We want to consider migration to the wasm-based
* [libsodium.js](https://github.com/jedisct1/libsodium.js/)
*
* @external js-nacl
* @see https://github.com/tonyg/js-nacl
*/
const AccessControllers = require('orbit-db-access-controllers')
const TallyLabAccessController = require('./src/tallylab-access-controller')
/**
* This module exposes a single function as the entry point for TallyLabIAM. The function
* takes a nacl instance (created via `nacl_factory.instantiate`) and returns an object containing
* a {@link TallyLabIdentityProvider} object and a {@link TallyLabAccessController} object.
*
* Additionally, since linking to Orbit requires both usage and configuration of the
* Orbit-internal AccessController and Identities object, this function handles the linking
* and returns the aforementioned objects as well, in their modified state.
*
* @function TallyLabIAM
* @see https://github.com/orbitdb/orbit-db-access-controllers#creating-a-custom-access-controller
* @see https://github.com/orbitdb/orbit-db-identity-provider/#creating-an-identity
*
* @example
* nacl_factory.instantiate((nacl) => {
* iam = new TallyLabIAM(nacl)
* })
*
* @param {external:js-nacl} nacl output of `nacl_factory.instantiate`
*
* @returns {TallyLabAccess} See type definitions below
*/
function TallyLabAccess () {
AccessControllers.addAccessController({ AccessController: TallyLabAccessController })
return {
TallyLabAccessController,
AccessControllers
}
}
/**
* @typedef {Object} TallyLabAccess
* @property {TallyLabAccessController} TallyLabAccessController - ACL Creation and Enforcement
* @property {TallyLabIdentityProvider} TallyLabIdentityProvider - Identity via NACL keypairs
* @property {external:orbit-db-identity-provider} Identities - Identities helper class from Orbit
* @property {external:orbit-db-access-controllers} AccessControllers - AccessControllers helper class from Orbit
*/
module.exports = TallyLabAccess


This class overrides equals(Object)
, but does not
override hashCode()
. Therefore, the class may violate the
invariant that equal objects must have equal hashcodes.
Override only hashCode :- Imagine you have this MyClass first = new MyClass("a","first"); MyClass second = new MyClass("a","second");If you only override hashCode then when you call myMap.put(first,someValue) it takes first, calculates its hashCode and stores it in a given bucket. Then when you call myMap.put(second,someOtherValue) it should replace first with second as per the Map Documentation because they are equal (according to our definition). But the problem is that equals was not redefined, so when the map hashes second and iterates through the bucket looking if there is an object k such that second.equals(k) is true it won't find any as second.equals(first) will be false.
Override only equals: -If only equals is overriden, then when you call myMap.put(first,someValue) first will hash to some bucket and when you call myMap.put(second,someOtherValue) it will hash to some other bucket (as they have a different hashCode). So, although they are equal, as they don't hash to the same bucket, the map can't realize it and both of them stay in the map.
public class MyClass { private final String importantField; private final String anotherField; public MyClass(final String equalField, final String anotherField) { this.importantField = equalField; this.anotherField = anotherField; } @Override public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final MyClass other = (MyClass) obj; if (importantField == null) { if (other.importantField != null) return false; } else if (!importantField.equals(other.importantField)) return false; return true; } }
public class MyClass { // other code including equals() method ... @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((importantField == null) ? 0 : importantField.hashCode()); return result; } }


This guide is meant to be a cheat sheet for working with branches in SVN in the crux project. For a more detailed discussion, please see this tutorial .
We will create a new branch of crux named "side-project", move its
changes into the trunk, and finally merge changes in the trunk into
"side-project". We will use $SVNROOT
to mean the root of
the crux module in the SVN repository. On the gs
network, it will
be file:///noble/svn/crux
and on remote
machines svn+ssh://<hostname>/noble/svn/crux
. All
the work will happen in ~/sandbox
and the current
working directory will precede the cursor in the example commands as
in ~/sandbox$ svn co $SVNROOT/trunk crux
A branch is just a copy of the trunk. By convention, we keep branches
in the $SVNROOT/branches
directory of the repository.
You can create a branch without having a working copy. After copying,
check out your new branch. For this example, we'll check out into a
directory named crux-side-project
.
~$ svn cp $SVNROOT/trunk $SVNROOT/branches/side-project -m "Create a new branch for a side project." ~$ cd sandbox ~/sandbox$ svn co $SVNROOT/branches/side-project crux-side-project ~/sandbox$ cd crux-side-project
Your branch and the trunk are now identical. Now you can work in your branch as you would in the trunk, making changes and checking them in at regular intervals. Even though it is not required for checking in changes to your branch, have your code checked frequently so that your reviewer doesn't have to tackle huge differences.
Merging in either direction (trunk to branch or branch to trunk) involves these basic steps:
When you are ready for "side-project" to be part of the release version of crux, you will want to merge those changes into the trunk.
svn update
on an existing check
out to make sure all new files have been added and all existing files
are up to date.
~/sandbox$ svn co $SVNROOT/trunk crux-trunk ~/sandbox$ cd crux-trunk ~/sandbox/crux-trunk$ svn status -u Status against revision: 3522
--stop-on-copy
ends the log where the branch began.
~/sandbox$ svn log --stop-on-copy $SVNROOT/branches/side-project ... ------------------------------------------------------------------------ r3389 | frewen | 2010-06-10 01:44:54 -0700 (Thu, 10 Jun 2010) | 1 line Create a new branch for a side project. ------------------------------------------------------------------------In this case we will merge the changes starting with r3389. If you have already synced this branch with the trunk, look for the most recent entry describing the merge. For example
------------------------------------------------------------------------ r3437 | frewen | 2010-06-29 10:09:20 -0700 (Tue, 29 Jun 2010) | 8 lines Merged trunk changes into the side-project branch. Merge command was svn merge -r3389:HEADIn this case, begin the merge with r3437. For the rest of the example, we'll use r3389./crux/trunk where HEAD was 3436. Smoke and unit tests all pass. This version of the branch will now be merged into the trunk. ------------------------------------------------------------------------
--dry-run
option first to see what changes will take place.
~/sandbox/crux-trunk$ svn merge --dry-run -r3389:HEAD $SVNROOT/branches/side-project ~/sandbox/crux-trunk$ svn merge -r3389:HEAD $SVNROOT/branches/side-project
~/sandbox/crux-trunk$ svn commit -m 'Merged side-project branch into trunk -r3389:HEAD where head was 3522. Adds a new utility, crux-do-stuff.'
Moving changes from the trunk into the branch is much the same as merging in the other direction. In this case your local working copy will be checked out from the branch. The changes to merge will start at the same revision (in the example r3389). The HEAD revision (r3523) of the trunk now contains all of the changes in the branch since r3389. We don't want to apply those changes to the branch again, so we merge from r3521, one version before the branch-to-trunk merge. After merging in both directions, you can check that the trunk and the branch are, once again, identical.
~$ cd ~/sandbox ~/sandbox$ svn co $SVNROOT/branches/side-project crux-side-project ~/sandbox/crux-side-project$ cd crux-side-project ~/sandbox/crux-side-project$ svn merge -r3389:3521 --dry-run $SVNROOT/trunk ~/sandbox/crux-side-project$ svn merge -r3389:3521 $SVNROOT/trunk ~/sandbox/crux-side-project$ ./bootstrap ~/sandbox/crux-side-project$ ./configure ~/sandbox/crux-side-project$ make ~/sandbox/crux-side-project$ cd src/c/test ~/sandbox/crux-side-project/src/c/test$ make ~/sandbox/crux-side-project/src/c/test$ cd ~/sandbox/crux-trunk ~/sandbox/crux-side-project$ svn commit -m 'Merged the trunk into the side-project branch, -r3389:3521. Branch and trunk are now identical'
Often SVN cannot decide how to combine the changes from two versions of crux, resulting in a conflict. The output from the following merge commands shows two different kinds of conflicts.
~/sandbox/crux-side-project$ svn merge --dry-run -r3437:HEAD $SVNROOT/trunk --- Merging r3438 through r3534 into '.': C src/c/match_collection.cpp C src/c/q-value.cpp C src/c/objects.h U src/c/crux-utils.h U src/c/peak.h C src/c/q-ranker.h C src/c/percolator.cpp A src/c/test/smoke-tests/params/ppm_window D src/c/woops.txt Summary of conflicts: Text conflicts: 3 Tree conflicts: 2
Output lines beginning with 'U', 'A', or 'D' indicate all is well. The file will be updated, added, or deleted. Lines with a 'C' in the first column indicate a text conflict: SVN can't decide on the contents of the merged file. A 'C' in the third column indicates a tree conflict: both trunk and branch added or deleted the same file and you must choose which addition/deletion to accept.
When you do the real merge, you are presented with a prompt for each text conflict.
~/sandbox/crux-side-project$ svn merge -r3437:HEAD $SVNROOT/trunk Conflict discovered in 'src/c/q-value.cpp'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options:
Type 'e' to edit the file and fix the conflict. An editor will open up with the file in question. Search for '===' or '<<<' to find the conflict.
<<<<<<< .working DECOY_XCORR_QVALUE, ///< q-value derived from empirical null (decoys) DECOY_XCORR_PEPTIDE_QVALUE, ======= DOTP, ///< not yet implemented LOGP_EXP_SP, ///< this spot hijacked for zscore DECOY_XCORR_QVALUE, ///< Benjamini-Hochberg q-value from xcorrs LOGP_BONF_EVD_XCORR, LOGP_WEIBULL_SP, LOGP_BONF_WEIBULL_SP, >>>>>>> .merge-right.r3534The branch version is between "<<<<<<< .working" and "=======". The trunk version is between "=======" and ">>>>>>> .merge-right.r3534". You can edit the file however you want, selecting either the top block or the lower block or some combination of the two. Make sure you remove the "<", ">", and "=" lines. It can be helpful to have clean copies of the branch and the trunk checked out for reference. Using a side-by-side editor such as xxdiff with the pre-merged files can be helpful. Once you resolve this conflict, keep searching the file for more. When you are done, save the file and quit the editor. You will be greeted with this prompt.
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options:
Type 'r' to mark the conflict as resolved. The merge command will continue. If you find a conflict that you don't know how to fix, exit the browser and type 'p' at the prompt. This leaves the file marked as having a conflict. You can examine the differences in more detail after the merge command is finished.
After merging, check the status.
~/sandbox/crux-side-project$ svn status ? src/c/match_collection.cpp.working ? src/c/match_collection.cpp.merge-left.r3437 ? src/c/match_collection.cpp.merge-right.r3534 C src/c/match_collection.cpp ! C src/c/q-ranker.cpp > local delete, incoming delete upon merge ! C src/c/q-ranker.h > local delete, incoming delete upon merge
In this example, we didn't resolve the conflict
in match_collection.cpp
and SVN has left us several
different versions of the file. The file with the original name is
the one we looked at in the editor. It contains whatever merges svn
could manage plus the <<< / === / >>> blocks with
alternate versions. The ".working" file is what we had locally before
the merge: the branch version at the HEAD revision. The ".right" file
is the trunk version at the HEAD revision. We can compare ".working"
and ".right" side-by-side to help decide what the final version should
be and make the changes in "match_collection.cpp". I like to use
xxdiff
because I can compare all three files and edit and
save with the changes highlighted. Or you could use the command
line diff
with the --side option to view the changes and
edit "match_collection.cpp" separately. Sometimes svn
diff
in the branch and/or the trunk is useful for understanding
how the file changed.
Once "match_collection.cpp" is the way you want it, mark it as resolved. Note that you can compile and test the code before you resolve the conflict.
~/sandbox/crux-side-project$ svn resolve --accept working src/c/match_collection.cpp ~/sandbox/crux-side-project$ svn status ! C src/c/q-ranker.cpp > local delete, incoming delete upon merge ! C src/c/q-ranker.h > local delete, incoming delete upon merge
Now only the tree conflicts remain. (svn resolve
removed
the other versions of match_collection.cpp.) Tree conflicts most
often happen when a file with the same name is added in a branch and
the trunk. The history of only one of those files can be saved and SVN
doesn't know which to choose. Check the contents of the two files and
the log entries for the two files and decide which you want to keep.
Often, they are similar enough that it doesn't matter. You can always
put a note in the commit log explaining the conflict. In the example
above, both the branch and the trunk deleted the same file, so it
really doesn't matter whose change to accept. Use svn
resolve
again. The three most common values to use for
--accept
are 'working' (whatever is in the local working
copy), 'mine-full' (whatever was in the branch version of the
repository), 'theirs-full' (whatever was in the trunk version of the
repository). Unless you have made local changes (say, to a file being
added), 'working' and 'mine-full' are the same.
~/sandbox/crux-side-project$ svn resolve --accept working src/c/q-ranker.cpp ~/sandbox/crux-side-project$ svn resolve --accept working src/c/q-ranker.h
If you bungle things and want to start over, use svn revert to restore the file to its pre-merge state. (Note that this works because there were no local changes when we started merging.) Then repeat the merge with the single file.
~/sandbox/crux-side-project$ svn revert src/c/match_collection.cpp ~/sandbox/crux-side-project$ cd src/c/ ~/sandbox/crux-side-project/src/c$ svn merge -r3437:HEAD $SVNROOT/trunk/src/c/match_collection.cpp


|
BTK
0.3dev.0
Open-source library to visualize/process biomechanical data
|
BTK use the generous open-source New BSD license. Yes, you can use BTK in commercial products. The complete text of the copyright follows.
/* * The Biomechanical ToolKit * Copyright (c) 2009-2013, Arnaud Barré * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * Neither the name(s) of the copyright holders nor the names * of its contributors may be used to endorse or promote products * derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */


The next couple of pages will take you through a step-by-step process of rolling a new character in DnD. How you create your character is entirely up to you! You can select everything on your own, leave it all up to fate, or you can mix it up and have a mutt of a character. Normally there's a bunch of information to find and read when creating a character, but we've condensed it down and simplified the process for you! Here is an outline of the sections you will be going through:


| guide_none {ggplot2} | R Documentation |
This guide draws nothing.
guide_none(title = waiver(), position = waiver())
title |
A character string or expression indicating a title of guide.
If |
position |
Where this guide should be drawn: one of top, bottom, left, or right. |


London Games Festival 2020 dates have been confirmed
by Aran SuddiGaming enthusiasts will be able to check out all manner of gaming related events during the London Games Festival 2020 which will be running from March 26th to April 6th. The first event will be EGX Rezzed which will be at Tobacco Dock from March 26th until March 28th, but that’s not all. There will panels at one event and a finance forum where game developers will be able to pitch their ideas to investors from around the world.
The highlights of the event are listed below:
- LGF kicks off with EGX Rezzed, one of the biggest PC and indie games shows in the world, running 26 to 28 March at Tobacco Dock
- Ensemble, the festival’s yearly exhibition of BAME talent in games, which will debut at Rezzed before touring other festival events
- The LGF HUB two-day conference and expo on 30 March and 31 March with a focus on the global games industry and key issues around Games Impact, Interactive Narratives and Games Culture
- Games Finance Market, taking place on 1 April and 2 April, which will draw in up to 60 major investors to the UK for pitch meetings with games businesses
- Hollywood XP, a brand new forum of keynotes and panels on 1 April exploring the connections between interactive entertainment and other screen media
- BAFTA Games Awards, the games industry’s most prestigious accolades, awarded on the night of 2 April
- Another collaboration with the Now Play This team to present innovative and inspiring game experiences during London Games Festival
- Plus the return of the Trafalgar Square Games Festival, expanded to a two-day climax for the main festival on 3 April and 4 April and including more free games experiences, cosplay, music and more
The events are expected to draw over 100,000 people to check things out. Developers and industry employees who want to be involved are able to apply to take part in the events through the official website.
Source: Press Release


B1VS Hourglass
Welcome, Player
You hold approx. % of the B1VS Supply!
My Wallet
B1VS
BNB ($ USD)
Price Data
Buy Price
Sell Value
My Dividends
$ USD Value
From Referrals
B1VS Game Stats
B1VS
Current Supply
BNB
Contract Balance
Market Cap


Money Play. How should Red play 54?
pips Red=110 White=85
(CorrectAnswer= 0/0, ErrorScore= 0)
Thank you for all the comments. I think over the board most would elect to play 18/14, 18/13 leaving only five shots as opposed to the eleven left after 18/9.
But then you notice that White’s 14 is awkward. He will still hit 8/7*/3 to take advantage of his superior board but he leaves a direct shot. Then you add in that 18/9 is the better play if White rolls virtually any six and you begin to wonder.
18/9 maintains better pressure on White’s outer boards and in fact 18/14, 18/13 is a racing play and Red is still 16 pips behind after the roll.
The direct shot left after 18/9 would influence many to choose 18/14, 18/13 but in fact that play is nearly a blunder and 18/9 is right by a long way for all the reasons above. It goes to show that immediate shots are not the only thing you should consider when evaluating a position.
But then you notice that White’s 14 is awkward. He will still hit 8/7*/3 to take advantage of his superior board but he leaves a direct shot. Then you add in that 18/9 is the better play if White rolls virtually any six and you begin to wonder.
18/9 maintains better pressure on White’s outer boards and in fact 18/14, 18/13 is a racing play and Red is still 16 pips behind after the roll.
The direct shot left after 18/9 would influence many to choose 18/14, 18/13 but in fact that play is nearly a blunder and 18/9 is right by a long way for all the reasons above. It goes to show that immediate shots are not the only thing you should consider when evaluating a position.
1. Cubeful 2-ply 18/9 Eq.: +0.498 0.604 0.112 0.002 - 0.396 0.029 0.000 2. Cubeful 2-ply 18/14 18/13 Eq.: +0.440 (-0.057) 0.592 0.090 0.001 - 0.408 0.037 0.000 3. Cubeful 2-ply 18/13 6/2 Eq.: +0.410 (-0.088) 0.576 0.126 0.002 - 0.424 0.077 0.001 4. Cubeful 0-ply 18/13 5/1 Eq.: +0.328 (-0.170) 0.560 0.081 0.001 - 0.440 0.064 0.000 5. Cubeful 0-ply 6/1 5/1 Eq.: +0.313 (-0.185) 0.551 0.064 0.001 - 0.449 0.041 0.000


LOGO
Thank you for registering
Who will run this account?
Submit
Have an account already?
Login
instead


In 2012 I wrote a series of articles about matrix multiplication. Now I'm preparing a course about speeding up Python. For this reason I need an example of code that is fairly simple to understand and can be optimized. So let's update the results of my old articles 🙂
The code can be found in a git repository on GitHub (github.com/MartinThoma/matrix-multiplication) and you can have a look at the old article as well, if you want.
All scripts are tested on my new Thinkpad T460p. For comparision, I've also added the laptop I had before when I wrote the 2012 matrix multiplication article:
| Acer TravelMate 5735Z | Thinkpad T460p | |
|---|---|---|
| CPU (comparison on ark.inten.com) | 2x Pentium(R) Dual-Core CPU T4500 @2.30GHz | 8x Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz |
| RAM | 4 GB | 8 GB |
| Video Card | Intel GMA 4500MHD | Nvidia GeForce 940MX |
| System | Ubuntu 10.10.04 LTS | Ubuntu 18.04.3 LTS |
Python
In the following table you can see the execution times for the different
algorithms and different Python versions. As input, I took the
2000.in
test set. To switch Python versions, I used pyenv
For Python 2.7, you can see the speedup compared to my 2012 machine. A speedup of 2.6x means that you could run the code on the new machine 2.6x in the time the old machine needed.
| Algorithm | Python 2.7.16 | Python 3.8.1 | pypy3.6-7.3.0 | pypy-c-jit-latest | Python 3.8.1 + cython |
|---|---|---|---|---|---|
| ijk | 1253 (2.6x) | 1884 | 158 | 147 | 1088 |
| ikj | 901s (2.9x) | 1072 | 52 | 50 | 441 |
| NumPy | 20 (~6x) version: 1.14.4 |
20 version: 1.18.1 |
42 | 36 | 22 |
| SciPy | 45 (2.6x) version: 1.1.0 |
20 version: 1.4.1 |
Installation problems | - | |
| Strassen (LEAF_SIZE=8) | 1709 (1.7x) | 1780 | 190 | 125 | - |
| Strassen (LEAF_SIZE=64) | 855 (3.4x) | 1022 | 44 | 41 | 441 |
| ikj (2 threads) | 953 | 1611 | 37 | 32 | - |
| ikj (4 threads) | 459 | 762 | 19 | 17 | - |
Things to note:
- pypy is crazy fast compared to CPython - up to a speedup of 34x 😲 So JIT is worth a try. I actually wanted to try Pyston (comparison) as well, but the built failed with pyenv.
- Python 2.7 is faster than 3.8 for this benchmark 😢
- Ways to improve; speedups are always compared to the naive ijk algorithm:
- Cache optimization: The ikj algorithm gave a 1.08x speedup
- Algorithmic: The Strassen algorithm gave a 1.84x speedup
- Parallelization: Using 4 threads instead of 1 with a super simple algorithm gave a 2.47x speedup
- Time:
- New Hardware which is 8 years newer gave a 2.6x speedup on the naive solution
- Running the old code with updated libraries on my new machine gave a 6x speedup compared to running the older version of numpy on the old machine.
- Libraries: Using numpy gave a 94.2x speedup!
- Numpy and scipy are the way to go, just as expected 🤷♂
I was interested in the influence of the machine, so I ran the algorithms with Python 3.8 on others as well:
| Thinkpad T460p (Reference Machine) |
EliteBook-1040 | |
|---|---|---|
| CPU (comparison on ark.inten.com) | 8x Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz |
4x Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz |
| RAM | 8 GB | 16 GB |
| Video Card | Nvidia GeForce 940MX | Intel HD Graphics 520 |
| System | Ubuntu 18.04.3 LTS | Ubuntu 18.04.4 LTS |
| Algorithm | Thinkpad T460p | EliteBook-1040 |
|---|---|---|
| ijk | 1884 | 1891 |
| ikj | 1072 | 1455 |
| NumPy 1.18.1 | 20 | 21 |
| Strassen (LEAF_SIZE=8) | 1780 | TODO |
| Strassen (LEAF_SIZE=64) | 1022 | TODO |
| ikj (2 threads) | 1611 | TODO |
| ikj (4 threads) | 762 | TODO |
The interesting thing to note here is that the EliteBook is about the same speed for the ikj-algorithm (even a tiny bit slower), but the EliteBook is way slower for the ikj algorithm.
You might also be interested in pybenchmarks.org which seems to be similar to The Benchmarks Game.
pypy
Quoting from the PyPy 1.2 Release notes:
PyPy is a reimplementation of Python in Python [...]. [PyPy] speed results often beat CPython, ranging from being slightly slower, to speedups of up to 2x on real application code, to speedups of up to 10x on small benchmarks.
Another resource which states that PyPy is faster than CPython is pybenchmarks.org (also PyPy 3).
PyPy uses Just-in-time compilation (JIT) to get those speedups.
Go to PyPy — How can it possibly beat CPython? for more information why PyPy is that fast.
C++
| Algorithm | g++-O0 -D _DEBUG -g | -O3 -D NDEBUG -DBOOST_UBLAS_NDEBUG |
|---|---|---|
| ijk | 168.06 | 45.05 |
| ikj | 89.67 | 5.24 |
| library-boost | 1002.36 | 4.56 |
Things to note:
- Debug flags / Optimization settings while compiling make a huge difference
- It's way faster than Python
Using C++ from Python
Obviously, C++ is way faster than pure Python. Astonishingly, C++ is also faster than Numpy for this simple number crunching task. So the idea is to combine both: Have the nice interface of Python with the raw computing power of C++.
However, there are many ways to combine the two:
- subprocess 🙄
- ctypes: beginner tutorial
- cffi
- cython
- c extensions: examples
- pybind11
- Py++
Cython versus CFFI helped me to wrap my head around this topic a bit.
See also
- Matti Picus: CFFI, Ctypes, Cython: the Good, the Bad and the Ugly at EuroSciPy, 2018. (first presented at PyCon Israel 2017)
- 2:10 Begins
- 4:05 Matti Picus introduces himself
- 5:02 He will use Mandelbrot as an example
- 15:00 C implementation
- 18:00 C done: 130ms (Python 3057ms)
- 18:15 ctypes is writing python in c
- Take a shared object (*.so) or ddl
- 20:48 ctypes.Structure
- 24:00 Memory managment / free-ing memory
- 36:00 Create *.so
- 38:40 Load dll / *.so
- 44:24 Timing - 1554ms
- 45:10 cffi - cffi came out as a replacement for ctypes. cffi is writing c in python. Use c as directly as possible.
- 46:20 Load C header in Python; header needs to be in very specific format. IT CAN'T HANDLE MACROS!
- 50:20 cffi memory management
- 52:37 Call function
- 53:33 Timing - 640ms
- 53:50 Q/A
- 55:36 Cython - can be used from jupyter notebook
- Cython has a own language; like a mix between C and Python
- 56:58 Cython creates a shared object
- 1:00:07 cpdef - a mixture between c and python
- 1:02:12 Timing - 594ms
- 1:02:49 cppyy - C++!
- 1:03:30 LLVM
- 1:09 Final thoughts
- Armin Rigo: CFFI: calling C from Python at EuroPython, 2016.
- Comparing Python, Numpy, Numba and C++ for matrix multiplication
- Nuitka (Benchmark)


Version control is when you store what changes are made to files in an organized way. The main benefits of version control are the ability to see what changes were made and go back to them if needed.
Git is software that lets you do this. When you "commit" a file using git, it creates a "save point" where you currently are, and you can go back to that save later. This is helpful if you make a mistake or accidentally delete something.
GitHub is a service that stores these save points in the cloud. The advantage of using GitHub is that you can share files with other people while using different computers.


About
Scrollify. Do things on scroll. 3KB minified + gzipped.
What sorts of things?
Well, whatever you want. Common effects such as parallax or toggling a class on/off are possible and bundled within. However, you may also easily create your own custom scroll function, and pass it in to Scrollify. The built-in effects include:
- Stick: sticks an element to a particular point and holds in there for a pre-defined number of pixels.
- Parallax: move stuff on scroll. A subtle effect that transistions elements more slowly (or perhaps quickly) than the speed of the user-scroll.
- Toggle: turn a CSS class on or off if the element crosses a particular threshold on the page.
- Translate: translate an element along the X- or Y- axis.
- Rotate: rotate an element via scroll.
- Scale: scale an element.
- Fade: change an element's opacity.
Robust
The effects work perfectly fine when scrolling in reverse as well, and after resizing the viewport, too!
Notes
Scrollify works by first calculating an element's position in the page so that it may be manipulated on scroll. It is important to note that as the page loads, this position may jump around as the DOM is constructed and images are loaded, etc. Therefore, it is important that Scrollify'd elements are not initialized until the page has finished loading all images and the DOM is stable.
A note on implementation: Scrollify uses matrix transformations in its calculations -- in this way multiple element transforms may be stacked and animated on a single element (it is also a lot more efficient and speedy).
If you're trying to Scrollify an element whose position on the page is dependant on
assets loading above of it, you may wish to use
window.addEventListener('load', ...)
rather than the more common
window.addEventListener('DOMContentLoaded', ...)
.
Getting Started
Everything is relative to the viewport. Elements are Scrollify'd only when they are visible on screen. There is an implicit timeline inherent in all Scrollify'd objects, which moves from 0 to 1.
0 : bottom of viewport
0.5: middle of viewport
1 : top of viewport
This is a Scene, and by default it will be active for the duration of the element's time in the viewport. That is to say: the Scene starts as soon as the element enters the viewport, and ends when it leaves.
Add a Scene and Effect
-
The easiest way to get started is to create a new Scrollify instance, with the DOM element you'd like to manipulate. Next, create a Scene, and define which effect to apply.
import { scale } from './fx'; new Scrollify('#transformer') // the element to scrollify .addScene({ effects: [{ fn: scale, // what effect to apply options: { // some options for the effect from: 1.0, to: 1.2 } }] });
Result:
This element (#transformer) will scale from 1 to 1.2x as it moves across the viewport. ()
Define Start and Duration
-
If you wish to have a Scene start and stop at a particular place, it's easy. start specifies where in the viewport a Scene should start. The value can be relative to the Scene's default timeline (ie. between 0 and 1), a percentage (ie. 30%), or an absolute pixel value (ie. 300px). duration specifies how long the Scene will remain active for. Like start, it can be a float between 0 - 1, a percentage, or a pixel value. Both are optional; if not present, the Scene will fall back on its default start / duration values.
new Scrollify('#transformer-2') .addScene({ start: 0.2, // start when the element is at 0.2 of the scene's progress (0 to 1) duration: '300px', // do something for 300 pixels effects: [{ fn: Scrollify.fx.scale, options: { from: 1.0, to: 1.2 } }] });
Result:
This element (#transformer-2) will only start transforming at 20% of the way up from the bottom, and stop after 300px. ()
Any Element as Scene trigger
-
By default, the Scene is started and stopped by the transformed element's position in the viewport. However, it is possible to use any element in the DOM as the basis for a Scene's timeline, using the trigger option.
new Scrollify('#sticky') .addScene({ trigger: '#trigger', // this element will be used to start / stop the scene start: 0.2, // start when "#trigger" reaches 0.2 on the timeline (i.e 20% of the viewport) duration: '300px', // do something for 300 pixels effects: [{ rotate: { rad: Math.PI * 2 } }] });
← I'm #trigger, the trigger for navigation barrel roll. It'll start when I reach 0.2, or 20%.
Custom Easing
-
Use a custom (built in) easing function. The easing function is specific to the Scene it is defined on, and applies to all child effects.
new Scrollify('#transformer-4') .addScene({ start: 0.2, duration: '400px', easing: Scrollify.easings.easeInElastic, // use a built in easing function effects: [{ fn: Scrollify.fx.scale, options : { from: 1.0, to: 1.5 } }] });
Result:
This element (#transformer-4) uses an elastic easing function. ()
Add Multiple Effects
-
You can also specify multiple effects within the same scene:
import { scale, rotate, translateX } from './fx'; new Scrollify('#transformer-5') .addScene({ start: 0.3, effects: [ { fn: scale, options: { from: 1.0, to: 0.5 } }, { fn: rotate, options: { rad: Math.PI } }, { fn: translateX, options: { from: 0, to: 400 } } }] });
This element (#transformer-5) will scale, rotate and translate. ()
Chain Scenes
-
You can also chain multiple scenes together for more sophisticated and complex interactions. Each Scene is independent; they can overlap, be staggered, etc., but each manipulates the same element. This example also uses a trigger element to start / stop the Scene.
import { translateY, fade, rotate } from './fx'; import { easeIn } from './easings'; new Scrollify('#sticky') .addScene({ trigger: '#multiple', duration: '30%' easing: easeIn, effects: [ { fn: translateY, options: { from: 0, to: 300 } }, { fn: fade, options: { from: 1, to: 0.5 } }, { fn: rotate, options: { rad: Math.PI/8 } } ] }) .addScene({ trigger: '#multiple', start: 70%, duration: '30%', effects: [ { fn: translateY, options: { to: 300 } }, { fn: fade, options: { from: 0, to: 1 } } ] });
← This is another trigger element that will trigger various transforms on the navigation.
Use an Implied Scene
-
You can also just apply an effect directly, and Scrollify will set you up with some default scene options (ie start, duration etc).
var options = { range: 300 }; new Scrollify('#parallax').addEffect(Scrollify.fx.parallax, options);
Stick (experimental)
-
Note: this is for demo purposes as to what is possible. You would probably be better using position:sticky in your CSS directly
There is a sticky function as well; keep in mind that you'll need to CSSify a few things, though. It's probably easiest if you wrap your element in an empty spacer element, which would serve as a placeholder for changes in the display property of the sticky element -- preventing the page from collapsing or shifting when it's taken out of the flow. You'll also need to provide the CSS for three classes that are used:
- "normal": identifies the top (start)
- "bottom": used at the bottom (finish)
- "sticky": used when the element is fixed.
Also note: it's recommended not to use the "stickified" element as the trigger, as resizing the viewport may cause unexpected results.

 Sticks! I'll hang around for 300 px.

new Scrollify('#stick') // the element to target .addScene({ trigger: '.spacer', start: 0.5, // 'start': when at 50% of the viewport duration: '300px', // 'duration': 300 pixels effects: [{ fn: Scrollify.fx.stick }] });
Sticks! I'll hang around for 300 px. ()
.normal { position: absolute; }
.sticky { position: fixed; }
.bottom { position: absolute; bottom: 0; }
Toggle Classes
-
You can toggle a CSS class on / off at a pre-defined scroll point. The options for the toggle function need to be bounded on the Scene timeline, between 0 and 1.
new Scrollify('#transformer-8') .addScene({ 'effects': [{ 'fn': Scrollify.fx.toggle, 'options': { 0.2: 'red', // toggle class "red" when 20% through the Scene 0.5: 'blue', // toggle class "blue" at 50% of the Scene 0.7: 'green' // toggle class "green" at 70% }] });
This element (#transformer-8) is toggling various classes on and off. At 20%, 50%, and 70%. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Data Object
-
Here, we're just showcasing a way to store animation preferences in a data-object, for quick and easy manipulation of many elements at once.

 1

 2

 3

 4

 5

import * as fx from './fx'; const elements = document.querySelectorAll('[data-scrollify]'); elements.forEach((el) => { const [ effect, opts ] = JSON.parse(el.dataset.scrollify); new Scrollify(el).addEffect(fx[effect], opts); });
12345Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
 Have a look in the effects.js file to glean further insight.
// your custom effect here var skew = function({ element }) { return (progress) => { var amount = 60 * progress; element.style.transform = 'skew('+amount+'deg)'; } } new Scrollify('#custom') .addScene({ start: 0.3, duration: 200px, effects: [{ fn: skew }] });
(#custom) Oh hello. Prepared to see my reality warped and twisted. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
Fade in / out
-
(#fader)Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Image animation (#sequence)
-
Requirements
None. Works fine without any frameworks.
Compatibility
- IE9+
- Firefox, Webkit, Opera
Options
| name | type | description |
|---|---|---|
| el | string | HTMLElement | Reference to the DOM node of thing to scroll-ify |
Methods
| name | arguments | description |
|---|---|---|
| addScene | start() duration(Integer) effects(Array) |
|
| addEffect | name(String|Function) options(Object) |


--- layout: page title: "Start Ups" description: "This is what I do." header-img: "img/yosemite-5.jpg" ---
I'm current work on a few new Start Up's!
More to follow soon!


Painter
Clear
Color
Line Width:
5
Font
Arial
Courier New
Sans Serif
Verdana
Font Size:
20
Undo
Redo
Save
Load
Save
Load
Load list