$ grails create-plugin quartz
3.4.1 Upgrading Plugins
Version: 3.2.11
3.4.1 Upgrading Plugins
To upgrade a Grails 2.x plugin to Grails 3.x you need to make a number of different changes. This documentation will outline the steps that were taken to upgrade the Quartz plugin to Grails 3, each individual plugin may differ.
Step 1 - Create a new Grails 3 plugin
The first step is to create a new Grails 3 plugin using the command line:
This will create a Grails 3 plugin in the quartz
directory.
Step 2 - Copy sources from the original Grails 2 plugin
The next step is to copy the sources from the original Grails 2 plugin to the Grails 3 plugin:
# first the sources
cp -rf ../quartz-2.x/src/groovy/ src/main/groovy
cp -rf ../quartz-2.x/src/java/ src/main/groovy
cp -rf ../quartz-2.x/grails-app/ grails-app
cp -rf ../quartz-2.x/QuartzGrailsPlugin.groovy src/main/groovy/grails/plugins/quartz
# then the tests
cp -rf ../quartz-2.x/test/unit/* src/test/groovy
mkdir -p src/integration-test/groovy
cp -rf ../quartz-2.x/test/integration/* src/integration-test/groovy
# then templates / other resources
cp -rf ../quartz-2.x/src/templates/ src/main/templates
Step 3 - Alter the plugin descriptor
You will need to add a package declaration to the plugin descriptor. In this case QuartzGrailsPlugin
is modified as follows:
// add package declaration
package grails.plugins.quartz
...
class QuartzGrailsPlugin extends Plugin {
...
}
In addition you should remove the version
property from the descriptor as this is now defined in build.gradle
.
Step 4 - Update the Gradle build with required dependencies
The repositories and dependencies defined in grails-app/conf/BuildConfig.groovy
of the original Grails 2.x plugin will need to be defined in build.gradle
of the new Grails 3.x plugin:
compile("org.quartz-scheduler:quartz:2.2.1") {
exclude group: 'slf4j-api', module: 'c3p0'
}
It is recommended to use the latest stable, Grails 3+ compatible version of plugins. (Grails 2.x plugin versions will not work.)
Step 5 - Modify Package Imports
In Grails 3.x all internal APIs can be found in the org.grails
package and public facing APIs in the grails
package. The org.codehaus.groovy.grails
package no longer exists.
All package declaration in sources should be modified for the new location of the respective classes. Example org.codehaus.groovy.grails.commons.GrailsApplication
is now grails.core.GrailsApplication
.
Step 5 - Migrate Plugin Specific Config to application.yml
Some plugins define a default configuration file. For example the Quartz plugin defines a file called grails-app/conf/DefaultQuartzConfig.groovy
. In Grails 3.x this default configuration can be migrated to grails-app/conf/application.yml
and it will automatically be loaded by Grails without requiring manual configuration merging.
Step 6 - Update plugin exclusions
Old plugins may have a pluginExcludes
property defined that lists the patterns for any files that should not be included in the plugin package. This is normally used to exclude artifacts such as domain classes that are used in the plugin’s integration tests. You generally don’t want these polluting the target application.
This property is no longer sufficient in Grails 3, and nor can you use source paths. Instead, you must specify patterns that match the paths of the compiled classes. For example, imagine you have some test domain classes in the grails-app/domain/plugin/tests
directory. You should first change the pluginExcludes
value to
def pluginExcludes = ["plugin/test/**"]
and then add this block to the build file:
jar {
exclude "plugin/test/**"
}
The easiest way to ensure these patterns work effectively is to put all your non-packaged class into a distinct Java package so that there is a clean separation between the main plugin classes and the rest.
Step 7 - Register ArtefactHandler Definitions
In Grails 3.x ArtefactHandler definitions written in Java need to be declared in a file called src/main/resources/META-INF/grails.factories
since these need to be known at compile time.
If the ArtefactHandler is written in Groovy this step can be skipped as Grails will automatically create the grails.factories file during compilation.
|
The Quartz plugin requires the following definition to register the ArtrefactHandler
:
grails.core.ArtefactHandler=grails.plugins.quartz.JobArtefactHandler
Step 8 - Migrate Code Generation Scripts
Many plugins previously defined command line scripts in Gant. In Grails 3.x command line scripts have been replaced by two new features: Code generation scripts and Gradle tasks.
If your script is doing simple code generation then for many cases a code generation script can replace an old Gant script.
The create-job
script provided by the Quartz plugin in Grails 2.x was defined in scripts/CreateJob.groovy
as:
includeTargets << grailsScript("_GrailsCreateArtifacts")
target(createJob: "Creates a new Quartz scheduled job") {
depends(checkVersion, parseArguments)
def type = "Job"
promptForName(type: type)
for (name in argsMap.params) {
name = purgeRedundantArtifactSuffix(name, type)
createArtifact(name: name, suffix: type, type: type, path: "grails-app/jobs")
createUnitTest(name: name, suffix: type)
}
}
setDefaultTarget 'createJob'
A replacement Grails 3.x compatible script can be created using the create-script
command:
$ grails create-script create-job
Which creates a new script called src/main/scripts/create-job.groovy
. Using the new code generation API it is simple to implement:
description("Creates a new Quartz scheduled job") {
usage "grails create-job <<JOB NAME>>"
argument name:'Job Name', description:"The name of the job"
}
model = model( args[0] )
render template:"Job.groovy",
destination: file( "grails-app/jobs/$model.packagePath/${model.simpleName}Job.groovy"),
model: model
Please refer to the documentation on Creating Custom Scripts for more information.
Migrating More Complex Scripts Using Gradle Tasks
Using the old Grails 2.x build system it was relatively common to spin up Grails inside the command line. In Grails 3.x it is not possible to load a Grails application within a code generation script created by the create-script command.
Instead a new mechanism specific to plugins exists via the create-command command. The create-command
command will create a new ApplicationCommand, for example the following command will execute a query:
import grails.dev.commands.*
import javax.sql.*
import groovy.sql.*
import org.springframework.beans.factory.annotation.*
class RunQueryCommand implements ApplicationCommand {
@Autowired
DataSource dataSource
boolean handle(ExecutionContext ctx) {
def sql = new Sql(dataSource)
println sql.executeQuery("select * from foo")
return true
}
}
With this command in place once the plugin is installed into your local Maven cache you can add the plugin to both the build classpath and the runtime classpath of the application’s build.gradle
file:
buildscript {
...
dependencies {
classpath "org.grails.plugins:myplugin:0.1-SNAPSHOT"
}
}
...
dependencies {
runtime "org.grails.plugins:myplugin:0.1-SNAPSHOT"
}
Grails will automatically create a Gradle task called runQuery
and a command named run-query
so both the following examples will execute the command:
$ grails run-query
$ gradle runQuery
Step 8 - Delete Files that were migrated or no longer used
You should now delete and cleanup the project of any files no longer required by Grails 3.x (BuildConfig.groovy
, Config.groovy
, DataSource.groovy
etc.)


I have no information about this show - no programme, no photos, nothing! So if anyone has any, please get in touch via Stagepics.
One memory I do have of this show is working the "knife board". One character was doing a knife throwing act while another lead was where the knives were being thrown. I had to hide behind the board, pulling a string to release knives which shot through the board, creating the appearance of the knife having been thrown.
One night, the string on the lock snapped, with the lock half-way released. There was nothing I could do but wait as the spring eventually released the knife, long after the knife throwing act was complete!


LASG seals off Multipak Nig Ltd as worker’s head got stuck in machine
by Agency ReportThe Lagos State Government has sealed off Multipak Nigeria Ltd., a plastic producing factory, for violation of safety rules and regulations, poor house-keeping and lack of signage, which allegedly led to the death of a worker.
The Director-General, Lagos State Safety Commission, Mr. Lanre Mojola, made this known in an interview with the News Agency of Nigeria in Lagos on Sunday.
The company is located at Plot F8, Kudirat Abiola Way, Oregun, Lagos.
Mojola said the factory was sealed up following the Lagos State Government’s declaration of zero tolerance for factories and private organisations that violate safety rules and regulations.
“Lagos State Government seals off Multipak factory for violation of safety rules and regulations, as well as poor house-keeping and lack of signage.
“The poor house-keeping led to the untimely death of Mr. Femi Olatunde, a factory worker who got his head stuck while operating one of the machines.
“On no account should any factory operate without putting in place safety equipment, quality house-keeping, signage, good wiring system and a clean environment devoid of hazards to the lives of workers and visitors,’’ Mojola said.
He urged organisations and individuals to embrace best practices and international safety operations to prevent fatal incidents that endangered lives.
The LSSC boss said that safety of lives and property was collective responsibility and warned that factories that violated safety rules would be severely sanctioned.
(NAN)


Click here for a tutorial if you are new to this.
Is the {% if geospreadsheet %}spreadsheet{% else %}shapefile{% endif %} looking good?
Something wrong with this entire entry?


for directive:
we have flowing prods:
Edit
{{$index+1}}: name:{{prod.name}},price:¥{{prod.price}}
id:
name:
price:
submit changes
cancel


Barca taking extreme prudence with Samuel Umtiti
They don't like how he has managed his knee problem and Barca are being cautious
by Juan Manuel DíazSamuel Umtiti was not included on the squad list for Barca's game at Cartagena, even though he is not in the France squad.
Him missing out is nothing new. Since he played 90 minutes aganst Leganes last season, Samu has been in a diabolical dynamic. He has not played two consecutive matches in the 68 since then.
The club did not like how he managed his knee problem, forcing himself to play at the Russia 2018 World Cup, which has had negative effects on his career since.
Valverde left out Umtiti from the Cartagena squad list because they are taking extreme caution with him. They don't want him to be the new Vermaelen.
After two excellent campaigns, his knee problem flared up. The medics recommended surgery and recovery but he took conservative treatment so he could feature in Russia.
Umtiti returned with the World Cup under his arm but the knee messed up. On Sep 26 he played 90 against Leganes then disappeared for nine games, coming back to face Atletico, before missing 19 more matches.
On Feb 19 he was on the bench against Lyon, then played 90 against Sevilla, before resting two games. After that he plays 90 then is out for two or three matches.
The unhappiness at the club increased when Umtiti says he doesn't regret his decision, despite the negative effects. Barca signed him up to a big deal at the start of June 2018, but it has not worked out.
A year later they wanted to sell him but his physical problems and new high salary stopped any deal going ahead.
 Todibo is considered too young.
Umtiti played 90 mins against Eibar, but then was out again. He played against Celta Vigo too, and may next reappear against Dortmund on No 27. That game Pique is suspended, so Barca need Samu fit.


Dan Park
About Me
Work
Resume
Contact
Dan Park
Software Engineer
Software Engineer
Lead Android engineering on Twitter’s Fabric App with > 23,000 installs and 4.3 Play Store rating.
Drove Twitter’s Two Factor Authentication 2.0, Login Verification, Temporary Passwords.
Implemented Twitter for Android’s account security features such as change email and two factor authentication.
Twitter
May 2015 - Present
Software Engineer
Designed an Android app to control smart devices through UPnP, Bluetooth, and RESTful APIs.
Developed usb-to-serial drivers, device firmware code in C, and Arduino code for interfacing sensors.
Led development of LifeConnect Android SDK for controlling smart devices and shipped it to Samsung divisions worldwide and showcased at 2015 C.E.S.
Samsung Research America
November 2014 - May 2015
Software Engineering Intern
Created an internal web tool to automate report generation of hardware prototype testing.
Led migration from outdated Bootstrap UI and AngularJS versions to new AngularStrap.
Placed top 10 out of 1000 interns for Intern Idea Contest.
Apple
May 2014 - August 2014
Software Engineering Intern
Streamlined the ramp-up process for developers to easily create their own automation tests by creating an internal API
Automated UI testing for the Zynga Poker Android app and implemented 25% of tests for all First Time User Experience scenarios.
Zynga
August 2013 - December 2013
User Interface Intern
Created working ad prototypes for Android/iOS/web applications by working closely with the product management team.
Managed the entire product cycle of designing and implementing the company’s products page on mobile platforms.
Vdopia
May 2013 - August 2013
View Resume
Contact Me
<EMAIL_ADDRESS>Copyright © Dangineering 2016


Boston Permitting Dashboard selected out of records
Bar Chart - Permits by issuance date
Bar Chart - Permits by month
Map - Building permits
- Neighborhoods
Data Table
| Issuance Date | Applicant | City | Permit Type | Address |
|---|
| Issuance Date | Applicant | City | Permit Type | Address |
|---|


Welcome {{ session['email'] }}!
You are going to work on a Java class of a real Android application, NotePad. For this reason, please do not read the source code of the NotePad application. We will ask you to call seven experimental methods from the Android platform's API. Mind the handling of your code, to improve the quality, readability, and robustness of the application (For more information about software quality, see here.)
In the following, on the left there is a box of methods, keywords, and symbols that you can drag and drop on the answer boxes on the right. Scroll down to find the TODO comments and accordingly fill the answer boxes to complete the program. After you fill and format all the answer boxes, just log-out. Please read carefully the instructions before proceeding and our own Javadoc of the API reference documentation.
/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * * [...] * */ import android.app.*; import android.content.*; import android.database.*; import android.graphics.*; import android.net.*; import android.os.Bundle; import android.security.*; import android.util.*; import android.view.*; import android.widget.*; /** * This Activity handles "editing" a note, where editing is responding to * {@link Intent#ACTION_VIEW} (request to view data), edit a note * {@link Intent#ACTION_EDIT}, create a note {@link Intent#ACTION_INSERT}, or * create a new note from the current contents of the clipboard * {@link Intent#ACTION_PASTE}. * NOTE: Notice that the provider operations in this Activity are taking place */ public class NoteEditor extends Activity { // For logging and debugging purposes private static final String TAG = "NoteEditor"; /* * Creates a projection that returns the note ID and the note contents. */ private static final String[] PROJECTION = new String[] { NotePad.Notes._ID, NotePad.Notes.COLUMN_NAME_TITLE, NotePad.Notes.COLUMN_NAME_NOTE }; // A label for the saved state of the activity private static final String ORIGINAL_CONTENT = "origContent"; // This Activity can be started by more than one action. Each action is // represented // as a "state" constant private static final int STATE_EDIT = 0; private static final int STATE_INSERT = 1; // Global mutable variables private int mState; private Uri mUri; private Cursor mCursor; private EditText mText; private String mOriginalContent; /** * Defines a custom EditText View that draws lines between each line of text * that is displayed. */ public static class LinedEditText extends EditText { private Rect mRect; private Paint mPaint; // This constructor is used by LayoutInflater public LinedEditText(Context context, AttributeSet attrs) { super(context, attrs); // Creates a Rect and a Paint object, and sets the style and color // of the Paint object. mRect = new Rect(); mPaint = new Paint(); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(0x800000FF); } /** * This is called to draw the LinedEditText object * * @param canvas * The canvas on which the background is drawn. */ @Override protected void onDraw(Canvas canvas) { // Gets the number of lines of text in the View. int count = getLineCount(); // Gets the global Rect and Paint objects Rect r = mRect; Paint paint = mPaint; // Define the text size paint.setTextSize(100); // String to add before each new note String tmp = "Hello Android!"; /* * TODO: Draw a welcome text before a note. * Tip: Call the drawTxt method using the already created canvas object. * The object canvas is an instance of the Canvas class. */
{{answ.answer_1}}
/* * Draws one line in the rectangle for every line of text in the * EditText */ for (int i = 0; i < count; i++) { // Gets the baseline coordinates for the current line of text int baseline = getLineBounds(i, r); /* * Draws a line in the background from the left of the rectangle * to the right, at a vertical position one dip below the * baseline, using the "paint" object for details. */ canvas.drawLine(r.left, baseline + 1, r.right, baseline + 1, paint); } // Finishes up by calling the parent method super.onDraw(canvas); } } /** * This method is called by Android when the Activity is first started. From * the incoming Intent, it determines what kind of editing is desired, and * then does it. */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* * Creates an Intent to use when the Activity object's result is sent * back to the caller. */ final Intent intent = getIntent(); /* * Sets up for the edit, based on the action specified for the incoming * Intent. */ // Gets the action that triggered the intent filter for this Activity final String action = intent.getAction(); // For an edit action: if (Intent.ACTION_EDIT.equals(action)) { // Sets the Activity state to EDIT, and gets the URI for the data to // be edited. mState = STATE_EDIT; mUri = intent.getData(); // For an insert or paste action: } else if (Intent.ACTION_INSERT.equals(action) || Intent.ACTION_PASTE.equals(action)) { // Sets the Activity state to INSERT mState = STATE_INSERT; /* * TODO: Get the general note URI, and insert an empty record in the provider. * Tip: Call the insertData method using the getContentResolver() method * to get a ContentResolver instance (i.e. getContentResolver().insertData). * Then, assign the record to the already created object mUri, which is an instance of the Uri class. */
{{answ.answer_2}}
/* * If the attempt to insert the new note fails, shuts down this * Activity. The originating Activity receives back RESULT_CANCELED * if it requested a result. Logs that the insert failed. */ if (mUri == null) { // Writes the log identifier, a message, and the URI that // failed. Log.e(TAG, "Failed to insert new note into " + getIntent().getData()); // Closes the activity. finish(); return; } // Since the new entry was created, this sets the result to be // returned // set the result to be returned. setResult(RESULT_OK, (new Intent()).setAction(mUri.toString())); // If the action was other than EDIT or INSERT: } else { // Logs an error that the action was not understood, finishes the // Activity, and // returns RESULT_CANCELED to an originating Activity. Log.e(TAG, "Unknown action, exiting"); finish(); return; } /* * Using the URI passed in with the triggering Intent, gets the note or * notes in the provider. Note: This is being done on the UI thread. * It will block the thread until the query completes. * [...] */ mCursor = managedQuery( mUri, // The URI that gets multiple notes from the provider. PROJECTION, // A projection that returns the note ID and note content for each note. null, // No "where" clause selection criteria. null, // No "where" clause selection values. null // Use the default sort order (modification date, descending) ); // For a paste, initializes the data from clipboard. // (Must be done after mCursor is initialized.) if (Intent.ACTION_PASTE.equals(action)) { // Does the paste performPaste(); // Switches the state to EDIT so the title can be modified. mState = STATE_EDIT; } /* * TODO: Set the layout for the NotePad editor. * Tip: The layout is a file in the application's resources (i.e. res/layout/note_editor.xml). * Call the setLayout method that has a layout resource as a parameter. */
{{answ.answer_3}}
/* * TODO: Set a handler to the text editor (EditText object). * Tip: Assign to mText the output of the findViewId method. */
{{answ.answer_4}}
// Change EditText text color ColorStateList colors = null; try { XmlResourceParser parser = getResources().getXml(R.color.text_colors); colors = ColorStateList.createFromXml(getResources(), parser); // handle exceptions } catch (IOException e1) { e1.printStackTrace(); } catch (XmlPullParserException e2) { e2.printStackTrace(); } /* * TODO: Change the editor's text color. * Tip: Call the changeTextColor method using an EditText instance, mText. */
{{answ.answer_5}}
/* * If this Activity had stopped previously, its state was written the * ORIGINAL_CONTENT location in the saved Instance state. This gets the * state. */ if (savedInstanceState != null) { mOriginalContent = savedInstanceState.getString(ORIGINAL_CONTENT); } } /** * This method is called when the Activity is about to come to the * foreground. This happens when the Activity comes to the top of the task * stack, OR when it is first starting. * * Moves to the first note in the list, sets an appropriate title for the * action chosen by the user, puts the note contents into the TextView, and * saves the original text as a backup. */ @Override protected void onResume() {...} /** * This method is called when an Activity loses focus during its normal * operation, and is then later on killed. The Activity has a chance to save * its state so that the system can restore it. * * Notice that this method isn't a normal part of the Activity lifecycle. It * won't be called if the user simply navigates away from the Activity. */ @Override protected void onSaveInstanceState(Bundle outState) {...} /** * This method is called when the Activity loses focus. * * For Activity objects that edit information, onPause() may be the one * place where changes are saved. The Android application model is * predicated on the idea that "save" and "exit" aren't required actions. * When users navigate away from an Activity, they shouldn't have to go back * to it to complete their work. The act of going away should save * everything and leave the Activity in a state where Android can destroy it * if necessary. * * If the user hasn't done anything, then this deletes or clears out the * note, otherwise it writes the user's work to the provider. */ @Override protected void onPause() {...} /** * This method is called when the user clicks the device's Menu button the * first time for this Activity. Android passes in a Menu object that is * populated with items. * * Builds the menus for editing and inserting, and adds in alternative * actions that registered themselves to handle the MIME types for this * application. * * @param menu * A Menu object to which items should be added. * @return True to display the menu. */ @Override public boolean onCreateOptionsMenu(Menu menu) {...} @Override public boolean onPrepareOptionsMenu(Menu menu) {...} /** * This method is called when a menu item is selected. Android passes in the * selected item. The switch statement in this method calls the appropriate * method to perform the action the user chose. * * @param item * The selected MenuItem * @return True to indicate that the item was processed, and no further work * is necessary. False to proceed to further processing as indicated * in the MenuItem object. */ @Override public boolean onOptionsItemSelected(MenuItem item) {...} /** * A helper method that replaces the note's data with the contents of the * clipboard. */ private final void performPaste() { // Gets a handle to the Clipboard Manager ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); // Gets the clipboard data from the clipboard ClipData clip = clipboard.getPrimaryClip(); if (clip != null) { String text = null; String title = null; // Gets the first item from the clipboard data ClipData.Item item = clip.getItemAt(0); // Tries to get the item's contents as a URI pointing to a note Uri uri = item.getUri(); Cursor orig = null; // Tests to see that the item actually is an URI, and that the URI // is a content URI pointing to a provider whose MIME type is the // same as the MIME type supported by the Note pad provider. if (uri != null && NotePad.Notes.CONTENT_ITEM_TYPE.equals(getContentResolver().getType(uri))) { // The clipboard holds a reference to data with a note MIME type. This copies it. /* * TODO: Get data from a note's URI. * Tip: Call the queryData method by using the getContentResolver() method * that returns a ContentResolver instance (i.e. getContentResolver().queryData). * Assign the result of the called queryData method to the orig Cursor instance. */
{{answ.answer_6}}
// If the Cursor is not null, and it contains at least one // record (moveToFirst() returns true), // then this gets the note data from it. if (orig != null) { if (orig.moveToFirst()) { int colNoteIndex = mCursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_NOTE); int colTitleIndex = mCursor.getColumnIndex(NotePad.Notes.COLUMN_NAME_TITLE); text = orig.getString(colNoteIndex); title = orig.getString(colTitleIndex); } // Closes the cursor. orig.close(); } } // If the contents of the clipboard wasn't a reference to a note, // then this converts whatever it is to text. if (text == null) { text = item.coerceToText(this).toString(); } // Updates the current note with the retrieved title and text. updateNote(text, title); } } /** * Replaces the current note contents with the text and title provided as * arguments. * * @param text * The new note contents to use. * @param title * The new note title to use */ private final void updateNote(String text, String title) {...} /** * This helper method cancels the work done on a note. It deletes the note * if it was newly created, or reverts to the original text of the note i */ private final void cancelNote() {...} /** * Take care of deleting a note. Simply deletes the entry. */ private final void deleteNote() { if (mCursor != null) { mCursor.close(); mCursor = null; getContentResolver().delete(mUri, null, null); char[] chAr = { ' ' }; /* * TODO: Clear the text of a note. * Tip: Call the method editText using an EditText instance, mText. */
{{answ.answer_7}}
} } }
Please remember to press Format first.


Mail
Images
Calendar
Mail
News
Maps
Files
Contacts
Translate
Videos
Search
Photos
Apps
Documents
More
Chat
Classroom
Collection
Mars
Blogs
Promo
Even more from Kottans


Well I have had experiences with computer duster before, maybe I even submitted a report, I'm not sure.
Just a little background...I'm 16, I like to write, and I'm a huge pothead.  Also I'm going to say my name is John, even though it isn't, just to through the government off in thier worldwide search for me. My name is John. Bastards.
So yet again I'm stuck with barely any weed and a huge urge to get high, so I pulled out some good 'ol computer duster. It's funny, there's such a huge hesitation to take that first hit because of how unhealthy it is, but after that I can keep hitting it for an hour without a second thought.
Anyhow, it started all to similar to former experiences. That first kinda-bad tasteing hit, the exhale, and then BOOM, the numbness starts.
Somehow, whenever I experience it, I think that while in a sober state, the amazingness of this high can't even be imagined...and yet I can't exactly tell whats so intense about it. It's just a rush I guess.

Thank god for the sickness this drug gives me. All of a sudden my entire body just feels shitty, I guess it's kinda like a hangover, but more intense. I got up from the ground and realized I had broken off a peice of the can (the trigger that makes the air shoot out), but somehow I still managed to take hits from it.
If it weren't for this sickness -for me at least- it would be impossible to put the can down. See, I don't just take a few hits and enjoy a 5 minute high, I am constantly inhaling it, taking a breath of regular air after every few hits.
This sickness is pretty much my body snapping my mind out of its only comprehensive thought: Keep taking hits! Althought it is common, for me at least, to continue using it after this sickness subsides, at least it puts me in a sober state for a few minutes to reconsider the horrible thing I was doing to my body.
I'd say it was about an hour after starting that this sickness hit me, but I had only used half a can, meaning that I probably passed out a few times during that time. This is one of those drugs where I can't remember what I've done seconds earlier, so like I'll be on the floor and the last thing I can remember was sitting on the computer typing...it's fucked.
Anyhow, my first logical thought as I put the can down was to take a piss. I really didn't feel like walking far, so I just pissed in a nearby sink, and after that proceeded to puke in the same place.
Anyhow this is where I just lost it. I was hit with a slew of depression, while still feeling this horrible sickness. I soaked my head in freezing water and wrapped a towel around it, and proceeded to run around my house looking for something to get high off of -I was definately done with the duster.
By this point I must have looked like a wreck, reeking of puke, drenched in water, and running around franticly while looking for some type of dangerouse chemcial. I wish I had this on tape so I could show people the lows a completely normal kid (well maybe not) could go to get drugs.
Upon going into my room, I found a bunch of weed crumbs on my night table, so I smoked them. After this I smoked a bunch of Q-tips with pipe resin on them, and then smoked another large crumb which ended up not being weed. It was really really sad. After this I crouched on my floor to look for more weed crumbs, a common act for coke addicts (with coke of course). After no sucess I stood up, and slammed my head hard onto an open dresser drawer (sp??). I was more mentally embarrased than anything, I really didn't mind pain. But it just added to my distress and frustration.

Now I must say I've only considered suicide twice before this, so this was a big deal.
Well thats about it, after the hangover wore off I calmed down a bit, I think the little amount of weed I smoked had helped with that, and 15 minutes after sobering up I left for work.
I've only done it about 5 times, and haven't noticed any effects, but I'm sure they're there.
Peace
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.


Converting your file...
{{#if fileIsUploading}} Uploading... {{else}} Select a document file to upload: {{/if}}
Uploaded: {{noteUploadDate}}


As someone who works with time series data on almost a daily basis, I
have found thepandas
[https://pandas.pydata.org/pandas-docs/stable/]Python package to be
extremely useful for time series manipulation and analysis.
This basic introduction to time series data manipulation with pandas
should allow you to get started in your time series analysis. Specific
objectives are to show you how to:
* create a date range
* work with timestamp data
* convert string data to a timestamp
* index and slice your time series data in a data frame
* resample your time series for different time period aggregates/summary
statistics
* compute a rolling statistic such as a rolling average
* work with missing data
* understand the basics of unix/epoch time
* understand common pitfalls of time series data analysis
Let’s get started. If you want to play with real data that you have, you
may want to start by usingpandas
[https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html]read_csv
[https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html]to
read in your file to a data frame, however we’re going to start by
playing with generated data.
First import the libraries we’ll be working with and then use them
tocreate a date range
import pandas as pd
from datetime import datetime
import numpy as npdate_rng = pd.date_range(start='1/1/2018',
end='1/08/2018', freq='H')
This date range has timestamps with an hourly frequency. If we
calldate_rngwe’ll see that it looks like the following:
DatetimeIndex(['2018-01-01 00:00:00', '2018-01-01
01:00:00',
'2018-01-01 02:00:00', '2018-01-01 03:00:00',
'2018-01-01 04:00:00', '2018-01-01 05:00:00',
'2018-01-01 06:00:00', '2018-01-01 07:00:00',
'2018-01-01 08:00:00', '2018-01-01 09:00:00',
...
'2018-01-07 15:00:00', '2018-01-07 16:00:00',
'2018-01-07 17:00:00', '2018-01-07 18:00:00',
'2018-01-07 19:00:00', '2018-01-07 20:00:00',
'2018-01-07 21:00:00', '2018-01-07 22:00:00',
'2018-01-07 23:00:00', '2018-01-08 00:00:00'],
dtype='datetime64[ns]', length=169, freq='H')
We can check the type of the first element:
type(date_rng[0])#returnspandas._libs.tslib.Timestamp
Let’s create an example data frame with the timestamp data and look at
the first 15 elements:
df = pd.DataFrame(date_rng, columns=['date'])df['data']
= np.random.randint(0,100,size=(len(date_rng)))df.head(15)
[https://miro.medium.com/max/14/1*iOWtUCR12XLt5IDDehxKnA.png?q=20][https://miro.medium.com/max/204/1*iOWtUCR12XLt5IDDehxKnA.png]Example
data frame — dfIf we want to do time series manipulation, we’ll need to
have a date time index so that our data frame is indexed on the
timestamp.
Convert the data frame index to a datetime indexthen show the first
elements:
df['datetime'] = pd.to_datetime(df['date'])df =
df.set_index('datetime')df.drop(['date'], axis=1,
inplace=True)df.head()
[https://miro.medium.com/max/26/1*9vbzx1FO87ZJapWwXKId2A.png?q=20][https://miro.medium.com/max/177/1*9vbzx1FO87ZJapWwXKId2A.png]df
with datetime indexWhat if our ‘time’ stamps in our data are actually
string type vs. numerical? Let’s convert ourdate_rngto a list of strings
and then convert the strings to timestamps.
string_date_rng = [str(x) for x in
date_rng]string_date_rng#returns['2018-01-01 00:00:00',
'2018-01-01 01:00:00',
'2018-01-01 02:00:00',
'2018-01-01 03:00:00',
'2018-01-01 04:00:00',
'2018-01-01 05:00:00',
'2018-01-01 06:00:00',
'2018-01-01 07:00:00',
'2018-01-01 08:00:00',
'2018-01-01 09:00:00',...
We canconvert the strings to timestampsby inferring their format, then
look at the values:
timestamp_date_rng = pd.to_datetime(string_date_rng,
infer_datetime_format=True)timestamp_date_rng#returnsDatetimeIndex(['2018-01-01
00:00:00', '2018-01-01 01:00:00',
'2018-01-01 02:00:00', '2018-01-01 03:00:00',
'2018-01-01 04:00:00', '2018-01-01 05:00:00',
'2018-01-01 06:00:00', '2018-01-01 07:00:00',
'2018-01-01 08:00:00', '2018-01-01 09:00:00',
...
'2018-01-07 15:00:00', '2018-01-07 16:00:00',
'2018-01-07 17:00:00', '2018-01-07 18:00:00',
'2018-01-07 19:00:00', '2018-01-07 20:00:00',
'2018-01-07 21:00:00', '2018-01-07 22:00:00',
'2018-01-07 23:00:00', '2018-01-08 00:00:00'],
dtype='datetime64[ns]', length=169, freq=None)
But what about if we need toconvert a unique string format?
Let’s create an arbitrary list of dates that are strings and convert
them to timestamps:
string_date_rng_2 = ['June-01-2018', 'June-02-2018',
'June-03-2018']timestamp_date_rng_2 =
[datetime.strptime(x,'%B-%d-%Y') for x in
string_date_rng_2]timestamp_date_rng_2#returns[datetime.datetime(2018,
6, 1, 0, 0),
datetime.datetime(2018, 6, 2, 0, 0),
datetime.datetime(2018, 6, 3, 0, 0)]
What does it look like if we put this into a data frame?
df2 = pd.DataFrame(timestamp_date_rng_2, columns=['date'])df2
[https://miro.medium.com/max/27/1*MD2S1B9hTlEPXjeLymyK5w.png?q=20][https://miro.medium.com/max/104/1*MD2S1B9hTlEPXjeLymyK5w.png]Going
back to our original data frame, let’slook at the data by parsing on
timestamp index:
Say we just want to see data where the date is the 2nd of the month, we
could use the index as per below.
df[df.index.day == 2]
The top of this looks like:
[https://miro.medium.com/max/14/1*QcnXFyXnNz7vVqYztH__aw.png?q=20][https://miro.medium.com/max/183/1*QcnXFyXnNz7vVqYztH__aw.png]We
could also directly call a date that we want to look at via the index of
the data frame:
df['2018-01-03']
[https://miro.medium.com/max/13/1*jM93ti4vsZaXLnCpWdPweQ.png?q=20][https://miro.medium.com/max/182/1*jM93ti4vsZaXLnCpWdPweQ.png]What
aboutselecting data between certain dates?
df['2018-01-04':'2018-01-06']
[https://miro.medium.com/max/13/1*qeBhXKC_SzfAiItiZZopFQ.png?q=20][https://miro.medium.com/max/178/1*qeBhXKC_SzfAiItiZZopFQ.png]The
basic data frame that we’ve populated gives us data on an hourly
frequency, but we canresample the data at a different frequencyand
specify how we would like to compute the summary statistic for the new
sample frequency. We could take the min, max, average, sum, etc., of the
data at a daily frequency instead of an hourly frequency as per the
example below where we compute the daily average of the data:
df.resample('D').mean()
[https://miro.medium.com/max/16/1*EAMBuYLGbnQOssQ5iKhh7Q.png?q=20][https://miro.medium.com/max/155/1*EAMBuYLGbnQOssQ5iKhh7Q.png]What
aboutwindow statistics such as a rolling mean or a rolling sum?
Let’s create a new column in our original df that computes the rolling
sum over a 3 window period and then look at the top of the data frame:
df['rolling_sum'] = df.rolling(3).sum()
df.head(10)
[https://miro.medium.com/max/23/1*tjMO67HZ4j2HA-d3VR063Q.png?q=20][https://miro.medium.com/max/253/1*tjMO67HZ4j2HA-d3VR063Q.png]We
can see that this is computing correctly and that it only starts having
valid values when there are three periods over which to look back.
This is a good chance to see how we can doforward or backfilling of data
when working with missing data values.
Here’s our df but with a new column that takes the rolling sum and
backfills the data:
df['rolling_sum_backfilled'] =
df['rolling_sum'].fillna(method='backfill')
df.head(10)
[https://miro.medium.com/max/30/1*8EtGaf4aiSBAay9lZfAl8A.png?q=20][https://miro.medium.com/max/401/1*8EtGaf4aiSBAay9lZfAl8A.png]It’s
often useful to be able to fill your missing data with realistic values
such as the average of a time period, but always remember that if you
are working with a time series problem and want your data to be
realistic, you shouldnotdo a backfill of your data as that’s like
looking into the future and getting information you would never have at
that time period. Likely you will want to forward fill your data more
frequently than you backfill.
When working with time series data, you may come across time values that
are in Unix time. Unix time, also called Epoch time is the number of
seconds that have elapsed since 00:00:00 Coordinated Universal Time
(UTC), Thursday, 1 January 1970. Using Unix time helps to disambiguate
time stamps so that we don’t get confused by time zones, daylight
savings time, etc.
Here’s an example of a time t that is in Epoch time andconverting
unix/epoch time to a regular time stamp in UTC:
epoch_t =<PHONE_NUMBER>
real_t = pd.to_datetime(epoch_t,
unit='s')real_t#returnsTimestamp('2018-06-17 21:57:35')
If I wanted toconvert that time that is in UTC to my own time zone, I
could simply do the following:
real_t.tz_localize('UTC').tz_convert('US/Pacific')#returnsTimestamp('2018-06-17
14:57:35-0700', tz='US/Pacific')
With these basics, you should be all set to work with your time series
data.
Here are afew tips to keep in mind and common pitfalls to avoid when
working with time series data:
* Check for discrepanciesin your data that may be caused by region
specific time changes like daylight savings time.
* Keep track of time zonesmeticulously — let others going through your
code know what time zone your data is in, and think about converting to
UTC or a standardized value in order to keep your data standardized.
* Missing data can occur frequently — make sure youdocument your
cleaning rulesand think about not backfilling information you wouldn’t
have been able to have at the time of a sample.
* Remember that as you resample your data or fill in missing values,
you’re losing a certain amount of information about your original data
set. I’d suggestkeeping track of all of your data transformationsand
tracking the root cause of your data issues.
* When you resample your data, the best method (mean, min, max, sum,
etc.) will be dependent on the kind of data you have and how it was
sampled.Be thoughtful about how you resample your datafor your analysis.


We have a dinner with turkey in celebration of Native Americans,
A friday in November when all the stores have huge sales.
A celebration of the day America became an independant country. Celabrated with fireworks.
Celabrating all soldiers who have fought for our country
A day when we remember all the the American soldiers who have died at war
Many countries celebrate Halloween, but in the USA people make a very big deal about it. Many people dress up, go to parties, and collect candy.


Scroll Up and Down this page to see the parallax scrolling effect.
Kermit had a rough day.
Link to coding101


Akrash Sharma
You've been successfully signed up to the newsletter, look forward to lots of awesome content.


surveillance dengue health Health data cases []. private healthcare notification Surveillance public Public Dengue units {border-style Epidemiological lack response Brazilian px;} #ffffff;} Directory case main epidemic epidemiological number Coordination surveillance, General March control disease environmental online: system, activities Federal SINAN different forms laboratory notified Brazil Environmental Laboratory Saúde Surveillance, active diseases integration surveillance. .collab: Vigilância cases, collected does hospitals incidence research resources sector urban used (Figure Central District Ministry UBS Unit analysis federal human important interviews national reported study suspected system. Private Units [,]. access collection conducted implementation improve infectious necessity notify patients px; socioeconomic underreporting {font-family Healthcare Table confirmation data, emergency font-size functioning guidelines high laboratories management need online population presence seeking work Interviewees Qualitative [...] […] analysis. delay dengue, double; especially listed particularly perceived period professionals quantitative responsible serotypes technological test unit vector Aedes DF, Data International Regional So, are: aspects border-color border-width breeding cases. caused considered effective form general global growing healthcare, highlighting importance integrated low major passive period, population, qualitative recommended relevant results social solid; state timely type waiting {font-style {font-weight (Section (Table ... According Aegypti Basic Coordinação Diretoria Geral Global Methods SDCC, Saude Strategy [,,]. activities, analysis, areas article based better bold care complemented comprehensive consists courier; data. deaths delays detect distribution em; emerging experts government improvements information interviewees interviewees, items laboratories, level. long medical model non-epidemic notification, occur paper period. portal prevention problem professional provide pt;} quality regional regions related resources, result role samples service stated strengths surveillance? system? systems themes time types use water work?


Mushrooms (P. cubensis)
Last July 4th, I went to my brother's house to barbecue, crack a cold one, and partake of some fungus that we had been waiting on for several weeks. Upon seeing the scant quantity that my brother's friend had given him, I was rather deflated and told my brother that it wouldn't be enough to really give us both a good buzz. I had previous experiences with mushrooms, and what we had appeared to be about a gram and a half at most.
Now, I have no idea how long it takes for dried mushrooms to lose their strength or what other factors may play a role in their effectiveness, such as how they were stored, wild or homegrown, etc., but my brother was quite content to let me have them while he smoked some MJ.
Well folks, I'm here to tell you, these suckers put me on a solid eight hour voyage. Is this an unusually long trip for that amount?
I had the usual anxiety, jaw-clenching come-on, and I did about sixty laps around the kitchen/living room area while my brother prepared some salmon for the grill. After about fortyfive min. I found myself closely observing the intricate swirls of color in a print he has framed in the living room. My buzz was coming on so hard and fast I almost bashed my head through the glass in the frame. It was as if the color were sucking me into the painting.
 Looking at the colors and textures of the paintings, fabrics and such that were around me gave the appearance that I was sitting in a giant, fantastic gem. After a few hours, however, the variety of color and patterns became annoying and progressed to the point of being hideously offensive. The garishness of every piece of furniture around me was like an assault to the senses, they were so intensified. Unfortunately, the powerful oceanlike wave that was coursing through my body prevented me from being able to get up and walk. My speech was really slurred, and all sound and color seemed to be moving to the rythm of this wave.
Later, I managed to balance myself and stumble into the kitchen to eat something and then go to the back yard.
WOW!! Much better. The richness of the colors in nature seemed holy in comparison to manmade objects. The patio furniture by the swimming pool seemed like a nightmare out of a Tim Burton movie.  I felt as if I were part of the spectrum and that the wave surging through me was now frequencies of color, and I was a part of them. I imagined that if I cocentrated my will, I could simply point to the pool chairs and burn them from existence.
After I basked in the revelation of the power in the creation which is all around us, a friend of my brother's arrived. He had just gotten off work and had had a really bad day.  But, all I could see was how wrong his anger was and how wrong it was to let such negative feelings rule you. In short, I felt as if I was seeing the true nature of a kind of sin. It became very important to me at that moment to beware of the trap of hatred and anger.
In summary, it was a great experience, but I would highly recommend a camping trip to really appreciate the altered state these caps put you in.
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.


| Methods' Details |
getName
- Returns
- the name of the dictionary.
|
|
getLocale
- Returns
- the language supported by the dictionary.
- See also
- ::com::sun::star::lang::Locale
|
|
| getConversionType
|
setActive
| void |
| setActive( |
[in] boolean |
bActivate ); |
- Description
- specifies whether the dictionary should be used or not .
- Parameter bAcvtivate
- true if the dictionary should be used, false otherwise.
|
|
isActive
- Returns
- true if the dictionary is active, false otherwise.
|
|
clear
- Description
- removes all entries from the dictionary.
|
|
getConversions
- Description
- searches for entries or conversions that match the given text.
The exact string to be looked for is the substring from the
aText parameter that starts at position nStartPos and has the
length nLength.
- Returns
- the list of conversions found for the supplied text.
If no nothing was found, it is empty.
- Parameter aText
- the text where the substring to be looked for will be taken from.
Depending on the conversion direction parameter it specifies
either the left text or the right text to look for.
- Parameter nStartPos
- the starting pos of the substring to be looked for.
- Parameter nLength
- the length of the substring to be looked for.
- Parameter eConversionDirection
- specifies the direction of the conversion to look for.
It is one of
ConversionDirection.
- Parameter nTextConversionOptions
- Combination of ::com::sun::star::i18n::TextConversionOption
values.
- Throws
- com::sun::star::lang::IllegalArgumentException
if the locale is not supported by the dictionary or if
nTextConversionOptions is invalid for the given locale.
|
|
addEntry
- Description
- is used to add a conversion pair to the dictionary.
- Parameter aLeftText
- the left text of the pair to be added.
- Parameter aRightText
- the right text of the pair to be added.
- Throws
- com::sun::star::lang::IllegalArgumentException
if the arguments are invalid.
For example if the specifications defined by the service
implementing this object are not met.
- Throws
- com::sun::star::container::ElementExistException
if such an entry already exists.
|
|
removeEntry
- Description
- removes a conversion pair from the dictionary.
- Parameter aLeftText
- the left text of the pair to be removed.
- Parameter aRightText
- the right text of the pair to be removed.
- Throws
- com::sun::star::container::NoSuchElementException
if there is no such entry.
|
|
getMaxCharCount
- Description
- returns the maximum number of characters used as left or right text
in entries.
- Parameter eDirection
- specifies if the left text or the right text of entries will
be used.
- See also
- ConversionDirection
|
|
getConversionEntries
- Returns
- a list of all left or right parts of the dictionaries entries.
- Parameter eDirection
- specifies if all left or all right parts of the entries
should be returned.
|
|
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Stinky Tofu Projects
nathan.c
On a mission to discover all aspects of coding, starting with my portfolio.
about me
projects
contact
resume


@InterfaceAudience.Public @InterfaceStability.Stable public interface RunningJob
RunningJob
is the user-interface to query for details on a
running Map-Reduce job.
Clients can get hold of RunningJob
via the JobClient
and then query the running-job for details such as name, configuration,
progress etc.
JobClient
| Modifier and Type | Method and Description |
|---|---|
float |
cleanupProgress()
Get the progress of the job's cleanup-tasks, as a float between 0.0
and 1.0.
|
Configuration |
getConfiguration()
Get the underlying job configuration
|
Counters |
getCounters()
Gets the counters for this job.
|
String |
getFailureInfo()
Get failure info for the job.
|
String |
getHistoryUrl()
Get the url where history file is archived.
|
JobID |
getID()
Get the job identifier.
|
String |
getJobFile()
Get the path of the submitted job configuration.
|
String |
getJobID()
Deprecated.
This method is deprecated and will be removed. Applications should
rather use
getID() . |
String |
getJobName()
Get the name of the job.
|
int |
getJobState()
Returns the current state of the Job.
|
JobStatus |
getJobStatus()
Returns a snapshot of the current status,
JobStatus , of the Job. |
TaskCompletionEvent[] |
getTaskCompletionEvents(int startFrom)
Get events indicating completion (success/failure) of component tasks.
|
String[] |
getTaskDiagnostics(TaskAttemptID taskid)
Gets the diagnostic messages for a given task attempt.
|
String |
getTrackingURL()
Get the URL where some job progress information will be displayed.
|
boolean |
isComplete()
Check if the job is finished or not.
|
boolean |
isRetired()
Check whether the job has been removed from JobTracker memory and retired.
|
boolean |
isSuccessful()
Check if the job completed successfully.
|
void |
killJob()
Kill the running job.
|
void |
killTask(String taskId,
boolean shouldFail)
Deprecated.
Applications should rather use
killTask(TaskAttemptID, boolean) |
void |
killTask(TaskAttemptID taskId,
boolean shouldFail)
Kill indicated task attempt.
|
float |
mapProgress()
Get the progress of the job's map-tasks, as a float between 0.0
and 1.0.
|
float |
reduceProgress()
Get the progress of the job's reduce-tasks, as a float between 0.0
and 1.0.
|
void |
setJobPriority(String priority)
Set the priority of a running job.
|
float |
setupProgress()
Get the progress of the job's setup-tasks, as a float between 0.0
and 1.0.
|
void |
waitForCompletion()
Blocks until the job is complete.
|
Configuration getConfiguration()
@Deprecated String getJobID()
getID()
.String getJobName()
String getJobFile()
String getTrackingURL()
float mapProgress() throws IOException
IOException
float reduceProgress() throws IOException
IOException
float cleanupProgress() throws IOException
IOException
float setupProgress() throws IOException
IOException
boolean isComplete() throws IOException
true
if the job is complete, else false
.IOException
boolean isSuccessful() throws IOException
true
if the job succeeded, else false
.IOException
void waitForCompletion() throws IOException
IOException
int getJobState() throws IOException
JobStatus
IOException
JobStatus getJobStatus() throws IOException
JobStatus
, of the Job.
Need to call again for latest information.IOException
void killJob() throws IOException
IOException
void setJobPriority(String priority) throws IOException
priority
- the new priority for the job.IOException
TaskCompletionEvent[] getTaskCompletionEvents(int startFrom) throws IOException
startFrom
- index to start fetching events fromTaskCompletionEvent
sIOException
void killTask(TaskAttemptID taskId, boolean shouldFail) throws IOException
taskId
- the id of the task to be terminated.shouldFail
- if true the task is failed and added to failed tasks
list, otherwise it is just killed, w/o affecting
job failure status.IOException
@Deprecated void killTask(String taskId, boolean shouldFail) throws IOException
killTask(TaskAttemptID, boolean)
IOException
Counters getCounters() throws IOException
IOException
String[] getTaskDiagnostics(TaskAttemptID taskid) throws IOException
taskid
- IOException
String getHistoryUrl() throws IOException
IOException
boolean isRetired() throws IOException
getHistoryUrl()
true
if the job retired, else false
.IOException
String getFailureInfo() throws IOException
IOException
Copyright © 2017 Apache Software Foundation. All rights reserved.


Spring, also known as springtime is one of the four temperate seasons, following winter and preceding summer. There are various technical definitions of spring, but local usage of the term varies according to local climate, cultures and customs. When it is spring in the Northern Hemisphere, it is autumn in the Southern Hemisphere and vice versa
The beginning of spring is not always determined by fixed calendar dates. The phenological or ecological definition of spring relates to biological indicators, such as the blossoming of a range of plant species, the activities of animals, and the special smell of soil that has reached the temperature for micro flora to flourish. These indicators, along with the beginning of spring, vary according to the local climate and according to the specific weather of a particular year.
During early spring, the axis of the Earth is increasing its tilt relative to the Sun, and the length of daylight rapidly increases for the relevant hemisphere. The hemisphere begins to warm significantly, causing new plant growth to "spring forth," giving the season its name.
Carnival
Easter
May Day


Repo Contributor Locations
Search By State
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
District Of Columbia
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
Pennsylvania
Rhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
Search
Search By City
Search
Search By ZIP
Search
Statistics
Total number of contributors:
State with most contributors:
City with most contributors:


+1-408-242-2682
<EMAIL_ADDRESS>PopArt is full service interactive company which gives innovative web design & branding solutions and move the boundaries.
We are passionate for every pixel, but we love clean, optimized code, which provides unique web design and original web pages.
 With us you can go farther then ever before. Be in top results of searches.
We create winning ads which brings instant results. We are planning, managing, reporting and together building the brand.
We create beautiful web sites, specially designed for mobile usage, so you are avaible for all of your clients, wherever they are. Mobile versions of our sites looks perfect on any device, browser or Operating System.


|
Hephaestus
0.0.4
|
Provide basically all Vulkan functionality, including vertex buffers, shaders, & windows. More...
#include "hp/config.hpp"
#include "hp/vk/vk.hpp"
#include "hp/hp.hpp"
#include "glm/glm.hpp"
#include <map>
#include <set>
#include <queue>
#include "vk_mem_alloc.h"
#include "boost/range/algorithm_ext/erase.hpp"
Go to the source code of this file.
Data Structures | |
| struct | hp::vk::__hp_vk_is_in_extension_prop_list |
| This is an implementation detail and you should NEVER touch this. More... | |
| struct | hp::vk::__hp_vk_is_in_layer_prop_list |
| This is an implementation detail and you should NEVER touch this. More... | |
| class | hp::vk::buffer_layout |
Describes the expected layout of the data of a hp::vk::vertex_buffer . More... | |
| class | hp::vk::ubo_layout |
| struct | hp::vk::queue_family_indices |
| This is an implementation detail and you should NEVER touch this. More... | |
| struct | hp::vk::swap_chain_support |
| This is an implementation detail and you should NEVER touch this. More... | |
| class | hp::vk::generic_buffer |
| Offers nice wrapper around functionality of vk::Buffer (See Vulkan documentation) More... | |
| struct | hp::vk::vertex_buffer |
| Provide metadata necessary to bind and draw a VBO. More... | |
| struct | hp::vk::index_buffer |
| Provide the metadata necessary to bind and draw an IBO. More... | |
| class | hp::vk::vertex_bind_info |
| class | hp::vk::shader_program |
An abstraction of graphics pipelines (aka vk::Pipeline objects). See hp::vk::window::new_shader_program. More... | |
| class | hp::vk::window |
| Describes a vulkan window. Is used as a base for all operations. More... | |
Namespaces | |
| hp | |
| hp::vk | |
Macros | |
| #define | __HEPHAESTUS_VK_WINDOW_HPP |
This macro is defined if window.hpp has been included. More... | |
Provide basically all Vulkan functionality, including vertex buffers, shaders, & windows.
Definition in file window.hpp.
| #define __HEPHAESTUS_VK_WINDOW_HPP |
This macro is defined if window.hpp
has been included.
Definition at line 14 of file window.hpp.


“Semantic Versioning”, commonly called SemVer, is a specification for
assigning and reasoning about software version numbers. In short, it codifies
some common practices regarding $MAJOR.$MINOR.$REVISION
style version
numbers, including guarentees about API compatibility and dependency
resolution.
Beautifully simple semantics, outlined by a clear and concise specification. What’s not to like? Technically, SemVer is very strong. However, statistically speaking, software developers can not be trusted to maintain the semantics promised by SemVer. A small handful of individuals and projects use SemVer, or something like it, to good effect. The rest can’t be trusted not to introduce major bugs or breaking changes with each and every revision.
Every engineer who has ever worked on a project with more than a handful of external dependencies has had the horrifying experience of deploying some small dependency upgrades only to have their entire house of cards come crashing down. As a result, mature organizations tend to maintain their own package repositories, vendor all dependencies, or otherwise carefully scrutinize and control each and every external component.
Packaging systems such as Ruby’s Bundler and Node’s NPM often default
to or otherwise encourage SemVer. Depending on a
pessimistic version constraint, such as ~> 1.2
, is tantamount to saying
“I trust that the maintainer of this project both understands SemVer and is
capable of enforcing its guarantees.” Sadly, this is rarely, if ever, true.
Versioning is a social contract. A maintainer makes a promise regarding API stability and versioning policy. Consumers make a judgement call regarding the veracity of the maintainer’s promise. If the README file says “This project uses SemVer” and the project’s maintainer is Tom Preston-Werner, then you can trust that pessimistic version constraint in your dependencies file.
However, the README might say “Releases are only packaged for long-term support
versions. Please use the stable
branch for new production systems.” In such
a case, you might want to consider depending directly on that branch or even on
a particular commit hash. Speaking of branches and commits, this calls to mind
a far preferable default for packaging and dependency resolution systems:
refspecs. It would be great if the SemVer spec was updated to include
policies for defining branch and tag names in your version control system of
choice. Instead of depending on ~> 1.2
, you could depend on
branches/v1.2.x
. This grants maintainers greater flexibility in making social
contracts. It also grants consumers greater control over how much trust they
give to maintainers.


If you follow the steps in Section Quick Start, above, you can skip this section.
It is possible to look up the documentation for any built-in or library predicate from within Emacs (using C-c ? or the menu). For this to work Emacs must be told about the location of the `info'-files that make up the documentation.
The default location for the `info'-files are <prefix>/lib/sicstus-4.0.2/doc/info/ on UNIX platforms and C:/Program Files/SICStus Prolog 4.0.2/doc/info/ under Windows.
Add the following to your ~/.emacs file, assuming INFO is the path to the info files, e.g. C:/Program Files/SICStus Prolog 4.0.2/doc/info/
(setq Info-default-directory-list (append Info-default-directory-list '("INFO")))
for GNU Emacs, or
(setq Info-directory-list (append Info-directory-list '("INFO")))
for XEmacs. You can also use M-x customize-group <RET> info <RET> if your Emacs is new enough. You may have to quit and restart Emacs for these changes to take effect.


"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var version_1 = require("./version"); var utils_1 = require("./utils"); var anchor_tag_builder_1 = require("./anchor-tag-builder"); var html_tag_1 = require("./html-tag"); var parse_matches_1 = require("./parser/parse-matches"); var parse_html_1 = require("./htmlParser/parse-html"); var mention_utils_1 = require("./parser/mention-utils"); var hashtag_utils_1 = require("./parser/hashtag-utils"); /** * @class Autolinker * @extends Object * * Utility class used to process a given string of text, and wrap the matches in * the appropriate anchor () tags to turn them into links. * * Any of the configuration options may be provided in an Object provided * to the Autolinker constructor, which will configure how the {@link #link link()} * method will process the links. * * For example: * * var autolinker = new Autolinker( { * newWindow : false, * truncate : 30 * } ); * * var html = autolinker.link( "Joe went to www.yahoo.com" ); * // produces: 'Joe went to yahoo.com' * * * The {@link #static-link static link()} method may also be used to inline * options into a single call, which may be more convenient for one-off uses. * For example: * * var html = Autolinker.link( "Joe went to www.yahoo.com", { * newWindow : false, * truncate : 30 * } ); * // produces: 'Joe went to yahoo.com' * * * ## Custom Replacements of Links * * If the configuration options do not provide enough flexibility, a {@link #replaceFn} * may be provided to fully customize the output of Autolinker. This function is * called once for each URL/Email/Phone#/Hashtag/Mention (Twitter, Instagram, Soundcloud) * match that is encountered. * * For example: * * var input = "..."; // string with URLs, Email Addresses, Phone #s, Hashtags, and Mentions (Twitter, Instagram, Soundcloud) * * var linkedText = Autolinker.link( input, { * replaceFn : function( match ) { * console.log( "href = ", match.getAnchorHref() ); * console.log( "text = ", match.getAnchorText() ); * * switch( match.getType() ) { * case 'url' : * console.log( "url: ", match.getUrl() ); * * if( match.getUrl().indexOf( 'mysite.com' ) === -1 ) { * var tag = match.buildTag(); // returns an `Autolinker.HtmlTag` instance, which provides mutator methods for easy changes * tag.setAttr( 'rel', 'nofollow' ); * tag.addClass( 'external-link' ); * * return tag; * * } else { * return true; // let Autolinker perform its normal anchor tag replacement * } * * case 'email' : * var email = match.getEmail(); * console.log( "email: ", email ); * * if( email ===<EMAIL_ADDRESS>) { * return false; // don't auto-link this particular email address; leave as-is * } else { * return; // no return value will have Autolinker perform its normal anchor tag replacement (same as returning `true`) * } * * case 'phone' : * var phoneNumber = match.getPhoneNumber(); * console.log( phoneNumber ); * * return '' + phoneNumber + ''; * * case 'hashtag' : * var hashtag = match.getHashtag(); * console.log( hashtag ); * * return '' + hashtag + ''; * * case 'mention' : * var mention = match.getMention(); * console.log( mention ); * * return '' + mention + ''; * } * } * } ); * * * The function may return the following values: * * - `true` (Boolean): Allow Autolinker to replace the match as it normally * would. * - `false` (Boolean): Do not replace the current match at all - leave as-is. * - Any String: If a string is returned from the function, the string will be * used directly as the replacement HTML for the match. * - An {@link Autolinker.HtmlTag} instance, which can be used to build/modify * an HTML tag before writing out its HTML text. */ var Autolinker = (function () { /** * @method constructor * @param {Object} [cfg] The configuration options for the Autolinker instance, * specified in an Object (map). */ function Autolinker(cfg) { if (cfg === void 0) { cfg = {}; } /** * The Autolinker version number exposed on the instance itself. * * Ex: 0.25.1 * * @property {String} version */ this.version = Autolinker.version; /** * @cfg {Boolean/Object} [urls] * * `true` if URLs should be automatically linked, `false` if they should not * be. Defaults to `true`. * * Examples: * * urls: true * * // or * * urls: { * schemeMatches : true, * tldMatches : true, * ipV4Matches : true * } * * As shown above, this option also accepts an Object form with 3 properties * to allow for more customization of what exactly gets linked. All default * to `true`: * * @cfg {Boolean} [urls.schemeMatches] `true` to match URLs found prefixed * with a scheme, i.e. `http://google.com`, or `other+scheme://google.com`, * `false` to prevent these types of matches. * @cfg {Boolean} [urls.tldMatches] `true` to match URLs with known top * level domains (.com, .net, etc.) that are not prefixed with a scheme * (such as 'http://'). This option attempts to match anything that looks * like a URL in the given text. Ex: `google.com`, `asdf.org/?page=1`, etc. * `false` to prevent these types of matches. * @cfg {Boolean} [urls.ipV4Matches] `true` to match IPv4 addresses in text * that are not prefixed with a scheme (such as 'http://'). This option * attempts to match anything that looks like an IPv4 address in text. Ex: * `<IP_ADDRESS>`, `<IP_ADDRESS>/?page=1`, etc. `false` to prevent these types * of matches. */ this.urls = {}; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [email=true] * * `true` if email addresses should be automatically linked, `false` if they * should not be. */ this.email = true; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [phone=true] * * `true` if Phone numbers ("(555)555-5555") should be automatically linked, * `false` if they should not be. */ this.phone = true; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean/String} [hashtag=false] * * A string for the service name to have hashtags (ex: "#myHashtag") * auto-linked to. The currently-supported values are: * * - 'twitter' * - 'facebook' * - 'instagram' * * Pass `false` to skip auto-linking of hashtags. */ this.hashtag = false; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {String/Boolean} [mention=false] * * A string for the service name to have mentions (ex: "@myuser") * auto-linked to. The currently supported values are: * * - 'twitter' * - 'instagram' * - 'soundcloud' * - 'tiktok' * * Defaults to `false` to skip auto-linking of mentions. */ this.mention = false; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [newWindow=true] * * `true` if the links should open in a new window, `false` otherwise. */ this.newWindow = true; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean/Object} [stripPrefix=true] * * `true` if 'http://' (or 'https://') and/or the 'www.' should be stripped * from the beginning of URL links' text, `false` otherwise. Defaults to * `true`. * * Examples: * * stripPrefix: true * * // or * * stripPrefix: { * scheme : true, * www : true * } * * As shown above, this option also accepts an Object form with 2 properties * to allow for more customization of what exactly is prevented from being * displayed. Both default to `true`: * * @cfg {Boolean} [stripPrefix.scheme] `true` to prevent the scheme part of * a URL match from being displayed to the user. Example: * `'http://google.com'` will be displayed as `'google.com'`. `false` to * not strip the scheme. NOTE: Only an `'http://'` or `'https://'` scheme * will be removed, so as not to remove a potentially dangerous scheme * (such as `'file://'` or `'javascript:'`) * @cfg {Boolean} [stripPrefix.www] www (Boolean): `true` to prevent the * `'www.'` part of a URL match from being displayed to the user. Ex: * `'www.google.com'` will be displayed as `'google.com'`. `false` to not * strip the `'www'`. */ this.stripPrefix = { scheme: true, www: true, }; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [stripTrailingSlash=true] * * `true` to remove the trailing slash from URL matches, `false` to keep * the trailing slash. * * Example when `true`: `http://google.com/` will be displayed as * `http://google.com`. */ this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [decodePercentEncoding=true] * * `true` to decode percent-encoded characters in URL matches, `false` to keep * the percent-encoded characters. * * Example when `true`: `https://en.wikipedia.org/wiki/San_Jos%C3%A9` will * be displayed as `https://en.wikipedia.org/wiki/San_José`. */ this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Number/Object} [truncate=0] * * ## Number Form * * A number for how many characters matched text should be truncated to * inside the text of a link. If the matched text is over this number of * characters, it will be truncated to this length by adding a two period * ellipsis ('..') to the end of the string. * * For example: A url like 'http://www.yahoo.com/some/long/path/to/a/file' * truncated to 25 characters might look something like this: * 'yahoo.com/some/long/pat..' * * Example Usage: * * truncate: 25 * * * Defaults to `0` for "no truncation." * * * ## Object Form * * An Object may also be provided with two properties: `length` (Number) and * `location` (String). `location` may be one of the following: 'end' * (default), 'middle', or 'smart'. * * Example Usage: * * truncate: { length: 25, location: 'middle' } * * @cfg {Number} [truncate.length=0] How many characters to allow before * truncation will occur. Defaults to `0` for "no truncation." * @cfg {"end"/"middle"/"smart"} [truncate.location="end"] * * - 'end' (default): will truncate up to the number of characters, and then * add an ellipsis at the end. Ex: 'yahoo.com/some/long/pat..' * - 'middle': will truncate and add the ellipsis in the middle. Ex: * 'yahoo.com/s..th/to/a/file' * - 'smart': for URLs where the algorithm attempts to strip out unnecessary * parts first (such as the 'www.', then URL scheme, hash, etc.), * attempting to make the URL human-readable before looking for a good * point to insert the ellipsis if it is still too long. Ex: * 'yahoo.com/some..to/a/file'. For more details, see * {@link Autolinker.truncate.TruncateSmart}. */ this.truncate = { length: 0, location: 'end', }; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {String} className * * A CSS class name to add to the generated links. This class will be added * to all links, as well as this class plus match suffixes for styling * url/email/phone/hashtag/mention links differently. * * For example, if this config is provided as "myLink", then: * * - URL links will have the CSS classes: "myLink myLink-url" * - Email links will have the CSS classes: "myLink myLink-email", and * - Phone links will have the CSS classes: "myLink myLink-phone" * - Hashtag links will have the CSS classes: "myLink myLink-hashtag" * - Mention links will have the CSS classes: "myLink myLink-mention myLink-[type]" * where [type] is either "instagram", "twitter" or "soundcloud" */ this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Function} replaceFn * * A function to individually process each match found in the input string. * * See the class's description for usage. * * The `replaceFn` can be called with a different context object (`this` * reference) using the {@link #context} cfg. * * This function is called with the following parameter: * * @cfg {Autolinker.match.Match} replaceFn.match The Match instance which * can be used to retrieve information about the match that the `replaceFn` * is currently processing. See {@link Autolinker.match.Match} subclasses * for details. */ this.replaceFn = null; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Object} context * * The context object (`this` reference) to call the `replaceFn` with. * * Defaults to this Autolinker instance. */ this.context = undefined; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @cfg {Boolean} [sanitizeHtml=false] * * `true` to HTML-encode the start and end brackets of existing HTML tags found * in the input string. This will escape `<` and `>` characters to `<` and * `>`, respectively. * * Setting this to `true` will prevent XSS (Cross-site Scripting) attacks, * but will remove the significance of existing HTML tags in the input string. If * you would like to maintain the significance of existing HTML tags while also * making the output HTML string safe, leave this option as `false` and use a * tool like https://github.com/cure53/DOMPurify (or others) on the input string * before running Autolinker. */ this.sanitizeHtml = false; // default value just to get the above doc comment in the ES5 output and documentation generator /** * @private * @property {Autolinker.AnchorTagBuilder} tagBuilder * * The AnchorTagBuilder instance used to build match replacement anchor tags. * Note: this is lazily instantiated in the {@link #getTagBuilder} method. */ this.tagBuilder = null; // Note: when `this.something` is used in the rhs of these assignments, // it refers to the default values set above the constructor this.urls = normalizeUrlsCfg(cfg.urls); this.email = (0, utils_1.isBoolean)(cfg.email) ? cfg.email : this.email; this.phone = (0, utils_1.isBoolean)(cfg.phone) ? cfg.phone : this.phone; this.hashtag = cfg.hashtag || this.hashtag; this.mention = cfg.mention || this.mention; this.newWindow = (0, utils_1.isBoolean)(cfg.newWindow) ? cfg.newWindow : this.newWindow; this.stripPrefix = normalizeStripPrefixCfg(cfg.stripPrefix); this.stripTrailingSlash = (0, utils_1.isBoolean)(cfg.stripTrailingSlash) ? cfg.stripTrailingSlash : this.stripTrailingSlash; this.decodePercentEncoding = (0, utils_1.isBoolean)(cfg.decodePercentEncoding) ? cfg.decodePercentEncoding : this.decodePercentEncoding; this.sanitizeHtml = cfg.sanitizeHtml || false; // Validate the value of the `mention` cfg var mention = this.mention; if (mention !== false && mention_utils_1.mentionServices.indexOf(mention) === -1) { throw new Error("invalid `mention` cfg '".concat(mention, "' - see docs")); } // Validate the value of the `hashtag` cfg var hashtag = this.hashtag; if (hashtag !== false && hashtag_utils_1.hashtagServices.indexOf(hashtag) === -1) { throw new Error("invalid `hashtag` cfg '".concat(hashtag, "' - see docs")); } this.truncate = normalizeTruncateCfg(cfg.truncate); this.className = cfg.className || this.className; this.replaceFn = cfg.replaceFn || this.replaceFn; this.context = cfg.context || this; } /** * Automatically links URLs, Email addresses, Phone Numbers, Twitter handles, * Hashtags, and Mentions found in the given chunk of HTML. Does not link URLs * found within HTML tags. * * For instance, if given the text: `You should go to http://www.yahoo.com`, * then the result will be `You should go to <a href="http://www.yahoo.com">http://www.yahoo.com</a>` * * Example: * * var linkedText = Autolinker.link( "Go to google.com", { newWindow: false } ); * // Produces: "Go to google.com" * * @static * @param {String} textOrHtml The HTML or text to find matches within (depending * on if the {@link #urls}, {@link #email}, {@link #phone}, {@link #mention}, * {@link #hashtag}, and {@link #mention} options are enabled). * @param {Object} [options] Any of the configuration options for the Autolinker * class, specified in an Object (map). See the class description for an * example call. * @return {String} The HTML text, with matches automatically linked. */ Autolinker.link = function (textOrHtml, options) { var autolinker = new Autolinker(options); return autolinker.link(textOrHtml); }; /** * Parses the input `textOrHtml` looking for URLs, email addresses, phone * numbers, username handles, and hashtags (depending on the configuration * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match} * objects describing those matches (without making any replacements). * * Note that if parsing multiple pieces of text, it is slightly more efficient * to create an Autolinker instance, and use the instance-level {@link #parse} * method. * * Example: * * var matches = Autolinker.parse( "Hello google.com, I am<EMAIL_ADDRESS>{ * urls: true, * email: true * } ); * * console.log( matches.length ); // 2 * console.log( matches[ 0 ].getType() ); // 'url' * console.log( matches[ 0 ].getUrl() ); // 'google.com' * console.log( matches[ 1 ].getType() ); // 'email' * console.log( matches[ 1 ].getEmail() ); //<EMAIL_ADDRESS>* * @static * @param {String} textOrHtml The HTML or text to find matches within * (depending on if the {@link #urls}, {@link #email}, {@link #phone}, * {@link #hashtag}, and {@link #mention} options are enabled). * @param {Object} [options] Any of the configuration options for the Autolinker * class, specified in an Object (map). See the class description for an * example call. * @return {Autolinker.match.Match[]} The array of Matches found in the * given input `textOrHtml`. */ Autolinker.parse = function (textOrHtml, options) { var autolinker = new Autolinker(options); return autolinker.parse(textOrHtml); }; /** * Parses the input `textOrHtml` looking for URLs, email addresses, phone * numbers, username handles, and hashtags (depending on the configuration * of the Autolinker instance), and returns an array of {@link Autolinker.match.Match} * objects describing those matches (without making any replacements). * * This method is used by the {@link #link} method, but can also be used to * simply do parsing of the input in order to discover what kinds of links * there are and how many. * * Example usage: * * var autolinker = new Autolinker( { * urls: true, * email: true * } ); * * var matches = autolinker.parse( "Hello google.com, I am<EMAIL_ADDRESS>); * * console.log( matches.length ); // 2 * console.log( matches[ 0 ].getType() ); // 'url' * console.log( matches[ 0 ].getUrl() ); // 'google.com' * console.log( matches[ 1 ].getType() ); // 'email' * console.log( matches[ 1 ].getEmail() ); //<EMAIL_ADDRESS>* * @param {String} textOrHtml The HTML or text to find matches within * (depending on if the {@link #urls}, {@link #email}, {@link #phone}, * {@link #hashtag}, and {@link #mention} options are enabled). * @return {Autolinker.match.Match[]} The array of Matches found in the * given input `textOrHtml`. */ Autolinker.prototype.parse = function (textOrHtml) { var _this = this; var skipTagNames = ['a', 'style', 'script'], skipTagsStackCount = 0, // used to only Autolink text outside of anchor/script/style tags. We don't want to autolink something that is already linked inside of an  tag, for instance matches = []; // Find all matches within the `textOrHtml` (but not matches that are // already nested within ,


Intercepting 3G/4G traffic
Date - 5th of January 2016
Challenge: How to intercept 4G/3G traffic using burp proxy?
Issue: The mobile application I was testing only accepts mobile data to communicate with the server. Application detects Wifi connection and pops up a message denying the access to communicate further.
Set-up:
- Putty:
- Port-forwarding local port to remote port (External IP)
- Create remote tunnel with source port and destination IP address
- Start SSH session internal IP address (firewall) and name the session. Save this session for future use. With Load button once can load old sessions.
- Burp proxy (Listening on all interface) - port number would be the one forwarded from local to remote
- start nc listener on external port (connect from external IP on that port and look for traffic)
- On mobile go to settings–>More networks–>Mobile networks–>Access Point Names
- From the list of APNs select the appropriate APN and set-up a proxy IP (External IP address) and Port (Remote port)
Once this is done access the application using mobile data and see the traffic through Burp! :-)
Very happy to learn this with the help of my colleague!!!


Ossian:
There's no time to lose! Hurry up and take the box containing the three sacred relics to Magister Ladd in the Ivory Tower.


In the " Deploying An ASP.NET Core Site: You're Still Doing It Wrong" series I defined why we want to strive for automation that surrounds our deployment process, how automation helps bring predictability and reliability to our deployments, and how we might go about setting up a Continuous Integration environment to achieve automation. In the fifth part of the series, I loosely touched on the idea of adding your front-end build to the process but did not go into many details. In this post, I will dive a bit deeper into how to build your front-end assets for both ASP.NET and ASP.NET Core projects using TeamCity and how to appropriately pack those assets and publish them to Octopus Deploy, making them ready for your deployment.
Typically, we would not want to push our built asset to our git repositories. It adds both bloat and confusing to your change history, and it should be left to your build server to produce everything that is needed to deploy your application. With that in mind, you generally would want to add all you front-end tooling assets (typings, gulpfile.js, bower.json, package.json, temp files, etc...) and your front-end final build assets, of which are continuously regenerated during your development phase, to your .gitignore file.
There are a ton of options for us to use in regards to front-end tooling. Personally and professionally, I have gravitated towards a combination of npm, bower, and gulp. A typical example of my front-end build steps might look like this.
That being said, the example in this post will be based on this build process. If you happen to use other tooling, the follow will still be of value to you as it will highlight steps you will need to take regardless and some issues you might come across during your setup.
The vast majority of front-end tooling happens directly on the command-line or is abstracted on top of a command-line. Though there are "runner type" plug-ins for TeamCity that attempt to make the process of building your front-end assets easier, in my experience they are nothing more than interfaces that bring a familiar lexicon to TeamCity. Instead of installing these plug-ins, I recommend interacting with your tooling using the TeamCity command-line runner in order to gain parity between your development process and build steps.
On the box that TeamCity lives on, you will need to ensure Node and by way of, npm, are installed. I would recommend running the following Chocolatey command to do so.
choco install nodejs.install
Head over to your Build Step(s) in TeamCity, add a new step and select the Command Line type. The command-line runner will allow you to execute command-line commands against a directory of your choice, just like you would do during your development process. In this step, I am simply telling TeamCity to execute the following command.
npm install
Justifiably you might think that all we need to do to run a bower process would be to add a new command line build step that executes the following.
bower install
Unfortunately, that is not the case. If you do, you will end up with an error like so.
In most cases, TeamCity is installed with a Service Account running its services. This means you have a few options on how you want to handle TeamCity not being able to recognize the bower command.
I chose option 4.
Again, create a new build step with a command line runner. Just like last time, the expectation would be to run the following command.
gulp
Much like last time, we again end up with an error.
Since I know TeamCity already has access to node, this time around I am going to target my gulp build by proxy using a node script. Inside my package.json file, I added the following script commands.
"scripts": { "gulp-public": "gulp public", "gulp-admin": "gulp admin" },
This will allow you to create a command line build step like the following.
And that is that. At this point, TeamCity should be producing a deployable version of front-end assets.
During development, we are rapidly iterating over the process of building our front-end assets. We remove files and add files to the final output at a rapid pace. Because of this, we do not want to include any of these assets in our project. More importantly, we don't want to have to remember to include new files in our project and instead should rely on TeamCity to supply them in its final build package. That being said, we want to make sure we explicitly exclude these files from our project. This holds true be it an ASP.NET or ASP.NET Core project.
Now that we have TeamCity building and producing our assets, we need a way to get those assets over to Octopus Deploy. This process will differ depending on if you project is of the type of ASP.NET or ASP.NET Core.
In my ASP.NET projects, I use octo-pack to pack up everything that is defined in my project file before passing it along to Octopus Deploy. If you recall from above, we explicitly removed our front-end build from our project. Meaning, when octo-pack is executed, even though we have TeamCity building our front-end assets, it will not include them in its final package.
To fix this, we need to introduce the concept of a .nuspec file.
A .nuspec file is an XML manifest that contains package metadata. This is used both to build the package and to provide information to consumers. The manifest is always included in a package. .nuspec reference
Inside your .nuspec file, you want to explicitly include files and folders you want octo-pack to package before publishing.
<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <version>0.00</version> <authors>Xerox</authors> <id>Your.Project</id> <title>Your.Project</title> <description>Your.Project Build</description> </metadata> <files> <file src="wwwroot\app.css*" target="wwwroot" /> </files> </package>
If you don't explicitly define includes in your .nuspec file, octo-pack will look to your project file for information on what to pack into its final outputted packaged. If you do add explicit definitions targeting what to include, octo-pack will override you project file definition and only include what is in your .nuspec file. In our case, we want to include everything that is in the project file in addition to the file and folders we have added to our .nuspec file (front-end assets). To accomplish this, we will need to add a command line flag to our octo-pack operation in TeamCity.
With a nuspec file in place and the appropriate command-line parameters being set, octo-pack will now pack up the entire definition of files located in your project file, in addition to any amendments you made in your nuspec file.
The process when dealing with .NET Core, for me, is reversed. Instead of including files and folder using a .nuspec file, or for that matter including a .nuspec file at all, I pack the entire dotnet publish build and exclude what I don't want packed in the Octopus Push build step configuration .
As demonstrated, even with the few issues I identified, the process is fairly straight forward when you approach it from the command-line instead of an abstraction on top of the command-line. By building our assets in TeamCity, we are adding more automation to our deployment process and by way of, reliability and predictability.
For more information on how to setup a contentious integration pipeline using TeamCity and Octopus deploy, please be sure to visit my five-part series titled Deploying An ASP.NET Core Site: You're Still Doing It Wrong. Specifically, you can look at Part 5 for some supplemental information about building front-end assets. As always, if you have any comments or questions, please feel free to leave a comment below.


The_Last_Kingdom
The Last Kingdom is a show of heroic deeds and epic battles but with a thematic depth that embraces politics, religion, warfare, courage, love, loyalty and our universal search for identity. Combining real historical figures and events with fictional characters, it is the story of how a people combined their strength under one of the most iconic kings of history in order to reclaim their land for themselves and build a place they call home.


Nature, in the broadest sense, is the natural, physical, material world or universe. "Nature" can refer to the phenomena of the physical world, and also to life in general.
Nature, in the broadest sense, is the natural, physical, material world or universe. "Nature" can refer to the phenomena of the physical world, and also to life in general.
Nature, in the broadest sense, is the natural, physical, material world or universe. "Nature" can refer to the phenomena of the physical world, and also to life in general.


Our trip to Tahoe in January was great, here are some pics from a day we spent at the Spooner Lake cross country ski area. Everyone had a great time and the boys liked XC skiing as much or more than downhill, which is great considering both how good for you it is and how economical.
Erick did super well on his own.
There was plenty of snow but the temperature was pretty mild. A perfect day! Everyone just got bundled up and we enjoyed the snow and the solitude on the trails.
Mom and the boys.
The XC ski train. For some of the way Erick caught a ride behind the sled.
A group picture near the end.
Full resolution pictures can be seen at:
Picasa Web Album


Pomodoro
Text To Speech
Assignments
Type Anything!
Rate
1
Pitch
1
Speak
Note: Text To Speech does not work on all search engines. Most preferable to use is Firefox


Believe in Yourself
Set your standards high
You deserve the best
Try for what you want
And never settle for less
Believe in yourself


Work in progress, use at your own risk.
Current version of this material: http://pages.stern.nyu.edu/~dbackus/bootcamp/
We hope to host this on GitHub but we’re not there yet. When we do, the link will be http://davebackus.github.io/Data_Bootcamp/ (What’s there now is not up to date.)
We have students every term who would like to get some programming experience, which they think will expand their career opportunities. As one student put it: “I can do most things in Excel, but I don’t think that will be true in five years.” We think they’re right. Excel is fine, but for lots of data applications Python offers a more powerful and efficient platform. In economic terms: learning Python is a significant investment, but once you’ve made it the marginal cost of data work will be a lot lower.
We developed (or rather, are developing) this document with the idea of teaching a data courses at NYU Stern that uses Python to study economic, financial, and business data. It’s intended for classroom use; if you try to work through it on your own you’ll probably find it somewhat mysterious. And probably even more mysterious than that because it’s work in progress. We’re posting it now only because we’re doing an informal version for a few interested students.
Comments welcome on all of this: the idea, the execution, the details.
Data Bootcamp is about nuts and bolts data analysis. You will learn about economic, financial, and business data and enough about computer programming to make sense of it. Applications include some or all of: leading economic indicators; country indicators; bond and equity returns; stock options; income by zip code; “long tail” sales data; innovation diffusion curves; attendance data for plays and sports teams; and many others. We will use Python, a popular high-level computer language that’s widely used in finance, consulting, and other parts of the business world. “High-level” means that it’s less painful than most (the hard work is done by the language and its collection of tools), but it’s a serious language with extensive capabilities. “Analysis” means primarily graphical descriptions that summarize the properties of data in ways that are helpful to managers. “Bootcamp” is a reminder that you should come willing to work. It will be worth it, but there’s no way to avoid doing some work.
Coming...
Why take this course?
It’s an investment in your future. You will be able to process data and communicate its content much more efficiently than with a spreadsheet program. And that’s a huge understatement. After this course, you will be more valuable to current and future employers – and Excel will remind you of doing arithmetic on your fingers.
What are the prerequisites?
There are none, other than the courage to take on a challenge and the patience to debug programs that don’t quite work – and they never work the first time, and often not the second or third time either. The course is designed for students with little or no programming experience. We will teach you what you need to know.
Are you exaggerating about patience?
No. If you don’t have it, you should do something else. But if you stick with it, you’ll have more power over information than you did before.  Remember, grasshopper, enlightenment comes from working through challenges and overcoming them.
Where will this lead?
This course won’t turn you into a quant. But it will turn you into someone who can work well with quants and – together with the rest of the program – communicate effectively with executives. You will come out somewhere between Brad Pitt and Jonah Hill in “Moneyball,” with a solid foundation for dealing with whatever data comes your way in business or life. You will also be well prepared to do more along similar lines, including the extensive collection of courses on business analytics and data science offered by our IOMS group. It’s cool stuff, you should check it out.
Should I take this course if I already know how to code?
Probably not, there are more advanced options that would suit you better. If you take it anyway, please don’t scare the other students.
And worth every cent.
There’s a steep learning curve at the start of any effort like this. You’ll get through it, but it takes patience and persistence. Some suggestions:
Take your time. This won’t happen overnight. But it won’t take weeks, either, before you’re doing cool things.
Work with others. This is much easier to do if you have friends doing the same thing. Or even better, friends who are ahead of you. You’ll probably find that you need a lot of help at the start, but once you get going you’ll be able to help yourself.
Google fu. Once you’ve made some progress, you can learn a lot just by Googling your issue. Things like: “python read spreadsheet.” The best links are often the Python tutorial (it’s really good) and Stack Overflow (the go-to place for code questions).
Start from examples. The easiest place to start is with programs that work. Start with one and tweak it till you get what you want. Play around with the details and see what happens. The documentation includes lots of examples. And we’ll have lots of examples of our own.
We owe big thank-you’s to Chase Coleman and Spencer Lyon, aka Sargent’s Python Team, and Paul Backus; they’re our go-to advisors on technical issues. Sarah Beckett-Hile is rapidly adding to our collection of applications and proves that English majors can code as well as anyone. You may also notice a resemblance to Tom Sargent and John Stachurski’s Quantitative Economics, a wonderful Python-based course in dynamic macroeconomic theory. We’ve used a lot of their material, as well as their approach to documentation. We thank them for that, and for their advice and encouragement.
Part of the #nyuecon collection. Address comments to Dave Backus or Glenn Okun.