The general approach is:
| Title | Import API |
|---|---|
| Example | See Examples sections below. |
| Description | Provide the contents of the file to be imported in the request body. |
| URL | api/atlas/admin/import |
| Method | POST |
| URL Parameters | None |
| Data Parameters | None |
| Success Response | AtlasImporResult is returned as JSON. See details below. |
| Error Response | Errors that are handled within the system will be returned as AtlasBaseException. |
| Title | Import API |
|---|---|
| Example | See Examples sections below. |
| Description | Provide the path of the file to be imported. |
| URL | api/atlas/admin/importfile |
| Method | POST |
| URL Parameters | None |
| Data Parameters | None |
| Success Response | AtlasImporResult is returned as JSON. See details below. |
| Error Response | Errors that are handled within the system will be returned as AtlasBaseException. |
| Notes | The file to be imported needs to be present on the server at the location specified by the FILENAME parameter. |
@POST @Path("/import") @Produces("application/json; charset=UTF-8") @Consumes("multipart/form-data")
Method Signature for Import File
@POST @Path("/importfile") @Produces("application/json; charset=UTF-8") @Consumes("application/json")
Import Options Please see here for the available options during import process.
AtlasImportResult Response The API will return the results of the import operation in the format defined by the AtlasImportResult:
The call below performs Import of QuickStart database using POST.
curl -g -X POST -u adminuser:password -H "Content-Type: multipart/form-data" -H "Cache-Control: no-cache" -F<EMAIL_ADDRESS>-F<EMAIL_ADDRESS>"http://localhost:21000/api/atlas/admin/import"
The request parameter is optional. If import has to be run without any options use:
curl -g -X POST -u adminuser:password -H "Content-Type: multipart/form-data" -H "Cache-Control: no-cache" -F<EMAIL_ADDRESS>"http://localhost:21000/api/atlas/admin/import"
The call below performs Import of QuickStart database using a ZIP file available on server.
curl -X POST -u adminuser:password -H "Cache-Control: no-cache" -d ./importOptions.json "http://localhost:21000/api/atlas/admin/importFile" > quickStartDB-import-result.json
Below is the AtlasImportResult JSON for an import that contains hivedb_.
The processedEntities contains the guids of all the entities imported.
The metrics contain a breakdown of the types and entities imported along with the operation performed on them viz. created or updated.
{ "request": { "options": {} }, "userName": "admin", "clientIpAddress": "<IP_ADDRESS>", "hostName": "<IP_ADDRESS>", "timeStamp":<PHONE_NUMBER>823, "metrics": { "duration": 9143, "typedef:enum": 0, "typedef:struct": 0, "entity:hive_column:created": 461, "entity:hive_storagedesc:created": 20, "entity:hive_process:created": 12, "entity:hive_db:created": 5, "entity:hive_table:created": 20, "entity:hdfs_path:created": 2, "typedef:entitydef": 0, "typedef:classification": 3 }, "processedEntities": [ "2c4aa713-030b-4fb3-98b1-1cab23d9ac81", "e4aa71ed-70fd-4fa7-9dfb-8250a573e293", ... "ea0f9bdb-1dfc-4e48-9848-a006129929f9", "b5e2cb41-3e7d-4468-84e1-d87c320e75f9" ], "operationStatus": "SUCCESS" }


WITNESS LIST Local Government Ways and Means Committee March 20, 2003-8:00A HB 417 For: Anderson, Ron J. (Parkland Health and Hospital System) Hutchison, Ray (Dallas Co. Hosp. District) Lee, Donald (Texas Conference of Urban Counties) On: Buie, Jim (Texas Bond Review Board) SB 200 For: Lee, Donald (Texas Conference of Urban Counties)


08 Oct 2015
Sometimes you struggle for a long time to learn something, and you don't feel like you've really made much progress. But when you learn something new and somewhat similar to it, the learning curve is greatly reduced. It's a great feeling. That's what happened with me recently when I tried to learn Laravel for a work project. Because of the time I spent with Rails, it made learning Laravel so much easier! Laravel is a MVC framework for PHP very similar to the way Rails is for Ruby.
Because a lot of the concepts are similar, I created a chart of equivalent syntaxes that could get someone who is already familiar with Rails started in Laravel much quicker.
| Laravel |
Rails |
| composer install (or php composer.phar install) |
gem install |
| composer create-project laravel/laravel your-project-name |
rails new your-project-name |
| composer.json |
Gemfile |
| composer.lock |
Gemfile.lock |
| packagist.org |
rubygems.org |
| blade |
erb or haml |
| Eloquent |
ActiveRecord |
| php artisan serve |
rails serve |
| php artisan make:controller PagesController |
rails generate controller Pages |
| php artisan make:model Article |
rails generate model Article |
| php artisan make:migration add_column_to_table |
rails generate migration AddColumnToTable |
| php artisan migrate |
bundle exec rake db:migrate |
| php artisan tinker |
rails console |
| php -a |
irb |
| php artisan route:list |
bundle exec rake routes |
Overall, I really love Laravel. In fact, I think I like Laravel more than Rails (while I still like Ruby way more than PHP). There are obviously a lot of similarities to Rails, and you can't take away the fact that Rails changed the landscape and paved the way for Laravel. But there are also many things that are different as well, and make Laravel really shine. I'll try to write about those in a future post.
Meanwhile, here are a few shout-outs:
- Udemy's RoR Tutorial: Learn from Scratch I was turned onto this tutorial by Molly Elizabeth, who works at Udemy.  If you try it, let me know what you think.
- PHP: The Right Way a very good 10,000 feet birds eye view of the somewhat gnarly PHP scene. It's not the prettiest language, but recent iterations have been able to salvage it a bit. This site is a super useful resource if you have to do PHP, and it covers best practices, how to organize your code, pitfalls you can avoid, etc.
- Laracast these video tutorials are clear, concise, and very useful when learning Laravel. Jeffrey is a really good teacher and communicator, and he covers the topics at just the right speed. Highly recommended.
- Craft CMS I've been working with ExpressionEngine for a while, and while very powerful, it is still a bit frustrating and inflexible at certain things. Craft was designed by people who used to design plugins for ExpressionEngine, so they know all the painpoints and they have been able to create a really amazing product. Check it out if you're looking for a really well thought-out CMS.
- DigitalOcean paired with ServerPilot. Setting up your stack can't be simpler than with these two tools working together. DigitalOcean provides the servers on the cloud and ServerPilot gives you a really nice control panel to configure them. And the interface of both sites are simple and elegant, and much less headache-inducing than AWS.
- ... speaking of which, if you have to deal with AWS, here's a really great resource: AWS in Plain English. It comically translates AWS services into what they should have been named in the first place. Nice intuitive names rather than EC2 or S3.
18 Apr 2015
Many books and tutorials are designed around building out one feature from the ground up and then moving on to the next one. While I admire that kind of workflow where you focus on creating working tangible features, I also noticed that for almost every feature, the programmer would have to touch the model, controller, and view. That kind of moving back and forth makes it hard to really understand the structure of the app, at least for me. So I decided that for my next app, I was going to do an experiment.
Instead of developing each feature, I developed all the models up front. This allowed me to really think about the data structure behind my app and how each part interacts with the whole. I also aimed to do test driven development, by writing tests for each model and their associations before moving onto the next model. The downside of this approach is that by the end of this experiment, I still didn't have one tangible feature, at least not from the user's standpoint. And of course designing the models up front doesn't mean I won't have to change them later when I realize the constraints have changed. But I think it's a good learning experiment, allowing me to not worry about the controllers or views at all, and just focus in on how to connect all the different pieces.
My App
I love the site Goodreads. It's a social network around books. At the core of the app are the following features:
Around Books
- users have shelves and can create new shelves and can add books to their shelves
- users can read books and update the status of what they've read
- users can review and rate books
Around Users
- users can friend each other creating a 2 way relationship
- a user can follow another user, creating a 1 way relationship
- users can like or comment on another user's reviews or statuses
There's much more to it, but those are the very core features. Since I love Goodreads and there are a few things I'd like to change about it, I decided to make my next app be a Goodreads clone. I think part of the reason I could design the complete model first is because I'm so familiar with the existing site and know beforehand exactly how each part is supposed to work. That said, I did make a few changes in my version, which I will talk about later.
The End Result
I'm going to start by showing you what I ended up with, and then explain some of the choices I made. The amazing Wendy Beth told me about the Rails ERD gem which will "allows you to easily generate a diagram based on your application's Active Record models". Here is my ERD (entity relationship diagram):
What follows isn't a complete step-by-step tutorial on what I did, but rather a few highlights (or lowlights, depending on how you see it) of my experience building this out.
Associations and Shoulda
A huge part of this exercise was figuring out how to work with rails associations. You know, those has_many
and belongs_to
calls that magically link up your models so that you can simply call school_of_the_sun.editions
instead of having to write out complicated sql joins (that's the last book I read and loved by the way). I won't go over the basic associations, as I think the documentation is not bad. However, I will talk about some of the more tricky associations that I ended up implementing.
One challenge in terms of associations is testing them. Luckily, there is a gem out there for that. It's called Shoulda and it's really easy to use. I first learned about it in Michael Hartl's Rails Tutorial, but I quickly forgot about it.
One of the challenges when reading that book without any prior experience was that it presented all these different concepts together, so that I didn't understand which commands were part of Rails and which were part of Ruby. Similarly, what is part of RSpec and what has been added to it by Shoulda? Over time, much of this has cleared up.
Here are a few examples of Shoulda at work:
Spec.describe Book, type: :model do
it { should have_many(:authors).class_name('Author') }
it { should have_many(:editions).class_name('Edition') }
it { should have_many(:copies).class_name('Copy') }
end
Goodreads doesn't have tags. Instead they have shelves. But it's a bit confusing, because they have two types of shelves. The first type are exclusive shelves. A user must add a book to one and only one exclusive shelf. Examples of exclusive shelves are "read", "to read", and "currently reading". A book cannot be both "to read" and "currently reading" because that doesn't make sense.
The second type of shelf is just a shelf that acts more like a category. You can add a book to as many non-exclusive shelves as you'd like. Examples would be "travel", "romance", "books with blue covers", etc.
Lastly, each user defines his or her shelves, and gets to set which shelves are exclusive and which non-exclusive.
When it came to implementing my solution, I thought having the same name and 2 different behaviors was confusing. So I created two separate models. One is the shelf model, which acts like Goodread's exclusive shelves. And one is the tag model, which acts more like tags do on the rest of the web (and kind of like Goodread's non exclusive shelves).
Shelves were the simpler of the two. A shelf has_many
copies (the concept being that you don't own a book, you own a copy of a book). And a copy belongs_to
a shelf.
Tags were a little more complicated. I ended up creating an intermediate Taggings model so that each copy can have many tags and each tag can have many copies. This Railscast tutorial explains what I did pretty well.
Aliasing a has_one relationship
I want reviews to have_one
reviewer, but the name of the class is Reader not Reviewer. And it has to go through several relationships to get there. I could have settled for review.reader, but I wanted my names to be more accurate. After much experimentation, here's what I ended up with:
has_one :reviewer, through: :copy,
source: :reader,
class_name: "Reader",
foreign_key: :reader_id
A reader can like a review or a following or a status. A reader may also comment on reviews and statuses. I would like to have just one Like model and one Comment model instead of several different ones tied to different tables. For example, I could do ReviewLike, FollowLike, and StatusLike. But that's so inelegant, and whenever I want to add the capability to like something else, I would have to write a whole new model and migration for it.
Instead, I decided to use polymorphic associations. It's a great solution for this situation, I think! Basically a polymorphic association allows you to use one model (Like in this case) and bind it with two or more models through a foreign key and a type (which tells the model which model to bind it to in each case). So when I like a review, that type will be "Review" and when I like a status that type will be "Status". Comments work the same way.
Reader Statuses vs. Copy Statuses
On Goodreads, a user can enter a general status update. This is like "Hey I'm having a great day." and is not tied to a book. But they can also enter a status update on a book. This is like "Hey I'm reading 'Wittgenstein's Nephew' by Thomas Bernhard and I'm on page 47 and here are my thoughts...". The second type of status update is tied to a user's book (copy model in my case) and can include a page number to show progress. Other than that, the two statuses are the same.
So I really wanted an elegant solution here instead of creating two separate models. I read up on single table inheritance which seems like a really cool use of inheritance to not repeat code. I wasn't sure this would be the right solution because copy status has two extra data fields. But I liked the idea that a copy status is basically just a status with extra functionality, so therefore it inherits from it. So I decided to implement it.
And I'm glad I did--now I understand why STI is the wrong solution in this case. I had to rollback and start again. The problem in this case is that CopyStatus not only has 2 extra fields, but one of them is a foreign key field that references copy whereas Status has no foreign key fields. This represents not only difference in data, but also difference in behavior. While I think it could still work, this has gone from a somewhat elegant solution to a total hack. It's even less elegant than the two models I started with.
Friendships
While following is a one-way relationship (you can follow someone but they do not have to follow you back), friendships are a two-way relationship. You both agree to be friends.
If we imagine a friends table with "friender" and "friendee" as the two columns, and a friendship is basically any two users that are referenced in this table then...
This poses an interesting problem in that when I say Demetrius.friends I want the model to return all of Demetrius's friends. That means everyone in the friender column where friendee is Demetrius and everyone in the friendee column where Demetrius is the friender.
Luckily, I found a Railscast that showed two ways of doing this. One uses a gem and one a self-rolled solution. I avoided the gem because the self-rolled version seems just as simple and easier to customize (less dependencies, too).
For my purposes, I also have to think about the fact that a friend has to request someone to be their friend, then that person has to agree before the friendship becomes official. I added an accepted
field to the table for this purpose. I'm not sure if this will be sufficient or if I'll have to create a separate FriendRequest model, but I will find out soon when I try to implement it.
Alternatives?
 Could they be different? Are there better ways of modelling this? Probably, but I won't find out until I implement it. (Feel free to give your thoughts in the comments section)
One thing I thought of that could be different is whether or not I needed the copy model. What if I got rid of it? Well then the problem becomes, how does one Edition has_many
Readers (through shelves) as well as one Reader has_many
Editions? Someone suggested a has_and_belongs_to_many
association here as a possible solution.
Another thing I'm wondering is if I could get rid of the rating and review classes. Since they belong to copy, could I just have rating
and review
as fields in Copy? Do I lose something from doing that?
Other Things Learned
I learned that I really like thinking about models and focusing on them exclusively, at least in the beginning. I also made some big mistakes that I will not make again. One is that the model-database connection is not automatically in sync. When I was testing this I was running into some weird problems. I finally figured out that just because I updated something from one model does not mean all the other models have updated from that same set of data in the database automatically. I have to reload the model in order for it to fetch that data again from the database.
The Future
I definitely want to start building out the controllers and views and start making this actually work and look good! My models aren't complete. There are others I need to add eventually, as well as many fields and things like validation that I need to add. But for now it is a good big-picture where I can get started building. There will likely be many challenges in the future and my models will probably have to change and adapt, but that's all part of the process!
31 Mar 2015
This past weekend I went to my very first code retreat! "What is a code retreat?" you may be asking yourself. Don't worry, I didn't know what it was either until very recently. Here's an intro from the event's sign up page:
Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. By providing developers the opportunity to take part in focused practice, away from the pressures of 'getting things done', the coderetreat format has proven itself to be a highly effective means of skill improvement. Practicing the basic principles of modular and object-oriented design, developers can improve their ability to write code that minimizes the cost of change over time.
More specifically, individuals are are grouped into teams of two and each team “solves” a common problem, 'The Game of Life'. There are 6 sessions throughout the day and for each session the groups are reorganized and the code deleted. After each session there are session reflections to help with the internalization of lessons.
It's basically a day of learning and exploring with awesome people and no judgment. So pretty much the best thing ever.
The event I went to was hosted at Big Nerd Ranch and lead by Kylie Stradley and Stafford Brooke, and also sponsored by Mandrill and Mailchimp.
After a breakfast of gourmet donuts, Kylie introduced us to the problem we were to solve for the rest of the day: The Game of Life. The game explores the complexities that arise from a set of very simple rules. And because of its simple rules, it makes for a great software design exercise.
The point was not to write working code, but to explore different possible ways of writing it. The fun came in the variation of solutions, and the explorations of the pros/cons of each.
It reminded me of an exercise I gave myself when I was first exploring the beauty and subtlety of writing. The exercise was simple: pick any sentence and write it 20 or 30 different times using different sentence structures, wording, punctuation or grammar without changing the primary meaning. For example, the sentence "The quick brown fox jumps over the lazy dog." could also be written as:
Being quick, the brown fox jumps over the lazy dog.

Because the fox is lazy, the quick brown fox jumps over him.
The fox (quick and brown) jumps over the lazy dog.
Over the lazy dog the quick brown fox jumps!
(This was the type of fun I had in high school hahaha) The other part of this exercise, and arguably the more important part, is to take each sentence and analyze it for how it differs from the original in terms of tone, voice, connotation, emphasis, meaning, etc. I say this is the more important part of the exercise because reflection leads to awareness and understanding of what each tweak does to the original. This kind of obsession eventually lead me to become a poet, so if this looks fun to you: beware! A life of agonizing over words awaits you.
Code retreat reminded me of doing this same exercise, but with code! We were given just enough time to formulate a solution, without enough time to finish or perfect it. That way, we weren't expected to finish anything, and so we could concentrate on issues of design.
We paired with a new person for each session, and by the end of the day we would have paired with almost everybody in the room. For each session, we were also expected to practice test driven development (this made it even harder to complete in 45 minutes, but added the dimension of very intentional forethought and planning).
Many of us had never tackled the game of life problem before, so the first session was basically dedicated to getting comfortable with the problem space. But with each subsequent session, we were given new constraints. Imagine if doing the sentence exercise above, I had given myself rules for each sentence, like "must use a passive verb" or "must have a dependent clause". These constraints stretched us and made us think about the problem in a new way.
We had a diverse group of experts and beginners. Rather than try to make everyone program in one language, we were encouraged to learn from each other. Thus, I got to program with a C# programmer, an iOS developer, and someone with JavaScript and Go experience, as well as people who didn't have much programming experience (but rich experiences in other fields).
At the end of each session, we were encouraged to delete our code. This re-inforced the idea that the code was not the goal, but what we learned from designing it. After each session, we also reconvened with the larger group to talk about what we learned and how we approached the problem and share ideas. This part was super helpful and eye-opening, because some teams came up with very unexpected and inventive designs.
One of the things we talked about was whether the logic of the cell living or dying should go into the board or the cell. There were good arguments on both sides, and at the end of the day I had attempted it both ways and am still undecided about which way is better. As with everything, it's a matter of understanding tradeoffs.
Looking Back
If I could do code retreat all over again, I would try not to design the entire game every time. Instead, figure out what the constraint is getting me to reconsider, and only design/program that part. For example, we had a constraint where we couldn't use if statements. The method that it would affect most would be the main logic of the program--whether a cell lives or dies.
But we ended up on several tangents, spending a lot of time talking about other aspects of the program, like different ways of seeding it, or how to find neighboring cells and such. And because we only had 45 minutes, I didn't feel like I got enough time to really explore the main issues of that exercise. If I could do it again, I would have just hardcoded a method that returned the same number of neighbors every time, just so that I didn't have to think about that part, and could focus on the really good parts of that exercise.
Looking Forward
Coderetreat was a great experience, and I loved meeting people in the spirit of learning. Everyone was kind and helpful, and the ideas we shared will continue to help me in my everyday work. But this is just the beginning:
Global Day of Coderetreat is November 15! I'm already looking forward to the next one, and so should you. There is a website where you can look for coderetreats in your area. But if there isn't one, you should organize one! The website provides all the details you'll need to organize your very own.
17 Mar 2015
Not so long ago, I was learning Git for the first time. I was going through tutorials and picking it up pretty quickly. No big deal, right? I understood the basic concept of version control, and I can type simple commands. The problem is that whenever I used git outside of those tutorials and ideal situations, I got stuck because I didn't understand how it worked behind the scenes.
There are many tutorials that go through the motions of using git without telling you how to think about what's going on. On the other hand, resources that teach you how to think about git aren't nearly as prevalent as those beginner tutorials that teach you what to type. So here are three of the most useful resources that helped me level up on git beyond the very basics.
Think Like a Git
Think Like a Git is a website dedicated to that "aha" moment. Do you think there's something magical about git? There really isn't. It's just that you don't have a mental model of git yet, so everything that happens seems like magic and kind of mysterious. Reading this tutorial was enlightening and really put me on the track of being comfortable with git, even when I messed up and didn't follow a normal workflow.
Git for Ages 4 and Up
In Git for Ages 4 and Up Michael Schwern walks you through adding, committing, pushing, and a whole bunch of other git commands while playing with Tinkertoys! The visual element really makes this a wonderful resource. Unfortunately, the video isn't of the highest quality, and there are a lot of interuptions and tangents. But overall, it's really helpful.
Git Happens
Jessica Kerr @jessitron is a great speaker and in Git Happens, she not only leads us through a few more difficult commands but also helps us understand why git is hard, and why it's worth it.  Please note that Jessica actually prefers this version of her talk, but the one above was the one that I originally watched (and I still prefer it).
I haven't really used many of these extensively, but since we're talking about visualizing and mental models, these can come in handy:


Teams is a place where you can create study groups and monitor others progress within the courses on the website.
In order to see if you've been invited to any teams, click on the invites tab. Here you can see what teams you've been invited to join, then give authorization to allow your progress to be reported.
To see team members' progress, go to the teams page. If you'd like to create a team, you can manage your own teams from the manage page.
Happy learning!


Class ApplicationBootstrapper
This bootstrapper is made especially to host dapplo "apps". You can protect your application from starting multiple instances by specifying a Mutex-ID
Inheritance
Inherited Members
Namespace:Dapplo.Addons.Bootstrapper
Assembly:Dapplo.Addons.Bootstrapper.dll
Syntax
public class ApplicationBootstrapper : StartupShutdownBootstrapper, IApplicationBootstrapper, IBootstrapper, IServiceLocator, IMefServiceLocator, IServiceExporter, IServiceRepository, IDependencyProvider, IDisposable
Constructors
| Improve this Doc View SourceApplicationBootstrapper(String, String, Boolean)
Create the application bootstrapper, for the specified application name The mutex is created and locked in the contructor, and some of your application logic might depend on this.
Declaration
public ApplicationBootstrapper(string applicationName, string mutexId = null, bool global = false)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | applicationName | Name of your application |
| System.String | mutexId | string with an ID for your mutex, preferably a Guid. If the mutex can't be locked, the bootstapper will not be able to "bootstrap". |
| System.Boolean | global | Is the mutex a global or local block (false means only in this Windows session) |
Properties
| Improve this Doc View SourceApplicationName
Returns the application name for this bootstrapper
Declaration
public string ApplicationName { get; }
Property Value
| Type | Description |
|---|---|
| System.String |
IsMutexLocked
Returns if the Mutex is locked, in other words if this ApplicationBootstrapper can continue This also returns true if no mutex is used
Declaration
public bool IsMutexLocked { get; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Methods
| Improve this Doc View SourceDispose(Boolean)
Implementation of the dispose pattern
Declaration
protected override void Dispose(bool disposing)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Boolean | disposing | bool |
Overrides
| Improve this Doc View SourceInitializeAsync(CancellationToken)
Initialize the application bootstrapper, this makes sure the configuration and languages can be loaded
Declaration
public override Task<bool> InitializeAsync(CancellationToken cancellationToken = null)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | cancellationToken |
Returns
| Type | Description |
|---|---|
| Task<System.Boolean> | bool with value of IsInitialized |
Overrides
| Improve this Doc View SourceRunAsync(CancellationToken)
Override the run to prevent starting when the mutex isn't locked
Declaration
public override Task<bool> RunAsync(CancellationToken cancellationToken = null)
Parameters
| Type | Name | Description |
|---|---|---|
| CancellationToken | cancellationToken |
Returns
| Type | Description |
|---|---|
| Task<System.Boolean> |


Loading...
Sharp_GP2D12_estimation
white_line.c
SIGNAL
white_line.c
soft_left
white_line.c
soft_left_2
white_line.c
soft_left_2_degrees
white_line.c
soft_left_degrees
white_line.c
soft_right
white_line.c
soft_right_2_degrees
white_line.c
soft_right_degrees
white_line.c
stop
white_line.c
Searching...
No Matches


Summary
This data set contains hyperspectral surface reflectance images collected by the EO-1 satellite Hyperion sensor at 30-m resolution and covering the entire globe 2002 - 2017. All images were converted to GeoTiff format for distribution. The respective ENVI *.hdr files are included as companion files and contain image projection and band information.
The images were processed using ENVI software as described in Chambers et al. (2009). Bands with uncalibrated wavelengths and those with low spectral response were removed leaving a spectral subset of generally 196 bands (some images have fewer). A cloud mask was developed using 2-d scatter plots of variable reflectance bands to highlight clouds as regions of interest (ROIs), allowing clouds and cloud edges to be masked. A de-streaking algorithm was then applied to the image to reduce variance in balance between the vertical columns. Apparent surface reflectance was calculated for this balanced image using the atmospheric correction algorithm ACORN in 1.5pb mode (AIG-LLC, Boulder, CO). The images (18 of the 20) were georeferenced using the corresponding Advanced Land Imager (ALI) satellite images.
Data Citation
Cite this data set as follows:
GSFC Code 610 2017. Hyperion 30-m Surface Reflectance, Global 2002-2017. Data set. Available on-line [http://gsfc.nasa.gov] from NASA Goddard, Greenbelt, U.S.A.
Table of Contents
- Data Set Overview
- Data Characteristics
- Data Application & Derivation
- Quality Assessment
- Data Acquisition Materials and Methods
- Data Access
- References


#Introduction
First time on github.So,a little know about it's working. I host a web-page on website. My Name is Lokesh Kumar Jayswal; I pursuing bachelor's of technology in IT. My college name is United college of engineering and Researc, located at Industrial area in Naini,Prayagraj Affiliated with AKTU,Lucknow,Uttarpradesh;


The moon is drifting away from Earth.
The moon is drifting away from Earth.
The moon is drifting away from Earth.


The terms and conditions outlined below regulate the access and
use of the Website established by the company MADELIA SOUND,
S.A..
1. PURPOSE AND AREA OF APPLICATION
1.1 These General Conditions (“General Conditions”)
regulate the access, navigation and use of the websites under the
“sa” domain (the “Website”) and detail the
responsibilities that come with the use of its contents
(“contents” being understood to mean, from here on out, the
texts, graphics, drawings, designs, codes, software, photos,
music, videos, sounds, databases, images, expressions and
information, as well as any other creation protected by
international agreements on industrial and intellectual property
rights).
1.2. It is understood that access to or the mere use of
the Website on behalf of the User implies adherence to these
General Conditions, which MADELIA SOUND keeps posted and makes
available at all times for those who access the Website.
Therefore, the User should carefully read these General
Conditions.
By “User” we mean the people who access, navigate, use
and/or participate in the services and activities, whether free
or paying, developed on the Website.
1.3. The purpose of these General Conditions is to
regulate access, navigation and use of the Website; however,
independently of these, MADELIA SOUND may establish Particular
Conditions regulating the use and/or the contracting of specific
services offered to Users through the Website. Likewise, through
the Website, MADELIA SOUND may authorise third parties to
advertise and offer their services. In these cases, MADELIA SOUND
will not be responsible for establishing the General and/or
Particular Conditions governing the use, provision or contracting
of services by third parties, and, therefore, will not be
considered responsible for them in any way.
1.4. Before using and/or contracting said specific
services provided by MADELIA SOUND, the User should carefully
read the corresponding Particular Conditions created, in such
cases, by MADELIA SOUND itself. The use and/or contracting of
said specific services implies the acceptance of the Particular
Conditions that regulate them, in the version published by
MADELIA SOUND at the time that said usage and/or contracting
takes place.
2. INDUSTRIAL AND INTELLECTUAL
PROPERTY RIGHTS
2.1. MADELIA SOUND is the owner of all the rights of
the industrial and intellectual property of the Website, and it
is also the owner or has the corresponding license governing the
industrial, intellectual and image rights of the contents
available through the Website.
2.2. In no case whatsoever will access and navigation
on the part of the User imply a relinquishment, transmission,
license or total or partial cession of said rights by MADELIA
SOUND
2.3. Consequently, it is not permitted to suppress,
evade or manipulate the copyright notice or any other
identification details relating to the rights of MADELIA SOUND or
of its incorporated content titleholders, including technical
safety devices, fingerprints or any other information and/or
identification mechanism that might be contained in the contents.
2.4. Likewise, it is prohibited to modify, copy, reuse,
exploit, reproduce, publicly communicate, make second or later
publications, load files, send by mail, transmit, use, deal with
or distribute in any way the whole or parts of the contents
included on the Website for public or commercial purposes without
the express or written authorisation of MADELIA SOUND or, should
it be the case, the owner of the corresponding rights.
3. ACCESS
Access to the Website by Users is free of charge,
nevertheless, MADELIA SOUND reserves according to the existing
law the right to limit acces to determined areas of the web page,
therefore some of the services offered and contents offered by
MADELIA SOUND or third parties through the Website may be subject
to previous contracting of said service or product and payment of
a certain amount of money as stipulated in the corresponding
Particular Conditions. In such cases, this information will be
made available in a clear way.
4. USE OF THE WEBSITE
4.1. The contents included on the Website are made
available exclusively for its users and consumers. Any
unauthorised commercial use of said contents is prohibited unless
prior written authorisation has been granted by MADELIA SOUND.
4.2. If, in order to use and/or contract a service on
the Website, the User is required to register, they must provide
accurate and lawful information. And, in the registration
process, if the User is required to create a password in order to
access these services, they must make diligent use of the
password and keep it secret.
Consequently, Users are responsible for the appropriate
custodianship and confidentiality of any identifiers and/or
passwords issued by MADELIA SOUND, and they are legally bound not
to share this information with third parties, be it temporarily
or permanently, or to allow access to others. Any illicit use of
said services by an illegitimate third party will be the
responsibility of the User and sole holder of the password
information due to a non diligent use or loss of password by the
User.
4.3. In light of the above mentioned, it is the
obligation of the User to immediately notify the Website
authorities of any actions that might allow for undue use of
identifiers and/or passwords, as in the case of robbery, loss or
unauthorised access, so as to proceed to immediate cancellation
thereof. Until such information is communicated, MADELIA SOUND
will be deemed free of any responsibilities that might result
from the undue use of said identifiers and/or passwords by
unauthorised third parties.
4.4. The access, navigation and use of the Website is
the responsibility of the User, and as such the User inherently
agrees to diligently and faithfully abide by any additional
instructions issued by MADELIA SOUND or personnel authorised by
MADELIA SOUND with regard to the use of the Website and its
contents.
4.5. The User is obliged to use the contents and
services of the web sa.com in a lawful way and
according to the present general conditions and to not infringe
the rights of MADELIA SOUND or using the contents in offence of
morals or generally accepted customs of good public conduct;
Por tanto, a título enunciativo pero no limitativo, se
entiende prohibido el uso del sitio web con los siguientes fines:
Therefore, by way of information without limitation, it is also
forbidden to the use of the web for the following purposes
- Use the contents against the Intellectual and/or
Industrial Property rights of MADELIA SOUND or of their
legitimate owners
- Circulate contents or propaganda of a racist,
xenophobic, pornographic-illegal nature, those against human
rights and statements in support of terrorism.
- Destroy, alter, render useless or in any other form
damage the data programmed or electronic documents of MADELIA
SOUND or third parties. These acts constitutes a crime of
damages, according to article 264.2 of the Portuguese Criminal
Code
- Prevent other users from having access to the service
by a disproportionate use of the computer resources through which
MADELIA SOUND offers its services, as well as carrying out
actions which can damage, interrupt or generate errors in
abovementioned systems
- Reproducing or copying, distributing, allowing public
access by way of any public communication venues, transforming or
modifying the contents, without the prior authorisation of the
owner of the corresponding rights.
- Employing the contents and the information of any
kind obtained from the portal for advertising purposes promoting
direct sales or any other commercial ends, unsolicited messages
addressed to a plurality of people independent of its aims, as
well as abstaining from commercialising or divulging such
information in any way.
- The User will be responsible for damages of any
nature that MADELIA SOUND can suffer directly or indirectly, as a
consequence of the failure to comply with any of the obligations
mentioned in the general conditions or in the Law with regards to
the use of the portal.
5. PERSONAL DATA
5.1. Consent
5.1.1. In order to use or gain access to some of the
contents and/or services featured on the Website, MADELIA SOUND
may require Users to fill out registration forms, which would
necessarily entail the provision of certain personal information
(personal data). MADELIA SOUND will use said information in
accordance with the purposes and conditions outlined in each
individual case, and in accordance with the policy of data
protection of MADELIA SOUND
5.1.2. Upon filling out and sending in any registration
form found on the Website, the User consents to and expressly
authorises MADELIA SOUND to collect, use and release, depending
on the case, the personal information requested in accordance
with the purposes and conditions outlined in each such case.
5.2. Security measures
5.2.1. MADELIA SOUND has adopted and will continue to
adopt all obligatory technical and organisational security
measures in accordance with current legislation and the standards
of quality existing in the sector, with the aim of guaranteeing
maximum security and confidentiality of communication.
5.2.2. MADELIA SOUND guarantees that controls are in
place to prevent security breaches or any other negative
consequences, having adopted the most appropriate organisational
measures and technical procedures to minimise such risks.
5.2.3. Notwithstanding the previous point, the User
recognises and accepts that (i) Internet security measures are
not impregnable, (ii) the networks used on the Internet are not
secure, and (iii) any communication sent via this medium might be
intercepted or modified by unauthorised persons.
6. COMMUNICATION LICENSE
6.1. In the event that the User might send information
of any kind to the Website, the User states, guarantees and
accepts that he/she has the right to do so freely, and that said
information does not infringe upon any intellectual-property,
brand or patent rights, business secrets or any other rights of
third parties, and that said information is not confidential in
nature and will not be damaging to any third party.
6.2. The User recognises having accepted this
responsibility and declares MADELIA SOUND blameless for any
communication personally provided, or submitted in his or her
name, fully accepting this responsibility without any
restrictions at all of exactitude, legality, originality or
ownership of the same.
6.3. The mere use of this Web Site implies the
exclusive assignment by the User of any rights to exploit
industrial or intellectual-property rights the User might hold
with relation to communications made through the Website or
MADELIA SOUND and for the maximum term established by the
national or international laws.
7. RESPONSABILITIES AND GUARANTEES
MADELIA SOUND does not guarantee nor will it be
responsible for (i) the continuity of the Website contents, (ii)
any errors or the correction of any errors found on the Website,
(iii) any viruses or other damaging components found on the
Website or its service provider, (iv) the invulnerability of the
Website and/or the impregnability of the security measures
adopted by the Website, (v) the lack of usefulness or performance
of the contents of the Website, (vi) any damage done to itself or
any third party caused by a person who has infringed upon the
conditions, regulations and instructions established by MADELIA
SOUND on the Website through the violation of the Website’s
security systems.
Nevertheless, MADELIA SOUND declares that it has
adopted all the necessary security measures within its
possibilities and the current state of technology to guarantee
the proper functioning of the Website and to avoid the existence
and transmission of viruses as well as any other components that
might be damaging to Users.
8. LINKS
8.1. Links to other Web Pages:
8.1.1. On the Website, the User may find links to other
web pages through different buttons, links, banners, etc., which
are managed and controlled by third parties. MADELIA SOUND has
neither the human resources nor the technical abilities to study,
control or corroborate all the information, contents, products or
services facilitated by other web pages that have established
links on the Website. Consequently, MADELIA SOUND cannot assume
any kind of responsibility for any aspects relative to the web
pages that have established links with the Website –
specifically, expository and non-restricted matters regarding
functioning, access, data, information, archives, quality and
trustworthiness of its products and services, its own links
and/or any of its contents, in general. 8.1.2. El establecimiento
de cualquier tipo de enlace por parte del Sitio Web a otro sitio
web ajeno no implica que exista algún tipo de relación,
colaboración o dependencia entre MADELIA SOUND y el responsable
del sitio web ajeno.
8.2. Links on other pages to the Website:
8.2.1. If any User, entity or web page were to desire
to establish any kind of link with the Website, it would have to
be done so in accordance with the following stipulations:
• The link can only lead to the Main Page or Home Page
of the Website, in some cases deep-links will be permitted.
• On the page where the link is established, no
statements of any kind may be made suggesting that MADELIA SOUND
has authorised said link, unless express and written
authorisation has in fact been provided by MADELIA SOUND. If the
entity creating a link on its web page to the Website were to
wish to include on its web page the brand, name, trade name,
graphics, logo, slogan or any other identifying element of
MADELIA SOUND and/or the Website, it would have to obtain the
express and written authorisation of MADELIA SOUND prior to
doing so.
• MADELIA SOUND does not authorise the establishment of
links to the Website on any web pages that contain materials,
information or contents that are illicit, illegal, degrading,
obscene, or, generally speaking, offensive to widely accepted
moral values, public order or social norms.
8.2.2. MADELIA SOUND has neither the technical nor
human resources to study, check or approve all the information,
contents, products and services provided by other web pages
establishing links to the Website. MADELIA SOUND, therefore,
assumes no responsibility whatsoever for any aspect relative to
any web page that establishes a link to the Website, specifically
with regard to expository and non-restrictive matters relating to
its operations, access, data, information, archives and the
quality or trustworthiness of its products, services, links
and/or any other of its contents in general.
8.3. Services Provided by Third Parties through the
Website:
8.3.1. MADELIA SOUND does not guarantee the lawfulness,
trustworthiness or usefulness of any services provided by third
parties on this Website, or for which MADELIA SOUND only acts as
a mere venue for advertising.
8.3.2. MADELIA SOUND will not be held responsible for
harm or damage of any kind caused by the services provided by
third parties through the Website, specifically with regard to
any harm or damaged caused by: (i) failure to comply with the
law, moral values and/or public order; (ii) the transmission of a
virus or any kind of computer-related code, file or programme
that might damage, interrupt or impede the normal functioning of
any given software, hardware or telecommunications equipment;
(iii) the infraction of industrial and/or intellectual property
rights, company secrets or contractual commitments of any kind;
(iv) any illegal, deceitful or untrue activities representing
unfair competition; (v) the lack of veracity, exactitude,
quality, pertinence and/or current relevance of the contents
transmitted, distributed, stored, received, obtained or made
available and accessible; (vi) the infraction of any rights to
personal or family privacy, including images of persons and, in
general, any kind of third-party rights; (vii) the
inappropriateness for any kind of purpose and the defrauding of
any expectations aroused, or any defects that might result from
third parties; and (viii) the failure to comply with, or the
delay in complying with, any services or obligations contracted
through third parties, including contracts made with third
parties.
9. DURATION AND MODIFICATION
9.1. MADELIA SOUND may modify the terms and conditions
stipulated here at any time, partially or totally, by publishing
any change in the same format as these General Conditions or by
way of any type of communication directed towards Users.
9.2. The standing validity of these General Conditions,
therefore, coincides exactly with the length of time they are
posted; that is until the moment they are modified, totally or
partially, when the modified General Conditions will then come
into effect.
9.3. Independently of what is stipulated in the
Particular Conditions, MADELIA SOUND may terminate, suspend or
interrupt, at any time and without the need to give prior notice,
access to the contents of the Website, without any possibility on
the User’s part to demand indemnity of any kind. Following any
such termination, the prohibitions regarding content usage
previously outlined in these General Conditions will remain in
force.
10. MISCELLANEOUS
10.1. The headings of the different clauses are only
informative in nature, and they do not affect, qualify or broaden
the interpretation of the General Conditions.
10.2. In the event that discrepancies arise between
what is established in these General Conditions and any
Particular Conditions of a specific given service, the Particular
Conditions will prevail over the General Conditions.
10.3. In the event that any regulation or regulations
of these General Conditions were ruled null and void or
inapplicable, in whole or in part, by any Court, Tribunal or any
other competent administrative body, such a ruling would not
affect the other regulations of either the General Conditions or
the Particular Conditions of the different services of MADELIA
SOUND.
10.4. The non-exercise or non-execution by MADELIA
SOUND of any right or regulation contained in these General
Conditions does not represent a revocation or relinquishment of
said rights and regulations, unless agreed to and recognised in
writing by MADELIA SOUND.
11. JURISDICTION
11.1. The relationship established between MADELIA
SOUND and the User is governed by existing rules and regulations
with regard to applicable legislation and competent jurisdiction.
However, should the rules and regulations indicate the
possibility of having to go to court, MADELIA SOUND and the User,
with the express renunciation of any other possible court, will
resolve any such issues in the Courts and Tribunals of the city
of Lisbon.


An ambitious individual, born in Bulgaria and moved to the states in August of 2001. Since moving to the states, I have resided in the state of Minnesota and I love it.
I grew up in Minnetonka/Excelsior area and until recently have spent the last 7 years in the northwest metro area. Graduated with a Bachelor’s degree in Marketing from Metropolitan State University in St. Paul, MN.
In the last 10 years of my career, I have been in banking and finance where I held several roles, everything from bank teller to personal/small business banker. As I continued my career in banking and the more thought I put into it, I knew that I did not want to remain in retail banking. Shortly after graduating, my passion for computers, design, and technology started to grow. I was more and more eager to learn about how things worked and what it takes to make things run behind the scene. I decided to take things into my own hands and started to research how programs work and what it takes to make them function the way they do. I came across the Codecademy website and gave the free trial a chance and since then, I have wanted to pursue a computer science degree and wasn’t sure how and when I should get started. Life got busy and then 2020 happened and I thought, what better time than now to switch careers so I went for it. I left my old career behind and went on to pursue coding Bootcamp and obtain the education I need to become a Web Developer.
Currently, I am attending coding Bootcamp at Rutgers, the University of New Jersey, and already one week in, I can't get enough. My passion for coding and design is growing every day. Following this program, I cant wait to obtain my dream job as a web developer where I can utilize my creativity and put my passion to work at a growing organization.


Buhari appoints new FIRS chairman
by John AmehJohn Ameh, Abuja
President Muhammadu Buhari has named Mr. Muhammad M. Nami as the new chairman of the Federal Inland Revenue Service.
He replaces Mr. Tunde Fowler, whose tenure expired on Monday.
He is a tax consultant and graduate of the Ahmadu Bello University, Zaria, Kaduna State.
“Mr. Muhammad, a well-trained tax, accounting and management professional with highly rated qualifications and professional practice and licenses from relevant professional bodies, has almost three decades of practical work experience in Auditing, Tax Management and Advisory and Management services to clients in the banking, manufacturing, services and public sectors as well as non-profit organisations,” the Presidency said in statement by spokesperson, Garba Shehu.
Buhari also approved the composition of the board of FIRS.


29 persons with HIV died during Abalaka’s treatment –Govt
by Eniola AkinkuotuEniola Akinkuotu, Abuja
The Federal Government will not be able to partner popular surgeon, Dr Jeremiah Abalaka, as regards finding a cure to HIV because 29 out of 30 of his patients died of complications during treatment.
The Director-General of the National Agency for the Control of AIDS, Dr Gambo Aliyu, said this at an event held in commemoration of World AIDS Day with the theme, ‘Communities make the difference.’
Abalaka had in the last 20 years constantly claimed to have found a cure to HIV but that the western world was undermining his efforts because the developed countries were making a lot of money off the sale of anti-retroviral drugs.
He had said, “I infected myself with HIV 20 years ago and today, I do not have HIV. I have a cure for HCV, HBV and HIV, not AIDS. The Western world has failed to find a cure for HIV after 35 years. They do not want to lose the global market for ARVs. I can cure HIV in a newly infected patient in five weeks, with the patient’s blood extracted and put back into the person within two hours.”
Speaking with journalists in Abuja on Wednesday, however, the NACA DG expressed doubts over the credibility of Abalaka and the efficacy of his methods.
Aliyu said, “About 30 patients were treated by Abalaka. Today, only one is alive; 29 died of complications that followed. Is that not enough?”
The NACA boss said Nigeria still accounts for a large number of new infections, adding that less than 40 per cent of Nigerian youths have a proper understanding of the disease.
He said, “Nigeria accounts for more than half of new infections and deaths from AIDS-related illness according to the UNAIDS 2018 report. Less than 40 per cent of our adolescent and young people, who are the leaders of tomorrow, have correct knowledge and comprehensive knowledge about HIV.”
Aliyu noted that Nigeria’s domestic funding for HIV was estimated to be below 30 per cent, adding that efforts of communities were urgently needed to ensure that HIV remain on the political agenda and galvanise international and national funding for HIV.
Speaking earlier, the National Coordinator, Network of People living with HIV/AIDS in Nigeria, Mr Abdulkadir Ibrahim, said there was no cure to HIV.
Ibrahim noted that 1.9 million people in Nigeria had the disease but argued that only about half of those affected had access to treatment.
He argued that the fight against HIV must also be underpinned by the protection of human rights.
CopyrightPUNCH.
All rights reserved. This material, and other digital content on this website, may not be reproduced, published, broadcast, rewritten or redistributed in whole or in part without prior express written permission from PUNCH.
Contact: editor@punchng.com


FailFast - Java
Releases
- download jars and inspect api
Interactive
- try it online
Github
- source, wiki, issues, etc.


--- layout: newsstory title: COULD IT GET ANY WORSE? match: Yeltz 0 Atherstone 1 ---
Very very very poor. Losing 1-0 at home to Atherstone not only gave them some hope of saving themselves, but missed a crucial opportunity of hauling themselves away from the danger zone. With Grantham winning again, we are in big, big trouble.
Well enough of you have asked for it, so although it's not the most positive of things to vote on, you can now register your thoughts on how the manager is doing.
No game on Saturday - although the Yeltzline mentions a possible friendly at home to Tividale - then Salisbury are the visitors the Saturday after. Come On!


NHS prescription prepayment certificate
Change your details
| Address: | {{address}} | Change |
| Mobile number: | {{number}} | Change |
| Email: | {{email}} | Change |
Changing your name
We need evidence of a change of name. Please email us with evidence.
Your email should include your name, date of birth, postcode and prepayment number.
Alternatively, call us on 0300 330 1341.


public class Revenue
extends java.lang.Object
RakamClient.logRevenueV2()
to record in-app transactions.
Each set method returns the same Revenue object, allowing
you to chain multiple set calls together, for example:
Revenue revenue = new Revenue().setProductId("com.product.id").setPrice(3.99);
productId
and price
are required fields. If quantity
is not
specified, it will default to 1. receipt
and receiptSignature
are required
if you want to verify the revenue event.
Rakam.getInstance().logRevenueV2(revenue);
and pass in
the object.| Modifier and Type | Field and Description |
|---|---|
protected java.lang.Double |
price
The Price field (required).
|
protected java.lang.String |
productId
The Product ID field (required).
|
protected org.json.JSONObject |
properties
The Revenue Event Properties field (optional).
|
protected int |
quantity
The Quantity field (defaults to 1).
|
protected java.lang.String |
receipt
The Receipt field (required if you want to verify the revenue event).
|
protected java.lang.String |
receiptSig
The Receipt Signature field (required if you want to verify the revenue event).
|
protected java.lang.String |
revenueType
The Revenue Type field (optional).
|
static java.lang.String |
TAG
The class identifier tag used in logging.
|
| Constructor and Description |
|---|
Revenue() |
| Modifier and Type | Method and Description |
|---|---|
protected boolean |
isValidRevenue()
Verifies that revenue object is valid and contains the required fields (productId, price)
|
Revenue |
setEventProperties(org.json.JSONObject eventProperties)
Set event properties for the revenue event, like you would for an event during logEvent.
|
Revenue |
setPrice(double price)
Set a value for the price.
|
Revenue |
setProductId(java.lang.String productId)
Set a value for the product identifier.
|
Revenue |
setQuantity(int quantity)
Set a value for the quantity.
|
Revenue |
setReceipt(java.lang.String receipt,
java.lang.String receiptSignature)
Set the receipt and receipt signature.
|
Revenue |
setRevenueProperties(org.json.JSONObject revenueProperties)
Deprecated.
- use
Revenue.setEventProperties() instead |
Revenue |
setRevenueType(java.lang.String revenueType)
Set a value for the revenue type.
|
protected org.json.JSONObject |
toJSONObject()
Converts Revenue object into a JSONObject to send to Rakam servers
|
public static final java.lang.String TAG
"io.rakam.api.Revenue"
protected java.lang.String productId
protected int quantity
protected java.lang.Double price
protected java.lang.String revenueType
protected java.lang.String receipt
protected java.lang.String receiptSig
protected org.json.JSONObject properties
protected boolean isValidRevenue()
public Revenue setProductId(java.lang.String productId)
productId
- the product idpublic Revenue setQuantity(int quantity)
quantity
- the quantitypublic Revenue setPrice(double price)
price
- the pricepublic Revenue setRevenueType(java.lang.String revenueType)
revenueType
- the revenue typepublic Revenue setReceipt(java.lang.String receipt, java.lang.String receiptSignature)
receipt
- the receiptreceiptSignature
- the receipt signaturepublic Revenue setRevenueProperties(org.json.JSONObject revenueProperties)
Revenue.setEventProperties()
insteadrevenueProperties
- the revenue propertiespublic Revenue setEventProperties(org.json.JSONObject eventProperties)
eventProperties
- the event propertiesprotected org.json.JSONObject toJSONObject()