Introduction to Business Intelligence

<button class="btn btn-link bookmark-button "
aria-pressed="false"
data-bookmark-id="NoahB,block-v1:IRONHACK+DAFT+201906_MIA+type@vertical+block@6db2f4168901426d84a1b2e83fb34ddf"
data-bookmarks-api-url="/api/bookmarks/v1/bookmarks/">
Bookmark this page
</button>

Lesson Goals

This lesson will introduce the key concepts in Business Intelligence.

Introduction

Business Intelligence is an application of data analysis that aids companies in making data driven decisions. Using Business Intelligence, technologies we can provide insights on the performance of a business in the past and the present as well as make predictions or recommendations for the future. A key difference between Business Intelligence and data analysis is that insights are meant to be actionable and geared towards helping a business make decisions.

Key Concepts

Data: Data Warehouse vs. Unstructured Data

Businesses store vast amounts of data. Some for compliance reasons and other data specifically for deriving insights and historical reporting. The data can be stored in many forms including emails, invoices, and presentations but also in the form of structured tables.

Data Warehouse: OLAP and OLTP

Typically companies invest a great deal of resources in storing important data in relational databases. Data warehouses are typically a group of relational databases accessible using SQL. Many companies have two types of databases. OLAP (On-Line Analytical Processing) is a data store that is characterized by a relatively low volume of transactions. This database is typically used for complex queries and therefore the time it takes to write to the database can be long, but the read time needs to be short. On the other hand, OLTP (On-Line Transaction Processing) is a database that is used for a large volume of short on-line transactions. This type of database is used for fast query processing. Each database has advantages and disadvantages. By using both databases, we can optimize performance for both complex queries and a large volume of simple queries and insertions.

Unstructured Data: Data Lake

In the past, most of the data used to extract Business Intelligence was stored in relational databases. However, nowadays storage has become very cheap and technologies for distributed storage have been the standard for over a decade. Therefore, many organizations find it to be more cost effective to store their data unstructured and process the data at query time. A repository that contains both structured and unstructured data is called a data lake.

Metrics

A metric is a quantifiable measure that provides us with information about how well a company is doing at achieving its business objectives. Since companies can only improve the things they measure, it is a crucial part of an analyst's job to use the most appropriate metrics. Many companies like to use the term KPI (Key Performance Indicator) interchangeably with metrics. An example of a metric is the amount of money spent per sale or the percent of customers that buy a product out of all customers visiting the site.

Actionable Insights

Typically analysts try to create reports that contain insights that can produce an increase in revenue. While it is interesting to learn certain facts about the company and the products using data, we try to limit ourselves to recommendations that when acted on, will boost the bottom line.

Summary

In this lesson we learned about the key concepts of Business Analytics. We learned about different types of data stores as well as metrics and KPIs. In the following lessons, we will use Tableau to produce actionable insights.

Introduction to Tableau

<button class="btn btn-link bookmark-button "
aria-pressed="false"
data-bookmark-id="NoahB,block-v1:IRONHACK+DAFT+201906_MIA+type@vertical+block@5cc7b9c49bcc4f8fac0e15db808b2cb2"
data-bookmarks-api-url="/api/bookmarks/v1/bookmarks/">
Bookmark this page
</button>

Lesson Goals

Learn about the most important features of Tableau.

Import data from a text (CSV) file into Tableau.

Connect a Google Sheets spreadsheet to Tableau.

Learn how to inspect and change data types for imported data.

Introduction

Tableau is one of the most popular and intuitive applications for business intelligence and visual data exploration today. The application makes it easy to connect to an existing data source, create interactive visualizations, and perform basic analysis to discover insights. In this lesson, we will learn about the different features of Tableau and how it can be a valuable addition to your analytics tool kit. We will also cover how to load data into Tableau - both from file and hosted data sources.

For this lesson, we will be using the free version of Tableau called Tableau Public.

Overview of Tableau Features

Tableau has several features that make it a great tool for data analysis. In this section, we will highlight some of the most important ones.

Drag & Drop Interface: One of the things that makes Tableau so popular is its ease of use. It allows you to intuitively drag and drop fields where you want them and move things around to get exactly the visualization you want.

Variety of Visualizations: Tableau has several types of visualizations you can use - from bar charts, line charts, and scatter plots to area charts, bubble charts, tree maps. Speaking of maps, it also allows you to visualize your data geographically.

Dashboards and Stories: You can combine several visualizations into dashboards and stories that focus on communicating interesting insights with the stakeholders that need the information.

Data Exploration: Perhaps one of Tableau's most useful features is how easy it is to explore data with it. You can start with an aggregate view of the data, filter to zoom in on something that looks interesting, add dimensions to get more well-rounded perspectives, and look at the underlying records to get to the bottom of what you're trying to investigate.

Installing Tableau Public

In this course we will focus on the free version of Tableau called Tableau Public. This version has all the features we need without a costly license.

We can download Tableau Public by visiting the company's site at https://public.tableau.com.

We then enter our email in the box and this should redirect us to the download page.

You will be automatically redirected to the Mac or Windows version. Download the installer and follow the directions in the .exe or .dmg installer.

Loading Data Into Tableau

When you first open Tableau Public, you should see the home screen.

On the left side bar, you have several options for connecting to a data source via one of several file formats or via a couple types of server connections. For this section, we will be loading the same data set from two different data sources - a local CSV (text) file and then from a hosted Google Sheets spreadsheet. The data set will contain information about the 2018 Fortune 1000 companies.

Loading Data from CSV Files

Loading data from a file into Tableau is very straightforward. To load a CSV file, follow the steps below:

Download fortune1000.csv.

On the Connect sidebar, under To a File, select the Text file option.

Navigate to the directory that contains our Fortune 1000 company (fortune1000.csv) data set.

Select the CSV file and click the Open button.

Loading Data from Google Sheets

Loading data from Google Sheets into Tableau requires just a few steps as well. Before following the steps below, ensure that you have a Google account as you will need to provide Tableau access to see what spreadsheets your account has access to.

On the Connect sidebar, under To a Server, select More... and then Google Sheets.

A browser tab will open asking you to log into your Google account. Log in and then click Allow to allow Tableau to access your Google account.

Back in Tableau, you should now see a list of Google Sheets that can be accessed by your account.

Select the Fortune1000 file and then click Connect.

Checking Data Types

Once the data is imported successfully, you should see the following screen with the file name in the top pane and a preview of the data set in the bottom pane.

Here, you can verify that Tableau has read the data correctly and that it looks as expected. You will notice that across the very tops of the column headings, Tableau indicates the data type (string, number, date, etc.) that is currently assigned to each field. If you scroll all the way to the right, you will see that the last 4 columns (City, State, Latitude, and Longitude) have been identified as geographic fields in addition to their data type. This is important if we want plot the data on a map.

If you need to change any data types, you can simply click on the data type icon for that column and select the correct type from the menu. For example, the column Years on Fortune 500 List is currently a string field. Go ahead and change its data type to Number (whole). The Profit Change column should also be set to Number (decimal), so go ahead and change that as well.

Summary

In this lesson, we provided an introduction to Tableau - a very popular business intelligence application that allows you to easily explore data and create interactive visualizations. We started the lesson by looking at some of Tableau's most important features. Next, we learned how to load data into Tableau, both from a text file and from a Google Sheets spreadsheet. We finished the lesson by learning how we can inspect the default data types assigned by Tableau to our imported data and making any necessary corrections.

Data Visualization with Tableau

<button class="btn btn-link bookmark-button "
aria-pressed="false"
data-bookmark-id="NoahB,block-v1:IRONHACK+DAFT+201906_MIA+type@vertical+block@21d01a52237d4647873ebdabe02e0a1e"
data-bookmarks-api-url="/api/bookmarks/v1/bookmarks/">
Bookmark this page
</button>

Lesson Goals

Learn how to create basic data visualizations in Tableau.

Learn how to layer on additional details to create more advanced visualizations.

Learn how to use maps in Tableau to plot data geographically.

Create dashboards that combine several visualizations on a single page.

Introduction

One of the primary tasks that data analysts use Tableau for is creating data visualizations. Visualizations help you intuitively understand how the entities in your data compare to each other, how similarly or differently they behave, and where there are values that look extreme or incorrect. In this lesson, we will learn how to create several types of visualizations using Tableau.

This lesson will pick up where the Introduction to Tableau lesson left off: we have loaded our Fortune 1000 company data set, corrected a couple of incorrect data types, and are ready to dive into creating some visualizations!

Creating Basic Visualizations

To get started creating visualizations, click the Sheet 1 tab at the bottom of the screen below.

You should be presented with the following worksheet screen from which we can start putting together some visualizations.

You will notice that in the left sidebar, the string fields in the data are listed as Dimensions and the numeric fields are listed as Measures. Dimensions in Tableau are ways that you can group and slice the data while measures are fields that you can use to perform calculations. There are also a couple of measures that are not fields in the database - Number of Records and Measure Values. You can hover over each of those for an explanation of what they do.

Tableau works primarily via drag-and-drop, so if we wanted to see the number of companies on the Fortune 1000 from each sector, we would begin by dragging the Number of Records measure into the middle of the workspace. When we do this, we should see the number 1,000 which is that total number of rows we have in our data set. To split that up by sector, we would drag the Sector dimension and drop it into the Rows section near the top of the worksheet. This produces a tabular numeric breakdown by default.

Once we have this, we can change the type of visualization by clicking on the Show Me button in the upper right of the screen. This will expand a menu of different charts and graphs that you can select from. For this type of information, it might be useful to display it as a horizontal bar chart. To do this, we would select the horizontal bars option (leftmost option on the third row) and the resulting visualization would look as follows.

If we wanted a different view of the data, we could change the visualization to a tree map (leftmost option on the fourth row), which will show proportionally bigger and darker sections for the sectors that have more companies in them.

Another visualization we could use for our data would be a packed bubble chart (rightmost option of last row) which would show bubbles of increasing size for each sector according to number of companies in that sector.

Note that to the left of our visualizations, there is a box labeled Marks whose contents keep changing when we change visualizations. This box allows you to customize the way your visualization looks. It has sub-boxes for color, size, labels, etc. that can help us identify and distinguish between the different entities we are seeing in our visualizations. For example, notice that for our bubble chart we have the sum of the number of records represented by size of the bubbles and sector identified by labeling. This is nice, but the bubbles look rather uniform since they are all the same color. If we wanted to liven up our visualization and distinguish between the sectors a bit more, we could drag the Sector dimension into the Color sub-box and watch our bubble chart become colorful!

More Advanced Visualizations

In the previous section, we created a variety of visualizations using only the Sector dimension and the Number of Records measure. Let's now explore how we can incorporate additional dimensions and measures into our visualizations.

To get started, let's plot two measures against each other by dragging the Revenues field to the Columns and the Profits column to the Rows section. By default, Tableau will aggregate these two measures, and you will end up with a plot that has a single point.

However, what we would expect to see is a scatter plot with a point for every record in our data set. In other words, we need to let Tableau know that we don't want it to aggregate these measures, we just want it to plot them as they are. We can do this by selecting Analysis from the top menu and unchecking Aggregate Measures.

Now we have a proper scatter plot that we can work with. From here, we can add a few more dimensions to make this visualization informative. If we hover our mouse pointer over any of the points, we can see the revenue and profit figures for that company, but we don't know what companies are represented by any of the points. Let's fix that.

First, let's right-click on the Title dimension, select Rename, and change its name to Company Name. Then, let's drag that field over to the Label box inside the Marks section. We can now see company names in our scatter plot!

From here, we can layer in additional information. For example, let's drag the Assets measure into the Size box and the Sector dimension into the Color box. If you get a warning message when performing the latter, click Add all members. We should now have a visualization that looks like this.

Geographic Data Visualizations

In addition to various interactive charts and graphs, Tableau also provides us with an easy way to plot data on geographic maps. How easy you ask? Drag the City dimension into the center of a blank worksheet. Tableau will automatically generate a map with plot points on every city.

From here, we can drag the Profits field over to the Size box, the Sector field over to the Color box, and Company Name to the Details box. What we end up with is a map visualization like the one below, where we can see not only the geographic distribution of companies but also what sectors are present in each geographic region as well as getting a sense of how much profit is generated by each region.

Creating Dashboards

Dashboards are collections of multiple data visualizations all on one page. They help provide several different views of a data set simultaneously. Once you have created a few visualizations in Tableau, it is relatively easy to combine them into a dashboard. Below are some steps you can follow to create a dashboard from the three visualizations we have ended up with thus far in this lesson (the colorful bubble chart, the scatter plot, and the geographic map).

Ensure that each visualization is on its own worksheet. Feel free to create new worksheets by clicking on the New Worksheet button on either the top or bottom toolbars.

Once you have a worksheet for each visualization, you can click on the New Dashboard button in either the top or bottom toolbar. You should see a new, blank dashboard that looks like the following.

Make sure that the Size dropdown on the left sidebar is set to Automatic so that the dashboard will automatically adjust to the size of the screen where it is being viewed.

Next, you can drag each of the worksheets listed in the left sidebar under the Sheets heading onto the main area of the dashboard (where it currently says "Drop sheets here").

Organize and rearrange the visualizations in a way that they look best by dragging them around.

You can also give the dashboard a title by checking the Show dashboard title checkbox at the bottom left of the screen. You should see a title appear, which you can edit by double clicking on it. You can do the same with the individual visualization titles as well.

Your final dashboard should look something like the one below.

Summary

In this lesson, we dove into Tableau and learned how to create several types of data visualizations. Once we had a grasp of how to generate simpler visualizations, we saw how we could layer on dimensions to create more advanced visualizations that convey a lot of information. We also covered how to plot data geographically on a map and how to combine multiple visualizations into a dashboard. Now that you have completed this lesson, you should now have a strong foundation from which we can perform further data exploration and analysis with Tableau.

BI Analysis with Tableau

<button class="btn btn-link bookmark-button "
aria-pressed="false"
data-bookmark-id="NoahB,block-v1:IRONHACK+DAFT+201906_MIA+type@vertical+block@eab61b02a10d468383239b58328e479e"
data-bookmarks-api-url="/api/bookmarks/v1/bookmarks/">
Bookmark this page
</button>

Lesson Goals

Understand the differences between visualization for exploration and communication.

Perform BI analysis on a company data set.

Construct Tableau Stories to effectively communicate insights.

Learn about Tableau features such as filtering and sorting.

Introduction

At its core, business intelligence is about extracting actionable insights and helping with business decision-making. Therefore, when we analyze data from a business intelligence context, we should do it with one of two objectives in mind:

Exploring the data to derive insights.

Effectively communicating those insights to stakeholders.

Data visualization can help with both of these, but the approaches for each of the aforementioned objectives differ because communicating insights often relies upon data exploration.

In this lesson we will explore and analyze a data set and construct reporting that communicates our findings, all the while noticing the differences between visualization for exploration vs. visualization for presentation. Along the way, we will learn various ways to analyze data and see some more useful features in Tableau.

For this lesson, we will use an Online Retail (Online Retail.xlsx) data set. The data set contains invoice information for a retail company based in the United Kingdom that sells products all over the world. Our job will be to discover interesting things hidden in this company's data and then put together a series of reports that will help the company's management track how the company is performing and make decisions about its future direction.

Loading the Retail Data Set

Before we can analyze the data, we must load it into Tableau. From the left sidebar, we are going to choose the Microsoft Excel option, navigate to where we have saved the data file, select it, and click Open. The data set should look like the one below.

Note: The data set is not small so it might take a few minutes for it to load. This is good practice as the data sets you encounter in the real world will likely be large as well.

Next, we will inspect the data types and make any necessary adjustments. The InvoiceNo and Customer ID fields contain numeric values, but they serve as identifiers for specific entities that we may want to aggregate. Because of this, we should change their data types to string. Now that this is complete, we are ready to start exploring the data.

Visual Data Exploration

When exploring a data set, you want to start with the entities because these are the things you will actually be analyzing. In Tableau, these are represented by dimensions. Below are the entities for this data set along with their corresponding dimensions:

Country: Country

Customer: Customer ID

Invoice: Invoice No

Product: Stock Code and Description

The measures represent what we can view about these entities and include Quantity, Revenue, and Unit Price for our data set. You can start exploring by matching up dimensions and measures. For example, let's start by looking at total number of units sold (Quantity) for each country. We can do this by creating a new worksheet, dragging the Quantity field into the center of it, and then dragging the Country field into the Columns section. This will show the results as a table by default, but let's select a bar chart from the Show Me menu and also swap the rows and columns by clicking the Swap Rows and Columns button on the top toolbar. We should end up with a vertical bar chart that looks like the one below.

We can see that the vast majority of units have been sold in the United Kingdom. Because of the large number of units sold in the U.K., it is difficult to see how unit sales in the other countries compare to each other. We can get a better view by clicking on the United Kingdom bar and selecting Exclude. This provides us with a better perspective on how the company's sales outside its home country are distributed.

We can see that the company's highest unit sales outside of the U.K. have occurred in the Netherlands, Ireland (EIRE), Germany, France, and Australia.

Next, let's try to get a sense of who the company's most valuable customers are and what country they are from. To do this, we will create a new worksheet and drag the Revenue field into the center. We will also drag the Customer ID and Country fields into the Rows section so that we are viewing total revenue by customer and country. Now, we will need to sort our customers so that the ones with the largest revenue appear at the top. We can do this by clicking on the down arrow next to our Customer ID field in the Rows section, clicking Sort, and then choosing Descending by the Sum of the Revenue field.

The results we get show us which customers have spent the most amount of money with the company and where those customers are from. If we would like to turn this into a bar chart, we can just drag the Revenue field into the Columns section and now we have a sorted horizontal bar chart with labels showing revenue by customer and country.

Challenge: There is much more to discover about this data set. Continue exploring the data using what you have learned in this section. For example, try creating visualizations showing which products have generated the most revenue for the company and what the relationship between Unit Price and Revenue looks like.

Reporting and Communicating Insights

Once we have sufficiently explored and analyzed our data, it's time to summarize our findings and communicate them to the appropriate stakeholders. In the previous lesson, we learned how to create dashboards that can accomplish this. Tableau also has another medium called Stories through which you can visually tell a story about the insights you have found in your data. In this section, we will focus on building a story using visualizations. In order to do this, make sure you have created at least 4 visualizations for the data set.

To create a new story in Tableau, click on the New Story button in either the top or bottom toolbars. Tableau should create a blank story that looks like this.

A story in Tableau is like a slide presentation, only that the equivalent of a slide is called a Story Point. You can add story points by clicking on either of the buttons under the New story point section of the left sidebar - the Blank button to create a blank story point or the Duplicate button to create a duplicate of the current story point which you can then modify. You can also add a title to your story and captions to each of your story points.

Let's create four blank story points, dragging one of the sheets we created during our exploration of the data in the previous section into each one. Once we have dragged our sheets into our story points, write a brief caption for each one explaining what the visualization shows. You can even add annotations or notes to the visualizations by going to the left sidebar and dragging the Drag to add text section onto the visualization. When you are ready to present your story, you can go into Tableau's presentation mode by clicking the Presentation Mode button (second from right on top toolbar).

Below are example screenshots of a completed story.

Summary

In this lesson, we learned how to analyze a data set in a business intelligence context and communicate insights. We began the lesson by explaining the concepts of visualization for exploration and visualization for communication. From there, we looked at Tableau by analyzing some online retail data from a few different dimensions and putting together corresponding visualizations. Along the way, we witnessed some additional useful features Tableau has that lets us filter and sort our data. We wrapped up the chapter by introducing Tableau Stories and showing how we can construct them using the visualizations we had created on Tableau worksheets.


adamspy package¶
Subpackages¶
- adamspy.acar package
- adamspy.adripy package
- Submodules
- adamspy.adripy.constants module
- adamspy.adripy.database module
- adamspy.adripy.drillsim module
- adamspy.adripy.event module
- adamspy.adripy.hole module
- adamspy.adripy.solver_settings module
- adamspy.adripy.string module
- adamspy.adripy.tool module
- adamspy.adripy.utilities module
- Module contents
- adamspy.aviewpy package
- adamspy.postprocess package
- adamspy.waterfall package
Submodules¶
adamspy.adamspy module¶
Functions for manipulating adams files and data
-
exception
adamspy.adamspy.
AviewError
[source]¶ Bases:
Exception
Raise this error to if a known error occurs in the log file.
-
adamspy.adamspy.
get_log_errors
(log_file)[source]¶ Checks the log file for errors of the type AviewError.
Parameters: log_file (str) – Filename of aview log file (usulally aview.log)
-
adamspy.adamspy.
get_n_threads
(adm_file)[source]¶ Searches adm_file for the NTHREADS statement and returns its value.
Parameters: adm_file (str) – Path to an Adams Dataset (.adm) file Returns: Number of threads set adm_file Return type: int
-
adamspy.adamspy.
get_simdur_from_acf
(acf_file)[source]¶ Reads an Adams command file (.acf) and returns the total duration of the simulation.
Parameters: acf_file (str) – Filepath to an Adams message file (.msg) Raises: RuntimeError
– Returned if no simulation end time was found in the specified message fileReturns: Total duration of the simulation Return type: float
-
adamspy.adamspy.
get_simdur_from_msg
(msg_file)[source]¶ Reads an Adams message file (.msg) and returns the total duration of the simulation.
Parameters: msg_file (str) – Filepath to an Adams message file (.msg) Raises: RuntimeError
– Returned if no simulation end time was found in the specified message fileReturns: Total duration of the simulation Return type: float


University of Waterloo | Computer Science
Here are a couple of my past software projects.
A collection of works completed using photoshop and illustrator.
You can reach me at the following: Email<EMAIL_ADDRESS>Cell:<PHONE_NUMBER>


HTTP Responses Sample
Purpose
This sample shows how to create and configure a simple HTTP server.
Examine the Code
-
See the httpServer_OnHttpRequest handler, where all possible RequestPaths
are processed.
The options possible are as follows:
- / or /home - load home page with all available links.
- /file - download the HttpResponses application.
- /bytes - download random.bin file that contains random generated data.
- /error - shows a custom error with code 555.
Getting started
- Compile the project.
- Run the application.
- Click the link on the top of the application window to open the home page of our server in your web browser.
- Try all the links on the home page.


Hi! My name is Slavko and I am passionate about software programming
so I started this page to promote my skills and it is always outdated because I never stop learning new things.
I developed software for various platforms, from industrial programmable microcontrollers and
embedded devices to desktop applications, client-server applications and small business websites.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”


Jim Cornette Resigns from NWA Team Following Racist On-Air Joke
by Tim AdamsNational Wrestling Alliance announcer Jim Cornette has resigned from the wrestling promotion after making a racist joke during a singles match between Nick Aldis and Trevor Murdoch on the NWA Powerrr weekly YouTube show.
In a statement released on its website Wednesday, the NWA called Cornette's comments "both offensive and do not meet the high standards of decency and good faith of the National Wrestling Alliance."
"To ensure that such an error can never happen again, we've established new procedures of review for all NWA programming going forward," the statement goes on to read. "We sincerely regret our failure in this regard."
Cornette has since responded to his resignation with a post on Twitter, urging his fans to tune into this Friday's edition of the Jim Cornette Experience podcast for his full reaction.
"Morning everybody! Heard any good jokes lately?" Cornette tweeted.
The racist joke that caused Cornette to resign involved a wrestler, a bucket of fried chicken and the African country of Ethiopia. “[Trevor Murdoch] is the only man I’ve ever known that can strap a bucket of fried chicken on his back and ride a motor scooter across Ethiopia," Cornette said while calling the Aldis/Murdoch match. "Trevor Murdoch can take care of himself!” The episode of NWA Powerrr has since been removed from the company's YouTube channel.
https://schema.orgBreadcrumbListListItem1Homehttps://www.cbr.com/ListItem2Nerd Culturehttps://www.cbr.com/category/nerd-culture/ListItem3Jim Cornette Resigns from NWA Team Following Racist On-Air Jokehttps://www.cbr.com/jim-cornette-nwa-power-resigns-racist-joke/


Query:
node[natural=tree];
Style:
nodeFeature: CircleMarker color: red fillColor: red fillOpacity: 0.1 weight: 1 radius: 6


DatabaseConnector is part of HADES.
This R package provides function for connecting to various DBMSs. Together with the SqlRender
package, the main goal of DatabaseConnector
is to provide a uniform interface across database platforms: the same code should run and produce equivalent results, regardless of the database back end.
connectionDetails <- createConnectionDetails(dbms="postgresql",
server="localhost",
user="root",
password="blah",
schema="cdm_v4")
conn <- connect(connectionDetails)
querySql(conn,"SELECT COUNT(*) FROM person")
disconnect(conn)
Running the package requires R with the package rJava installed. Also requires Java 1.8 or higher.
See the instructions here for configuring your R environment, including Java.
To install the latest stable version, install from CRAN:
install.packages("DatabaseConnector")
To download and use the JDBC drivers for Oracle, SQL Server, PDW, PostgreSQL, Spark, or RedShift, you can use the downloadJdbcDrivers()
function. For BigQuery, Impala, or Netezza, see these instructions.
To be able to use Windows authentication for SQL Server, you have to install the JDBC driver. Download the version 9.2.0 .zip from Microsoft and extract its contents to a folder. In the extracted folder you will find the file sqljdbc_9.2/enu/auth/x64/mssql-jdbc_auth-9.2.0.x64.dll (64-bits) or ssqljdbc_9.2/enu/auth/x86/mssql-jdbc_auth-9.2.0.x86.dll (32-bits), which needs to be moved to location on the system path, for example to c:/windows/system32. If you not have write access to any folder in the system path, you can also specify the path to the folder containing the dll by setting the environmental variable PATH_TO_AUTH_DLL
, so for example Sys.setenv("PATH_TO_AUTH_DLL" = "c:/temp")
.
Documentation can be found on the package website.
PDF versions of the documentation are also available:
Read here how you can contribute to this package.
DatabaseConnector is licensed under Apache License 2.0. The JDBC drivers fall under their own respective licenses.


public final class EJBMethodPermission
extends java.security.Permission
The name of an EJBMethodPermission contains the value of the ejb-name element in the application's deployment descriptor that identifies the target Jakarta Enterprise Bean.
The actions of an EJBMethodPermission identifies the methods of the Jakarta Enterprise Bean to which the permission applies.
Implementations of this class MAY implement newPermissionCollection or inherit its implementation from the super class.
Permission
,
Serialized Form| Constructor and Description |
|---|
EJBMethodPermission(java.lang.String name,
java.lang.String actions)
Creates a new EJBMethodPermission with the specified name and actions.
|
EJBMethodPermission(java.lang.String EJBName,
java.lang.String methodInterface,
java.lang.reflect.Method method)
Creates a new EJBMethodPermission with name corresponding to the EJBName and actions composed from methodInterface,
and the Method object.
|
EJBMethodPermission(java.lang.String EJBName,
java.lang.String methodName,
java.lang.String methodInterface,
java.lang.String[] methodParams)
Creates a new EJBMethodPermission with name corresponding to the EJBName and actions composed from methodName,
methodInterface, and methodParams.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
equals(java.lang.Object o)
Checks two EJBMethodPermission objects for equality.
|
java.lang.String |
getActions()
Returns a String containing a canonical representation of the actions of this EJBMethodPermission.
|
int |
hashCode()
Returns the hash code value for this EJBMethodPermission.
|
boolean |
implies(java.security.Permission permission)
Determines if the argument Permission is "implied by" this EJBMethodPermission.
|
public EJBMethodPermission(java.lang.String name, java.lang.String actions)
The name contains the value of the ejb-name element corresponding to an Jakarta Enterprise Bean in the application's deployment descriptor.
The actions contains a methodSpec. The syntax of the actions parameter is defined as follows:
methodNameSpec ::= methodName | emptyString methodInterfaceName ::= String methodInterfaceSpec ::= methodInterfaceName | emptyString typeName ::= typeName | typeName [] methodParams ::= typeName | methodParams comma typeName methodParamsSpec ::= emptyString | methodParams methodSpec ::= null | methodNameSpec | methodNameSpec comma methodInterfaceName | methodNameSpec comma methodInterfaceSpec comma methodParamsSpec
A MethodInterfaceName is a non-empty String and should contain a method-intf value as defined for use in Jakarta Enterprise Beans deployment descriptors. An implementation must be flexible such that it supports additional interface names especially if they are standardized by the Jakarta Enterprise Beans Specification. The Jakarta Enterprise Beans Specification currently defines the following method-intf values:
{ "Home", "LocalHome", "Remote", "Local", "ServiceEndpoint" }
A null or empty string methodSpec indicates that the permission applies to all methods of the Jakarta Enterprise Bean. A methodSpec with a methodNameSpec of the empty string matches all methods of the Jakarta Enterprise Bean that match the methodInterface and methodParams elements of the methodSpec.
A methodSpec with a methodInterfaceSpec of the empty string matches all methods of the Jakarta Enterprise Bean that match the methodNameSpec and methodParamsSpec elements of the methodSpec.
A methodSpec without a methodParamsSpec matches all methods of the Jakarta Enterprise Bean that match the methodNameSpec and methodInterface elements of the methodSpec.
The order of the typeNames in methodParams array must match the order of occurence of the corresponding parameters in the method signature of the target method(s). Each typeName in the methodParams must contain the canonical form of the corresponding parameter's typeName as defined by the getActions method. A methodSpec with an empty methodParamsSpec matches all 0 argument methods of the Jakarta Enterprise Bean that match the methodNameSpec and methodInterfaceSpec elements of the methodSpec.
name
- of the Jakarta Enterprise Bean to which the permission pertains.actions
- identifies the methods of the Jakarta Enterprise Bean to which the permission pertains.public EJBMethodPermission(java.lang.String EJBName, java.lang.String methodName, java.lang.String methodInterface, java.lang.String[] methodParams)
EJBName
- The string representation of the name of the Jakarta Enterprise Bean as it appears in the corresponding
ejb-name element
in the deployment descriptor.methodName
- A string that may be used to indicate the method of the Jakarta Enterprise Bean to which the permission
pertains. A value of null or "" indicates that the permission pertains to all methods that match the other parameters of
the permission specification without consideration of method name.methodInterface
- A string that may be used to specify the Jakarta Enterprise Bean interface to which the permission
pertains. A value of null or "", indicates that the permission pertains to all methods that match the other parameters of
the permission specification without consideration of the interface they occur on.methodParams
- An array of strings that may be used to specify (by typeNames) the parameter signature of the
target methods. The order of the typeNames in methodParams array must match the order of occurrence of the
corresponding parameters in the method signature of the target method(s). Each typeName in the methodParams array
must contain the canonical form of the corresponding parameter's typeName as defined by the getActions method. An
empty methodParams array is used to represent a method signature with no arguments. A value of null indicates that
the permission pertains to all methods that match the other parameters of the permission specification without
consideration of method signature.public EJBMethodPermission(java.lang.String EJBName, java.lang.String methodInterface, java.lang.reflect.Method method)
A container uses this constructor prior to checking if a caller has permission to call the method of an Jakarta Enterprise Bean.
EJBName
- The string representation of the name of the Jakarta Enterprise Bean as it appears in the
corresponding ejb-name element in the deployment descriptor.methodInterface
- A string that may be used to specify the Jakarta Enterprise Bean interface to which the
permission pertains. A value of null or "", indicates that the permission pertains to all methods that match
the other parameters of the permission specification without consideration of the interface they occur on.method
- an instance of the Java.lang.reflect.Method class corresponding to the method that the container is
trying to determine whether the caller has permission to access. This value must not be null.public boolean equals(java.lang.Object o)
Two Permission objects, P1 and P2, are equivalent if and only if P1.implies(P2) AND P2.implies(P1).
equals
in class java.security.Permission
o
- the EJBMethodPermission object being tested for equality with this EJBMethodPermissionpublic java.lang.String getActions()
methodNameSpec ::= methodName | emptyString methodInterfaceName ::= String methodInterfaceSpec ::= methodInterfaceName | emptyString typeName ::= typeName | typeName [] methodParams ::= typeName | methodParams comma typeName methodParamsSpec ::= emptyString | methodParams methodSpec ::= null | methodName | methodNameSpec comma methodInterfaceName | methodNameSpec comma methodInterfaceSpec comma methodParamsSpec
The canonical form of each typeName must begin with the fully qualified Java name of the corresponding parameter's type. The canonical form of a typeName for an array parameter is the fully qualified Java name of the array's component type followed by as many instances of the string "[]" as there are dimensions to the array. No additional characters (e.g. blanks) may occur in the canonical form.
A MethodInterfaceName is a non-empty String and should contain a method-intf value as defined for use in Jakarta Enterprise Beans deployment descriptors. An implementation must be flexible such that it supports additional interface names especially if they are standardized by the Jakarta Enterprise Beans Specification. The Jakarta Enterprise Beans Specification currently defines the following method-intf values:
{ "Home", "LocalHome", "Remote", "Local", "ServiceEndpoint" }
getActions
in class java.security.Permission
public int hashCode()
The properties of the returned hash code must be as follows:
hashCode
in class java.security.Permission
public boolean implies(java.security.Permission permission)
For this to be the case,
The argument permission applies to a subset of the methods to which this permission applies if all of the following conditions are met.
The name and actions comparisons described above are case sensitive.
implies
in class java.security.Permission
permission
- "this" EJBMethodPermission is checked to see if it implies the argument permission.


pre_process module¶
-
pre_process.
any_in
(seq_a, seq_b)[source]¶ Parameters: - seq_a (list) – A list of items
- seq_b (list) – A list of items
Returns: seq_a – Returns a boolean value if any item of seq_a belongs to seq_b or visa versa
Return type: bool
-
pre_process.
binarizer
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s Binarizer preprocessing instance.
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to Binarizer preprocessing.
Return type: dictionary
-
pre_process.
count_vectorizer
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s CountVectorizer preprocessing instance.
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to CountVectorizer preprocessing.
Return type: dictionary
-
pre_process.
get_class_name
(cls)[source]¶ Parameters: cls – Contains the Sklearn’s preprocessing instance Returns: cls.__class__.__name__ – Returns the class name of the pre-processed object. Return type: String
-
pre_process.
get_derived_colnames
(trfm_name, col_names, *args)[source]¶ Parameters: - trfm_name (String) – Name of the derived field to be assigned after preprocessing
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pml_pp – Returns a list that contains names of the preprocessed features.
Return type: list
-
pre_process.
get_pml_derived_flds
(trfm, col_names, **kwargs)[source]¶ Parameters: - trfm – Contains the Sklearn’s preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pml_pp – Returns a dictionary that contains attributes related to any preprocessing function .
Return type: dictionary
-
pre_process.
get_preprocess_val
(ppln_sans_predictor, initial_colnames, model)[source]¶ Parameters: - model – Contains an instance of Sklearn model
- ppln_sans_predictor – Contains an instance of Sklearn Pipeline
- initial_colnames (list) – Contains list of feature/column names.
Returns: - pml_pp (dictionary)
- Returns a dictionary that contains data related to pre-processing
-
pre_process.
imputer
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s Imputer preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to Imputer preprocessing.
Return type: dictionary
-
pre_process.
lbl_binarizer
(trfm, col_names, **kwargs)[source]¶ Parameters: - trfm – Contains the Sklearn’s Label Binarizer preprocessing instance.
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to Label Binarizer preprocessing.
Return type: dictionary
-
pre_process.
lbl_encoder
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s LabelEncoder preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to LabelEncoder preprocessing.
Return type: dictionary
-
pre_process.
max_abs_scaler
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s MaxabsScaler preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to MaxabsScaler preprocessing.
Return type: dictionary
-
pre_process.
min_max_scaler
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s MinMaxScaler preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to MinMaxScaler preprocessing.
Return type: dictionary
-
pre_process.
pca
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s PCA preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to PCA preprocessing.
Return type: dictionary
-
pre_process.
polynomial_features
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s PolynomialFeatures preprocessing instance.
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to PolynomialFeatures preprocessing.
Return type: dictionary
-
pre_process.
rbst_scaler
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s RobustScaler preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to RobustScaler preprocessing.
Return type: dictionary
-
pre_process.
std_scaler
(trfm, col_names, **kwargs)[source]¶ Parameters: - trfm – Contains the Sklearn’s Standard Scaler preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to Standard Scaler preprocessing.
Return type: dictionary
-
pre_process.
tfidf_vectorizer
(trfm, col_names)[source]¶ Parameters: - trfm – Contains the Sklearn’s TfIdfVectorizer preprocessing instance
- col_names (list) – Contains list of feature/column names. The column names may represent the names of preprocessed attributes.
Returns: pp_dict – Returns a dictionary that contains attributes related to TfIdfVectorizer preprocessing.
Return type: dictionary


Edit your Donations Posts
Here you can edit your donations or if you don't have any consider make one.
Caring is sharing. Spread the love.
Edit Your Borrow/Exchange Posts
Here you can edit your things that you want to borrow or exchange. If you have unused items consider to add a post.
You can give new life to the things you don't want.
Edit Your Food Sales & Offers Posts
Here you can edit your food sales if you are a business that cares. Don't waste food. Make offers or donate.
Edit Your Local Jobs Posts
Here you can find your seasonal job posts.


distri supersilverhaze (2020-05-16)
If you’re not familiar, distri is a Linux distribution to research fast package management.
You can read more about distri starting in my introduction blog post, then in my series of blog posts about distri.
Please direct any questions or feedback to the distri mailing list.
Changes since the last release
The following sections briefly cover new features in distri, with links to more details.
If you’re curious, you can also browse the commits since the last release.
minitrd
Building a distri disk image (using e.g. make image
or distri pack
directly)
is now significantly faster, because the most time-consuming step has been
replaced: initrds are no longer built with dracut
, but with minitrd
, a custom
from-scratch implementation optimized for
speed.
Whereas it previously took ≈40 seconds, a full distri disk image can now be generated in 4 seconds (with warm caches)!
Debugging
I have previously written about the debugging experience in Debian, which left a lot to be desired. This release of distri comes with two features that result in what I consider the gold standard of debugging experience.
Debugging: package sources
All package sources are now available under /usr/src/
,
e.g. /usr/src/procps-ng-amd64-3.3.15-8/
. This is powered by:
-
The
srcfs
service, which (likedebugfs
for/ro-dbg
) is adistri fuse
daemon which lazily downloads packages from the repository when they are accessed. -
distri build
now writes a source squashfs images. Files which are referenced by debug info and cannot be found in the source directory will be taken from the build directory. This makes generated files available for debugging at source level.
Caveat: 15 packages contain at least one generated source code file which is unavailable, to be fixed at a later date.
Debugging: DWARF debug symbols
The DWARF debug symbols of all packages
are available through /ro-dbg
,
e.g. /ro-dbg/emacs-amd64-26.3-15/debug/.build-id/d8/149e8d4e11dc451ac5e718dfc44344c610e23e.debug
. While
the backing debugfs
service was already included in the previous release, its
reliability has been improved: distri fuse -autodownload
now keeps retrying
when started without network connectivity.
Caveat: 16 packages do not currently ship debug symbols, even though they should. A number of other packages do not ship debug symbols because they do not contain ELF files.
FUSE performance
distri fuse
: avoid running out of file descriptors with many packages by increasing the open file limitdistri fuse
: significant optimizations in scanPackages (now >3x as fast)- Cache file lookups resulting in
-ENOENT
. This speeds up dynamic library loading when starting programs. - issue #59 contains an overview of FUSE optimizations that were applied and are yet to be explored.
Package build performance
Improving the package build performance results in faster batch builds, and a better interactive development experience when iterating on a single package.
make
4.3 fixes performance issues with heavily concurrent builds, e.g.linux
(down from over an hour to merely 10 minutes).distri batch
anddistri build
now write a chrome://tracing profile by default (including CPU user/sys counters and MemAvailable counter)- The FUSE performance optimizations listed in the previous section significantly speed up package building, too. E.g.
gtk+-2
now builds twice as fast (≈2 minutes down to ≈1 minute). - see https://github.com/distr1/distri/issues/59 for details
- use
${DISTRI_JOBS}
instead of hard-coded-j8
, adddistri build -jobs
flag distri build
: ninja: explicitly specify -j, ninja falls back to 3 without the/proc
file system
txtpbfmt
We now use the txtpbfmt
Go package (and
program) to enforce consistent
formatting of build.textproto
files across the repository.
Furthermore, txtpbfmt
allows for programmatic modification of build.textproto
files. The distri scaffold
subcommand uses txtpbfmt
to only update the upstream url
, hash
and version
fields when the package build.textproto
file already exists. In particular, this means that manual additions (including comments!) are preserved.
To make upgrading packages to more recent upstream versions even more convenient, the distri scaffold
subcommand now has a -pull
flag which will heuristically (see repobrowser for more details) pull in a new upstream version:
distri scaffold -pull google-chrome
2020/05/12 09:23:25 not up to date: updating from 80.0.3987.106-1 to 81.0.4044.138-1
diff --git i/pkgs/google-chrome/build.textproto w/pkgs/google-chrome/build.textproto
index 91e4113..589300a 100644
--- i/pkgs/google-chrome/build.textproto
+++ w/pkgs/google-chrome/build.textproto
@@ -1,6 +1,6 @@
-source: "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_80.0.3987.106-1_amd64.deb"
-hash: "33bdf0232923d4df0a720cce3a0c5a76eba15f88586255a91058d9e8ebf3a45d"
-version: "80.0.3987.106-1-15"
+source: "http://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_81.0.4044.138-1_amd64.deb"
+hash: "9d13d41d79ce1f04d1f150b5d22fffd31779224cc7d8274f8479b06bcfe6846a"
+version: "81.0.4044.138-1-16"
pull: {
debian_packages: "https://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages"
}
repobrowser
The distri repo browser is now available at https://browse.distr1.org!
Similar to https://godoc.org/, the distri repo browser can visualize the contents of any distri repository. The public instance at https://browse.distr1.org is restricted to repositories hosted on https://repo.distr1.org for the time being.
The repo browser displays not only the current versions of all packages in the repository, but also flags packages as out of date in case a more recent upstream version is known.
repobrowser: upstream check heuristic
Checking upstream for newer versions is done largely heuristically. For a few popular services (GitHub, GitLab, Go modules, etc.), service-specific APIs are used. More specific code can be added where required, but thus far, the heuristic covers the vast majority of packages.
34 packages (6.2%) are currently not categorized because the upstream check failed.
For some packages, this is expected: for example autoconf2.13
is technically
out of date (autoconf
2.69 is current), but mozjs
specifically requires the
older 2.13, so we will need to keep that outdated package around.
In other cases, upstream is unreachable. Either temporarily (server issues, like
recently with freedesktop.org) or permanently, e.g. giblib
, where the upstream
URL results in a connection refused error for years.
Sometimes the heuristic results in a false-positive result: the package is shown
as up-to-date, but a new major version is available in a different
subdirectory. Some projects (e.g. util-linux
) publish release within a major
version in their own subdirectory,
e.g. https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.32/util-linux-2.32.1.tar.xz.
The heuristic should be changed to detect that situation, which is tracked in issue #68.
Tab completion
Tab completion for package installation is now available by default:
Press the tab key after entering distri install
and you will be presented
with a list of available packages.
This is powered by distri list
, which fetches the repository metadata on demand.
Side note: the default shell for the root
account was switched from bash
to
zsh
for this, which also enables history by default.
New packages
A few new packages have been added, typically because I needed them on my test machine:
bluez, dnsmasq, dunst, encfs, intel-ucode, linux-cpupower, mesa-demos, nano, pigz, screen, tmux, upower, vim, wget, xclip, xwininfo
New upstream versions
A number of packages has been updated to their current upstream versions:
- 432 packages (79.56%) are up to date
- 68 packages (12.52%) have a newer upstream available
- 43 packages are go modules with a newer minor version
- 25 packages are not go modules, but upstream packages where something blocks us from updating, e.g. new bugs or build failures with downstreams
Hygiene
- All
distri(1)
commands now handle interruptions (SIGINT
,SIGTERM
) and clean up temporary files. distri build
now actually mounts the source directory read-only (Linux ignores theMS_RDONLY
flag for bind mounts).distri patch
now provides a proper interactive shell.distri build
now logs the whole build output (including distri messages), not just the build steps.distri build
’s-debug
flag now accepts the name of a stage when to spawn a debug shell, e.g.after-install
.
Microcode
GRUB 2.04 now applies CPU microcode updates for Intel CPUs at early boot (amd-ucode
is just not yet packaged).
Makefile
- The
kgdb=
andkernel=
parameters allow easier kernel debugging - The
screen
target starts a developmentscreen(1)
session - The
usb
target writes the distri image to e.g. a USB stick:
make usb USB_DISK_ID=usb-SanDisk_Extreme_Pro_12345678D99C-0:0
autobuilder
More work went into the autobuilder, but it is not deployed yet.
The autobuilder should eventually build every git commit, so that we have quick, automated feedback regarding possible breakages, and an easy way to test the current version of distri, whether released or not.
Due to the large data volume (dozens of gigabytes per commit) and operational challenges (building a single commit from scratch takes ≈2 hours on an Intel Core i9-9900K), this setup requires careful tweaking.
Update instructions
To set expectations: due to its experimental nature, distri does not make any guarantees that updates will work. We try to make them work, as long as you follow the update instructions described here. Good luck! :)
Ensuring enough free disk space
The jackherer
disk image is 7 GB in size, which is not sufficient to hold the default installation in both versions (temporarily). Double the image in size on the host:
truncate -s +$((7*1024*1024*1024)) distri-disk.img
…and enlarge the file systems within the image:
distri install golang && go get github.com/google/embiggen-disk && ~/go/bin/embiggen-disk -verbose /
Consider switching from dracut to minitrd
To switch from dracut to minitrd, use:
echo minitrd > /etc/distri/initramfs-generator
This will be effective upon the next installation of the linux
package, including the one in the distri update
step below.
Updating packages
Switch to the new release’s package repository:
echo https://repo.distr1.org/distri/supersilverhaze > /etc/distri/repos.d/distr1.repo
Workaround: Update the distri1
package, which contains the distri(1)
command, before any others:
distri install distri1
This is required for the next command to work properly, and should have been an automatic step. Unfortunately, the previously released version has a bug: it accidentally ran the same old version again instead of the newly installed one.
distri update
Because systemctl
fully resolves symlinks when creating symbolic links in
/etc/systemd/system
to enable a unit, the old version of e.g. SSH remains
enabled, and the new version explicitly needs to be enabled (improvements tracked in issue
#69):
systemctl --root=/ disable ssh
systemctl --root=/ enable ssh
Reboot into the new system to pick up all new package versions:
reboot
If you want, you can delete the old packages from your package store:
distri gc
…but you can also keep them so that you can use older versions to reproduce or work around a bug.
© 2018 Michael Stapelberg and contributors


Home
Profile
Event Template
Social dance?
Workshop?
Competition?
Prices start from $
Current attendees:
I'm going!
Discussion:
Add your thoughts!


Package net.discordservices.dservices4j
Installation
Please replace API_VERSION
with the latest version you can find on the
GitHub README.md.
Gradle (recommended)
repositories{
maven{ url = 'https://repo.codemc.io/repository/maven-public' }
}
dependencies{
compile 'net.discordservices:dservices4j:API_VERSION'
}
Maven
<repositories>
<repository>
<id>jcenter</id>
<name>jcenter-bintray</name>
<url>https://repo.codemc.io/repository/maven-public</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.discordservices</groupId>
<artifactId>dservices4j</artifactId>
<version>API_VERSION</version>
</dependency>
</dependencies>
Manual
We do not recommend using jar files directly and instead use one of the above dependency management systems.If you still want to do it manually, or can't use one of the other option, head over to the GitHub releases page and download the jar files from there.
Note that you will not receive any support when using this method.
Usage
To use the Java Wrapper, you should first get an instance of the
DServices4J class
as all other classes and methods will be used
through it.
Afterwards can you just use the corresponding Getter Methods to retrieve an instance of the classes you need.
Example
// Get a DServices4J instance
DServices4J dservices = new DServices4J.Builder()
.setToken("api.token.here")
.setId("botId")
.build();
// Get Commands instance
Commands commands = dservices.getCommands();
// Add a command to the list.
// The CommandInfo class can be either CommandInfo(name, description, category) or
// CommandInfo(name, null, category) for no description.
commands.addCommand(new CommandInfo("vote", "Let's you vote for the bot", "info"));
// Post commands
commands.postCommands();
// Get News instance
News news = dservices.getNews();
// Post news
news.postNews("New Command", "A vote command has been added!");
// Post an error/issue
news.postNews("Discord issues", "Discord has currently issues!", true);
// Get Stats instance
Stats stats = dservices.getStats();
// Post Server count
stats.postStats(1000);
// Post Server count with shard count
stats.postStats(3000, 3);
-
Class Summary Class Description Commands Class used for posting Command information (name, description and category) to the Discordservices API.Commands.CommandInfo Class used for theaddCommand(...)
methods.DServices4J Main class used for the Java Wrapper.DServices4J.Builder Builder class for easier setup of theDServices4J
class.News Class used to post News to the bot page on Discordservices.Stats Class used to post Bot statistics (Server and shard count) to the Discordservices API.


One of the main reasons I joined DBC was to work with a community of people who all wanted to learn programming together. It helps to keep me motivated and helps me learn more quickly as well. Because of this, I really enjoyed the pairing sessions I had. Not only do I get to have someone else to bounce ideas off of to complete a challenge, but I also get to listen to their perspective about how to go about things. I always find it interesting how despite the end result being the same, two people can code things so differently. I found it rewarding to teach someone something they're unfamiliar with, and the same goes for when I'm the one being taught something new. I didn't find any moment frustrating or difficult because the people I worked with were all amazing and were easy to work with.
I haven't received any feedback from Socrates yet, so I can't comment on any of it. I'll update this if I do, however. As for writing feedback, I found it nice to be able to talk about how the session went after it was over. The most difficult part for me was specifying exactly what went well, because for me it felt like a lot of moments just happened naturally and we just went with the flow. I also don't have a good idea of what Actionable feedback is supposed to be like, but I wish to find some good examples.


At times, having the ability to maintain separate resource files can be useful. While the default resource file is resources.resjson, to load resources from additional files, string identifiers should use path-absolute URI references that start with '/' and the filename (e.g., /errors/scenario8error loads from the errors.resjson file).
Resource ids are URIs which are typically relative to ms-resource:///resources/, which represents the resources.resjson file in the main package. Other packages can be referenced in the URI hostname (e.g. ms-resource://packagename/).


| Class and Description |
|---|
| MetadataFacet |
| MetadataFacetFactory |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| Class and Description |
|---|
| MetadataFacet |
| MetadataFacetFactory |
| Class and Description |
|---|
| CiManagement
Information about the CI system used by the project.
|
| Dependency
Information about a dependency that this project has on another project or artifact.
|
| FacetedMetadata
Base class for metadata that is contains facets for storing extensions by various plugins.
|
| IssueManagement
Information about the issue management system used by the project.
|
| License
A description of a particular license used by a project.
|
| MailingList
Information about the available mailing lists for communicating with the project.
|
| MetadataFacet |
| Organization |
| ProjectVersionReference.ReferenceType |
| Scm |
| Class and Description |
|---|
| MetadataFacet |
| Class and Description |
|---|
| MetadataFacet |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| MetadataFacet |
| ProjectMetadata |
| ProjectVersionMetadata |
| ProjectVersionReference |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| Dependency
Information about a dependency that this project has on another project or artifact.
|
| FacetedMetadata
Base class for metadata that is contains facets for storing extensions by various plugins.
|
| License
A description of a particular license used by a project.
|
| MailingList
Information about the available mailing lists for communicating with the project.
|
| MetadataFacet |
| MetadataFacetFactory |
| ProjectMetadata |
| ProjectVersionMetadata |
| ProjectVersionReference |
| Class and Description |
|---|
| CiManagement
Information about the CI system used by the project.
|
| Dependency
Information about a dependency that this project has on another project or artifact.
|
| IssueManagement
Information about the issue management system used by the project.
|
| License
A description of a particular license used by a project.
|
| MailingList
Information about the available mailing lists for communicating with the project.
|
| Organization |
| Scm |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| MetadataFacet |
| MetadataFacetFactory |
| ProjectMetadata |
| ProjectVersionMetadata |
| ProjectVersionReference |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| MetadataFacet |
| MetadataFacetFactory |
| ProjectMetadata |
| ProjectVersionMetadata |
| ProjectVersionReference |
| Class and Description |
|---|
| MetadataFacet |
| MetadataFacetFactory |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| ProjectMetadata |
| ProjectVersionMetadata |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| CiManagement
Information about the CI system used by the project.
|
| Dependency
Information about a dependency that this project has on another project or artifact.
|
| IssueManagement
Information about the issue management system used by the project.
|
| License
A description of a particular license used by a project.
|
| MailingList
Information about the available mailing lists for communicating with the project.
|
| MetadataFacet |
| MetadataFacetFactory |
| Organization |
| ProjectMetadata |
| ProjectVersionMetadata |
| Scm |
| Class and Description |
|---|
| MetadataFacet |
| MetadataFacetFactory |
| ProjectVersionMetadata |
| Class and Description |
|---|
| ProjectVersionMetadata |
| Class and Description |
|---|
| ProjectVersionMetadata |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| ProjectVersionMetadata |
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
| Class and Description |
|---|
| ArtifactMetadata
Metadata stored in the content repository for a particular artifact.
|
Copyright © 2006–2022 The Apache Software Foundation. All rights reserved.


--- layout: post title: waiting room sketch date: '2018-04-06T11:30:29+02:00' categories: - Sketchbooks - Sketches picture_url: https://film-Storyboards.tumblr.com/post/172660048945 ---


| DOSE: |
2 bowls |
smoked |
Catnip |
(plant material) |
I am an experienced user of several of the psychedelics and am a frequent user of cannabis. In fact, I really like to smoke cannabis every day if possible and when I can not find any, I am compelled to try new things as a substitute. I am also a gardener and have several herbs in my garden including catnip (which I grow for my two lovely cats). I sometimes partake of catnip tea and have experienced subtle sedative effects from it. I had heard of smoking the leaves and flowers of the plant and tonight, being without any cannabis to toke on, I decided to give the catnip a try.
I used air-dried catnip leaves and flowers from the plant in my garden. I started with a fully-packed bowl.  Although this may sound pleasant, it most definitely was not. It really irritated my throat (and I'm a habitual smoker of menthol cigarettes). The first bowl that I smoked had a definite effect, somewhat reminiscent of smoking strong datura leaves. At the end of this bowl, I decided to pack another to get more intense effects.
The second bowl that I smoked was fully packed as well and by the time that I was done smoking it, I was definitely high. The feeling was not unlike cannabis but really more like alcohol intoxication. My eyes seemed to bounce around making it difficult to focus on anything. My thoughts were clear and seemed unaffected. Visually, I experience slightly increased phosphene activity (I was smoking in a pretty dark room and I don't expect that I would have noticed the increased phosphene activity had I been in a more well-lit environment). I felt slightly uncoordinated as if I had a couple of beers but had no difficulty moving about normally.
In conclusion, I would have liked to smoke a third bowl to increase the effects even more but the taste and throat irritation prevented me from doing so. In fact, the throat irritation may prevent me from doing this ever again. However, I am glad that I tried this method of experiencing this herb and may or may not experiment with some type of extraction (ethyl alcohol should work) in order to create a more potent and more pleasant smoking experience. I should also mention that the catnip from my garden smells SO MUCH STRONGER than the pre-bagged store-bought garbage.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


PDF_setcolor (PHP 4 >= 4.0.5, PECL pdflib >= 1.0.0) PDF_setcolor — Set fill and stroke color 说明 bool PDF_setcolor ( resource $p , string $fstype , string $colorspace , float $c1 , float $c2 , float $c3 , float $c4 ) Sets the current color space and color. 成功时返回 TRUE，或者在失败时返回 FALSE 。 User Contributed Notes 8 notes =============================================================================== Here is a quick snippet to convert CMYK to RGB. It has better precision than a lot of other solutions that also don't factor in colour profiles. '; */ ?> =============================================================================== Damn, this took me some real long time! Maybe it's helpfull for those who even have no idea of color-Schemes like me ;) If u want to generate PDF's for Print Offices u need to set all the colors in CMYK. Here is a Function that will convert RGB to CMYK function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r' => hexdec(substr($color,0,2)), 'g' => hexdec(substr($color,2,2)), 'b' => hexdec(substr($color,4,2))); return $rgb; } function rgb2cmyk($var1,$g=0,$b=0) { if(is_array($var1)) { $r = $var1['r']; $g = $var1['g']; $b = $var1['b']; } else $r=$var1; $cyan = 255 - $r; $magenta = 255 - $g; $yellow = 255 - $b; $black = min($cyan, $magenta, $yellow); $cyan = @(($cyan - $black) / (255 - $black)) * 255; $magenta = @(($magenta - $black) / (255 - $black)) * 255; $yellow = @(($yellow - $black) / (255 - $black)) * 255; return array('c' => $cyan / 255, 'm' => $magenta / 255, 'y' => $yellow / 255, 'k' => $black / 255); } $color=rgb2cmyk(hex2rgb('#FF0000')); pdf_setcolor($pdf, "both", "cmyk", $color['c'], $color['m'], $color['y'], $color['k']); ?> U can call it with parameters (r,g,b) or just an array(r,g,b) that contains these values. Hope it works correct. All testing was fine. =============================================================================== Here's a better implementation for setting HTML hexadecimal colors: function pdf_setcolor_hex($hexcolor, $type = '') { global $pdf; ## match this to your pdf resource handle $color['r'] = hexdec(substr($hexcolor, 0, 2))/255; $color['g'] = hexdec(substr($hexcolor, 2, 2))/255; $color['b'] = hexdec(substr($hexcolor, 4, 2))/255; if ($type != 'fill' && $type != 'stroke') $type = 'both'; pdf_setcolor($pdf, $type, 'rgb', $color['r'], $color['g'], $color['b']); } Sample usage: pdf_setcolor_hex('FFFFFF', 'fill'); -Derek =============================================================================== Here's a function for converting HTML hexadecimal colors to RGB decimals suitable for this function: $color_hex = "FF0000"; ## whatever hex color you want $color = convert_hexcolor_rgbdec($color_hex); pdf_setcolor($pdf, 'fill', 'rgb', $color['r'], $color['g'], $color['b']); function convert_hexcolor_rgbdec($color_hex) { $color['r'] = hexdec(substr($color_hex, 0, 2))/255; $color['g'] = hexdec(substr($color_hex, 2, 2))/255; $color['b'] = hexdec(substr($color_hex, 4, 2))/255; return $color; } -Derek =============================================================================== Bonjour, Cette fonction est utilisable pour d finir une couleur de police. Hello, I search for the way of setting colors for the font in pdf and I find this. Hope it could help. =============================================================================== If you want to change the font color you need to set type to "fill", not "stroke" ("both" also works, of course). =============================================================================== If you encounter errors of the form function 'PDF_setcolor' must not be called in 'path' scope this generally means that you've called the PDFLib functions in the wrong order. For example, the following would be *incorrect* because PDF_rect marks the beginning of the "path scope", and set_color must not be called in path scope: The correct order of function calls is as follows:
// Correct order of function calls PDF_setcolor($pdf,$red,$green,$blue); PDF_rect($pdf,0,0,$width,$height); PDF_fill($pdf); ?> =============================================================================== This seems a little less complicated: this is the color you want to use : 'FF11AA'


For commissions or questions you can drop me a line on my mail:
For bug reports instead, please open an issue on github.


List
, creating a new List
List
, creating a new List
AltFuture
finishes.MirrorService
to copy
changes in the data model onto the screen.IThreadType
implementations.IThreadType.executeNext(IAction)
, however it is only moved if it is already in the
queue.


---
layout: post
title: Frames from animatic storyboard series
date: '2013-04-19T14:26:00+02:00'
categories:
- Storyboards
- Aljubarrota
picture_url: https://film-Storyboards.tumblr.com/post/48373490600/frames-extracted-from-animatic-Storyboards-series
---
Frames extracted from animatic Storyboards series done for Aljubarrota Battle Interpretation Centre audio-guides.


We can see that sachin scored more than a thousand runs 7 times in his career
He scored most of his runs against the top cricketing nations like Australia, Sri Lanka and Pakistan
Be it setting a target or chasing one, he was always good and scored runs in both the innings equally well
He averaged above 40 in both the innings


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 10-12
Dietary
Although I first came up with this recipe because I had someone coming for supper who –genuinely – couldn’t eat wheat or dairy, it is so meltingly good, I now make it all the time for those whose life and diet are not so unfairly constrained, myself included.
Preheat the oven to 170C/325F/Gas 3. Grease a 23cm/9in springform cake tin with a little oil and line the base with baking parchment.
Measure and sift the cocoa powder into a bowl or jug and whisk in the boiling water until you have a smooth, chocolatey, still runny (but only just) paste. Whisk in the vanilla extract, then set aside to cool a little.
In another smallish bowl, combine the ground almonds (or flour) with the bicarbonate of soda and a pinch of salt.
Put the sugar, olive oil and eggs into the bowl of a freestanding mixer with the paddle attachment (or other bowl and whisk arrangement of your choice) and beat together vigorously for about three minutes until you have a pale-primrose, aerated and thickened cream.
Turn the speed down a little and pour in the cocoa mixture, beating as you go, and when all is scraped in you can slowly tip in the ground almonds (or flour) mixture.
Scrape down and stir a little with a spatula, then pour this dark, liquid batter into the prepared tin. Bake for 40-45 minutes or until the sides are set and the very centre, on top, still looks slightly damp. A cake tester should come up mainly clean but with a few sticky chocolate crumbs clinging to it.
Let it cool for 10 minutes on a wire rack, still in its tin, and then ease the sides of the cake with a small metal spatula and spring it out of the tin. Leave to cool completely or eat while still warm with some ice cream, as a pudding.
You need JavaScript to view this clip.
Greasing and lining cake tins


FIEND WITHOUT A FACE
A film review by Shane R. Burridge
Copyright 1996 Shane R. Burridge
(1957) 70m.
Low-budget horror flick follows similar paths to most monster movies of the 50's. USAF Major (Marshall Thompson) is assigned to investigate the death of a local farmer near an isolated airbase in Canada. There may be a link between other mysterious deaths and radar experiments conducted by the base. Meanwhile an elderly professor (Kynaston Reeves) is pursuing research of his own. Scenario falls into the wave of horror productions that presented atomic radiation as the new boogeyman of the postwar era. Its monster, however, is not the fallout-mutated freak favored by other B-pictures. In fact, it's not until the film's end that we see the creature(s) at all. Story's premise mixes telekinetic energy and nuclear radiation in a fairly hodgepodge manner - the professor's simple mind-concentration experiments might as well be witchcraft or demon-summoning. Arbitrary treatment of science almost loses only anti-war element film has to offer. The creature is clearly meant to personify the spirit of war latent in mankind - after all, as the prof spells out, it is evil and feeds on radiation (if it feeds on radiation then why is it attacking people for mental energy?). More revealing is the way the story assumes that thoughts released to wander free of human minds will automatically become amoral and harmful. So much for the concept of free will! Besides, it's never established whether the creature is a product of the id (as in FORBIDDEN PLANET, which came out a year earlier), the ego, or the superego; or whether it is from the reptilian, mammalian, or human parts of the brain. At least these details might have provided some rationale for the monster, instead of simply writing off humanity as being inherently self-destructive. In spite of flaws, film is still a notch above most B-pics, thanks to a couple of creepy moments, and a keen finale in a living room.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Definitions
For the purpose of this study, the definitions of capacity planning and resource management are below. Refer to these definitions as you assess your organization’s maturity:
- Capacity Planning
- The act of assessing resource availability during the project selection and prioritization process considering resource proficiency levels and potential throughput. This ensures that the organization has the capacity to take on investments at the right time and with the right resources.
- Resource Management
- The ongoing, tactical assignment of personnel to planned and unplanned activities, the selection and identification of resources by skill, type, cost center, and/or other categories, and the maintenance of resource data.


a web developer and programmer in the making, and I am currently
undertaking the EDU learning program with Outbox. I am also a
student at Kabale University in my second semester of the first
year pursuing a Bachelor's Degree in Computer Science. I currently
live in Kampala specifically Kyebando- Kisalosalo. I was born in 2000
on the 6th of March.
My hobbies are playing video games especially soccer like FIFA 20 and
PES 2020 plus a few racing games, swimming, watching soccer(and playing
at times), anime, comedy series and listening to music
I've just started building my skills but I can currently say I'm good
at writing HTML and CSS code though I am still learning more to get
better,
and I am also currently self-learning Python and C+. My best programming
language is Python so far.
Click here to check out my Github profile to view more of my projects and work.
Tel:+256 708507314
<EMAIL_ADDRESS>Twitter:@Adrian Mukisa
Facebook:Adrian Mukisa


A trait for representing equivalence relations.
A trait for totally ordered data.
A trait for representing total orderings.
A trait for representing partial orderings.
A class for partially ordered data.
Conversions which present a consistent conversion interface across all the numeric types.
The double
value that is closer than any other to
e
, the base of the natural logarithms.
The double
value that is closer than any other to
e
, the base of the natural logarithms.
The double
value that is closer than any other to
pi
, the ratio of the circumference of a circle to its
diameter.
The double
value that is closer than any other to
pi
, the ratio of the circumference of a circle to its
diameter.
Converts rectangular coordinates (x, y)
to polar
(r, theta)
.
Converts rectangular coordinates (x, y)
to polar
(r, theta)
.
the abscissa coordinate
the ordinate coordinate
the theta component of the point (r, theta)
in polar coordinates that corresponds to the point
(x, y)
in Cartesian coordinates.
Returns Euler's number e
raised to the power of a
double
value.
Returns Euler's number e
raised to the power of a
double
value.
the exponent to raise e
to.
the value ea
, where e
is the base of the natural logarithms.
Returns the value of the first argument raised to the power of the second argument.
Returns the value of the first argument raised to the power of the second argument.
the base.
the exponent.
the value xy
.
Returns a double
value with a positive sign, greater than
or equal to 0.0
and less than 1.0
.
Returns a double
value with a positive sign, greater than
or equal to 0.0
and less than 1.0
.
Returns the double
value that is closest in value to the
argument and is equal to a mathematical integer.
Returns the double
value that is closest in value to the
argument and is equal to a mathematical integer.
a double
value
the closest floating-point value to a that is equal to a mathematical integer.
Returns the closest long
to the argument.
Returns the closest long
to the argument.
a floating-point value to be rounded to a long
.
the value of the argument rounded to the nearest
long
value.
Converts an angle measured in radians to an approximately equivalent angle measured in degrees.
Converts an angle measured in radians to an approximately equivalent angle measured in degrees.
angle, in radians
the measurement of the angle x
in degrees.
Converts an angle measured in degrees to an approximately equivalent angle measured in radians.
Converts an angle measured in degrees to an approximately equivalent angle measured in radians.
an angle, in degrees
the measurement of the angle x
in radians.
The package object
scala.math
contains methods for performing basic numeric operations such as the elementary exponential, logarithm, square root, and trigonometric functions.


Copy tables to same source, if necessary
auto_copy(x, y, copy = FALSE, ...)
x, y
y will be copied to x, if necessary.
y
x
copy
If x and y are not from the same data source, and copy is TRUE, then y will be copied into the same src as x. This allows you to join tables across srcs, but it is a potentially expensive operation so you must opt into it.
TRUE
...
Other arguments passed on to methods.


{% include head.html %}
{% include nav.html %} {% include header.html %} {% include how-it-works.html %} {% include about-our-journey.html %} {% include preregister.html %} {% include aboutus.html %} {% include blog.html %} {% include partners.html %} {% include scripts.html %}


Andrea Ramírez Portfolio 👩🏽💻
I am Computer Science student at Tecnológico de Monterrey from Venezuela 🇻🇪
Currently enrolled in the Bachelor of Computer Technologies Honors Program
🧚🏽♀ In love with learning and working with others 💙
My greatest interests in tech are Mobile Development and Human Computer Interaction
In my free time I enjoy dancing and doing outdoor activities 🏞
And while you are here you cand add me 😉
Click here for a random fun fact about me:


{{weather.cityState}}
{{weather.temp}}
{{weather.weatherDesc}}
{{weather.nextFiveDayArray[$index]}}
{{day.summary}}
{{day.temperatureMax}}° / {{day.temperatureMin}}°
{{weather.nextFiveDayArray[$index]}}
{{day.summary}}
{{day.temperatureMax}}° / {{day.temperatureMin}}°