|
Panda3D
|
A DynamicTextFont is a special TextFont object that rasterizes its glyphs from a standard font file (e.g. More...
Public Member Functions | |
| __init__ (const DynamicTextFont copy) | |
| __init__ (const Filename font_filename, int face_index) | |
| The constructor expects the name of some font file that FreeType can read, along with face_index, indicating which font within the file to load (usually 0). More... | |
| __init__ (str font_data, int data_length, int face_index) | |
| This constructor accepts a table of data representing the font file, loaded from some source other than a filename on disk. More... | |
| clear () | |
| Drops all the glyphs out of the cache and frees any association with any previously-generated pages. More... | |
| int | garbageCollect () |
| Removes all of the glyphs from the font that are no longer being used by any Geoms. More... | |
| int | getAnisotropicDegree () |
| Returns the current anisotropic degree for textures created for this font. More... | |
| const LColor | getBg () |
| Returns the color of the background pixels of the font as they are rendered into the font texture. More... | |
| const LColor | getFg () |
| Returns the color of the foreground pixels of the font as they are rendered into the font texture. More... | |
| int | getFontPixelSize () |
| This is used to report whether the requested pixel size is being only approximated by a fixed-pixel-size font. More... | |
| float | getLineHeight () |
| Returns the number of units high each line of text is. More... | |
| SamplerState::FilterType | getMagfilter () |
| Returns the filter type used when enlarging the textures created for this font. More... | |
| SamplerState::FilterType | getMinfilter () |
| Returns the filter type used when minimizing the textures created for this font. More... | |
| str | getName () |
| Disambiguates the get_name() method between that inherited from TextFont and that inherited from FreetypeFont. More... | |
| bool | getNativeAntialias () |
| Returns whether Freetype's built-in antialias mode is enabled. More... | |
| int | getNumPages () |
| Returns the number of pages associated with the font. More... | |
| const LColor | getOutlineColor () |
| Returns the color of the outline pixels of the font as they are rendered into the font texture. More... | |
| float | getOutlineFeather () |
| Returns the softness of the outline pixels of the font, as a value in the range 0.0 to 1.0. More... | |
| float | getOutlineWidth () |
| Returns the width of the outline pixels of the font, as the number of points beyond each letter. More... | |
| DynamicTextPage | getPage (int n) |
| Returns the nth page associated with the font. More... | |
| list | getPages () |
| const LVecBase2i | getPageSize () |
| Returns the size of the textures that are created for the DynamicTextFont. More... | |
| int | getPageXSize () |
| Returns the x size of the textures that are created for the DynamicTextFont. More... | |
| int | getPageYSize () |
| Returns the y size of the textures that are created for the DynamicTextFont. More... | |
| float | getPixelsPerUnit () |
| Returns the resolution of the texture map. More... | |
| float | getPointSize () |
| Returns the point size of the font. More... | |
| float | getPolyMargin () |
| Returns the number of pixels of padding that is included around each glyph in the generated polygons. More... | |
| TextFont::RenderMode | getRenderMode () |
| Returns the way the glyphs on this particular font are generated. More... | |
| float | getScaleFactor () |
| Returns the antialiasing scale factor. More... | |
| float | getSpaceAdvance () |
| Returns the number of units wide a space is. More... | |
| Texture::Format | getTexFormat () |
| Returns the texture format used to render the individual pages. More... | |
| int | getTextureMargin () |
| Returns the number of pixels of padding that is added around the border of each glyph in the texture map. More... | |
| TextFont | makeCopy () |
| Returns a new copy of the same font. More... | |
| setAnisotropicDegree (int anisotropic_degree) | |
| Enables or disables anisotropic filtering on the textures created for this font. More... | |
| setBg (const LColor bg) | |
| Changes the color of the background pixels of the font as they are rendered into the font texture. More... | |
| setFg (const LColor fg) | |
| Changes the color of the foreground pixels of the font as they are rendered into the font texture. More... | |
| setMagfilter (SamplerState::FilterType filter) | |
| Sets the filter type used when enlarging the textures created for this font. More... | |
| setMinfilter (SamplerState::FilterType filter) | |
| Sets the filter type used when minimizing the textures created for this font. More... | |
| setNativeAntialias (bool native_antialias) | |
| Sets whether the Freetype library's built-in antialias mode is enabled. More... | |
| setOutline (const LColor outline_color, float outline_width, float outline_feather) | |
| Sets up the font to have an outline around each font letter. More... | |
| setPageSize (const LVecBase2i page_size) | |
| Sets the x, y size of the textures that are created for the DynamicTextFont. More... | |
| setPageSize (int x_size, int y_size) | |
| Sets the x, y size of the textures that are created for the DynamicTextFont. More... | |
| bool | setPixelsPerUnit (float pixels_per_unit) |
| Set the resolution of the texture map, and hence the clarity of the resulting font. More... | |
| bool | setPointSize (float point_size) |
| Sets the point size of the font. More... | |
| setPolyMargin (float poly_margin) | |
| Sets the number of pixels of padding that is included around each glyph in the generated polygons.  More... | |
| bool | setScaleFactor (float scale_factor) |
| Sets the factor by which the font is rendered larger by the FreeType library before being filtered down to its actual size in the texture as specified by set_pixels_per_unit(). More... | |
| setTextureMargin (int texture_margin) | |
| Sets the number of pixels of padding that is added around the border of each glyph before adding it to the texture map. More... | |
| write (Ostream out, int indent_level) | |
| Public Member Functions inherited from TextFont | |
| const TextGlyph | getGlyph (int character) |
| Gets the glyph associated with the given character code, as well as an optional scaling parameter that should be applied to the glyph's geometry and advance parameters. More... | |
| float | getKerning (int first, int second) |
| Returns the amount by which to offset the second glyph when it directly follows the first glyph. More... | |
| float | getLineHeight () |
| Returns the number of units high each line of text is. More... | |
| float | getSpaceAdvance () |
| Returns the number of units wide a space is. More... | |
| bool | isValid () |
| Returns true if the font is valid and ready to use, false otherwise. More... | |
| TextFont | makeCopy () |
| setLineHeight (float line_height) | |
| Changes the number of units high each line of text is. More... | |
| setSpaceAdvance (float space_advance) | |
| Changes the number of units wide a space is. More... | |
| write (Ostream out, int indent_level) | |
| Public Member Functions inherited from TypedObject | |
| TypeHandle | getType () |
| int | getTypeIndex () |
| Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More... | |
| bool | isExactType (TypeHandle handle) |
| Returns true if the current object is the indicated type exactly. More... | |
| bool | isOfType (TypeHandle handle) |
| Returns true if the current object is or derives from the indicated type. More... | |
| Public Member Functions inherited from ReferenceCount | |
| int | getRefCount () |
| Returns the current reference count. More... | |
| ref () | |
| Explicitly increments the reference count. More... | |
| bool | testRefCountIntegrity () |
| Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
| bool | testRefCountNonzero () |
| Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
| bool | unref () |
| Explicitly decrements the reference count. More... | |
| Public Member Functions inherited from Namable | |
| __init__ (const Namable) | |
| __init__ (str initial_name) | |
| clearName () | |
| Resets the Namable's name to empty. More... | |
| str | getName () |
| bool | hasName () |
| Returns true if the Namable has a nonempty name set, false if the name is empty. More... | |
| output (Ostream out) | |
| Outputs the Namable. More... | |
| setName (str name) | |
| Public Member Functions inherited from FreetypeFont | |
| int | getFontPixelSize () |
| This is used to report whether the requested pixel size is being only approximated by a fixed-pixel-size font. More... | |
| float | getLineHeight () |
| Returns the number of units high each line of text is. More... | |
| bool | getNativeAntialias () |
| Returns whether Freetype's built-in antialias mode is enabled. More... | |
| float | getPixelSize () |
| Returns the size of the font in pixels, as it appears in the texture. More... | |
| float | getPixelsPerUnit () |
| Returns the resolution of the texture map. More... | |
| float | getPointSize () |
| Returns the point size of the font. More... | |
| float | getScaleFactor () |
| Returns the antialiasing scale factor. More... | |
| float | getSpaceAdvance () |
| Returns the number of units wide a space is. More... | |
| FreetypeFont::WindingOrder | getWindingOrder () |
| Returns the winding order set via set_winding_order(). More... | |
| setNativeAntialias (bool native_antialias) | |
| Sets whether the Freetype library's built-in antialias mode is enabled. More... | |
| bool | setPixelSize (float pixel_size) |
| Computes the appropriate pixels_per_unit value to set the size of the font in the texture to the indicated number of pixels. More... | |
| bool | setPixelsPerUnit (float pixels_per_unit) |
| Set the resolution of the texture map, and hence the clarity of the resulting font. More... | |
| bool | setPointSize (float point_size) |
| Sets the point size of the font. More... | |
| bool | setScaleFactor (float scale_factor) |
| Sets the factor by which the font is rendered larger by the FreeType library before being filtered down to its actual size in the texture as specified by set_pixels_per_unit(). More... | |
| setWindingOrder (FreetypeFont::WindingOrder winding_order) | |
| Specifies an explicitly winding order on this particular font. More... | |
Static Public Member Functions | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from TextFont | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from TypedReferenceCount | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from TypedObject | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from ReferenceCount | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from Namable | |
| static TypeHandle | getClassType () |
| Static Public Member Functions inherited from FreetypeFont | |
| static float | getPointsPerInch () |
| Returns the number of points in one inch. More... | |
| static float | getPointsPerUnit () |
| Returns the point size of the font that is one Panda unit high. More... | |
Public Attributes | |
| int | anisotropic_degree |
| Returns the current anisotropic degree for textures created for this font. More... | |
| const LColor | bg |
| Returns the color of the background pixels of the font as they are rendered into the font texture. More... | |
| const LColor | fg |
| Returns the color of the foreground pixels of the font as they are rendered into the font texture. More... | |
| int | font_pixel_size |
| This is used to report whether the requested pixel size is being only approximated by a fixed-pixel-size font. More... | |
| SamplerState::FilterType | magfilter |
| Returns the filter type used when enlarging the textures created for this font. More... | |
| SamplerState::FilterType | minfilter |
| Returns the filter type used when minimizing the textures created for this font. More... | |
| bool | native_antialias |
| Returns whether Freetype's built-in antialias mode is enabled. More... | |
| const LVecBase2i | page_size |
| Returns the size of the textures that are created for the DynamicTextFont. More... | |
| DynamicTextPage | pages [] |
| Returns the nth page associated with the font. More... | |
| float | pixels_per_unit |
| Returns the resolution of the texture map. More... | |
| float | point_size |
| Returns the point size of the font. More... | |
| float | poly_margin |
| Returns the number of pixels of padding that is included around each glyph in the generated polygons. More... | |
| TextFont::RenderMode | render_mode |
| Returns the way the glyphs on this particular font are generated. More... | |
| float | scale_factor |
| Returns the antialiasing scale factor. More... | |
| Texture::Format | tex_format |
| Returns the texture format used to render the individual pages. More... | |
| int | texture_margin |
| Returns the number of pixels of padding that is added around the border of each glyph in the texture map. More... | |
| Public Attributes inherited from TextFont | |
| float | line_height |
| Returns the number of units high each line of text is. More... | |
| float | space_advance |
| Returns the number of units wide a space is. More... | |
| bool | valid |
| Returns true if the font is valid and ready to use, false otherwise. More... | |
| Public Attributes inherited from TypedObject | |
| TypeHandle | type |
| Returns the TypeHandle representing this object's type. More... | |
| Public Attributes inherited from ReferenceCount | |
| int | ref_count |
| The current reference count. More... | |
| Public Attributes inherited from Namable | |
| const String | name |
| Public Attributes inherited from FreetypeFont | |
| FreetypeFont::WindingOrder | winding_order |
| Returns the winding order set via set_winding_order(). More... | |
Additional Inherited Members | |
| Public Types inherited from TextFont | |
| enum | RenderMode { RM_texture = 0, RM_wireframe = 1, RM_polygon = 2, RM_extruded = 3, RM_solid = 4, RM_distance_field = 5, RM_invalid = 6 } |
| Public Types inherited from FreetypeFont | |
| enum | WindingOrder { WO_default = 0, WO_left = 1, WO_right = 2, WO_invalid = 3 } |
A DynamicTextFont is a special TextFont object that rasterizes its glyphs from a standard font file (e.g.
a TTF file) on the fly. It requires the FreeType 2.0 library (or any higher, backward-compatible version).
| __init__ | ( | const DynamicTextFont | copy | ) |
| __init__ | ( | const Filename | font_filename, |
| int | face_index | ||
| ) |
The constructor expects the name of some font file that FreeType can read, along with face_index, indicating which font within the file to load (usually 0).
| __init__ | ( | str | font_data, |
| int | data_length, | ||
| int | face_index | ||
| ) |
This constructor accepts a table of data representing the font file, loaded from some source other than a filename on disk.
| clear | ( | ) |
Drops all the glyphs out of the cache and frees any association with any previously-generated pages.
Calling this frequently can result in wasted texture memory, as any previously rendered text will still keep a pointer to the old, previously- generated pages. As long as the previously rendered text remains around, the old pages will also remain around.
| int garbageCollect | ( | ) |
Removes all of the glyphs from the font that are no longer being used by any Geoms.
Returns the number of glyphs removed.
| int getAnisotropicDegree | ( | ) |
Returns the current anisotropic degree for textures created for this font.
See set_anisotropic_degree().
| const LColor getBg | ( | ) |
Returns the color of the background pixels of the font as they are rendered into the font texture.
See set_bg().
|
static |
| const LColor getFg | ( | ) |
Returns the color of the foreground pixels of the font as they are rendered into the font texture.
See set_fg().
| int getFontPixelSize | ( | ) |
This is used to report whether the requested pixel size is being only approximated by a fixed-pixel-size font.
This returns 0 in the normal case, in which a scalable font is used, or the fixed-pixel-size font has exactly the requested pixel size.
If this returns non-zero, it is the pixel size of the font that we are using to approximate our desired size.
| float getLineHeight | ( | ) |
Returns the number of units high each line of text is.
| SamplerState::FilterType getMagfilter | ( | ) |
Returns the filter type used when enlarging the textures created for this font.
| SamplerState::FilterType getMinfilter | ( | ) |
Returns the filter type used when minimizing the textures created for this font.
| str getName | ( | ) |
Disambiguates the get_name() method between that inherited from TextFont and that inherited from FreetypeFont.
| bool getNativeAntialias | ( | ) |
Returns whether Freetype's built-in antialias mode is enabled.
See set_native_antialias().
| int getNumPages | ( | ) |
Returns the number of pages associated with the font.
Initially, the font has zero pages; when the first piece of text is rendered with the font, it will add additional pages as needed. Each page is a Texture object that contains the images for each of the glyphs currently in use somewhere.
| const LColor getOutlineColor | ( | ) |
Returns the color of the outline pixels of the font as they are rendered into the font texture.
See set_outline().
| float getOutlineFeather | ( | ) |
Returns the softness of the outline pixels of the font, as a value in the range 0.0 to 1.0.
See set_outline().
| float getOutlineWidth | ( | ) |
Returns the width of the outline pixels of the font, as the number of points beyond each letter.
See set_outline().
| DynamicTextPage getPage | ( | int | n | ) |
Returns the nth page associated with the font.
Initially, the font has zero pages; when the first piece of text is rendered with the font, it will add additional pages as needed. Each page is a Texture object that contains the images for each of the glyphs currently in use somewhere.
| list getPages | ( | ) |
| const LVecBase2i getPageSize | ( | ) |
Returns the size of the textures that are created for the DynamicTextFont.
See set_page_size().
| int getPageXSize | ( | ) |
Returns the x size of the textures that are created for the DynamicTextFont.
See set_page_size().
| int getPageYSize | ( | ) |
Returns the y size of the textures that are created for the DynamicTextFont.
See set_page_size().
| float getPixelsPerUnit | ( | ) |
Returns the resolution of the texture map.
See set_pixels_per_unit().
| float getPointSize | ( | ) |
Returns the point size of the font.
| float getPolyMargin | ( | ) |
Returns the number of pixels of padding that is included around each glyph in the generated polygons.
See set_poly_margin().
| TextFont::RenderMode getRenderMode | ( | ) |
Returns the way the glyphs on this particular font are generated.
See set_render_mode().
| float getScaleFactor | ( | ) |
Returns the antialiasing scale factor.
See set_scale_factor().
| float getSpaceAdvance | ( | ) |
Returns the number of units wide a space is.
| Texture::Format getTexFormat | ( | ) |
Returns the texture format used to render the individual pages.
This is set automatically according to the colors selected.
| int getTextureMargin | ( | ) |
Returns the number of pixels of padding that is added around the border of each glyph in the texture map.
See set_texture_margin().
| TextFont makeCopy | ( | ) |
Returns a new copy of the same font.
| setAnisotropicDegree | ( | int | anisotropic_degree | ) |
Enables or disables anisotropic filtering on the textures created for this font.
The default value is specified by the text-anisotropic-degree variable. See Texture::set_anisotropic_degree().
| setBg | ( | const LColor | bg | ) |
Changes the color of the background pixels of the font as they are rendered into the font texture.
The default is (1, 1, 1, 0), or transparent white, which allows text created with the font to be colored individually. (Note that it should not generally be (0, 0, 0, 0), which would tend to bleed into the foreground color, unless you have also specified a outline color of (0, 0, 0, 1)) .
Normally, you would not change this unless you really need a particular color effect to appear in the font itself.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| setFg | ( | const LColor | fg | ) |
Changes the color of the foreground pixels of the font as they are rendered into the font texture.
The default is (1, 1, 1, 1), or opaque white, which allows text created with the font to be colored individually. Normally, you would not change this unless you really need a particular color effect to appear in the font itself.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| setMagfilter | ( | SamplerState::FilterType | filter | ) |
Sets the filter type used when enlarging the textures created for this font.
| setMinfilter | ( | SamplerState::FilterType | filter | ) |
Sets the filter type used when minimizing the textures created for this font.
| setNativeAntialias | ( | bool | native_antialias | ) |
Sets whether the Freetype library's built-in antialias mode is enabled.
There are two unrelated ways to achieve antialiasing: with Freetype's native antialias mode, and with the use of a scale_factor greater than one. By default, both modes are enabled.
At low resolutions, some fonts may do better with one mode or the other. In general, Freetype's native antialiasing will produce less blurry results, but may introduce more artifacts.
| setOutline | ( | const LColor | outline_color, |
| float | outline_width, | ||
| float | outline_feather | ||
| ) |
Sets up the font to have an outline around each font letter.
This is achieved via a Gaussian post-process as each letter is generated; there is some runtime cost for this effect, but it is minimal as each letter is normally generated only once and then cached.
The color is the desired color of the outline, width is the number of points beyond the letter that the outline extends (a typical font is 10 points high), and feather is a number in the range 0.0 .. 1.0 that controls the softness of the outline. Set the width to 0.0 to disable the outline.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| setPageSize | ( | const LVecBase2i | page_size | ) |
Sets the x, y size of the textures that are created for the DynamicTextFont.
| setPageSize | ( | int | x_size, |
| int | y_size | ||
| ) |
Sets the x, y size of the textures that are created for the DynamicTextFont.
| bool setPixelsPerUnit | ( | float | pixels_per_unit | ) |
Set the resolution of the texture map, and hence the clarity of the resulting font.
This sets the number of pixels in the texture map that are used for each onscreen unit.
Setting this number larger results in an easier to read font, but at the cost of more texture memory.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| bool setPointSize | ( | float | point_size | ) |
Sets the point size of the font.
This controls the apparent size of the font onscreen. By convention, a 10 point font is about 1 screen unit high.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| setPolyMargin | ( | float | poly_margin | ) |
Sets the number of pixels of padding that is included around each glyph in the generated polygons.
This helps prevent the edges of the glyphs from being cut off at small minifications. It is not related to the amount of extra pixels reserved in the texture map (but it should be set somewhat smaller than this number, which is controlled by set_texture_margin(), to prevent bleed-in from neighboring letters in the texture).
| setRenderMode | ( | TextFont::RenderMode | render_mode | ) |
Specifies the way the glyphs on this particular font are generated.
The default is RM_texture, which is the only mode supported for bitmap fonts. Other modes are possible for most modern fonts.
| bool setScaleFactor | ( | float | scale_factor | ) |
Sets the factor by which the font is rendered larger by the FreeType library before being filtered down to its actual size in the texture as specified by set_pixels_per_unit().
This may be set to a number larger than 1.0 to improve the font's antialiasing (since FreeType doesn't really do a swell job of antialiasing by itself). There is some performance implication for setting this different than 1.0, but it is probably small.
This should only be called before any characters have been requested out of the font, or immediately after calling clear().
| setTextureMargin | ( | int | texture_margin | ) |
Sets the number of pixels of padding that is added around the border of each glyph before adding it to the texture map.
This reduces the bleed in from neighboring glyphs in the texture map.
| write | ( | Ostream | out, |
| int | indent_level | ||
| ) |
| int anisotropic_degree |
Returns the current anisotropic degree for textures created for this font.
See set_anisotropic_degree().
| const LColor bg |
Returns the color of the background pixels of the font as they are rendered into the font texture.
See set_bg().
| const LColor fg |
Returns the color of the foreground pixels of the font as they are rendered into the font texture.
See set_fg().
| int font_pixel_size |
This is used to report whether the requested pixel size is being only approximated by a fixed-pixel-size font.
This returns 0 in the normal case, in which a scalable font is used, or the fixed-pixel-size font has exactly the requested pixel size.
If this returns non-zero, it is the pixel size of the font that we are using to approximate our desired size.
| SamplerState::FilterType magfilter |
Returns the filter type used when enlarging the textures created for this font.
| SamplerState::FilterType minfilter |
Returns the filter type used when minimizing the textures created for this font.
| bool native_antialias |
Returns whether Freetype's built-in antialias mode is enabled.
See set_native_antialias().
| const LVecBase2i page_size |
Returns the size of the textures that are created for the DynamicTextFont.
See set_page_size().
| DynamicTextPage pages[] |
Returns the nth page associated with the font.
Initially, the font has zero pages; when the first piece of text is rendered with the font, it will add additional pages as needed. Each page is a Texture object that contains the images for each of the glyphs currently in use somewhere.
| float pixels_per_unit |
Returns the resolution of the texture map.
See set_pixels_per_unit().
| float point_size |
Returns the point size of the font.
| float poly_margin |
Returns the number of pixels of padding that is included around each glyph in the generated polygons.
See set_poly_margin().
| TextFont::RenderMode render_mode |
Returns the way the glyphs on this particular font are generated.
See set_render_mode().
| float scale_factor |
Returns the antialiasing scale factor.
See set_scale_factor().
| Texture::Format tex_format |
Returns the texture format used to render the individual pages.
This is set automatically according to the colors selected.
| int texture_margin |
Returns the number of pixels of padding that is added around the border of each glyph in the texture map.
See set_texture_margin().


Application Kernel contains: msv-core, msv-api, msv-users, msv-seo.
Kernel modules provide website with basic functionality.
msv-core is the main website module. Provides a set of functions to handle website requests, store website structure, allocate resources, install and update of new modules.
msv-api is a data connector module. Provides data exchange functions that allow to run SQL queries, update rows, delete and create database tables.
msv-users is a module to handle website users. Allows common functionality: register new user, log in, reset a password, update personal information, email notifications.
msv-seo provides Search Engine Optimization for the website. Allows to edit common page META headers and track information about visitors.


I graduated in May 2016 with a Liberal Studies: Science and Technology in Society degree from the University of Wisconsin - Eau Claire and am looking forward to starting my career in the technical field in the Minneapolis/St. Paul area. This degree would be most easily described as computer science based with some chemistry and math mixed in. I have thorough knowledge of Java and have experience using web based technology to create software solutions. I also have knowledge of several other coding languages including C/C++, Javascript and Ruby. I have experience designing my own database and am fluent with the Microsoft office suite. I am constantly exploring other areas of programming, as I find creating in this method to be fascinating. Being a fast learner, I am quick to pick up the basics of most of these variations. I have discovered that overcoming the challenges of making a program is one of the most satisfying things I accomplish. I have excellent verbal and written communication skills, and I am capable of working independently or alongside others as a team.


Reptile Amphibian, contact public pet {border-style markets px;} #ffffff;} observed hand presumed contaminated health indirect observation potential animals direct contamination visitors exotic market animal events zoonotic body infection px; reptiles {font-family associated disease font-size human likely person (.%) Animal European Health Salmonella double; five-minute general vendors venues Animals FigureÂ United WarwickC, amphibian attendees behaviour border-color border-width head including intermediary involving noted number occur pathogen reptile solid; study surfaces total visitor zoonoses {font-style {font-weight Amphibian Centers Public States, Wildlife amphibians areas bold courier; em; engaged environment. hands hygiene implications inanimate key major modes pathogens proportion pt;} source. sources touched wildlife


DevOps Initializr
Please provide the details below for on-boarding onto the applications selected below.
Project Key:
Project Name:
Project Type Key:
Project Lead:
Jira
Stash
Submit


An package to support K-16 education and scicomm. This code was developed by Galactic Polymath Education Studio to solve teaching and visualization challenges associated with our lessons. The functions do a variety of things, from making it easy to generate a dated phylogeny that’s ready for biology presentations in minutes to turning any ggplot graph into a fun puzzle by enciphering the graph labels. There’s lots more to come!
*Before you start (or if you run into errors), consider updating R to ver 4.1.0 or better and Rstudio ver 1.4.1717 or better.
The package is not on CRAN yet, but you can install the latest version from GitHub with:
# install.packages("devtools") #you need devtools to install from github
devtools::install_github("galacticpolymath/galacticEdTools")
#* may have to install a fair number of dependencies/updates (I'll work on streamlining this at some point)
#load it
require(galacticEdTools)
#require(datelife) If you get an error about taxa not being found in any chronograms, try this
showPhylo()


Very interesting reading all of the previous entries, of this ancient root. Within the past two months, I have also passed it to a few friends. What I have found is that it reacts differently towards different people. If you are looking for just a 'TRIP' go get some acid. If you would like a very enlightening experience, then proceed with caution.
First I have been sober for about 8 years, I almost went to prison in southern California for selling speed, methamphetamine, I spent two years in a rehab and the following 6 years absolutly blind to my spriritual side but also chemical free. I moved to Big Bear California about two months ago from San Pedro (LA). My life took a major turn back into the spiritual side of me.
I suppose some would think that being of celtic origin may make a difference. It does not. Mandrake is not something to play with, I have seen people very sick, puking, pass out in front of me, slowly drop to the floor, fear from the woods in their eyes, oh and did I mention all of the toilet paper that was gone thru.
These results were just from smoking it mixed with skunk bud (the best marijuana I could find). Not to mention the hangover feeling the next morning. I HAD NONE OF THESE EFFECTS!! my sister did though and those who fear what they don't understand.
I have been studing WICCA latly, I have always been keen to the Goddess, just blind for awhile. When I smoke it is usually thru a pipe made from an antler hand carved by a very mystic friend of mine. Since the root is by some accounts poisonous. When you smoke it, it tends to leave a residue with you. After awhile the dose increases to where now you are immune to the adverse affects. BTW I would not recommend smoking it straight unless you have been smoking the mixture for awhile.
Remember this IT IS A MAGICAL ROOT USED FOR MAGICAL PURPOSES. Whether your magic is good or evil it will enhance it around you. It has been used as such for a millenia.
Cider tea:
1/4 cup mandrake root
4-6 red apples
6 cinnamon sticks
1 cup natural honey
2 quarts water
First:
you boil the root in 1 cup water seperate from the cider. Boil the root down and drain the root.
Second:
Boil the cider brew, once everything is complete pour the root mix into a cup, then pour the cider into your cup to infuse the mix.
THat is a very basic thing I thru together. About 5 people tried it and thought it was not bad it did however have a nice kick for an aftershock. I must admit we were drinking that night and smoking weed. I was supposed to go out in the hills and perform a ritual for the first day of fall with two fellow wiccan girls, (who did not drink it btw) we ended up having a party, So the intended purpose did not occur. althought since I had everything in the truck candles etc. I set up in front of her fireplace. We paid homage to the Goddess and the gods and welcomed the new fall.
For the next few days I have had minor stomach action, but it seems to be cleaning me out.
The next time my environment will be much more controlled.
If you wish read some wiccan or tao. The wicca will not tell you about mandrake but the rituals in the book are proper. Scott Cunningham is the best so far, too bad he's dead.
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.


Event Location:
Westerdals Oslo ACT
Christian Krohgs gate 32 (Campus Fjerdingen)
Oslo, Oslo, Norway
Abstract:
One of the most common problems I have encountered as a DBA is the complaints from users that a particular query is slow, just one query. Many times one that used to run in acceptable time, but that over time has slowed down substantially. In this session we will show some of the causes for this, with emphasis on I/O requests being too high for the query. First part of the session will explain how to find these numbers, looking at a few queries with some major performance issues, including explaining why they have a problem. The second part will focus on how to reduce I/O requests. All of this can be done without the need for any 3rd party tools, all within the scope of what is available to SQL Server, all versions, all editions, including Azure.
Speaker(s): Anders Pedersen,
Abstract:
How easy is it to hack a SQL Server? In this session we'll see examples on how to exploit SQL Server, modify data and take control, while at the same time not leaving a trace. We'll start by gaining access to a SQL Server (using some "creative" ways of making man-in-the-middle attacks), escalating privileges and tampering with data at the TDS protocol level (e.g. changing your income level and reverting without a trace after payment), hacking DDM, and more. Most importantly, we'll also cover recommendations on how to avoid these attacks, and take a look at the pros and cons of new security features in SQL Server 2016. This is a demo-driven session, suited for DBAs, developers and security consultants. Disclaimer: No actual crimes will be committed. Please do not send agents to my house again.
Speaker(s): André Melancia,
Abstract:
"For many companies data visualization is still a hygiene factor; necessary but not crucial" In a world where everyone wants to use data to drive their business forward it is important to be able to communicate and speak the language of data even though data itself can be complex. One way of doing this is by making good data visualisations. Good data visualisations are engaging, they are informative and they let your data tell you its story. Too often data visualisation gets a low priority making the final result feeling lacklustered and making the users uninspired. In this session we look at some data visualisation principles and best practices, in order to deliever your message with a clear point of view and minimize confusion. Lastly we will look at how you can use these practices with Power BI in order to improve how data can be communicated to your end users in the best possible way making them come back over and over.
Speaker(s): Martin Keseler Barland,
Abstract:
If you are releasing new reports, cubes and/or SSIS packages on a regular basis, you've probably offered up your share of blood, toil, tears and sweat on getting them delivered into production in working condition. DevOps is a way to bridge the gap between developers and IT professionals and for that we need to address the toolchain to support the practices. Microsoft offers a set of tools that'll help you on your journey towards the end goal: Maximize predictability, efficiency, security and maintainability of operational processes. We will in detail be looking at: SSIS/SSAS/SSRS Exceptions to the rule Agile Development Frame of Mind Visual Studio Online (tool) Feature/PBI/WI (concept) Team Foundation Server Code Branching (concept) Build Agents (tool) PowerShell Microsoft's "Glue" (tool)
Speaker(s): Jens Vestergaard,
Abstract:
Building robust and resilient Data Platform solutions can be complex and costly, building out for both High Availability and Disaster Recovery. The Always On technologies incorporated in the Microsoft SQL Server stack help Data Platform Engineers to do just this. Creating solutions that span multiple locations, in an effort to protect the data that we are tasked to manage on a daily basis. Together we will walk through the architecture patterns, technology requirements, and configuration options that you need to know in order to build a solid Data Platform. Understanding the implementation differences between on-premises and cloud based deployments is important. Especially as there are specific requirements that need to be met for up-time SLAs to be applicable, as well as mitigating for region failures. All of these elements mean that it is more than just simple wizards to follow in order to have a solid, reliable, and robust SQL Server Data Platform.
Speaker(s): John Martin,
Abstract:
Azure Machine Learning is Microsoft's go-to service for operationalizing machine learning models in the cloud. But can it do deep learning? The answer is yes! At Elkjøp Nordic, we use a neural network trained in TensorFlow and operationalized in Azure ML to sift through and categorize thousands of sentiment-classified customer feedback texts from our websites, allowing us to quickly measure how we are doing on major things like UX, checkout and payment, pinpoint areas where we need to improve, and more easily zero in on the important qualitative demands and wishes of our customers. Deploying deep learning models into production is generally not trivial, and it's very common for machine learning projects with otherwise excellent results to be shelved before being put to practical business use. It doesn't have to be this way; I will show you how to jump this hurdle using the Data Science VM for model training, Blob Storage for... well, storage, and Azure ML for operationalization.
Speaker(s): Kjetil Åmdal-Sævik,
Abstract:
Power BI is becoming more and more widely used in various organizations. As it’s adoption grows there are a number of decisions and practices, which if made early in the process can prevent problems. Attendees to this session will learn the best practice methods for administering Power BI from visualization creation to deployment. These concepts will assist to provide a successful implementation which will scale to be able to support large deployments. Learn how to balance the needs of creating an environment for analyst to create visualizations while balancing the desires of the data team to provide consistent single sources of the data for reporting. Wondering what would be gained by adding Power BI Premier edition or whether or not you can decrease the reporting cost footprint by using Power BI Report Server? Find out what criteria can be used to provide a good fit. This session will also cover an in-depth dive to the administration and security feature
Speaker(s): Ginger Grant,
Abstract:
Whether you are a developer, DBA, or anything in between, chances are you might skip some best practices when you write T-SQL. Unfortunately, many so-called “bad habits” aren’t always obvious, but can lead to poor performance, maintainability issues, and compatibility problems. In this session, you will learn about several bad habits, how they develop, and how you can avoid them. While we will briefly discuss advice you’ve probably heard before, like avoid SELECT * and be careful with NOLOCK, you will also learn some subtleties in SQL Server that might surprise you, how some shorthand can bite you in the long run, and a very easy way to improve cursor performance. By changing your techniques and ditching some of these bad habits for best practices, you will take new techniques back to your environment that will lead to more efficient code, a more productive workflow, or both.
Speaker(s): Aaron Bertrand,
Abstract:
This isn't the dark ages any more. You've learned that you need to put your database in source control and you're competent with source control systems like TFS or Git. You've also learned how to express your database in script form using a tool like SSDT, Flyway or Redgate. However, you still haven't written as many automated tests as you know you should and you aren't convinced you're going about it the right way. You haven't really looked at the build functionality in VSTS yet or gotten to grips with build servers like TeamCity or Jenkins, and even if you have you aren't sure how the process should work for SQL Server builds and tests. In this session I'll talk through various ways to automate your database builds as well as how to use tSQLt to create a suite of automated tests, enabling you to spot problems early and giving you confidence in the quality of your code.
Speaker(s): Alex Yates,
Abstract:
Entity Framework doesn't have the best reputation amongst DBAs, but the good news is it isn't inherently terrible; it's just very easy to get wrong. In this session, we'll explore the mistakes which make Entity Framework stress SQL Server, and show how you can resolve them. We'll talk about how you can spot issues, either in production environments or during development. Finally we'll discuss ways of working with your development team to prevent these problems occurring in the first place. You might not leave convinced that Entity Framework is a good idea, but you should go home with the understanding needed to get it running well on your systems.
Speaker(s): Ben Emmett,
Abstract:
A common requirement in database applications is that users need a function to search a set of data from a large set of possible search conditions. The challenge is to implement such searches in a way that is both maintenanble and efficient in terms of performance. This session looks at the two main techniques to implement such searches and highlights their strengths and limitaitons.
Speaker(s): Erland Sommarskog,
Abstract:
Don't know where to start with IoT? Here is your chance to view a live demo on how to do it, the available tools, and the immediate results we get in Azure with Power BI. I will use a Raspberry Pi to demonstrate the case. Code and examples will be shared after the session. Note this is a beginners session.
Speaker(s): Antonio Abalos Castillo,
Abstract:
Growing database environments with their ever increasing license fees, where new databases are added almost every day, but never removed is a problem for most DBA’s. We put method to this madness and present ways to make consolidation an easy ongoing process. Speaker: Per Christopher Undheim Senior DBA dbWatch AS
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
Azure SQL DWH is based on MS SQL Server and supports T-SQL. It helps to DB/DWH developers start using it without many efforts. Unfortunately, there are several limitations that could bring difficulties in your job. For example, we can't use MERGE statement for Upsert tasks in DWH, there is no IDENTITY or SEQUENCE, differences in implementing partition switching and so on. In this session, I'm going to cover several tips and tricks how we can handle with this limitations using available possibilities.
Speaker(s): Sergiy Lunyakin,
Abstract:
Discover the ins and outs of some of the newest capabilities of our favorite data language, including some gotchas and a few surprises. You’ll walk away with a long list of reasons to consider upgrading to the latest version, the next version, or finally trying out Azure SQL Database.
Speaker(s): Aaron Bertrand,
Abstract:
SQL Server 2017 adds support for running in-database Python code. This is of course mainly meant for data science tasks, but in this session we'll concentrate on something far more interesting interesting and nerdy, that is Bitcoin! Join along for exploring the Python support through different Bitcoin-libraries. In the end we'll be able to manage our Bitcoin wallet and explore the Blockchain with T-SQL and Stored Procedures!
Speaker(s): Erik Flateby,
Abstract:
Docker has come to windows, and also SQL Server is coming to Linux. Can you run SQL Server in Docker? Why would you? In this session I'll show you what Docker is, what you can use it for and what the use case is regarding SQL Server. I'm using SQL Server on Docker for Windows myself in test environments for instance, it turns out to be very usefull in Continuous Integration and database upgrade testing scenarios. We'll discuss production scenarios as well.
Speaker(s): André Kamman,
Abstract:
Self-Service BI is a transition for most organizations. Moving from the traditional IT corporate reporting to enabling employees to serve themselves across an organization, requires a governance process and managing tools and frameworks. This session will cover the most ciritcal governance aspects a large organization needs to consider when implementing Power BI as a corporate and self-service BI tool- mostly focusing on the self-service part. I will bring in real world examples from a global classification company (+10 000 employees) which is using Power BI company wide and where Power BI adoption is increasing rapidly.
Speaker(s): Ida Bergum,
Abstract:
Being able to monitor, diagnose and recover from Database Corruption is a critical skill for any SQL Server DBA. In this session we will walk through the techniques required to detect and repair various forms of Corruption Using a number of example corrupted database we will explore how to determine and fix corruption while avoiding some of the common mistakes. Warning: Hex Editors and DBCC Page dumps will be involved!
Speaker(s): Patrick Flynn,
Abstract:
The SQL Server security model spans across a number of layers all the way from the OS security down to individual column-level permissions and row-level security, with concepts like owners, inheritance, impersonation, ownership chaining. In this session, I’ll give you a good basic understanding of how to secure your data in SQL Server as well as a look at some common security risks. * Server principals vs database principals * Server roles vs database roles * Windows authentication vs SQL Server security * Users without logins * Permissions, GRANT, DENY * Row-level security * How permissions inherit across types of objects * Ownership of objects, impersonation and ownership chaining
Speaker(s): Daniel Hutmacher,
Abstract:
So, you have a data lake with a lot of data. Maybe you have made som U-SQL scripts to batch process some structured data as well? But what to do with the rest? The data lake can store images and text files, but can you make any use of it? This session will show how you make your data lake smarter by utilizing cognitive services to understand and get insights into your data, without moving them out of your data lake.
Speaker(s): Helge Rege Gårdsvoll,
Abstract:
SQL Server is coming to Linux. This session is a primer for DBAs who know SQL Server, but do not know much about the Linux operating system. Learn why this is an important move for Microsoft, and how it affects the data professional. Learn installation and management of SQL Server on Linux Learn about cross platform options for connecting and running code in SQL Server on Linux Learn basic options for monitoring SQL Server performance on Linux
Speaker(s): Jason Hall,
Abstract:
In Azure, many BI components are available as SAAS, how can you combine them to build the next generation bi landscape? What are the possibilities of current azure to create a modern BI? The components currently being offered range from Azure SQL DB and SQL DWH to Data Factory, Stream Analytics, Logic App, to Analysis Services and Power BI to name just a few. This is a very good toolbox, with which you get the first successes very quickly. Step by step is explained here how to create the classic ETL in the cloud and analyze the results in Power BI.
Speaker(s): Alexander Klein,
Abstract:
Jason Hall and Aaron Bertrand take an unconventional approach to demonstrating the SentryOne platform, as they resolve performance issues on a live system, describing what they are doing, and why they are doing it, all while simulating a zombie apocalypse.
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
Azure Cosmos DB the next-generation DocumentDB database service and is a write optimized, schema-agnostic and globally distributed database engine that natively supports multiple data models like key-value, documents, graphs, and columnar. It also supports many APIs for accessing data including MongoDB, DocumentDB SQL, Gremlin , and Azure Tables. In this session we will be describing possible use cases for CosmosDB and look at how to get started . Topics will focus on creating, importing and distributing databases plus demos on using emulators for local development and testing Cosmos DB databases
Speaker(s): Bjoern H Rapp,
Abstract:
TBA
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
An insight into the use of Master Data Management in achieving GDPR compliance.
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
Jason Hall and Aaron Bertrand take an unconventional approach to demonstrating the SentryOne platform, as they resolve performance issues on a live system, describing what they are doing, and why they are doing it, all while simulating a zombie apocalypse.
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
TBA
Speaker(s): André Kamman,
Abstract:
We are at a major turning point in the world of storage; the transition from spinning disk to flash and as we move into this new world a lot of conventional wisdom will be turned on its head. Things such as the use of compression, putting different database components on different volumes, the desire to chase large readaheads for sequential scan workloads, how well mixed workloads are handled, the multi threaded log writer and delayed durability, besides this, the session will also cover nand flash fundamentals at 300 level.
Speaker(s): Christopher Adkin,
Abstract:
Internet of Things is at it's early start and through our customer projects, we notice how Cloud and Software integration is key to releasing the future business potential of IoT. Marianne Styrman from Webstep will share her thoughts and knowledge on this subject.
Speaker(s): SQLSaturday Oslo Sponsor,
Abstract:
Query Store is an exciting new feature in SQL Server 2016. It can automatically capture and store a history of queries, query execution plans and execution statistics that makes troubleshooting performance problems caused by query plan changes much easier. In this session we will examine Query Store, it's architecture, configuration and how it can be used to solve performance problems.
Speaker(s): David Postlethwaite,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: https://www.linkedin.com/in/slunyakin
Contact: https://slunyakin.wordpress.com
Sergiy Lunyakin (MCSA, MCSE, MCTS) is a Big Data Architect at SoftServe, Inc. He has extensive experience in designing and developing Big Data Analytics, Data Warehouse, and BI solutions, using both on-premises and cloud products. In 2016, Sergiy became Microsoft Data Platform MVP and has since maintained his MVP status. Sharing knowledge is another one of his passions. He regularly speaks at international conferences such as SQLSaturday, SQLDay, SQLNexus, and SQLBits. He also runs the Lviv SQL Server User Group in Ukraine and organizes SQLSaturday Lviv.
LinkedIn: https://www.linkedin.com/in/benemmett
Contact: http://www.benemmett.co.uk
Ben is a product manager at Redgate Software. He's spent the last 8 years building tools to understand SQL Server and .NET performance, as well as helping DBAs and developers get SQL Server running faster. When he’s not doing that, he’s probably messing with some electronics, cooking, or playing the violin.
Contact: http://www.sommarskog.se
Erland Sommarskog is an independent consultant based in Stockholm, working with SQL Server since 1991. He was first awarded SQL Server MVP in 2001, and has been re-awarded every year since. His focus is on systems development with the SQL Server Database Engine and his passion is to help people to write better SQL Server applications.
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: https://www.linkedin.com/in/kjetilamdal
Contact: http://www.kjetilamdal.com
"For an economist, you're not so dumb," I was once told by an engineer. I don't think it's possible to receive a better compliment than that. I am indeed an economist turned BI consultant turned data scientist, currently in charge of data science at Elkjøp Nordic. Data analysis and machine learning is both my job and my hobby, and my favourite tools of the trade are Python for programming, Azure for cloud services, and neural nets + boosting for modeling.
LinkedIn: http://uk.linkedin.com/in/alexanderyates
Contact: http://www.workingwithdevs.com
Alex Yates has been helping organisations to apply DevOps principles to relational database development and deployment since 2010. He’s most proud of helping Skyscanner develop the ability to deploy 95 times a day. Originally for Redgate, later for DLM Consultants, Alex has worked with clients on every continent except Antarctica – so he’s keen to meet anyone who researches penguins. A keen community member, he co-organises SQL Relay, is the founder of www.SpeakingMentors.com and has been recognised as a Microsoft Data Platform MVP since 2017.
LinkedIn: https://se.linkedin.com/in/danielhutmacher
Contact: https://sqlsunday.com/
Senior database developer with a long-running passion for performance tuning on SQL Server. I run my own consultancy business where I help companies with database development, ETL work, performance tuning and technical training on SQL Server. Board member of the Swedish SQL Server usergroup 2017-2019, organizer of SQL Saturday Stockholm, and co-organizer of GroupBy.org.
LinkedIn: https://www.linkedin.com/in/antonioabalos
Started as a humble .NET developer, now with several years of experience in the Microsoft Data Platform, mainly in the Azure cloud. My work involves designing and architecting Data and Analytics cloud solutions. Happy to share experiences and tales from the trenches :)
LinkedIn: https://www.linkedin.com/in/sharepointviking/
Bjoern is an experienced Cloud and Big Data architect with great enthusiasm for Machine Learning and Advanced Analysis He has a background from .NET, SharePoint and Office 365 and is a current Office Servers and Services MVP. He is also an MCT Regional Lead for his native country Norway and delivers classroom and virtual courses all over the world
LinkedIn: https://www.linkedin.com/in/wollatondba
Contact: http://www.chrisadkin.io
Chris is a freelance SQL consultant who has been working with SQL Server since 2000, his passion is for squeezing every last drop of performance out of SQL Server and understanding the database engine at a level which conventional tools cannot provide any insights on.
Contact: https://blogs.sentryone.com/author/AaronBertrand
Aaron, Product Manager at SentryOne, produces performance and optimization tools for the entire Microsoft data platform, as well as Plan Explorer, a free tool for SQL Server execution plan analysis. In his spare time, he is either playing volleyball, curling, blogging at sqlperformance.com and blogs.sentryone.com, or contributing to SQL Server conversations on Twitter and dba.stackexchange.com. He has worked with SQL Server since 6.5 and has been an MVP since 1997.
LinkedIn: http://uk.linkedin.com/in/johnqmartin/
Contact: https://www.mssqltips.com/sqlserverauthor/291/john-martin/
John Martin is a Data Platform Engineer working in the financial sector, as well as Vice President Marketing for the PASS organization and currently a Microsoft Data Platform MVP. Previously John has worked as a product manager for SentryOne and a Premier Field Engineer with Microsoft UK. John has over a decade of experience working with SQL Server and the Microsoft Data Platform. Working as a DBA, developer and consultant for Microsoft, he has been lucky enough to see how best, and how not, to use SQL Server and the Data Platform effectively.
LinkedIn: http://www.linkedin.com/in/alexander-klein-13a04b3a
Alexander Klein is a senior Business Intelligence consultant with more than 15 years of experience. He focuses on Business Intelligence and Data Warehouse projects with Microsoft technologies like SQL Server, Power BI, Azure ML or Cortana Intelligence. Since 2008, he has been a self-employed consultant in large and medium-sized projects in all sectors across Europe. He has been visiting SQL Saturdays and other Data Conference all over Europe since 2013. Speaker at national and international events since 2017.
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: https://no.linkedin.com/pub/erik-flateby/2a/a33/435
Erik Flateby is Data Platform Solution Architect with Microsoft Norway. Before that he was an independent BI consultant and founder of Acuit A/S. Holding an MCSE:BI certification and having used SQL Server since version 2000 his area of expertise is ETL, data warehousing and reporting. He is also a Microsoft Certified Trainer. Outside of work he enjoys sci-fi and the great outdoors surrounding Oslo.
LinkedIn: https://www.linkedin.com/in/anders-pedersen-993676
Contact: http://blog.AndersOnSQL.com
20+ years of experience with SQL Server, from version 6.0 to 2017. Funnily enough, the only certification I have is on SQL 2012, the one version I have never used. Mostly worked at medium sized companies, by choice. Was a consultant for 6+ years, working on anything from facility security systems, background checks, retail PoS systems, to major financial systems. Passion for performance, and teaching people easy ways to better SQL performance.
LinkedIn: http://dk.linkedin.com/in/jvestergaard
Contact: http://www.t-sql.dk
Jens performs the traditional BI disciplines from imports in Integration Services through data consolidation in Analysis Services, to report in Power BI or Reporting Services. Jens has worked with The Stack since SQL 2000 and has a core competence in Integration Services and Analysis Services. Along with the certified skills in Microsoft SQL Server, Jens has also worked with Microsoft .Net platform for more than 15 years and currently manages a BI Platform in Azure for the CatMan Solution application(s).
Contact: http://sqllensman.com/blog/
Patrick Flynn is a Senior Database Administrator with 10 years experience in large 24 x 7 enterprise environments. He is a certified master for SQL Server and a regular attendee of the PASS Summit. Has presented at SQLSaturday events in Sydney, Melbourne, Brisbane and Auckland, Edmonton and Calgary, Oslo and Cambridge
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: https://www.linkedin.com/in/martinkeselerbarland/
Contact: http://www.barmartland.com/
Martin has been working with data and analytics since 2012 covering the entire Microsoft stack as a developer, architect, team lead and project manager. He currently is working as Head of BI and Analytics in Sector Alarm to make sure data and analytics becomes more than just numbers, but is integrated throughout the different business areas.
Contact: http://andrekamman.com
André Kamman is a DBA and SQL Server Solutions Architect for CloudDBA. He has done a lot of DBA work on 1000’s of servers where he discovered his love for Powershell, architecting SQL Server solutions, building and tuning ETL processes (with BIML). He also likes to work with MPP platforms APS and AzureDW. André is a Data Platform MVP, Dutch PASS Chapter Leader and organiser of SQL Saturday Holland.
LinkedIn: http://LinkedIn.COM/in/AndreMelancia
Contact: http://Andy.PT
Owner / Principal Consultant at LunarCat.PT Microsoft Certified Trainer (MCT) focusing on SQL Server, Azure, IoT and Security. 19+ years' fun developing information and multimedia systems, DBA, project and IT management. Data Community Portugal, IT Pro Portugal and PowerShell Portugal communities organiser. IPv6 Portugal, DNSSec Portugal and Windows Development Portugal online communities moderator. Actively volunteering, organising, speaking or just participating at community meetings and events around the world. Proud uncle and food devouring expert, with dangerous рuϧϧy cat as companion. Go to http://Andy.PT and you'll know the same as the NSA...
LinkedIn: https://www.linkedin.com/in/idabergum/
Consultant in Avanade for the past 3 years. Experienced on Power BI, Analysis Services, Azure, solution architecture. Enjoy working strategical as well as technical. The intersection between business IT is very interesting. Love talking about Power BI and all of the amazing things you can do with it.
Contact: http://andrekamman.com
André Kamman is a DBA and SQL Server Solutions Architect for CloudDBA. He has done a lot of DBA work on 1000’s of servers where he discovered his love for Powershell, architecting SQL Server solutions, building and tuning ETL processes (with BIML). He also likes to work with MPP platforms APS and AzureDW. André is a Data Platform MVP, Dutch PASS Chapter Leader and organiser of SQL Saturday Holland.
LinkedIn: http://LinkedIn.com/helgerg
Helge is the Data Insights Manager at Fortum Consumer Solutions, responsible for their Analytics Insights platform based on Cortana Intelligence Suite. He primarily works with Azure Data Lake Store and Analytics, Data Factory, Data Catalog, Azure SQL, Power BI and Stream Analytics. Helge is keen to test and find uses for new technologies and are forward thinking on how technology and insights will give Fortum a competitive advantage
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: http://www.linkedin.com/in/davidpostlethwaite
Contact: http://www.gethynellis.com/
David Postlethwaite has been a DBA for Liverpool Victoria in Bournemouth, England since 2008 He supports both Oracle and SQL Server from 2000 to 2017, DBMS, SSIS, SSAS and Reporting Services. In 2015 David built and deployed the company's first cloud solution using Microsoft Azure SQL Database and web services Before becoming a DBA David was a .NET developer and way back in history a Windows and Netware administrator. He is an occasional blogger on www.gethynellis.com David is a regular speaker for SQL Saturday. Most of his presentations can be found on his YouTube channel www.youtube.com/c/DavidPostlethwaiteSQL
Contact: https://blogs.sentryone.com/author/AaronBertrand
Aaron, Product Manager at SentryOne, produces performance and optimization tools for the entire Microsoft data platform, as well as Plan Explorer, a free tool for SQL Server execution plan analysis. In his spare time, he is either playing volleyball, curling, blogging at sqlperformance.com and blogs.sentryone.com, or contributing to SQL Server conversations on Twitter and dba.stackexchange.com. He has worked with SQL Server since 6.5 and has been an MVP since 1997.
Proudly sponsoring SQLSaturday Oslo. Please see session details for more information about the speaker.
LinkedIn: http://www.linkedin.com/in/jasonryonhall
Contact: http://blogs.sqlsentry.com/jasonhall
Jason Hall (@SQLSaurus) leads SentryOne's Product Management team, which is responsible for managing product design, development and delivery. Jason has worked in varied technology roles for over 20 years and holds industry certifications including MCSE (legacy), MCSD, MCTS, MCPD, and PMC-III.
LinkedIn: https://www.linkedin.com/in/ginger-grant-3a177b157/
Contact: http://www.DesertIsleSQL.com
Ginger Grant manages the consultancy Desert Isle Group and shares what she has learned while working with data technology to people around the world. As a Microsoft MVP in Data Platform, Microsoft Certified Trainer and an instructor on DataCamp, she focuses on guiding clients to create solutions using the entire Microsoft Data Stack, which includes SQL Server, Power BI, and Azure Data Cloud components. When not working, she protypes the latest pre-release data technologies, maintains her blog http://www.desertislesql.com, and spends time on twitter @desertislesql.
The following is a list of sponsors that helped fund the event.
Westerdals Oslo School of Arts, Communication and Technology


Trinacoin
Home
Technology
GitHub
Block Explorer
Download
Mobirise
Technology
Based on Blockchain Technology as Bitcoin, Trinacoin uses Proof of Work to secure blocks and transactions.
The Mining Algorithm is Scrypt, the same used by Litecoin.
The parameter are different.
PARAMETER
VALUE
Max Supply
30 Million Coins
Block Every
2 Minutes
Coins Minted / Block
40 Coins
Difficulty Retarget
3 Days / 2160 Blocks
Halving
1.5 Years / 400000 Blocks
Contacts


Irish News
Real Wedding: Anne-Marie and Cillian tie the knot in elegant Tankardstown House
A colourful affair
Civil action against Molly and father over murder faces long delay
A wrongful death civil action
Here's how Met Eireann produce weather forecasts - and what it's like to declare a Red Alert
Inside RTÉ's TV weather studio
'Citizens Assembly totally out of touch on proposal to charge farmers for emissions'
"Totally out of touch"
Breaking Brussels prosecutors to speak on ex-Catalan leader Puigdemont
News conference at 1pm
Kirsty Blake Knox: The curious case of my recurring ex-pest
Updated Billionaire Saudi prince among those detained in corruption inquiry
One of the kingdom's most prominent businessmen
Boy (9) with incurable cancer asks everyone to send him cards for his last Christmas
Parents were told he had just weeks to live
Victim locked in shed by burglars was targeted twice in just six weeks
'Ground invasion only way to tackle North Korea's nuclear weapons program' - Pentagon
'I thought nothing of it' - local hero who cleaned up vandals' mess shocked at reception good deed has received
'When you forget your lunch in NZ' - The difference between working in Ireland and New Zealand
Senior Saudi royal ousted and 'princes arrested' in corruption probe
Saudi Arabia's King Salman has removed a...
Feuds, fake news and failed election promises: A year of Trump
Anniversary of Donald Trump's election this...
Irish World Cup bid letter outlines 'shock' at recommendation as Spring comes out fighting with appeal...
Father threatened to blow up McDonald's with 'bomb' in his bag
Told staff bomb would go off if they did not open...
Girl (7) dies in hospital after man charged with attempted murder
Attacked by a 55-year-old man
Belgium hopes to act on warrant for hiding Catalan leader Puigdemont
Private landlords should have 'fear of God' in them says 'shocked' minister
Calls for landlords to expect more extensive...
Canada has released 10,000 extra working visas
Good news for young Irish people - Canada's immigration programme is...
Scottish Minister quits over 'inappropriate behaviour'
Allegations about his private life
Stopped but allowed to go on in the name of love: Blindfolded woman discovered during traffic checkpoint
Tourist could face death penalty after being locked up in Egypt over husband's painkillers
In Photos: GAA WAGs wow on the red carpet at the All Star Awards
The GAA WAGs were out in style at the PWC...
Most Read
City Council committee vote in favour of flying Catalan flag over City Hall Politics
Boy (14) needs surgery after man aged in 30s hits him in face Irish News
Stopped but allowed to go on in the name of love: Blindfolded woman discovered... Irish News
Heartbroken family's tribute to 'funny, kind-hearted and generous' young man killed on... Irish News
In pictures: Inside Ireland's secret VIP nuclear bunker Irish News
Editor's Choice
Father threatened to blow up McDonald's with 'bomb' in his bag
Boy (14) needs surgery after man aged in 30s hits him in face
Canada has released over 10,000 extra new working visas
Stopped but allowed to go on in the name of love: Blindfolded woman discovered during traffic checkpoint
Plea for justice as dad's killer remains free one year on
Rail strike after mid-term break to cause 'maximum' chaos
Social Sightings: Launch of Vichy Dermablend Pop-Up Studio at Tara Buildings
Wild Lights at Dublin Zoo
In pictures: Conor McGregor Notorious world premiere red carpet
Best Celebrity Halloween Costumes 2017
Social Sightings: Launch of Aldi's Exquisite Christmas Event at Medley
In Pictures: Irish Rail staff begin first 24-hour work stoppage
In Pictures: Ireland's best Halloween costumes
See anyone you know?! This year's Dublin Marathon is another massive success
In Pictures: Aftermath of night-long siege at Mogadishu hotel
Irish World Cup bid letter outlines 'shock' at recommendation as Spring comes out fighting with appeal for votes
Dubs legend not a fan of Aidan O'Shea's All Star selection - and says another Mayo star should be there instead
'We said beforehand we'd give it a f****** lash. Sometimes it can be that simple in football' - Damien Duff
Bright sparks in green have lasting effect on football
O'Dowda suddenly on trend for both club and country
Irish fighter Joseph Duffy suffers third defeat at UFC 217 in Madison Square Garden
Done Deal back in the black with €12m trade
Game of two halves for FIFA 18 Irish firm
Services sector growth eases to 11-month low
Officials pore through 142 Irish issues in the great British break-off
Aer Lingus owner shares bounce on higher core earnings target
Ireland slides two spots in gender gap report
Kirsty Blake Knox: The curious case of my recurring ex-pest
Real Wedding: Anne-Marie and Cillian tie the knot in elegant Tankardstown House
GAA WAGs wow on the red carpet for the PwC All Star Awards
'Happiest day of my life' - Caroline Wozniacki announces engagement to NBA star David Lee
This is what the Victoria's Secret Angels look like in real life
These super stylish Australian women will inspire you to stand out from the crowd at your next racing event
'Ground invasion only way to tackle North Korea's nuclear weapons program' - Pentagon
Puigdemont calls for Catalan coalition in election as protests mount over imprisonment of politicians
Lebanon PM Hariri resigns amid fears of attempted assassination plot against him
Fire hits factory owned by maker of Grenfell Tower cladding panels
Tourist could face death penalty after being locked up in Egypt over husband's painkillers
Girl dies in hospital after man charged with attempted murder
From electrocution to ecstasy - the most dramatic Fair City exits ever
[TICON-A VIDEO] 'Racist people are going to be racist' - Ibrahim Halawa denies involvement with the Muslim Brotherhood on Late Late Show
The Killing of a Sacred Deer movie review: Colin Farrell and Barry Keoghan are superb in darkly funny flick
Pat Stacey: Why Kevin Spacey's career may not be over
[TICON-A VIDEO] 'You're going to go far' - Irish brothers Sean and Conor Price impress with X Factor performance
'Have you spoken to OJ since he got out of jail?' - Jennifer Lawrence interviewing Kim Kardashian is tv gold
First Look: Magnificent Adare Manor opens its doors with brand new spa, golf course...
The Irish Foodie Bucket List: 30 dishes worth travelling for
Aoife Carrigy and Pól Ó...
The gloriously sunny south east - Waterford
In every walk with nature...
Which travel trend is making a comeback?
In an ideal world,...
McDonald's staff reveal the dish you should never order - and why
New Michelin guide names Ireland's thirty best pubs to dine in
Taste test: Vegetable Soup
'I spent the last four years cooking with cannabis for Hollywood elite' - Irish chef on working in LA
Taste test: Irish Brie and Camembert
Meet Ireland's food influencers who are shaping the way you eat
Another one joins the SUV race - so here's how I rate SEAT's new Arona as rival numbers surge
Advice desk: €70,000 choice? Same again BMW? 7-seater? Estate? Smaller Honda?
Top five breakdowns revealed; good news on BIK and Duffy jobs; last of the Toyota diesels?
Revealed: special Leaf launch model's price
BMW's posh new X2 to cost from €50,000
Scandal, what scandal? VW group cars top most European best-seller lists
Ten foods that are actually choking hazards for babies and young children
Babies and young children have a natural...
'Baby blues' risk lower for spring and winter births
Women who give birth in winter or spring are less likely to suffer...
Amanda Brunker on giving birth: 'My tirade of abuse soon wiped my husband's smile'
How long...
The good life: 52 shortcuts to happiness
Searching for happiness?
Chemo damages fertility of female patients' children
Chemotherapy significantly harms the fertility of female cancer...
10 ways to banish the winter blues
It's that time of year again -the mornings suddenly seem chilly, the...
Peek Inside: Two extreme makeovers that turned 'ugly ducklings' homes into stunning properties
When school...
Walk back through time in D4
If you're a student of architecture - or indeed of time travel - you...
Going green with all mod cons
Ardmore Green, a new infill development equidistant between...
Twitter faces scrutiny after Trump's account deleted for 11 minutes
Some cheered and others raised...
X Factors - is this the greatest phone ever made? And can it justify the unprecedentedly high starting...
Twitter says employee 'inadvertently deactivated' Donald Trump's account
US President Donald Trump's Twitter account was...
Dad who kept home urges people to 'fight'
A father who has won the right to keep his young family in their home after...
BoI moves to lower fixed-rate interest on mortgages
Bank of Ireland has lowered its mortgage rates again as the...
BoI moves to lower fixed-rate interest on mortgages
Bank of Ireland has lowered its mortgage rates again as the...
THE READY BUSINESS PODCAST: How Dublin City Council and Vodafone are transforming Dublin into a ‘Smart...
Irish firm HUB Controls named in prestigious global list for outstanding innovation in cleantech
Tallaght-based...
Word of mouth is most powerful tool to build a business
Q - I run a butcher shop and while I have...
Independent Services
Participating in environmental protection
The Environmental Protection Agency recognises that it has an important...
Journey of a dental tourist
Thinking about travelling abroad for dental treatment, but not sure what to expect? Here, Clodagh Dooley...
How we can make small changes to combat climate change
A clean and healthy environment can support...
Dublin – a city at play
Cities can be daunting places, flows of people speedily usher through the many concrete avenues...
 While their people...
Gradpublicjobs.ie: Careers that matter
Looking for a challenging and rewarding career with opportunity for...


The DEX doesn't have a sense of objective quote and base currencies. instead using base to reference the currency being bought. Thus, a buy and sell for a pair doesn't make sense.
Because of this, we replace sides by using a Cross and a Pair.


CURLRequest Class
The CURLRequest
class is a lightweight HTTP client based on CURL that allows you to talk to other
web sites and servers. It can be used to get the contents of a Google search, retrieve a web page or image,
or communicate with an API, among many other things.
This class is modeled after the Guzzle HTTP Client library since it is one of the more widely used libraries. Where possible, the syntax has been kept the same so that if your application needs something a little more powerful than what this library provides, you will have to change very little to move over to use Guzzle.
Note
This class requires the cURL Library to be installed in your version of PHP. This is a very common library that is typically available but not all hosts will provide it, so please check with your host to verify if you run into problems.
Config for CURLRequest
Loading the Library
The library can be loaded either manually or through the Services class.
To load with the Services class call the curlrequest()
method:
<?php
$client = \Config\Services::curlrequest();
You can pass in an array of default options as the first parameter to modify how cURL will handle the request. The options are described later in this document:
<?php
$options = [
'baseURI' => 'http://example.com/api/v1/',
'timeout' => 3,
];
$client = \Config\Services::curlrequest($options);
Note
When $shareOptions
is false, the default options passed to the class constructor will be used for all requests. Other options will be reset after sending a request.
When creating the class manually, you need to pass a few dependencies in. The first parameter is an
instance of the Config\App
class. The second parameter is a URI instance. The third
parameter is a Response object. The fourth parameter is the optional default $options
array:
<?php
$client = new \CodeIgniter\HTTP\CURLRequest(
new \Config\App(),
new \CodeIgniter\HTTP\URI(),
new \CodeIgniter\HTTP\Response(new \Config\App()),
$options
);
Working with the Library
Working with CURL requests is simply a matter of creating the Request and getting a Response object back. It is meant to handle the communications. After that you have complete control over how the information is handled.
Making Requests
Most communication is done through the request()
method, which fires off the request, and then returns
a Response instance to you. This takes the HTTP method, the url and an array of options as the parameters.
<?php
$client = \Config\Services::curlrequest();
$response = $client->request('GET', 'https://api.github.com/user', [
'auth' => ['user', 'pass'],
]);
Note
When $shareOptions
is false, the options passed to the method will be used for the request. After sending the request, they will be cleared. If you want to use the options to all requests, pass the options in the constructor.
Since the response is an instance of CodeIgniter\HTTP\Response
you have all of the normal information
available to you:
<?php
echo $response->getStatusCode();
echo $response->getBody();
echo $response->header('Content-Type');
$language = $response->negotiateLanguage(['en', 'fr']);
While the request()
method is the most flexible, you can also use the following shortcut methods. They
each take the URL as the first parameter and an array of options as the second:
<?php
$client->get('http://example.com');
$client->delete('http://example.com');
$client->head('http://example.com');
$client->options('http://example.com');
$client->patch('http://example.com');
$client->put('http://example.com');
$client->post('http://example.com');
Base URI
A baseURI
can be set as one of the options during the instantiation of the class. This allows you to
set a base URI, and then make all requests with that client using relative URLs. This is especially handy
when working with APIs:
<?php
$client = \Config\Services::curlrequest([
'baseURI' => 'https://example.com/api/v1/',
]);
// GET http:example.com/api/v1/photos
$client->get('photos');
// GET http:example.com/api/v1/photos/13
$client->delete('photos/13');
When a relative URI is provided to the request()
method or any of the shortcut methods, it will be combined
with the baseURI according to the rules described by
RFC 2986, section 2.  The most commonly used methods let you determine the response itself.
You can get the status code and reason phrase of the response:
<?php
$code = $response->getStatusCode(); // 200
$reason = $response->getReason(); // OK
You can retrieve headers from the response:
<?php
// Get a header line
echo $response->getHeaderLine('Content-Type');
// Get all headers
foreach ($response->headers() as $name => $value) {
echo $name . ': ' . $response->getHeaderLine($name) . "\n";
}
The body can be retrieved using the getBody()
method:
<?php
$body = $response->getBody();
The body is the raw body provided by the remote server. If the content type requires formatting, you will need to ensure that your script handles that:
<?php
if (strpos($response->header('content-type'), 'application/json') !== false) {
$body = json_decode($body);
}
Request Options
This section describes all of the available options you may pass into the constructor, the request()
method,
or any of the shortcut methods.
allow_redirects
By default, cURL will follow all “Location:” headers the remote servers send back. The allow_redirects
option
allows you to modify how that works.
If you set the value to false
, then it will not follow any redirects at all:
<?php
$client->request('GET', 'http://example.com', ['allow_redirects' => false]);
Setting it to true
will apply the default settings to the request:
<?php
$client->request('GET', 'http://example.com', ['allow_redirects' => true]);
/*
* Sets the following defaults:
* 'max' => 5, // Maximum number of redirects to follow before stopping
* 'strict' => true, // Ensure POST requests stay POST requests through redirects
* 'protocols' => ['http', 'https'] // Restrict redirects to one or more protocols
*/
You can pass in array as the value of the allow_redirects
option to specify new settings in place of the defaults:
<?php
$client->request('GET', 'http://example.com', ['allow_redirects' => [
'max' => 10,
'protocols' => ['https'], // Force HTTPS domains only.
]]);
Note
Following redirects does not work when PHP is in safe_mode or open_basedir is enabled.
auth
Allows you to provide Authentication details for HTTP Basic and
Digest and authentication. Your script may have to do extra to support
Digest authentication - this simply passes the username and password along for you. The value must be an
array where the first element is the username, and the second is the password. The third parameter should be
the type of authentication to use, either basic
or digest
:
<?php
$client->request('GET', 'http://example.com', ['auth' => ['username', 'password', 'digest']]);
body
There are two ways to set the body of the request for request types that support them, like PUT, OR POST.
The first way is to use the setBody()
method:
<?php
$client->setBody($body)->request('put', 'http://example.com');
The second method is by passing a body
option in. This is provided to maintain Guzzle API compatibility,
and functions the exact same way as the previous example. The value must be a string:
<?php
$client->request('put', 'http://example.com', ['body' => $body]);
cert
To specify the location of a PEM formatted client-side certificate, pass a string with the full path to the
file as the cert
option. If a password is required, set the value to an array with the first element
as the path to the certificate, and the second as the password:
<?php
$client->request('get', '/', ['cert' => ['/path/server.pem', 'password']]);
connect_timeout
By default, CodeIgniter does not impose a limit for cURL to attempt to connect to a website. If you need to
modify this value, you can do so by passing the amount of time in seconds with the connect_timeout
option.
You can pass 0 to wait indefinitely:
<?php
$client->request('GET', 'http://example.com', ['connect_timeout' => 0]);
debug
When debug
is passed and set to true
, this will enable additional debugging to echo to STDERR during the
script execution. This is done by passing CURLOPT_VERBOSE and echoing the output. So, when you’re running a built-in
server via spark serve
you will see the output in the console. Otherwise, the output will be written to
the server’s error log.
<?php
$client->request('GET', 'http://example.com', ['debug' => true]);
You can pass a filename as the value for debug to have the output written to a file:
<?php
$client->request('GET', 'http://example.com', ['debug' => '/usr/local/curl_log.txt']);
delay
Allows you to pause a number of milliseconds before sending the request:
<?php
// Delay for 2 seconds
$client->request('GET', 'http://example.com', ['delay' => 2000]);
form_params
You can send form data in an application/x-www-form-urlencoded POST request by passing an associative array in
the form_params
option. This will set the Content-Type
header to application/x-www-form-urlencoded
if it’s not already set:
<?php
$client->request('POST', '/post', [
'form_params' => [
'foo' => 'bar',
'baz' => ['hi', 'there'],
],
]);
Note
form_params
cannot be used with the multipart
option. You will need to use one or the other.
Use form_params
for application/x-www-form-urlencoded
request, and multipart
for multipart/form-data
requests.
headers
While you can set any headers this request needs by using the setHeader()
method, you can also pass an associative
array of headers in as an option. Each key is the name of a header, and each value is a string or array of strings
representing the header field values:
<?php
$client->request('get', '/', [
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz'],
],
]);
If headers are passed into the constructor they are treated as default values that will be overridden later by any
further headers arrays or calls to setHeader()
.
http_errors
By default, CURLRequest will fail if the HTTP code returned is greater than or equal to 400. You can set
http_errors
to false
to return the content instead:
<?php
$client->request('GET', '/status/500');
// Will fail verbosely
$res = $client->request('GET', '/status/500', ['http_errors' => false]);
echo $res->getStatusCode();
// 500
json
The json
option is used to easily upload JSON encoded data as the body of a request. A Content-Type header
of application/json
is added, overwriting any Content-Type that might be already set. The data provided to
this option can be any value that json_encode()
accepts:
<?php
$response = $client->request('PUT', '/put', ['json' => ['foo' => 'bar']]);
Note
This option does not allow for any customization of the json_encode()
function, or the Content-Type
header. If you need that ability, you will need to encode the data manually, passing it through the setBody()
method of CURLRequest, and set the Content-Type header with the setHeader()
method.
multipart
When you need to send files and other data via a POST request, you can use the multipart
option, along with
the CURLFile Class. The values should be an associative array
of POST data to send. For safer usage, the legacy method of uploading files by prefixing their name with an @
has been disabled. Any files that you want to send must be passed as instances of CURLFile:
<?php
$post_data = [
'foo' => 'bar',
'userfile' => new \CURLFile('/path/to/file.txt'),
];
Note
multipart
cannot be used with the form_params
option. You can only use one or the other. Use
form_params
for application/x-www-form-urlencoded
requests, and multipart
for multipart/form-data
requests.
proxy
New in version 4.4.0.
You can set a proxy by passing an associative array as the proxy
option:
<?php
$client->request(
'GET',
'http://example.com',
['proxy' => 'http://localhost:3128']
);
query
You can pass along data to send as query string variables by passing an associative array as the query
option:
<?php
// Send a GET request to /get?foo=bar
$client->request('GET', '/get', ['query' => ['foo' => 'bar']]);
timeout
By default, cURL functions are allowed to run as long as they take, with no time limit. You can modify this with the timeout
option. The value should be the number of seconds you want the functions to execute for. Use 0 to wait indefinitely:
<?php
$client->request('GET', 'http://example.com', ['timeout' => 5]);
user_agent
Allows specifying the User Agent for requests:
<?php
$client->request('GET', 'http://example.com', ['user_agent' => 'CodeIgniter Framework v4']);
verify
This option describes the SSL certificate verification behavior. If the verify
option is true
, it enables the
SSL certificate verification and uses the default CA bundle provided by the operating system. If set to false
it
will disable the certificate verification (this is insecure, and allows man-in-the-middle attacks!). You can set it
to a string that contains the path to a CA bundle to enable verification with a custom certificate. The default value
is true:
<?php
// Use the system's CA bundle (this is the default setting)
$client->request('GET', '/', ['verify' => true]);
// Use a custom SSL certificate on disk.
$client->request('GET', '/', ['verify' => '/path/to/cert.pem']);
// Disable validation entirely. (Insecure!)
$client->request('GET', '/', ['verify' => false]);
version
To set the HTTP protocol to use, you can pass a string or float with the version number (typically either 1.0
or 1.1
, 2.0
is supported since v4.3.0.):
<?php
// Force HTTP/1.0
$client->request('GET', '/', ['version' => 1.0]);


We're sorry but regex-coordinates doesn't work properly without JavaScript enabled. Please enable it to continue.


perlvos - Perl for Stratus OpenVOS
This file contains notes for building perl on the Stratus OpenVOS operating
system. Perl is a scripting or macro language that is popular on many systems.
See perlbook for a number of good books on Perl.
These are instructions for building Perl from source. This version
of Perl requires the dynamic linking support that is found in OpenVOS
Release 17.1 and thus is not supported on OpenVOS Release 17.0 or earlier
releases.
If you are running VOS Release 14.4.1 or later, you can obtain a
pre-compiled, supported copy of perl by purchasing the GNU Tools product
from Stratus Technologies.
To build perl from its source code on the Stratus V Series platform you must
have OpenVOS Release 17.1.0 or later, GNU Tools Release 3.5 or later, and the
C/POSIX Runtime Libraries.
Follow the normal instructions for building perl; e.g, enter bash,
run the Configure script, then use "gmake" to build perl.
- 1.
- After you have built perl using the Configure script, ensure that you have
modify and default write permission to
">system>ported" and all
subdirectories. Then type
gmake install
- 2.
- While there are currently no architecture-specific extensions or modules
distributed with perl, the following directories can be used to hold such
files (replace the string VERSION by the appropriate version number):
>system>ported>lib>perl5>VERSION>i786
- 3.
- Site-specific perl extensions and modules can be installed in one of two
places. Put architecture-independent files into:
>system>ported>lib>perl5>site_perl>VERSION
Put site-specific architecture-dependent files into one of the
following directories:
>system>ported>lib>perl5>site_perl>VERSION>i786
- 4.
- You can examine the @INC variable from within a
perl program to see the order in which Perl searches these
directories.
This port of Perl version 5 prefers Unix-style, slash-separated pathnames over
OpenVOS-style greater-than-separated pathnames. OpenVOS-style pathnames should
work in most contexts, but if you have trouble, replace all greater-than
characters by slash characters. Because the slash character is used as a
pathname delimiter, Perl cannot process OpenVOS pathnames containing a slash
character in a directory or file name; these must be renamed.
This port of Perl also uses Unix-epoch date values internally. As
long as you are dealing with ASCII character string representations of
dates, this should not be an issue. The supported epoch is January 1, 1980
to January 17, 2038.
See the file pod/perlport.pod for more information about the
OpenVOS port of Perl.
A number of the perl self-tests fails for various reasons; generally these are
minor and due to subtle differences between common POSIX-based environments
and the OpenVOS POSIX environment. Ensure that you conduct sufficient testing
of your code to guarantee that it works properly in the OpenVOS environment.
I'm offering this port "as is". You can ask me questions, but I can't
guarantee I'll be able to answer them. There are some excellent books
available on the Perl language; consult a book seller.
If you want a supported version of perl for OpenVOS, purchase the
OpenVOS GNU Tools product from Stratus Technologies, along with a support
contract (or from anyone else who will sell you support).
Paul Green (Paul.Green@stratus.com)