Event Location:
Pittsburgh Technical College
1111 McKee Road, Oakdale, PA
Oakdale, Pennsylvania
Abstract:
The presentation covers recoverability options in SQL Server over time. It will take us through many different ways of recovering a large 1TB+ database. It will also walk us through many different options for creating development/test/uat environments. It will highlight the benefits and shortcomings of these options while delivering a business value of each. It will also evaluate a high level ROI of each of these options. Finally, the presentation will focus on an architecture based on SAN technologies with respect to SQL Server. I will demonstrate an architecture put in place resolving many business needs in a financial trading environment, working with large data sets and many different environments. This section will highlight the benefits of using SQL Server together with newer SAN solutions and show the potential for reliability, scalability, and the delivery of a high quality HA/DR solution. That is where things get interesting...
Speaker(s): Andrzej Pilacik,
Abstract:
Things happened, you got a knock on the head and when you awoke your boss said “congratulations” you are our new DBA, perhaps you came to the role in a more intentional manner or are just DBA curious. Your environment is running but you are wondering “now what” or “what’s next”. In this session we will give an overview of a few things that could, perhaps even should be next and give some recommendations as to where you can find more resources on-line and maybe even suggest a few sessions to attend at this very SQL Saturday. So, what will be covered, recovery strategy (you think I mean backups, I don’t, you’ll see why), a touch on performance tuning with a hint of indexing thrown in, add a pinch of high availability and a smattering of security all of which will give you some idea how to answer “now what”.
Speaker(s): Peter Shore,
Abstract:
We hear it in every session and every webinar “…test…” regardless of it being upgrades, new code, performance tuning or any of a thousand changes. Once we confirm nothing breaks., we don’t need to check anything else, nothing could possibly change the results, right? What about load on the database(s) in question or the server as a whole? In this session four readily available tools, distributed replay, Hammer DB, SQL Query Stress and oStress will be introduced. The session will cover how to use the tools as well as which situations they shine in. Once introductions are made, we will spend a little time with two of my favorites, HammerDB and SQL Query Stress. Join me as we apply a little heat to our SQL Servers.
Speaker(s): Peter Shore,
Abstract:
The war between DBAs and developers has been raging since the dawn of relational databases. One reason for disagreement comes from developers who want to store their data in JSON because it is fast, standard, and flexible. DBAs cringe when they hear of long text strings being stored in their SQL databases; they cry with concern, “No data validation? No schema binding?”. Is there any hope for these two warring factions to see eye-to-eye? This session will explore the new JSON functionality introduced in SQL Server 2016. We will use T-SQL examples to learn how these functions can be used to parse, create, and modify JSON data. More importantly, we will discuss how to optimize performance when using these functions. By the end of this session DBAs and developers will know how to efficiently work with JSON in SQL Server 2016. It will also usher in an era of peace between DBAs and developers… … at least until someone brings up the topics of cursors, NOLOCKs, or Entity Framework.
Speaker(s): Bert Wagner,
Abstract:
The world is drowning in data and there’s a gold rush in the business of turning data into actionable insight. In one corner, stands AWS, a long time cloud services innovator, that wants to leverage its PaaS dominance to take it into the next decade. In the other corner, stands a scrappy re-invigorated Microsoft with a new focus on making the cloud smarter. Both are feverishly working on creating compelling solutions for developers to build intelligent solutions upon. Is one better than the other? What are each one’s strengths and weaknesses? And what does Google have up its sleeve? Come to this session to get a first hand account of a former Microsoft evangelist now working at an AWS partner startup, who promises to keep it a good clean fight!
Speaker(s): Frank La Vigne,
Abstract:
This session covers and compares the PIVOT operator to an ancient but very high performance pivoting method known as CROSS TABs. Single and double column pivots will be covered and the “secret” to quickly making CROSS TABs is “Copy’n’Paste” easy. We’ll also introduce a couple of “Black Arts” techniques called “Pre-Aggregation” and “Divide’n’Conquer” to build a quarterly report for 1 year from 10 years and 10 MILLION rows of data in just half a second. If time allows, we’ll also discover that you can very quickly format reports as pretty as you’ll see in SSRS without using SSRS. Don't let the "Intermediate" rating of this session scare you beginners away because we start at the ground floor and work our way up to some very high performance code. Even if you already know how to use PIVOT or CROSS TABs, you won’t want to miss this one.
Speaker(s): Jeff Moden,
Abstract:
There are several custom solutions that make Twitter messages analysis possible in Power BI. And with a recent addition of the Campaign/Brand Management for Twitter solution template for Power BI (https://powerbi.microsoft.com/en-us/solution-templates/brand-management-twitter/) it's getting even less complicated to get into this social media mainstream data exploration. This solution has several components: - Logic App passes tweet into an Azure Function - Azure Function enriches tweet and writes it to Azure SQL - Azure Function also calls Azure ML experiment running Python script to work out sentiment of tweet - Power BI imports data into it from Azure SQL and renders pre-defined reports However, Geo location for twitter messages is not available (if we want to filter them by a particular country). Let's try to explore with live demos if we can customize this Azure solution and add a Country filter to our Power BI reports based on live tweet data.
Speaker(s): Rayis Imayev,
Abstract:
Are you an DBA newbie looking for tools to improve your product and client experience? In this session, you’ll be equipped with tools to improve query tuning, indexing tuning, and naming standards. You’ll understand helpful built-in technologies that often go unused, server setup practices, and performance logging. And you’ll hear about the best blogs to follow and where to get help from the community. I’ve learned all of this gradually, but I’m happy to give you a head start. I’ll share insights that I’ve gained transforming our 18-year old, single-tenant database into a thriving multi-tenant SaaS environment. This talk is intentionally broad, demonstrating how we retooled our database and the wealth of information we discovered along the way. If you are just starting your SQL Server performance journey, this talk will give you at least one thing to dig into on Monday morning.
Speaker(s): Ryan Booz,
Abstract:
You know you are well qualified for the jobs that you search for on any major job site. You know that if you just get to that next step that they will see it for themselves. This lightning talk focuses on strategies for your resume and LinkedIn profile to help get you noticed and reach that next step. Interaction with the audience is encouraged throughout the discussion.
Speaker(s): Rick Heiges,
Abstract:
The FileStream feature allows BLOBs to be managed by the DB. FileTable expands on this feature by using specific tables for storing these BLOBs. This allows Windows apps to access these items as if there were stored on the file system but with benefits only a database can offer, such as text searching and querying.
Speaker(s): Sam Nasr,
Abstract:
There are several programming design patterns that work great in object oriented code but do not scale inside SQL Server. Things like Scalar-Value functions, Unions, CTEs, and row by row processing can make for more work then you would expect. In this session, we will focus on several anti-patterns like these and show how to rework them to improve scale in the database engine. By the end of the session, you will be able to quickly identify these common anti-patterns and analyze their sometimes unclear cost to the engine. Heading back to the office, you’ll be able to identify pain points in your longest running queries from a T-SQL perspective and become a code tuning rockstar!
Speaker(s): William Wolf,
Abstract:
Maintaining a solid set of information about our servers and their performance is critical when issues arise, and often help us see a problem before it occurs. Building a baseline of performance metrics allows us to know when something is wrong and help us to track it down and fix the problem. This session will walk you through a series of PowerShell scripts you can schedule which will capture the most important data and a set of reports to show you how to use that data to keep your server running smoothly.
Speaker(s): Allen White,
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:
DAX is the new formula language (builds upon Excel's) supporting PowerPivot and Analysis Services Tabular mode. If you know Excel, you already know the basics of DAX (without even knowing it). PowerBI also uses DAX for all the formula expressions. We'll cover the basics of DAX, and go over some time intelligence functions.
Speaker(s): Azhagappan Arunachalam,
Abstract:
Most of us do not have a lot of spare time at work. In this session we will share favorite shortcuts, tips, and tricks for using SQL Server and Management Studio. Learn how to manage your server and write code quickly to help you save a few minutes every day.
Speaker(s): Eric Blinn,
Abstract:
Learn how getting involved in the SQL Community can help you get ahead within your organization, improve you skill set as well as help provide career stability. PASS and other organizations practically give you all the tools you need to succeed in the DBA field, learn about the events that help make this possible as well as how you can get involved to help others who are starting out. The rewards of the SQL Community are endless.
Speaker(s): Tim Radney,
Abstract:
In this session Thomas will explore and explain the different options that exist in SQL Server to temporary store data and show you when to use which and why not the others. This will cover #, ##, @, Non-Durable Memory Optimized and regular user tables. He will also present alternatives like common table expressions.
Speaker(s): Thomas Grohser,
Abstract:
This session will rely on Audience Participation as we play games like Charades with SQL / BI/ Azure related terms.
Speaker(s): Rick Heiges,
Abstract:
A general discussion for DBAs about what they need to consider when using storage. I cover how to monitor performance, how storage can affect SQL server, what DBAs can do to mitigate storage issues, and also misconceptions DBAs have about SANs.
Speaker(s): Marsha Pierce,
Abstract:
How do you know when your server is on fire? Without a set of known-good measurements to compare against, you don’t. This session will show you how to capture a performance baseline for a SQL Server instance and help you decide what to capture, and where to store it. Finally we will put it all together by walking through a scenario using the captured baseline data to identify a problem.
Speaker(s): Tracy Boggiano,
Abstract:
This session focuses on Microsoft’s BI technologies and its abilities to make advanced easy to use, accessible, insightful, and actionable decisions, all while helping clients increase organizational performance. With the recent release of SQL Server, Microsoft dramatically enhanced the Microsoft BI platform. During this session you will explore the improvements to SQL Server reporting services and Power BI to show you how to create a blended value from your BI platform.
Speaker(s): Sayed Saeed,
Abstract:
Everyone has a boss. Part of your success depends on keeping your manager successful. In this session, veteran IT professional Mike Hillwig will teach you how to manage your manager. You'll learn to understand what her/his motivations are, how to understand what's being measured, and how success is defined. Taking that to the next level, you'll start to play to your manager's strengths and understand the value of making your manager look good.
Speaker(s): Mike Hillwig,
Abstract:
After lunch, come learn more about New Horizons training programs and services. No food is allowed in the classroom, please eat in the gallery or cafe first.
Speaker(s): Matt Nelson,
Abstract:
Whether you've dabbled in PowerShell or wondered what all the fuss is about, make no mistake: PowerShell is something worth learning to make your life as a SQL Server professional easier.
Speaker(s): Drew Furgiuele,
Abstract:
Who, What, and Why are important when allowing access to anything in SQL server. Who needs the access, why they need it, and what they will be doing with it, are key factors to think about when assigning permissions. Join me in learning about the different levels of permissions allowed in SQL server, from the server level to the database level and more. You will leave with a better idea and plan of how to say “NO” to that one developer that NEEDS sysadmin access.
Speaker(s): Dummea Vincent,
Abstract:
What are indexes and how does SQL Server use them? Discuss the types of indexes that are available, and go in depth into heaps, clustered indexes and nonclustered indexes. Why does SQL Server choose an index, and how does it make your queries run faster? If you're a good fit to be in this session then columnstore, hash, and XML indexes aren't a good fit for you, so they will not get much more than an honorable mention.
Speaker(s): Steve Hood,
Abstract:
After lunch, come learn more about Plus Consulting's services. No food is allowed in the classroom, please eat in the gallery or cafe first.
Speaker(s): Matt Nelson,
Abstract:
We all know that backups are important. But are we building a backup strategy that can recover in a manner that meets business needs? All too often, we plan a backup strategy without a recovery strategy. In this session, veteran DBA Mike Hillwig will start with understanding the recovery strategy and work toward implementing the right backups to meet that recovery strategy. He'll also set the record straight around some very common myths around database recovery and backups.
Speaker(s): Mike Hillwig,
Abstract:
lunch break
Speaker(s): Matt Nelson,
Abstract:
For the last 25 years SQL Server DBAs administered SQL databases using only Windows GUI. For majority of them even Windows Core is too hard to accept. In the situation, when Microsoft invaded Linux territory with it's flagship product, as SQL DBA, you must not outsource SQL Server administration to some Linux geeks. You can do it yourself! Your way! And I show you how to do it.
Speaker(s): Slava Murygin,
Abstract:
Ever thought of writing a technical blog? This session will cover the Ws (who, what, when, where, why, how) of getting a technical blog started. Answer the question of how it can be done for free. Discuss why pay for your own domain name. Explain how to be on the first page of a search engine. Learn how to determine the time commitment. And finally determine topics to write about.
Speaker(s): Mike Hays,
Abstract:
Congratulations, you’re now our DBA! A new SQL instance is like a blank canvas, you stare at it and wonder where to start. As an accidental dba, this session will help you learn how to survive in your new role. In this session, you will be supplied with the beginning brush strokes to make your server a master piece. To do so, we will review best practices for standard configurations, backups, maintenance, and disaster recovery. By the end of this session, you will have developed a pallet of tools to help you create your SQL Server Masterpiece and be able to use it as a print for others.
Speaker(s): Jim Donahoe,
Abstract:
Amazon Web Services (AWS) is the world's largest public cloud hosting provider with many companies successfully running SQL server on AWS infrastructure. In this session, we explore the options available to you for running SQL server in AWS, either as an RDS managed service or using dedicated EC2 instances. We document the different storage options, HA strategies, security and maintenance caveats to be aware of. We will also detail various approaches to licensing you can take when running SQL server in AWS.
Speaker(s): Brian Carrig,
Abstract:
Are you new to Azure? Are you new to DBaaS? This is the perfect session for you! We will discuss the deployment of the server, as well as how to template it. We will cover what you configure once the server is deployed(resource locks, firewall, etc). What maintenance does Microsoft provide? What is an elastic pool? What maintenance is still your responsibility? Overwhelmed yet? Don't be, by the end of this session, you will have enough knowledge on how to create your very first DBaaS instance. This session is geared towards new users of Azure DBaaS and future users of Azure DBaaS.
Speaker(s): Jim Donahoe,
Abstract:
If you do not have enough space in your hard disk and do not want buy more space, one way to get more space is compress the tables and also do some house keeping. I will use T-SQL script to generate script to compress each tables and release the free space by shrinking the datafiles. And in the final I will defragment the indexes and update the statistics, since shrink datafile is not fragmentation aware task.
Speaker(s): Thomas Chan,
Abstract:
Keeping up with technology can feel like a treadmill; you keep running but never get anywhere. We'll take a look at ways to keep up with technology without pulling your hair out. We'll balance cost versus benefit for the different types of learning. We will also talk about learning goals.
Speaker(s): Eugene Meidinger,
Abstract:
In this second session of the WBADBA track, we'll examine what's most important for a DBA. There are many topics to deal with, but this session with deal with the top five for a beginning DBA.
Speaker(s): Ed Wagner,
Abstract:
Microsoft has recently streamlined the certification process and this session focuses on what you need to know to get Microsoft Certified on SQL Server. The session is led by an expert Microsoft Certified Trainer (MCT) and Microsoft MVP who regularly teaches the SQL Server certification courses. The presenter walks you through the certifications, exams, and resources available to get you ready for success.
Speaker(s): John Deardurff,
Abstract:
You know it's coming . . . one day soon, you'll be asked to take ownership of a database that uses In-Memory OLTP. Then what? Deploying In-Memory OLTP affects the database ecosystem, including monitoring, data migration, logging, capacity planning, backup, restore, recovery, and more. DBAs need to know optimal methods of migrating large data sets from disk to In-Memory, the differences between restore and recovery for memory-optimized databases, and many other facets of the In-Memory world. Attendees will gain a clear understanding of the knowledge and skills required to administer In-Memory OLTP environments.
Speaker(s): Ned Otter,
Abstract:
Abstract: The CONVERT_IMPLICIT operator is part of an execution plan. When an execution plan has a CONVERT_IMPLICIT operator, this is a signal that “your statement has a problem”. This presentation will show you how to detect the Execution Plans with CONVERT_IMPLICIT operator; how to find the statement that causes conversion, and what DMVs can help to solve the problem. It will also show you the solution to collect the Execution Plans with CONVERT_IMPLICIT operator across the servers.
Speaker(s): Alex Grinberg,
Abstract:
Starting the day for the Wanna Be A DBA track, Michael John and Ed Wagner will discuss what a DBA is, requirements for working as a DBA, what a typical day as a DBA looks like, and answer your questions about starting a career as a DBA.
Speaker(s): Michael John,
Abstract:
SQL Development is a broad subject with many roads to choose from. Often times SQL Developers feel overwhelmed and unsure which areas they need to focus on. The purpose of this session is to give a high-level overview and present paths for further study and growth. Subjects reviewed in this session will include coding patterns, error handling, and execution plans. Demonstrations of free tools will also help developers find ways of simplifying their daily tasks. Attendees will leave this session empowered with knowledge and directions for further growth.
Speaker(s): Vladimir Oselsky,
Abstract:
Extracting, transforming and loading data has become a major component to satisfying business requirements and needs. Depending on the size of the data you are working with, the way you design your SSIS packages can have an impact on performance and run times. In this session, we will cover a variety of incremental design approaches centered around large data sets using SSIS. We will look at the architecture of each ETL strategy to determine the pros and cons and generate specific use cases to decide which strategy yields optimal results.
Speaker(s): Jeremy Frye,
Abstract:
Taking a looking at all the new features of SSAS 2016 Tabular, how to use them effectively and avoid pitfalls. Features include Bi-Directional Cross Filtering, Parallel Partition Processing, Calculated Tables, etc.
Speaker(s): Brian Beswick,
Abstract:
In this session, we will dive into SQL Server Data Tools (SSDT) features. SSDT can be used to manage database development. This session covers creating a database project, extracting a database project from an existing database, interacting with a database project to change object definitions, and deploying a database project to a SQL Server environment.
Speaker(s): Steve Grier,
Abstract:
Recently, there's been a big shift towards Big Data and event-driven architectures with eventual consistency. Tech leaders in your organizations may even be using words like Hadoop or Spark or ElasticSearch as answers to these Big Data problems. In this session, we'll look at Cassandra, what it is, how it works, and how it compares to SQL Server. We'll walk through use cases and highlight some places where SQL Server is still a better choice.
Speaker(s): Dan Mallott,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
LinkedIn: Public Profile https://www.linkedin.com/in/petershore
Peter Shore is a seasoned IT professional with over 25 years of experience. He took the accidentally intentional DBA plunge in 2013 and has discovered that he loves to find the stories the data has to tell. Peter is comfortable working with both physical and virtual servers, where he tries to apply best practices to attain performance improvements. He is also adept at bridging the gap between technical and business language in order to bring technology solutions to business needs.
LinkedIn: https://www.linkedin.com/in/ericblinn
Contact: https://ericblinn.com/
Eric has been a SQL Server DBA in the legal, software, transportation, and insurance industries for over 10 years. Currently he is the Sr Data Architect for Squire Patton Boggs, a leading provider of legal services with 47 offices in 20 countries. Eric is a 2018-2019 Idera Ace and has co-authored 2 Idera Whitepapers. He has been a presenter at PASS Summit, SQLSaturdays, the in.sight transportation conference, and the Ohio North SQL Server User's Group.
LinkedIn: https://www.linkedin.com/in/frank-lavigne/
Contact: http://www.franksworld.com
Frank La Vigne is a software engineer and UX geek turned data scientist, who saw the light about Data Science at an internal Microsoft Data Science Summit in 2016. Frank currently leads the Data and Analytics practice at Wintellect, where he helps customers leverage data science to create smarter solutions and happier customers. He co-hosts the Data Driven podcast with Andy Leonard. He has been blogging regularly at FranksWorld.com since 2004. You can find him on Twitter at @tableteer.
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/in/williamjwolf
Contact: http://www.sqlwarewolf.com
Bill is the Manager of SQL Server Performance Tuning for RDX. He works with over 400 customers on solutions within the SQL Server environment and specialized in code tuning and mentoring the team within RDX. He has become a SQL Saturday veteran speaking at nearly 40 SQL Saturdays in the last 3 years. He has also spoken at Summit and is an Idera Ace class of 2018. Bill is active in the Pittsburgh SQL Server User Group. He is also the chapter lead for the DevOps Virtual User Group. He is passionate about educating users on SQL Server and mentoring others.
LinkedIn: https://www.linkedin.com/in/thomasgrohser/
Thomas Grohser has spent most of the past 26+ years exploring the deeper inner workings of SQL Server and its features while working for entertainment, pharmaceutical, and financial services industries. His primary focus is to architect, plan, build, and operate reliable, highly available, secure, and scalable infrastructures for SQL Server. Over the years he has managed thousands of SQL Server instances, processing trillions of rows, taking up petabytes of storage. Thomas has been a Microsoft Data Platform MVP for 9 years and has spoken regularly at conferences, SQLSaturdays, and user groups for 12 years.
LinkedIn: http://www.linkedin.com/pub/rick-heiges/1/b93/777/
Contact: http://sqlblog.com/blogs/rick_heiges/default.aspx
Rick is a Former Data Platfrom MVP and Sr. Consultant for Microsoft where he focuses on working with customers on their data estate. His career includes work as a DBA, University full-time faculty member, Systems Analyst, Project Leader, and Developer. He has found his passion in working with data and the community. Rick served nine years on the PASS Board of Directors and spearheaded the popular 24 Hours of PASS event. He also started his local User Group in 2002.
Ed is a Senior DBA with more than 27 years experience in database development and administration. He enjoys high-performance and "black arts" SQL. He's a member of SQL PASS In Detroit (SPID) and a frequent poster on SQLServerCentral.com. He's passionate about SQL Server and actually enjoys it.
LinkedIn: https://www.linkedin.com/in/jeremyilfrye
Contact: https://jeremyfrye.net
Jeremy Frye is the manager of the Business Intelligence and data warehousing team at RDX. He is a Business Intelligence architect and developer with a background in database administration as well. Jeremy has over 9 years of experience in SQL Server. He has spoken on BI topics at many SQLSaturday's throughout the country, webinars, and local and remote SQL user groups. In his spare time, Jeremy often spends time trying to bridge the gap between keyboard strokes and workout reps.
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.
LinkedIn: Public Profile https://www.linkedin.com/in/petershore
Peter Shore is a seasoned IT professional with over 25 years of experience. He took the accidentally intentional DBA plunge in 2013 and has discovered that he loves to find the stories the data has to tell. Peter is comfortable working with both physical and virtual servers, where he tries to apply best practices to attain performance improvements. He is also adept at bridging the gap between technical and business language in order to bring technology solutions to business needs.
LinkedIn: http://www.linkedin.com/pub/rick-heiges/1/b93/777/
Contact: http://sqlblog.com/blogs/rick_heiges/default.aspx
Rick is a Former Data Platfrom MVP and Sr. Consultant for Microsoft where he focuses on working with customers on their data estate. His career includes work as a DBA, University full-time faculty member, Systems Analyst, Project Leader, and Developer. He has found his passion in working with data and the community. Rick served nine years on the PASS Board of Directors and spearheaded the popular 24 Hours of PASS event. He also started his local User Group in 2002.
LinkedIn: https://www.linkedin.com/in/bertwagner/
Contact: https://bertwagner.com
Bert Wagner teaches data-focused developers how to use SQL Server efficiently every week on his YouTube channel “SQL with Bert.” When not filming episodes, he gains inspiration for his content through his work as a Principal Business Intelligence Developer for Progressive Insurance in Cleveland, OH. Starting his career as an SSIS and SSRS developer, Bert fell in love with SQL Server query writing and performance tuning. Nowadays, he focuses on full stack web development and uses his database tuning skills to ensure that his applications run at peak performance.
My name is Dummea, I just moved to pittsburgh not too long ago to work for a great company. In a way you could say I was an accidental DBA who came to fall in love with the industry. I have 4-5yrs of experience and I love sharing my knowledge with others as well as learning new things.
LinkedIn: http://ca.linkedin.com/in/rimayev
Contact: http://datanrg.blogspot.ca/
Database professional with hands-on database design, data analysis, and reporting skills. I believe that I can help to make this intricate world of data to be more structured and well understood. Born in USSR; graduated and started my IT journey in Ukraine; now I work and live with my family in Toronto, Canada.
LinkedIn: ?https://www.linkedin.com/in/sayed-saeed-68079a18?
Contact: http://www.plusconsulting.com/blog/
Sayed Saeed is the Business Intelligence Practice Director at Plus Consulting. He is highly proficient in developing targeted BI solutions for clients and offers solid knowledge and experience in BI products that help organizations better leverage information to effectively manage business. He is a Microsoft Certified Solutions Expert in Business Intelligence as well as Oracle Certified Professional.
LinkedIn: https://www.linkedin.com/in/voselsky
Vladimir Oselsky (Vlady) is an IT Professional with over 15 years of experience in various IT Jobs. Born and raised in Siberia, moved to United States in late 90s. Passion for computer and programming started with DOS games and learning Borland Paschal in 8th grade as a hobby. IT career consisted of everything from hardware and software support to server administration. Current focus on SQL Server Database Development and .NET programming
LinkedIn: http://www.linkedin.com/in/mikehillwig
Contact: http://www.mikehillwig.com
Veteran DBA Mike Hillwig is a native Pittsburgher and resident of the Boston Suburbs. He’s a DBA Manager for a financial software company that’s owned by one of the world’s largest bank. Mike has been working with SQL Server since version 7 and has a background in infrastructure and network. Today, he manages a team of DBAs around the globe.
LinkedIn: https://www.linkedin.com/in/mattpgh
Contact: http://wwww.nelsonsweb.net
Matt Nelson is a Database Administrator and Business Intelligence developer for RDX (Remote DBA Experts) in Pittsburgh, PA. With over 10 years of experience, He works with more than 200 clients on general database administration needs and BI projects. Matt is also the Chapter Leader of the Pittsburgh SQL Server Users Group, and an organizer of Pittsburgh SQL Saturday. He occasionally blogs at www.nelsonsweb.net and http://www.rdx.com/Blog/
LinkedIn: https://www.linkedin.com/in/alex-grinberg-36773a6/
I have more than 20 years of IT experience. My primary focus is with the latest Microsoft technologies including .NET (VB and C#), SSRS and SSIS. I provide services in tuning, optimization, analysis and development for the creation of new applications, converting legacy technologies (SQL Server, VB.NET and C# ) and site training. I have worked for CSC, VerticalNet, IDP, LSAC , and TMNAS (to name a few) and I am currently employed with Cox Automotive. I am Apress author book "XML and JSON Recipes for SQL Server", also wrote number of articles for Simple-Talk and SQLServerCentral.com
LinkedIn: https://www.linkedin.com/in/tracyboggiano
Contact: http://databasesuperhero.com
Tracy Boggiano is a Senior Database Administrator for DocuSIgn. She has spent over 20 years in IT, using SQL Server since 1999, and is currently certified as an MCSE Data Platform. Tracy has worked on SQL Server since 6.5. She has spoken at local user groups and numerous SQLSaturdays. She is currently a co-leader of a TriPASS Local Group in Raleigh, NC. Tracy also tinkered with databases in middle school to keep her sports card collection organized. She blogs at databasesuperhero.com. Her passion outside of SQL Server is volunteering with foster children as their advocate in court through volunteerforgal.org and being a mental health advocate as part of the PAIMI NC Advisory Council.
LinkedIn: https://www.linkedin.com/in/briantbeswick
Contact: http://brianbeswick.com/
Brian is a Managing Consultant at Allegient. He has many years of experience in database architecture and development across multiple versions of SQL Server. He’s an accomplished Database Architect with a specialty in Business Intelligence. He’s particularly strong at understanding and designing solutions for complex requirements.
LinkedIn: https://www.linkedin.com/in/mattpgh
Contact: http://wwww.nelsonsweb.net
Matt Nelson is a Database Administrator and Business Intelligence developer for RDX (Remote DBA Experts) in Pittsburgh, PA. With over 10 years of experience, He works with more than 200 clients on general database administration needs and BI projects. Matt is also the Chapter Leader of the Pittsburgh SQL Server Users Group, and an organizer of Pittsburgh SQL Saturday. He occasionally blogs at www.nelsonsweb.net and http://www.rdx.com/Blog/
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: https://www.linkedin.com/in/ryanbooz/
Contact: http://www.softwareandbooz.com
Ryan is the VP of Business Intelligence CTO at EnergyCAP, Inc. where he has led both IT and development over the last 14 years. Most recently, Ryan has been spearheading a team tasked with bringing the power of BI to staff and clients through industry leading DevOps practices. His mission is to provide the confidence and freedom to explore data in new and tangible ways. Ryan is a long-time DBA, starting with MySQL and Postgres in the late 90s. He has been working with SQL Server since 2004, supporting an international client base and a thriving SaaS application that hosts thousands of users. He’s at the top of his game when he's learning something new about the data platform or teaching others about the technology he loves.
Brian Carrig is a Microsoft Certified Master of SQL Server and is currently a Senior Program Manager on the SQL Server Tiger Team at Microsoft focusing primarily on persistent memory technology and replication. In a previous life, Brian spent some time as an academic and holds a PhD in Computer Science. He is a native of Dublin, Ireland but now lives with his wife and two daughters in Redmond, Washington. If he is not talking about, thinking about or working with technology you will usually find him watching Chelsea FC.
LinkedIn: https://www.linkedin.com/in/marsha-pierce-1a020a2
Marsha Pierce lives in Nashville, TN. She studied Computer Science, Mathematics, and French at Belmont University. She has 23 years of experience as a DBA, which means she has broken and fixed a lot of stuff. Before joining Pure Storage, she was an architect at HCA and Asurion. She is passionate about DevOps, Storage, Performance Tuning, and Standardization.
LinkedIn: http://www.linkedin.com/in/samsnasr
Contact: http://samnasr.blogspot.com/
Sam Nasr has been a software developer since 1995, focusing mostly on Microsoft technologies. He’s a Sr. Software Engineer with NIS Technologies where he consults and teaches clients about the latest .Net technologies. Sam has achieved multiple certifications from Microsoft (MCSA, MCAD, MCTS, MCT), and is the leader of the Cleveland C#/VB.Net User Group since 2003. In addition, he’s the leader of the .Net Study Group, an author for Visual Studio Magazine, and a Microsoft MVP since 2013. When not coding, Sam loves spending time with his family and friends or volunteering at his local church.
With more than 51,000 posts and 39 mostly 5 star articles, Jeff Moden is a strong contributor on SQLServerCentral.com where he coined the term “RBAR” (Row By Agonizing Row) and helped make the "Tally Table" a household name. Jeff has more than 2 decades of experience with SQL Server and is mostly self-trained in what he calls the “Black Arts” of T-SQL. He’s known worldwide for his informative articles, high performance T-SQL coding methods, and methods of mentoring. His dedication to helping others earned him the MS SQL Server MVP award for nine years and the RedGate Exceptional DBA Award in 2011. His mantra is "Performance is in the code".
LinkedIn: https://www.linkedin.com/in/mike-hays-21097419
Contact: http://www.thesqlreport.com/
Mike has been working with Microsoft SQL Server for the last twenty years. Currently working as a Database Administrator for a diversified energy company, he has also worked in the retail, manufacturing, banking sectors. He holds a Master’s degree in Computer Information Science from Cleveland State University.
LinkedIn: https://www.linkedin.com/in/steve-grier-59518b2b/
Steve is an Associate Architect at Computer Enterprises, Inc. (CEI) in Pittsburgh (www.ceiamerica.com). He focuses on database systems and custom integration for enterprise scale solutions. At CEI, Steve is responsible for team mentoring and knowledge sharing for the Microsoft SQL Server platform for both on premise and cloud solutions. Steve has over 10 years experience, and has successfully delivered solutions across a number of industry verticals.
LinkedIn: https://www.linkedin.com/in/andrzej-pilacik-536a564?trk=hp-identity-name
Database Manger / Solution Architect at BraceBridge Capital 15 years of experience in Database Platforms, SQL Server 7.0 - 2019, PostgreSQL, Redis, Oracle Microsoft Certified Professional - SQL Server Working with large data in Healthcare, Insurance, and Financial Sectors Architecting HA/DR solutions Developing frameworks around DEVOPS Working with DW, SSIS, SSRS
LinkedIn: http://linkedin.com/in/tradney
Contact: http://www.timradney.com
Tim is a Data Platform MVP and has a whole collection of Microsoft and other industry certifications. His experience includes HA/DR, virtualization, SSIS, SSRS, and performance tuning, among everything else SQL Server-related. Tim is very active and passionate in the SQL Community. He runs the Columbus GA SQL Users Group, has been a PASS Regional Mentor for a number of years, was named a PASS Outstanding Volunteer in 2012, and is a frequent speaker at user groups, SQL Saturdays and PASS Summits. Tim is one of the top ranked in karma on ask.sqlservercentral.com, answers questions as @tradney on Twitter, and blogs at http://timradney.com and SQLskills blog at http://www.SQLskills.com/blogs/tim.
LinkedIn: https://www.linkedin.com/in/danielmallott/
Contact: https://www.danielmallott.com
Dan Mallott is a Chicago-based consultant for West Monroe Partners in their Technology Practice. His passion is for service-layer development, particularly database technologies, including Microsoft SQL Server and Apache Cassandra. Recent projects have included designing a new integration architecture for a mid-sized health insurer, designing a full technical architecture for a large health insurer, building a new member portal for a healthcare-related association, and developing threat hunting software for use by West Monroe. In his spare time, Dan can be found writing his own libraries instead of using package solutions, or on the ice as a hockey player and referee.
LinkedIn: https://www.linkedin.com/in/ned-otter-3627b712
Contact: http://www.nedotter.com
DBA with vast experience administering Microsoft SQL Server since version 4.21 to the present. Certifications: MCSE SQL Server 2012 Data Platform MCTS SQL Server 2008 Overall computer experience: 25 years SQL Server experience: 23 years Currently obsessed with In-Memory technology. Please see LinkedIn profile for more details.
LinkedIn: https://www.linkedin.com/pub/chiu-yuen-chan/b/a67/b07
I work with SQL Server since 2001 with version 7.
Contact: http://www.sqlflipflopsdba.com
Jim is a Premier Field Engineer for Microsoft in the Data/AI space. He lives in Pittsburgh in a small suburb. He loves working with all things Azure(ARM templates, DBaaS, SQL on IaaS). He is an avid collector of retro video games! He is a member of the Idera ACE program for 2018.
LinkedIn: https://www.linkedin.com/pub/slava-murygin/9/b95/858
Contact: http://slavasql.blogspot.com/
Started working with SQL Server 7.0 as DBA and Developer. Since then went through all SQL Server versions, migrations and multiple companies of different sizes and industries. Currently working as a contractor with all aspects of SQL Server, including, but not limited to: troubleshooting performance, designing/developing: databases, systems, processes, data warehouses, cubes, reports, ETLs; Refactoring old code; Migrating data from other systems to SQL Server; Securing the data on enterprise level.
Contact: http://www.sqlflipflopsdba.com
Jim is a Premier Field Engineer for Microsoft in the Data/AI space. He lives in Pittsburgh in a small suburb. He loves working with all things Azure(ARM templates, DBaaS, SQL on IaaS). He is an avid collector of retro video games! He is a member of the Idera ACE program for 2018.
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/mikehillwig
Contact: http://www.mikehillwig.com
Veteran DBA Mike Hillwig is a native Pittsburgher and resident of the Boston Suburbs. He’s a DBA Manager for a financial software company that’s owned by one of the world’s largest bank. Mike has been working with SQL Server since version 7 and has a background in infrastructure and network. Today, he manages a team of DBAs around the globe.
LinkedIn: https://www.linkedin.com/in/michael-john-3403b45/
With 20 years experience in all aspects of development and administration of SQL Server, from version 6.5 to 2016, I have seen, broken, and fixed just about everything in SQL Server!
LinkedIn: http://www.linkedin.com/in/stevehoodsql
Contact: http://simplesqlserver.com
I#39;m a DBA who has gone through most of my career with few people to learn and unsure of where to find great help until I found a real mentor. When I started at a company with a great, knowledgeable manager and learned to find others speaking about SQL Server online my skills boomed. This is especially true in my most passionate area, SQL Server performance. Knowing that my knowledge came from others, I now have a second passion of sharing my knowledge with others.
LinkedIn: https://www.linkedin.com/in/mattpgh
Contact: http://wwww.nelsonsweb.net
Matt Nelson is a Database Administrator and Business Intelligence developer for RDX (Remote DBA Experts) in Pittsburgh, PA. With over 10 years of experience, He works with more than 200 clients on general database administration needs and BI projects. Matt is also the Chapter Leader of the Pittsburgh SQL Server Users Group, and an organizer of Pittsburgh SQL Saturday. He occasionally blogs at www.nelsonsweb.net and http://www.rdx.com/Blog/
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: http://www.linkedin.com/in/pittfurg
Contact: http://www.port1433.com
Drew Furgiuele is a senior DBA that lives in Dublin, Ohio who is passionate about SQL Server and PowerShell. He's been working with SQL Server since 2002. When he’s not accidentally dropping tables in production, he likes writing automation scripts, blogging about SQL Server Replication, wiring electronics, playing board games, and spending time with his dog. He's also not embarrassed by his Spotify playlists.
The following is a list of sponsors that helped fund the event.


Your reward for persevering through two dozen chapters on J is to be shown the direct equivalent of if/then/else, for, and while. I have waited until I am sure you realize that you don't need them, and will choose them not because you see no other way to solve a problem, but because you think they are the best way.
if., while., and the rest are classified as control words in J. Their part of speech is 'punctuation', like a parenthesis or LF character. They are allowed only inside explicit definitions, that is to say inside right operands of the : conjunction. If you want to use them from the keyboard or in a script, you must define a verb/adverb/conjunction and then execute it. A control word ends any sentence to its left, as if the control word started with an end-of-line character. We will cover only a few important control sequences here; to find the rest, bring up the J Vocabulary by pressing F1 and click on Controls which is hidden in plain view next to the heading "Vocabulary".
for./do./end. and for_x./do./end.
The allowed forms are:
for. T-block do. block end.
for_x. T-block do. block end.
The T-block is evaluated and its result A (that is, the result of the last sentence in the T-block) is saved. block is executed once for each item (item, not atom) of A . If you use the handy for_x. form (where x represents any valid name of your choice), the private variables x and x_index are created, and every time block is executed, x_index is assigned the index of an item of A and x is assigned x_index { A .
The break. and continue. control words do what you would expect.
while./do./end. and whilst./do./end.
The allowed forms are:
while. T-block do. block end.
whilst. T-block do. block end.
while. corresponds to while and whilst. corresponds to do while. The 'st' in whilst. stands for 'skip test' (the first time through), so you get one free pass through the loop, just as with do while.
The break. and continue. control words do what you would expect.
if./do./else./end., if./do./elseif./do./end.
The allowed forms (with optional components underlined) are:
if. T-block do. block else. block end.
if. T-block do. block elseif. T-block do. block... end.
The flow of control is as you would expect. T-blocks and blocks are both sequences of zero or more J sentences. The result of the last sentence in a T-block provides the result of the T-block . The result of a T-block tests true if its first atom is nonzero, or if it is empty, or if the T-block was empty. The flow of control is as you would expect based on the tests. The sequence elseif. T-block do. block may be repeated as often as desired, but you will be surprised to learn that once you code an elseif. you are not allowed to use else. in the same control structure: no loss, since an empty T-block tests true, and you can just code elseif. do. for the last block.
My antipathy for for. and while. has scarcely been concealed, but I harbor no ill will toward if. . As long as you don't apply it in a loop, if. makes the structure of code obvious and you may use it without remorse. Examples are legion; the form
if. # name =. sentence to create an array do.
code to
process name, which is now known to have items
end.
is the most common in my code, used to guarantee that a block of code is executed only when a certain noun has a nonzero number of items.
When we first learned about verb definitions we said that the result of a verb was the result of the last sentence executed. Now we must emend that statement: the result is the last sentence that is not part of a T-block.
try./catch./catcht./end. and throw.
The simplest form (see the Dictionary for others) is:
try. block1 catch. block2 end.
try./catch./end. is the control-structure equivalent of u ::v . block2 is executed only if there was an error during the execution of block1 .
If you want to signal an error, execute the foreign 13!:8 y where y is the error number you want to signal. You can use this in a try. block to transfer execution to the corresponding catch. block.
throw. aborts the explicit definition that is running, and looks in higher-level explicit definitions for a catcht. block to execute. If the previously-running explicit definition was executing in block1 of a try. block that contains a catcht., execution resumes with that catcht. block; otherwise, that explicit definition is also aborted, and the search continues in the next-most-recent explicit definition. If this search does not find a catcht. block to execute, the entire executing sentence is aborted, producing no result.
select./case./fcase./end.
The form is:
select. T-block0 case. T-block1
do. block1... end.
T-block0 is evaluated; then the T-blocks of the case. control words are evaluated sequentially until one is found that matches the result of T-block0; the following block is then executed, after which control passes to the sentence following the end. .
fcase. is like case. except that after the block of an fcase. is executed, control passes to the next block rather than to the sentence following the end. .
A T-blockn matches the result of T-block0 if the result of T-block0 is an element of the result of the T-blockn. So, a T-blockn could be 2;3;5 and any of those three values would match it. Before this check is made, each side of the comparison is boxed if it is not boxed already. An empty T-blockn matches anything.
return. ends execution of the definition that is running. The result of the last sentence not in a T-block is the result. Example:
if. T-block do. return-value return. end.
assert. sentence
assert. fails with an assertion failure error if the result of executing the sentence contains any atoms that are not equal to 1. Note that there is no end. corresponding to the assert., so there may be only a single sentence rather than a T-block.


Sydney’s air quality worst in the world due to bushfires
A hazardous smoke haze blanketing Sydney has dragged our air quality well below that of world pollution capitals Beijing and Jakarta. Health authorities have a stern warning for asthma sufferers.
Health authorities have urged asthma sufferers across Sydney to stay inside as a thick blanket of bushfire smoke settles across the region.
Sydney’s air quality on Tuesday is among the lowest in the world – with NSW Environment’s air quality measurements reading 2334 at around 9am in Sydney’s North-West - almost 20 times worse than Jakarta and Beijing.
The reading makes the city’s air quality the worst in the world and twice as bad as Kolkata’s which today sits at 999, according to the real-time Air Quality Index.
With safe levels sitting at between 34-66, residents are being urged to take care.
Jakarta’s notoriously polluted air today measures at 119 while Beijing’s measures at 155.
The thick haze, blown in from a fire raging at Wollemi National Park, could be smelt and seen Sydney-wide on Tuesday morning.
Sydney’s east, northwest slopes and parts of the southwest are choking through hazardous levels while other parts of the state are struggling through very poor and poor ratings.
The level of PM2.5 and PM10 particles sits at 2334 particulates per cubic metre of air in Sydney’s North-West, 540 in Sydney’s East and 641 in the Central Coast.
The particles can trigger breathing problems in people with asthma, emphysema and angina.
Those with respiratory or heart conditions are being urged to stay indoors with windows closed, use reliever medication where necessary, avoid vigorous exercise and cover their nose and mouth with a mask.
Asthmatics aren’t the only ones to struggle through the haze, with the particles causing sore eyes, nose and throat for others.
Symptoms can last for several days.
Anyone with asthma or a lung condition who develops symptoms such as shortness of breath, coughing or wheezing is urged to follow their asthma action plan.
Gabriele Branescu, duty forecaster at the Bureau of Metereology, says the haze will persist through to the afternoon when it should subside before picking up again on Wednesday.


This is the simpliest way to embed a Leaflet map on our application. We only have to add leaflet-directive to our AngularJS application dependencies, and use our custom tag <leaflet> on the HTML code. Easy as pie.
You can see a standalone example of this code here.


Fall 2010, Weeks 6-10
11:00-13:00 on Wednesdays in QB 1.59
Instructor: John Lees-Miller
| Item | Weight |
|---|---|
| deliverable in week 7 | 5% |
| deliverable in week 8 | 5% |
| final presentation | 30% |
| final report: group component | 40% |
| final report: individual component | 20% |
Please use this installer (20MB). You can use the zip file above on your home machine, but this installer sets up shortcuts and file associations. Note that the simulator only runs on Windows, at present.
This tutorial is a good reference on how to use the simulator.
You will need a map of the area, and you will have to know the scale of the map image, in meters per pixel. (Hint: A screenshot from Google Earth or Google Maps is good, and Google Earth has a tool for measuring distances.)
You will need to identify the major demand generators in the area. (Hint: Google Earth and Google Maps label most major facilities and land marks.)
Your site can be anywhere, but keep in mind that you have to estimate what the potential passenger demand will be. For ideas, you can go to http://www.ultraprt.com/applications but please do not use a site that has already been studied by someone else.
Alternatively, you can work from a greenfield (undeveloped) site, and develop your site around your PRT system, rather than trying to fit the system into an existing site. Keep in mind, however, that designing both the site and the PRT system will require more work. If your group wants to do this, please discuss with me before the end of week 6.
Also note that your service area must not exceed 5km by 5km, due to limitations of the simulator.
Now you are ready to place stations near your site's demand generators. Exactly how many stations you place and where you place them depends on your estimates for the demand between pairs of stations. For this project, you will have to make several (educated) guesses at what the demand will be.
When deciding where to place stations, you should be thinking about the following guidelines.
To represent the passenger demand, you will create one demand scenario per group member. Each scenario describes the passenger demand at a particular time. For example, a large urban system might have an AM peak during morning rush hour, in which most of the demand is from the outskirts to the center. The evening rush hour is the PM peak demand. Outside of peak times, the passenger flows are typically smaller and more balanced; that is, the average flow into each region tends to equal the average flow out. Other scenarios might come from special events, for example at a stadium or convention centre. Each scenario will suggest different system optimisations.
The data required to define a scenario are the in flow and out flow of vehicles at every station. As mentioned above, the total flow (in plus out) for each station must be less than 300 vehicles per hour. Also, the sum of all the in flows must equal the sum of all the out flows for each scenario; these sums are written Ti in the table below. Your scenarios must include one balanced flow scenario, in which the flow in and out of each station is (roughly) equal. The others should represent peaks with different spatial distribution and intensity. The total flow (Ti) for the whole system must be at least 700 vehicle trips per hour for the balanced scenario and at least 1300 trips per hour for the peak scenarios.
Note that the simulator needs to know the demand in vehicles per hour; the average vehicle occupancy relates this to passengers per hour. To help calibrate your numbers, a reasonable guess at vehicle occupancy is 1.2 passengers per vehicle, but it will be higher for some sites, for example if there are many couples or families using the system. Different scenarios may also have different vehicle occupancies.
Finally, for each scenario you will have to estimate how many hours per day (or per week) each scenario will occur. We will assume here that the actual demand will always be like one of the scenarios. This allows us to estimate the system's annual patronage, which will be important in subsequent sections.
You may want to organize these data in a table like the following (it would be a good idea to use a spreadsheet).
| Vehicle Flows (vehicles/hour) | ||||||
|---|---|---|---|---|---|---|
| Scenario: | Balanced | AM Peak | PM Peak | |||
| Station | In | Out | In | Out | In | Out |
| Park Plaza East | 80 | 80 | 50 | 250 | 200 | 80 |
| Park Plaza West | 80 | 80 | 50 | 150 | 200 | 30 |
| ... | ... | ... | ... | ... | ... | ... |
| Total In/Out | T1 | T1 | T2 | T2 | T3 | T3 |
| Total Hourly Flow | T1 | T2 | T3 | |||
| Hours / Day | ... | ... | ... | |||
| Total Daily Vehicle Flow | ... | |||||
| Vehicle Occupancy | 1.2 passengers / vehicle | |||||
| Total Passengers / Day | ... | |||||
| Total Passengers / Year | ... |
The next step is to run a gravity model to turn each scenario into an origin-destination demand matrix (OD matrix) that you can use with the simulator. The OD matrix specifies the average number of vehicle trips per hour between each pair of stations. The simulator uses this matrix to to generate passengers randomly according to a Poisson process.
The equations for the gravity model and an algorithm for running it will be described in class. Use the straight-line distances between stations as "costs." (Note: the version of the sim that you downloaded in the first week did not report straight-line distances in the output; the latest version does.) The suggested dispersion factor is 0.5. You are free to tweak this factor, or to edit the resulting OD matrix directly, if you wish, provided that the resulting matrix still satisfies the constraints on total flow at stations and for the system as a whole. You can implement the algorithm however you like; it's possible to do it in MATLAB or in Excel (hint: use the solver add-in).
Now you are ready to connect the stations with guideways. We'll do this in three stages.
For (a), you will have to show me the simulation in class in week 8. For (b), each group member must write an appendix to the final report that documents the optimisation process for his/her scenario.
Your objective is to minimize the sum of system costs and user costs, according to the following cost estimates.
| Capital Costs | £ |
|---|---|
| 1 vehicle | 50k |
| 1 station | 0.5M |
| 1 depot | 0.4M |
| 1 km at-grade guideway | 1M |
| 1 km elevated guideway | 2.5M |
| other | +50% |
| Operating Costs | £ |
| 1 passenger km | 0.15 |
| User Costs | £ |
| 1 minute passenger travel time | 0.1 |
| 1 minute passenger waiting time | 0.2 |
Some of the costing inputs you can read directly from the network, but the number of vehicles and the mean passenger waiting time must be estimated by simulation. You should run 5 simulations and average the results, in order to get reliable numbers.
The simulator output includes the total track length, but the simulator does not know anything about grades. For costing, you should estimate roughly what percentage of your track is at-grade. Do not worry about getting this exactly right, because all of the costs are rough; just try to estimate to within 10% or so.
Once you have computed the base capital costs (vehicles, stations, depots and guideway), add 50% to cover related expenses, such as central control software and hardware, and a contingency.
The system operating costs are given as a rough total cost per passenger kilometer. The simulator output includes the 'mean demand-weighted passenger trip distance,' which you can use to compute the operating cost per passenger trip. To scale this up to an annual operating cost, you will use the passenger trips / year figure from task 2. (Note that when you are optimising for a single scenario, multiplication by the total passengers per year effectively assumes that the demand is always like this scenario; this is not really true, but it is good enough for our purposes here.)
You can approach the user costs similarly; here the relevant simulator outputs are the 'mean demand-weighted passenger trip time' and the mean passenger waiting time. The user costs are based on a standard value of time calculation.
These costs are rough estimates. The main point is that there are trade-offs between capital costs, operating costs and user costs. For example, you can build more guideway to reduce travel times, which increases your capital cost but decreases your operating and user costs.
Operating and user costs occur over time, so you should use present values to weigh them against capital costs. Assume the standard public works discount rate of 6% per year, and discount over 30 years.
These costs give you a way of evaluating networks objectively. However, you should be mindful of externalities. For example, this does not include a cost for visual intrusion in culturally sensitive areas. It also does not account for changes in pedestrian flows; areas that were once quiet could become busy, and vice versa. You may reject a design that is "optimal" by cost but undesirable for other reasons.
I strongly recommend that you create a spreadsheet to keep track of the cost calculations.
Once each member of your group has optimised your initial network for one scenario, you will apply what you've learned to design a network that works for all of them.
To evaluate your final network, use a composite cost that describes its combined performance on all of the demand scenarios. The capital costs apply to all scenarios equally, but the operating and user costs depend on the demand. So, you should evaluate your final network on each scenario and record the trip distance, trip time and passenger waiting time for each one. Then you should weight these by how frequently each scenario occurs (as estimated in task 2) and apply the cost model. (Also note that the number of vehicles you need is the largest number needed in any single scenario.)
You should do several iterations to improve the composite cost. Again, be mindful of externalities.
Note: The simulator will only let you enter one OD matrix at a time, but you can copy and paste OD matrices to/from the sim. The best way to do this is to copy the matrix from one simulation into Excel, delete the last row and the last column (the totals), and then paste it into another simulation.
To measure the user benefits that could come from building a PRT system, one must compare user costs with PRT to user costs with existing modes. Here we will compare PRT with a very simplistic model of a bus system. Assume that users wait an average of 5 minutes for the bus, and that the average travel time by bus is the time taken to travel the straight-line distance from origin to destination at 12km/h. (Note: the version of the sim that you downloaded in the first week did not report straight-line distances in the output; the latest version does.) Use the travel and waiting time savings (or not) with the cost table to compute user benefits and system costs.
See section 2 in the final report.
Pick two stations that are interesting or challenging, for example due to large size or passenger volumes, culturally sensitive surroundings or an architecturally interesting setting (e.g. integrated into a building), and produce a conceptual design for each one.
You should produce a plan view of the station, keeping the following questions in mind.
The "vehicle side" of the station should be consistent with these design guidelines; see also this overview. The 3D design template (in SketchUp) is particularly helpful. You should consider where the main line and the on- and off-ramps will go.
Note: hand-drawn sketches are fine.
Bonus: Construct an architectural rendering (e.g. in SketchUp) of the station. You can use the 3D design template in the guidelines to get started.
See section 3 in the final report.
Each group's presentation will last around 10 minutes with a few minutes for questions. Your presentation should cover essentially the same content as the main body of the final report (sections 1-3), with a focus on the visual and qualitative aspects of your design. Every group member must participate in the presentation.
Each group should submit a report as described below. The main body of the report (sections 1-3) is limited to 5000 words on 20 pages. In addition, each group member should submit an appendix (see below) of up to 600 words on 6 pages. Note that these are word and page maxima: you should aim to be concise (and use lots of pictures!).
In addition to the written report, please submit the following ATS/CityMobil (.atscm) simulation files.
To submit: either upload the document and supporting sim files to fluff and send me the link, or drop them in the appropriate box in the Queen's School Office.
The report will be marked according to the following five equally weighted criteria.
For each of the two stations:
Your appendix should describe the process that you (individually) went through to optimise the system for your scenario. In particular, you should provide a record of three iterations; for each one, you should include


Overview
Full table of contents. For a high level overview of all documentation, see SQLAlchemy Documentation.


Please download and read the following disclosure documents about the forex and CFD margin trading. It is important that you understand the nature of the product and know your rights and obligations trading forex and CFD transactions.
By applying for a Ruizean Markets trading account, clients agree that they have read and understood the following documents and agree to the terms and conditions contained in the files.
<{foreach from=$list item=item}>
<{$item.title}>
<{$item.subTitle}>
<{/foreach}>


The goal of this project was to build a decision tree algorithm that predicts the toxicity of organic molecules and provides an alternative to animal testing in toxicity assessment. In the decision tree I developed, the tree nodes were several molecule properties computed using functions in RDKit (Python library for Cheminformatics).


For Reservation Call to:
+91<PHONE_NUMBER>*
Opening hours : 9am - 8pm
88/5 Moo 7, Rachathewa, Bangplee


Write a function that returns a generator. Use the yield statement. This function should have the following function prototype:
filter_and_transform(content, test_fn, transform=None)
This generator should process each item in a list as follows:
What you will learn:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <expat.h>
#include <unistd.h>
#include <assert.h>
#include <ctype.h>
#include <sys/stat.h>
#include <curl/curl.h>
#include <curl/easy.h>
#include "votParseP.h"
#include "votParse.h"
Defines | |
| #define | _GNU_SOURCE |
| #define | BUFSIZE 4096 |
Functions | |
| char * | strcasestr () |
| handle_t | vot_openVOTABLE (char *arg) |
| Parse a VOTable and return a handle to it. | |
| void | vot_closeVOTABLE (handle_t vot) |
| Destroy the root node and all of it's children. | |
| handle_t | vot_getRESOURCE (handle_t handle) |
| Gets the RESOURCE node from the parent handle. | |
| handle_t | vot_getTABLE (handle_t handle) |
| Gets the TABLE node from the parent handle. | |
| handle_t | vot_getFIELD (handle_t handle) |
| Gets the FIELD node from the parent handle. | |
| handle_t | vot_getDATA (handle_t handle) |
| Gets the DATA node from the parent handle. | |
| handle_t | vot_getTABLEDATA (handle_t handle) |
| Gets the TABLEDATA node from the parent handle. | |
| handle_t | vot_getTR (handle_t handle) |
| Gets the TR node from the parent handle. | |
| handle_t | vot_getTD (handle_t handle) |
| Gets the TD node from the parent handle. | |
| handle_t | vot_getBINARY (handle_t handle) |
| Gets the BINARY node from the parent handle. | |
| handle_t | vot_getBINARY2 (handle_t handle) |
| Gets the BINARY2 node from the parent handle. | |
| handle_t | vot_getFITS (handle_t handle) |
| Gets the FITS node from the parent handle. | |
| handle_t | vot_getGROUP (handle_t handle) |
| Gets the GROUP node from the parent handle. | |
| handle_t | vot_getFIELDRef (handle_t handle) |
| Gets the FIELDref node from the parent handle. | |
| handle_t | vot_getPARAMRef (handle_t handle) |
| Gets the PARAMRef node from the parent handle. | |
| handle_t | vot_getDESCRIPTION (handle_t handle) |
| Gets the DESCRIPTION node from the parent handle. | |
| handle_t | vot_getPARAM (handle_t handle) |
| Gets the PARAM node from the parent handle. | |
| handle_t | vot_getINFO (handle_t handle) |
| Gets the INFO node from the parent handle. | |
| handle_t | vot_getSTREAM (handle_t handle) |
| Gets the STREAM node from the parent handle. | |
| handle_t | vot_getVALUES (handle_t handle) |
| Gets the VALUES node from the parent handle. | |
| handle_t | vot_getMIN (handle_t handle) |
| Gets the MIN node from the parent handle. | |
| handle_t | vot_getMAX (handle_t handle) |
| Gets the MAX node from the parent handle. | |
| handle_t | vot_getOPTION (handle_t handle) |
| Gets the OPTION node from the parent handle. | |
| handle_t | vot_getLINK (handle_t handle) |
| Gets the LINK node from the parent handle. | |
| handle_t | vot_getCOOSYS (handle_t handle) |
| Gets the COOSYS node from the parent handle. | |
| int | vot_getDATAType (handle_t data_h) |
| Returns the type of the DATA element. | |
| char * | vot_getDATATypeString (handle_t data_h) |
| Returns the type of the DATA element as a string. | |
| handle_t | vot_newRESOURCE (handle_t parent_h) |
| Create new RESOURCE node under the parent handle. | |
| handle_t | vot_newTABLE (handle_t parent_h) |
| Create new TABLE node under the parent handle. | |
| handle_t | vot_newFIELD (handle_t parent_h) |
| Create new FIELD node under the parent handle. | |
| handle_t | vot_newDATA (handle_t parent_h) |
| Create new DATA node under the parent handle. | |
| handle_t | vot_newTABLEDATA (handle_t parent_h) |
| Create new TABLEDATA node under the parent handle. | |
| handle_t | vot_newTR (handle_t parent_h) |
| Create new TR node under the parent handle. | |
| handle_t | vot_newTD (handle_t parent_h) |
| Create new TD node under the parent handle. | |
| handle_t | vot_newBINARY (handle_t parent_h) |
| Create new BINARY node under the parent handle. | |
| handle_t | vot_newBINARY2 (handle_t parent_h) |
| Create new BINARY2 node under the parent handle. | |
| handle_t | vot_newFITS (handle_t parent_h) |
| Create new FITS node under the parent handle. | |
| handle_t | vot_newGROUP (handle_t parent_h) |
| Create new GROUP node under the parent handle. | |
| handle_t | vot_newFIELDRef (handle_t parent_h) |
| Create new FIELDref node under the parent handle. | |
| handle_t | vot_newPARAMRef (handle_t parent_h) |
| Create new PARAMRef node under the parent handle. | |
| handle_t | vot_newDESCRIPTION (handle_t parent_h) |
| Create new DESCRIPTION node under the parent handle. | |
| handle_t | vot_newPARAM (handle_t parent_h) |
| Create new PARAM node under the parent handle. | |
| handle_t | vot_newINFO (handle_t parent_h) |
| Create new INFO node under the parent handle. | |
| handle_t | vot_newSTREAM (handle_t parent_h) |
| Create new STREAM node under the parent handle. | |
| handle_t | vot_newVALUES (handle_t parent_h) |
| Create new VALUES node under the parent handle. | |
| handle_t | vot_newMIN (handle_t parent_h) |
| Create new MIN node under the parent handle. | |
| handle_t | vot_newMAX (handle_t parent_h) |
| Create new MAX node under the parent handle. | |
| handle_t | vot_newOPTION (handle_t parent_h) |
| Create new OPTION node under the parent handle. | |
| handle_t | vot_newLINK (handle_t parent_h) |
| Create new LINK node under the parent handle. | |
| handle_t | vot_newCOOSYS (handle_t parent_h) |
| Create new COOSYS node under the parent handle. | |
| handle_t | vot_newNode (handle_t parent, int type) |
| Creates a new blank unlinked node. | |
| void | vot_attachNode (handle_t parent, handle_t new) |
| Adds a node as a child of parent. | |
| void | vot_freeNode (handle_t node) |
| Destroys the node and all of it's children. | |
| void | vot_deleteNode (handle_t element) |
| Destroys the node and all of it's children. | |
| handle_t | vot_copyElement (handle_t src_h, handle_t parent_h) |
| Adds a node as a child of parent. | |
| int | vot_getNCols (handle_t tdata_h) |
| Return the nuber of columns in the table structure. | |
| int | vot_getNRows (handle_t tdata_h) |
| Return the nuber of columns in the table structure. | |
| char * | vot_getTableCell (handle_t tdata_h, int row, int col) |
| Return the nuber of columns in the structure. | |
| int | vot_tableCompare (const void *row1, const void *row2) |
| int | vot_sortTable (handle_t tdata_h, int col, int strsort, int order) |
| int | vot_getLength (handle_t elem_h) |
| Return the number of sibling Elements of the same type. | |
| int | vot_getNumberOf (handle_t elem_h, int type) |
| Return the number of sibling Elements of the type. | |
| int | vot_colByAttr (int tab, char *attr, char *name, char *alt) |
| int | vot_colByName (int tab, char *name, char *alt) |
| int | vot_colByUCD (int tab, char *name, char *alt) |
| int | vot_colByID (int tab, char *name, char *alt) |
| handle_t | vot_findByAttr (handle_t parent, char *name, char *value) |
| Get a handle to an Element with the requested attribute. | |
| handle_t * | vot_findInGroup (handle_t group, int type) |
| Return a handle array of the requested Element type. | |
| handle_t | vot_getNext (handle_t elem_h) |
| Return a handle_t of the next Element of the same type. | |
| handle_t | vot_getSibling (handle_t elem_h) |
| Return a handle_t of the next Element. | |
| handle_t | vot_getChild (handle_t elem_h) |
| Return a handle_t of the child Element. | |
| handle_t | vot_getParent (handle_t elem_h) |
| Return the handle of the parent Element. | |
| handle_t | vot_getChildOfType (handle_t elem_h, int type) |
| Get the handle of the next Element of the same type. | |
| int | vot_valueOf (handle_t elem_h) |
| Return type of the Element. | |
| int | vot_typeOf (handle_t elem_h) |
| Return type of the Element. | |
| int | vot_setValue (handle_t elem_h, char *value) |
| Set the Value for the ELEMENT. | |
| char * | vot_getValue (handle_t elem_h) |
| Get the Value for the ELEMENT. | |
| int | vot_setAttr (handle_t elem_h, char *attr, char *value) |
| Set the attribute for the Element. | |
| char * | vot_getAttr (handle_t elem_h, char *attr) |
| Return the attribute for the Element. | |
| void | vot_writeVOTable (handle_t node, char *fname, int indent) |
| Write the VOTable to the file descriptor. | |
| void | vot_writeHTML (handle_t node, char *ifname, char *ofname) |
| Write the VOTable to the file descriptor as HTML. | |
| void | vot_writeSHTML (handle_t node, char *ifname, char *ofname) |
| Write the VOTable to the file descriptor as an HTML table. | |
| void | vot_writeFITS (handle_t node, char *fname) |
| Write the VOTable to the file descriptor as an FITS table. | |
| void | vot_writeDelimited (handle_t vot, char *fname, char delim, int hdr) |
| void | vot_writeASV (handle_t node, char *fname, int header) |
| Write the VOTable to the file descriptor as a ASV file. | |
| void | vot_writeBSV (handle_t node, char *fname, int header) |
| Write the VOTable to the file descriptor as a BSV file. | |
| void | vot_writeCSV (handle_t node, char *fname, int header) |
| Write the VOTable to the file descriptor as a CSV file. | |
| void | vot_writeTSV (handle_t node, char *fname, int header) |
| Write the VOTable to the file descriptor as a TSV file. | |
| void | vot_setWarnings (int value) |
| Set the warning level. | |
| void | votEmsg (char *msg) |
Variables | |
| Stack * | element_stack = NULL |
| Element * | vot_struct = NULL |
| char * | votELevel = "" |
| int | votWarn = 0 |
| struct { | |
| int type | |
| int parents | |
| int children | |
| } | elemParents [] |
VOTPARSE.C -- Public interface procedures for the libVOTable parser.
| vot_attachNode | ( | handle_t | parent, | |
| handle_t | new | |||
| ) |
| vot_closeVOTABLE | ( | handle_t | vot | ) |
Destroy the root node and all of it's children.
vot_closeVOTABLE -- Destroy the root node and all of it's children.
| vot | A handle to the Element that you want deleted |
| handle_t vot_copyElement | ( | handle_t | src_h, | |
| handle_t | parent_h | |||
| ) |
Adds a node as a child of parent.
vot_copyElement -- Adds a node as a child of parent.
| src_h | A handle to the Element to copy | |
| parent_h | A handle to the Elements parent |
| vot_deleteNode | ( | handle_t | element | ) |
Destroys the node and all of it's children.
vot_deleteNode -- Destroys the node and all of it's children.
| element | A handle to the Element that you want deleted |
| handle_t vot_findByAttr | ( | handle_t | parent, | |
| char * | name, | |||
| char * | value | |||
| ) |
| handle_t * vot_findInGroup | ( | handle_t | group, | |
| int | type | |||
| ) |
| vot_freeNode | ( | handle_t | node | ) |
Destroys the node and all of it's children.
vot_freeNode -- Destroys the node and all of it's children.
| node | A handle to the Element that you want deleted |
| char * vot_getAttr | ( | handle_t | elem_h, | |
| char * | attr | |||
| ) |
| handle_t vot_getBINARY | ( | handle_t | handle | ) |
Gets the BINARY node from the parent handle.
vot_getBINARY -- Gets the BINARY node from the parent handle
| handle | Parent handle containing a BINARY |
| handle_t vot_getBINARY2 | ( | handle_t | handle | ) |
Gets the BINARY2 node from the parent handle.
vot_getBINARY2 -- Gets the BINARY2 node from the parent handle
| handle | Parent handle containing a BINARY2 |
| handle_t vot_getChild | ( | handle_t | elem_h | ) |
| handle_t vot_getChildOfType | ( | handle_t | elem_h, | |
| int | type | |||
| ) |
| handle_t vot_getCOOSYS | ( | handle_t | handle | ) |
Gets the COOSYS node from the parent handle.
vot_getCOOSYS -- Gets the COOSYS node from the parent handle
| handle | Parent handle containing a COOSYS |
| handle_t vot_getDATA | ( | handle_t | handle | ) |
Gets the DATA node from the parent handle.
vot_getDATA -- Gets the DATA node from the parent handle
| handle | Parent handle containing a DATA |
| char * vot_getDATAType | ( | handle_t | data_h | ) |
Returns the type of the DATA element.
vot_getDATAType -- Returns the type of the DATA element.
| data_h | A handle_t to a DATA |
| char * vot_getDATATypeString | ( | handle_t | data_h | ) |
Returns the type of the DATA element as a string.
vot_getDATATypeString -- Returns the type of the DATA element as a string.
| data_h | A handle_t to a DATA |
| handle_t vot_getDESCRIPTION | ( | handle_t | handle | ) |
Gets the DESCRIPTION node from the parent handle.
vot_getDESCRIPTION -- Gets the DESCRIPTION node from the parent handle
| handle | Parent handle containing a DESCRIPTION |
| handle_t vot_getFIELD | ( | handle_t | handle | ) |
Gets the FIELD node from the parent handle.
vot_getFIELD -- Gets the FIELD node from the parent handle
| handle | Parent handle containing a FIELD |
| handle_t vot_getFIELDRef | ( | handle_t | handle | ) |
Gets the FIELDref node from the parent handle.
vot_getFIELDref -- Gets the FIELDref node from the parent handle
| handle | Parent handle containing a FIELDref |
| handle_t vot_getFITS | ( | handle_t | handle | ) |
Gets the FITS node from the parent handle.
vot_getFITS -- Gets the FITS node from the parent handle
| handle | Parent handle containing a FITS |
| handle_t vot_getGROUP | ( | handle_t | handle | ) |
Gets the GROUP node from the parent handle.
vot_getGROUP -- Gets the GROUP node from the parent handle
| handle | Parent handle containing a GROUP |
| handle_t vot_getINFO | ( | handle_t | handle | ) |
Gets the INFO node from the parent handle.
vot_getINFO -- Gets the INFO node from the parent handle
| handle | Parent handle containing a INFO |
| int vot_getLength | ( | handle_t | elem_h | ) |
Return the number of sibling Elements of the same type.
vot_getLength -- Return the number of sibling Elements of the same type.
| elem_h | A handle_t the Element |
| handle_t vot_getLINK | ( | handle_t | handle | ) |
Gets the LINK node from the parent handle.
vot_getLINK -- Gets the LINK node from the parent handle
| handle | Parent handle containing a LINK |
| handle_t vot_getMAX | ( | handle_t | handle | ) |
Gets the MAX node from the parent handle.
vot_getMAX -- Gets the MAX node from the parent handle
| handle | Parent handle containing a MAX |
| handle_t vot_getMIN | ( | handle_t | handle | ) |
Gets the MIN node from the parent handle.
vot_getMIN -- Gets the MIN node from the parent handle
| handle | Parent handle containing a MIN |
| int vot_getNCols | ( | handle_t | tdata_h | ) |
Return the nuber of columns in the table structure.
************************************************************************** Utility methods vot_getNCols -- Return the nuber of columns in the table structure.
| tdata_h | A handle_t to a TABLEDATA |
| handle_t vot_getNext | ( | handle_t | elem_h | ) |
| int vot_getNRows | ( | handle_t | tdata_h | ) |
Return the nuber of columns in the table structure.
vot_getNRows -- Return the nuber of columns in the table structure.
| tdata_h | A handle_t to a TABLEDATA |
| int vot_getNumberOf | ( | handle_t | elem_h, | |
| int | type | |||
| ) |
Return the number of sibling Elements of the type.
vot_getNumberOf -- Return the number of sibling Elements of the type.
| elem_h | A handle_t the Element | |
| type | An int of the type of element you wish to count |
| handle_t vot_getOPTION | ( | handle_t | handle | ) |
Gets the OPTION node from the parent handle.
vot_getOPTION -- Gets the OPTION node from the parent handle
| handle | Parent handle containing a OPTION |
| handle_t vot_getPARAM | ( | handle_t | handle | ) |
Gets the PARAM node from the parent handle.
vot_getPARAM -- Gets the PARAM node from the parent handle
| handle | Parent handle containing a PARAM |
| handle_t vot_getPARAMRef | ( | handle_t | handle | ) |
Gets the PARAMRef node from the parent handle.
vot_getPARAMRef -- Gets the PARAMref node from the parent handle
| handle | Parent handle containing a PARAMRef |
| handle_t vot_getParent | ( | handle_t | elem_h | ) |
| handle_t vot_getRESOURCE | ( | handle_t | handle | ) |
Gets the RESOURCE node from the parent handle.
vot_getRESOURCE -- Gets the RESOURCE node from the parent handle
| handle | Parent handle containing a RESOURCE |
| handle_t vot_getSibling | ( | handle_t | elem_h | ) |
| handle_t vot_getSTREAM | ( | handle_t | handle | ) |
Gets the STREAM node from the parent handle.
vot_getSTREAM -- Gets the STREAM node from the parent handle
| handle | Parent handle containing a STREAM |
| handle_t vot_getTABLE | ( | handle_t | handle | ) |
Gets the TABLE node from the parent handle.
vot_getTABLE -- Gets the TABLE node from the parent handle
| handle | Parent handle containing a TABLE |
| char * vot_getTableCell | ( | handle_t | tdata_h, | |
| int | row, | |||
| int | col | |||
| ) |
Return the nuber of columns in the structure.
vot_getTableCell -- Return the nuber of columns in the structure.
| tdata_h | A handle_t to a TABLEDATA | |
| row | An int for a row | |
| col | An int for a col |
| handle_t vot_getTABLEDATA | ( | handle_t | handle | ) |
Gets the TABLEDATA node from the parent handle.
vot_getTABLEDATA -- Gets the TABLEDATA node from the parent handle
| handle | Parent handle containing a TABLEDATA |
| handle_t vot_getTD | ( | handle_t | handle | ) |
Gets the TD node from the parent handle.
vot_getTD -- Gets the TD node from the parent handle
| handle | Parent handle containing a TD |
| handle_t vot_getTR | ( | handle_t | handle | ) |
Gets the TR node from the parent handle.
vot_getTR -- Gets the TR node from the parent handle
| handle | Parent handle containing a TR |
| char * vot_getValue | ( | handle_t | elem_h | ) |
Get the Value for the ELEMENT.
vot_getValue -- Get the Value for the ELEMENT.
| elem_h | A handle_t the ELEMENT |
| handle_t vot_getVALUES | ( | handle_t | handle | ) |
Gets the VALUES node from the parent handle.
vot_getVALUES -- Gets the VALUES node from the parent handle
| handle | Parent handle containing a VALUES |
| handle_t vot_newBINARY | ( | handle_t | parent_h | ) |
Create new BINARY node under the parent handle.
vot_newBINARY -- Create new BINARY node under the parent handle
| parent_h | Parent handle of a BINARY |
| handle_t vot_newBINARY2 | ( | handle_t | parent_h | ) |
Create new BINARY2 node under the parent handle.
vot_newBINARY2 -- Create new BINARY2 node under the parent handle
| parent_h | Parent handle of a BINARY2 |
| handle_t vot_newCOOSYS | ( | handle_t | parent_h | ) |
Create new COOSYS node under the parent handle.
vot_newCOOSYS -- Create new COOSYS node under the parent handle
| parent_h | Parent handle of a COOSYS |
| handle_t vot_newDATA | ( | handle_t | parent_h | ) |
Create new DATA node under the parent handle.
vot_newDATA -- Create new DATA node under the parent handle
| parent_h | Parent handle of a DATA |
| handle_t vot_newDESCRIPTION | ( | handle_t | parent_h | ) |
Create new DESCRIPTION node under the parent handle.
vot_newDESCRIPTION -- Create new DESCRIPTION node under the parent handle
| parent_h | Parent handle of a DESCRIPTION |
| handle_t vot_newFIELD | ( | handle_t | parent_h | ) |
Create new FIELD node under the parent handle.
vot_newFIELD -- Create new FIELD node under the parent handle
| parent_h | Parent handle of a FIELD |
| handle_t vot_newFIELDRef | ( | handle_t | parent_h | ) |
Create new FIELDref node under the parent handle.
vot_newFIELDref -- Create new FIELDref node under the parent handle
| parent_h | Parent handle of a FIELDref |
| handle_t vot_newFITS | ( | handle_t | parent_h | ) |
Create new FITS node under the parent handle.
vot_newFITS -- Create new FITS node under the parent handle
| parent_h | Parent handle of a FITS |
| handle_t vot_newGROUP | ( | handle_t | parent_h | ) |
Create new GROUP node under the parent handle.
vot_newGROUP -- Create new GROUP node under the parent handle
| parent_h | Parent handle of a GROUP |
| handle_t vot_newINFO | ( | handle_t | parent_h | ) |
Create new INFO node under the parent handle.
vot_newINFO -- Create new INFO node under the parent handle
| parent_h | Parent handle of a INFO |
| handle_t vot_newLINK | ( | handle_t | parent_h | ) |
Create new LINK node under the parent handle.
vot_newLINK -- Create new LINK node under the parent handle
| parent_h | Parent handle of a LINK |
| handle_t vot_newMAX | ( | handle_t | parent_h | ) |
Create new MAX node under the parent handle.
vot_newMAX -- Create new MAX node under the parent handle
| parent_h | Parent handle of a MAX |
| handle_t vot_newMIN | ( | handle_t | parent_h | ) |
Create new MIN node under the parent handle.
vot_newMIN -- Create new MIN node under the parent handle
| parent_h | Parent handle of a MIN |
| handle_t vot_newNode | ( | handle_t | parent, | |
| int | type | |||
| ) |
Creates a new blank unlinked node.
vot_newNode -- Creates a new blank unlinked node.
| parent | A handle to the Element that you want to add a node to | |
| type | The type of node you wish to create |
| handle_t vot_newOPTION | ( | handle_t | parent_h | ) |
Create new OPTION node under the parent handle.
vot_newOPTION -- Create new OPTION node under the parent handle
| parent_h | Parent handle of a OPTION |
| handle_t vot_newPARAM | ( | handle_t | parent_h | ) |
Create new PARAM node under the parent handle.
vot_newPARAM -- Create new PARAM node under the parent handle
| parent_h | Parent handle of a PARAM |
| handle_t vot_newPARAMRef | ( | handle_t | parent_h | ) |
Create new PARAMRef node under the parent handle.
vot_newPARAMRef -- Create new PARAMref node under the parent handle
| parent_h | Parent handle of a PARAMRef |
| handle_t vot_newRESOURCE | ( | handle_t | parent_h | ) |
Create new RESOURCE node under the parent handle.
vot_newRESOURCE -- Create new RESOURCE node under the parent handle
| parent_h | Parent handle of a RESOURCE |
| handle_t vot_newSTREAM | ( | handle_t | parent_h | ) |
Create new STREAM node under the parent handle.
vot_newSTREAM -- Create new STREAM node under the parent handle
| parent_h | Parent handle of a STREAM |
| handle_t vot_newTABLE | ( | handle_t | parent_h | ) |
Create new TABLE node under the parent handle.
vot_newTABLE -- Create new TABLE node under the parent handle
| parent_h | Parent handle of a TABLE |
| handle_t vot_newTABLEDATA | ( | handle_t | parent_h | ) |
Create new TABLEDATA node under the parent handle.
vot_newTABLEDATA -- Create new TABLEDATA node under the parent handle
| parent_h | Parent handle of a TABLEDATA |
| handle_t vot_newTD | ( | handle_t | parent_h | ) |
Create new TD node under the parent handle.
vot_newTD -- Create new TD node under the parent handle
| parent_h | Parent handle of a TD |
| handle_t vot_newTR | ( | handle_t | parent_h | ) |
Create new TR node under the parent handle.
vot_newTR -- Create new TR node under the parent handle
| parent_h | Parent handle of a TR |
| handle_t vot_newVALUES | ( | handle_t | parent_h | ) |
Create new VALUES node under the parent handle.
vot_newVALUES -- Create new VALUES node under the parent handle
| parent_h | Parent handle of a VALUES |
| handle_t vot_openVOTABLE | ( | char * | arg | ) |
Parse a VOTable and return a handle to it.
vot_openVOTABLE -- Parse a VOTable and return a handle to it
| arg | The source of the table |
| int vot_setAttr | ( | handle_t | elem_h, | |
| char * | attr, | |||
| char * | value | |||
| ) |
| int vot_setValue | ( | handle_t | elem_h, | |
| char * | value | |||
| ) |
Set the Value for the ELEMENT.
vot_setValue -- Set the Value for the ELEMENT.
| elem_h | A handle_t the ELEMENT | |
| value | A string holding the value |
| vot_setWarnings | ( | int | value | ) |
Set the warning level.
vot_setWarnings -- Set the warning level.
| value | Warning level |
| int vot_typeOf | ( | handle_t | elem_h | ) |
| int vot_valueOf | ( | handle_t | elem_h | ) |
| vot_writeASV | ( | handle_t | node, | |
| char * | fname, | |||
| int | header | |||
| ) |
Write the VOTable to the file descriptor as a ASV file.
vot_writeASV -- Write the VOTable to the file descriptor as a ASV file
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) | |
| header | Write output header? |
| vot_writeBSV | ( | handle_t | node, | |
| char * | fname, | |||
| int | header | |||
| ) |
Write the VOTable to the file descriptor as a BSV file.
vot_writeBSV -- Write the VOTable to the file descriptor as a BSV file
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) | |
| header | Write output header? |
| vot_writeCSV | ( | handle_t | node, | |
| char * | fname, | |||
| int | header | |||
| ) |
Write the VOTable to the file descriptor as a CSV file.
vot_writeCSV -- Write the VOTable to the file descriptor as a CSV file
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) | |
| header | Write output header? |
| vot_writeFITS | ( | handle_t | node, | |
| char * | fname | |||
| ) |
Write the VOTable to the file descriptor as an FITS table.
vot_writeFITS -- Write the VOTable to the file descriptor as a FITS table.
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) |
| vot_writeHTML | ( | handle_t | node, | |
| char * | ifname, | |||
| char * | ofname | |||
| ) |
Write the VOTable to the file descriptor as HTML.
vot_writeHTML -- Write the VOTable to the file descriptor as HTML.
| node | A handle to an Element that you to print | |
| ifname | Input filename | |
| ofname | Output filename (or "stdout" or "-" for STDOUT) |
| vot_writeSHTML | ( | handle_t | node, | |
| char * | ifname, | |||
| char * | ofname | |||
| ) |
Write the VOTable to the file descriptor as an HTML table.
vot_writeSHTML -- Write the VOTable to the file descriptor as an HTML table.
| node | A handle to an Element that you to print | |
| ifname | Input filename | |
| ofname | Output filename (or "stdout" or "-" for STDOUT) |
| vot_writeTSV | ( | handle_t | node, | |
| char * | fname, | |||
| int | header | |||
| ) |
Write the VOTable to the file descriptor as a TSV file.
vot_writeTSV -- Write the VOTable to the file descriptor as a TSV file
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) | |
| header | Write output header? |
| vot_writeVOTable | ( | handle_t | node, | |
| char * | fname, | |||
| int | indent | |||
| ) |
Write the VOTable to the file descriptor.
vot_writeVOTable -- Write the VOTable to the file descriptor.
| node | A handle to an Element that you to print | |
| fname | Output filename (or "stdout" or "-" for STDOUT) | |
| indent | Number of spaces to indent at each level |
| void votEmsg | ( | char * | msg | ) |
votEmsg -- Error message print utility.
| int children |
allowed parent types
| Stack* element_stack = NULL |
************************************************************************* Public Interface
vot = vot_openVOTABLE (filename|str|NULL) vot_closeVOTABLE (vot)
res = vot_getRESOURCE (vot|res) tab = vot_getTABLE (res) field = vot_getFIELD (tab)
data = vot_getDATA (tab)
tdata = vot_getTABLEDATA (data) // data elements tr = vot_getTR (tdata) td = vot_getTD (tr) bin = vot_getBINARY (data) bin = vot_getBINARY2 (data) fits = vot_getFITS (data)
group = vot_getGROUP (vot|res|tab|group) fldref = vot_getFIELDRef (group) parref = vot_getPARAMRef (group)
desc = vot_getDESCRIPTION (handle) param = vot_getPARAM (handle) info = vot_getINFO (handle) stream = vot_getSTREAM (bin|fits)
val = vot_getVALUES (field|param|info) min = vot_getMIN (val) max = vot_getMAX (val) opt = vot_getOPTION (val)
link = vot_getLINK (res|info|param|field|table)
sys = vot_getCOOSYS (vot) // Compatability
h = vot_newRESOURCE (handle_t parent_h) h = vot_newTABLE (handle_t parent_h) h = vot_newFIELD (handle_t parent_h) h = vot_newDATA (handle_t parent_h) h = vot_newTABLEDATA (handle_t parent_h) h = vot_newTR (handle_t parent_h) h = vot_newTD (handle_t parent_h) h = vot_newBINARY (handle_t parent_h) h = vot_newBINARY2 (handle_t parent_h) h = vot_newFITS (handle_t parent_h) h = vot_newGROUP (handle_t parent_h) h = vot_newFIELDRef (handle_t parent_h) h = vot_newPARAMRef (handle_t parent_h) h = vot_newDESCRIPTION (handle_t parent_h) h = vot_newPARAM (handle_t parent_h) h = vot_newINFO (handle_t parent_h) h = vot_newSTREAM (handle_t parent_h) h = vot_newVALUES (handle_t parent_h) h = vot_newMIN (handle_t parent_h) h = vot_newMAX (handle_t parent_h) h = vot_newOPTION (handle_t parent_h) h = vot_newLINK (handle_t parent_h) h = vot_newCOOSYS (handle_t parent_h)
handle = vot_newNode (parent, type) vot_freeNode (node) vot_deleteNode (node) vot_attachNode (parent, new) handle = vot_copyElement (handle_t source_h, handle_t parent_h)
val = vot_getValue (handle) stat = vot_setValue (handle, value)
attr = vot_getAttr (handle, attr) stat = vot_setAttr (handle, attr, value)
type = vot_getDATAType (data) // Utilities typeStr = vot_getDATATypeString (data)
nc = vot_getNCols (tdata_h) nr = vot_getNRows (tdata_h) val = vot_getTableCell (tdata_h, row, col) stat = vot_sortTable (tdata_h, col, string_sort, sort_order)
len = vot_getLength (elem_h) N = vot_getNumberOf (elem_h, type)
col = vot_colByName (tab_h, name, alt) col = vot_colByUCD (tab_h, name, alt) col = vot_colByID (tab_h, name, alt)
handle = vot_findByAttr (parent, name, value) handle *vot_findInGroup (group, type) handle = vot_getNext (handle) handle = vot_getSibling (handle) handle = vot_getChild (handle) handle = vot_getParent (handle) handle = vot_getChildOfType (handle, int type)
int = vot_valueOf (handle) type = vot_typeOf (handle) vot_setWarnings (value)
vot_writeVOTable (handle, char *fname, int indent) vot_writeHTML (handle, char *fname) vot_writeSHTML (handle, char *fname) vot_writeFITS (handle, char *fname) vot_writeASV (handle, char *fname, int hdr) vot_writeBSV (handle, char *fname, int hdr) vot_writeCSV (handle, char *fname, int hdr) vot_writeTSV (handle, char *fname, int hdr) vot_writeDelimited (handle, char *fname, char delim, int hdr)
| int parents |
element type


LOST & FOUND
Homepage
Lost Items
Found Items
About us
Homepage
Lost Items
Found Items
About us
Homepage
Lost Items
Found Items
About us
Homepage
Lost Items
Found Items
About us
Homepage
Lost Items
Found Items
About us
Copyright - Team 9