{% extends 'base.html' %} {% load bootstrap_tags %} {% block page_title %} | Upload Artwork{% endblock %} {% block style-tag %} {% endblock %} {% block content %}
Upload your best images and you can earn some reproduction fee if someone wants to hang your artwork on their wall. You can determine the amount of the reproduction fee for every image, so it's entirely up to you how much money you can make.
Use the below form to upload you image and set all its parameters. Chose an attractive title that best describes your subject. One of the search options on the site is based on the title, you might want to use a good keyword. There is also a hashtag you can add to your image, that's another keyword opportunity for you...
... see more information and the detailed requirements under the form below.
In order to upload images, you need an artist profile. Click on the PROFILE link in the navigation manu on the top of the page to access your profile. All this requires you to be logged in - as you already have realised it :)
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsam repellat cumque architecto dolorem deserunt laborum recusandae voluptatum ipsa neque. Debitis in magni, possimus facilis qui consectetur nobis illum iusto libero?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore, aspernatur dignissimos. Deserunt accusamus facilis distinctio optio sint alias voluptatibus delectus maiores et asperiores voluptates ea minus, dolorem reiciendis pariatur ex.
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Assumenda necessitatibus ex eveniet, facere fugiat quisquam inventore veritatis suscipit tempora optio animi voluptate explicabo amet eos sapiente ab quis saepe dicta.
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Autem magni molestias sunt sed? Labore doloribus doloremque totam voluptatum inventore repellendus eligendi eius quod, nisi cumque, ad cum ut corrupti temporibus.


Functional Map API: Working with single entries
In this blog post we’ll continue with the introduction of the experimental Functional Map API, which was released as part of Infinispan 8.0.0.Final, focusing on how to manipulate data using single-key operations.
As mentioned in the Functional Map API introduction, there are three types of operations that can be executed against a functional map: read-only operations (executed via ReadOnlyMap), write-only operations (executed via WriteOnlyMap), and read-write operations (executed via ReadWriteMap) and .
Firstly, we need construct instances of ReadOnlyMap, WriteOnlyMap and ReadWriteMap to be able to work with them:
Next, let’s see all three types of operations in action, chaining them to store a single key/value pair along with some metadata, then read it and finally delete a returning the previously stored data:
This example demonstrates some of the key aspects of working with single entries using the Functional Map API:
-
Single entry methods are asynchronous returning CompletableFuture instances which provide methods to compose and chain operations so that it can feel is they’re being executed sequentially. Unfortunately Java does not have Haskell’s do notation or Scala’s for comprehensions to make it more palatable, but it’s great news that Java finally offers mechanisms to work with CompletableFutures in a non-blocking way, even if they’re a bit more verbose than what’s proposed in other languages.
-
All data-handling methods for WriteOnlyMap return CompletableFuture<Void>, meaning that the user can find out when the operation has completed but nothing else, because there’s nothing the function can provide that could not be computed in advance or outside the function.
-
The return type for most of the data handling methods in ReadOnlyMap (and ReadWriteMap) are quite flexible. So, a function can decide to return value information, or metadata, or for convenience, it can also return the ReadEntryView it receives as parameter. This can be useful for users wanting to return both value and metadata parameter information.
-
The read-write operation demonstrated above showed how to remove an entry and return the previously associated value. In this particular case, we know there’s a value associated with the entry and hence we called ReadEntryView.get() directly, but if we were not sure if the value is present or not, ReadEntryView.find() should be called and return the Optional instance instead.
-
In the example, Lifespan metadata parameter is constructed using the new Java Time API available in Java 8, but it could have been done equally with java.util.concurrent.TimeUnit as long as the conversion was done to number of milliseconds during which the entry should be accessible.
-
Lifespan-based expiration works just as it does with other Infinispan APIs, so you can easily modify the example to lower the lifespan, wait for duration to pass and then verify that the value is not present any more.
If storing a constant value, WriteOnlyMap.eval(K, Consumer) could be used instead of WriteOnlyMap.eval(K, V, Consumer), making the code clearer, but if the value is variable, WriteOnlyMap.eval(K, V, Consumer) should be used to avoid, as much as possible, functions capturing external variables. Clearly, operations exposed by functional map can’t cover all scenarios and there might be situations where external variables are captured by functions, but these should in general, should be a minority. Here is as example showing how to implement ConcurrentMap.replace(K, V, V) where external variable capturing is required:
The reason we didn’t add a WriteOnly.eval(K, V, V, Consumer) to the API is because value-equality-based replace comparisons are just one type of replace operations that could be executed. In other cases, metadata parameter based comparison might be more suitable, e.g. Hot Rod replace operation where version (a type of metadata parameter) equality is the deciding factor to determine whether the replace should happen or not.
In the next blog post, we’ll be looking at how to work with multiple entries using the Functional Map API.
Cheers,
Galder


CLUBS
Home
History
Youth Football
Futsal
Projects
Log in
Johnti Aga
My team
Following
Support
Log out
Login
Google
Facebook
Twitter
Forgot your password?
Sign in
Teenage tournaments
Championship of the Republic of Kazakhstan on football among youth and youth teams of Premier League and First League clubs (FC and Academies)
Republican tournament "Arman" among youth teams of FC and Academies
Republican tournament "Zhastar" among youth teams of FC and Academies
Championship of the Republic of Kazakhstan on football among youth teams of regions and cities of Astana and Almaty
Coca-cola bylgary dop


The following topics are covered:
The Java SE platform enables the development of applications with the following features:
The Java SE platform also provides robust support with respect to the following areas (and more):
Oracle's HotSpot JVM also offers the following tools and features:
The Java SE 7 platform enables non-Java languages to exploit the
infrastructure and potential performance optimizations of the JVM.
The key mechanism is the invokedynamic
instruction,
which simplifies the implementation of compilers and runtime
systems for dynamically typed languages on the JVM.
A programming language is statically typed if it performs type checking at compile time. Type checking is the process of verifying that a program is type safe. A program is type safe if the arguments of all of its operations are the correct type.
Java is a statically typed language. All typed information for class and instance variables, method parameters, return values, and other variables is available when a program is compiled. The compiler for the Java programming language uses this type information to produce strongly typed bytecode, which can then be efficiently executed by the JVM at runtime.
The following example of a Hello World program demonstrates static typing. Types are shown in bold.
import java.util.Date; public class HelloWorld { public static void main(String[] argv) { String hello = "Hello "; Date currDate = new Date(); for (String a : argv) { System.out.println(hello + a); System.out.println("Today's date is: " + currDate); } } }
A programming language is dynamically typed if it performs type checking at runtime. JavaScript and Ruby are examples of dynamically typed languages. These languages verify at runtime, rather than at compile time, that values in an application conform to expected types. These languages typically do not have any type information available at compile time. The type of an object can be determined only at runtime. Hence, in the past, it was difficult to efficiently implement them on the JVM.
The following is an example of the Hello World program written in the Ruby programming language:
#!/usr/bin/env ruby require 'date' hello = "Hello " currDate = DateTime.now ARGV.each do|a| puts hello + a puts "Date and time: " + currDate.to_s end
Note that every name is introduced without a type declaration.
Also, the main program is not located inside of a holder type (the
Java class HelloWorld
. The Ruby equivalent of the Java
for
loop is inside the dynamic type of the variable
ARGV
. The body of the loop is contained in a block
called a closure, a common feature in dynamic languages.
A programming language that features strong typing specifies restrictions on the types of values supplied to its operations. If a computer language implements strong typing, it prevents the execution of an operation if its arguments have the wrong type. Conversely, a language that features weak typing would implicitly convert (or cast) arguments of an operation if those arguments have wrong or incompatible types.
Statically typed programming languages can employ strong typing or weak typing. Similarly, dynamically typed languages can also apply strong typing or weak typing. For example, the Ruby programming language is dynamically typed and strongly typed. Once a variable has been initialized with a value of some type, the Ruby programming language will not implicitly convert the variable into another data type. The Ruby programming language would not allow the following:
a = "40" b = a + 2
In this example, the Ruby programming language will not
implicitly cast the number 2, which has a Fixnum
type,
to a string.
Consider the following dynamically typed method,
addtwo
, that adds any two numbers (which can be of any
numeric type) and returns the sum:
def addtwo(a, b) a + b; end
Suppose your organization is implementing a compiler and runtime
system for the programming language in which the method
addtwo
is written. In a strongly typed language,
whether typed statically or dynamically, the behavior of
+
(the addition operator) depends on the types of the
operands. A compiler for a statically-typed language chooses which
implementation of +
is appropriate based on the static
types of a
and b
. For example, a Java
compiler implements +
with the iadd
JVM
instruction if the types of a
and b
are
int
. The addition operator will be compiled to a
method call because the JVM's iadd
instruction
requires the operand types to be statically known.
In contrast, a compiler for a dynamically-typed language must
defer the choice until runtime. The statement a + b
is
compiled as the method call +(a, b)
, where
+
is the method name. (Note a method named
+
is permitted in the JVM but not in the Java
programming language.) Suppose then that the runtime system for the
dynamically-typed language is able to identify that a
and b
are variables of integer type. The runtime
system would prefer to call an implementation of +
that is specialized for integer types rather than arbitrary object
types.
The challenge of compiling dynamically typed languages is how to
implement a runtime system that can choose the most appropriate
implementation of a method or function — after the program
has been compiled. Treating all variables as objects of
Object
type would not work efficiently; the
Object
class does not contain a method named
+
.
Java SE 7 introduces the invokedynamic
instruction
that enables the runtime system to customize the linkage between a
call site and a method implementation. In this example, the
invokedynamic
call site is +
. An
invokedynamic
call site is linked to a method by means
of a bootstrap method, which is a method specified by the
compiler for the dynamically-typed language that is called once by
the JVM to link the site. Assuming the compiler emitted an
invokedynamic
instruction that invokes +
,
and assuming that the runtime system knows about the method
adder(Integer,Integer)
, the runtime can link the
invokedynamic
call site to the adder
method as follows:
class IntegerOps { public static Integer adder(Integer x, Integer y) { return x + y; } }
import java.util.*; import java.lang.invoke.*; import static java.lang.invoke.MethodType.*; import static java.lang.invoke.MethodHandles.*; class Example { public static CallSite mybsm( MethodHandles.Lookup callerClass, String dynMethodName, MethodType dynMethodType) throws Throwable { MethodHandle mh = callerClass.findStatic( Example.class, "IntegerOps.adder", MethodType.methodType(Integer.class, Integer.class, Integer.class)); if (!dynMethodType.equals(mh.type())) { mh = mh.asType(dynMethodType); } return new ConstantCallSite(mh); } }
In this example, the IntegerOps
class belongs to
the library that accompanies the dynamic language's runtime
system.
The method Example.mybsm
is a bootstrap method that
links the invokedynamic
call site to the
adder
method.
The object callerClass
is a lookup object, which is
a factory for creating method handles.
The method MethodHandles.Lookup.findStatic
(called
from the callerClass
lookup object) creates a static
method handle for the method adder
.
Note: This bootstrap method links an
invokedynamic
call site only to the code defined in
the adder
method, and it assumes that the arguments
given to the invokedynamic
call site will be
Integer
objects. A bootstrap method requires
additional code to properly link invokedynamic
call
sites to the appropriate code to execute if the parameters of the
bootstrap method (in this example, callerClass
,
dynMethodName
, and dynMethodType
)
vary.
The classes java.lang.invoke.MethodHandles
and
java.lang.invoke.MethodHandle
contain various methods
that create method handles based on existing method handles. This
example calls the method asType
if the method type of
the method handle mh
does not match the method type
specified by the parameter dynMethodType
. This enables
the bootstrap method to link invokedynamic
call sites
to Java methods whose method types do not exactly match.
The ConstantCallSite
instance returned by the
bootstrap method represents a call site to be associated with a
distinct invokedynamic
instruction. The target for a
ConstantCallSite
instance is permanent and can never
be changed. In this case there is only one Java method,
adder
, which is a candidate for executing the call
site. Note that this method does not have to be a Java method.
Instead, if there were several such methods being available to the
runtime system, each handling different argument types, the
bootstrap method mybsm
could dynamically select the
correct method, based on the dynMethodType
argument.
The invokedynamic
instruction simplifies and
potentially improves implementations of compilers and runtime
systems for dynamic languages on the JVM. The
invokedynamic
instruction does this by allowing the
language implementer to define custom linkage behavior. This
contrasts with other JVM instructions such as
invokevirtual
, in which linkage behavior specific to
Java classes and interfaces is hard-wired by the JVM.
Each instance of an invokedynamic
instruction is
called a dynamic call site. A dynamic call site is
originally in an unlinked state, which means that there is no
method specified for the call site to invoke. As previously
mentioned, a dynamic call site is linked to a method by means of a
bootstrap method. A dynamic call site's bootstrap method is a
method specified by the compiler for the dynamically-typed language
that is called once by the JVM to link the site. The object
returned from the bootstrap method permanently determines the call
site's behavior.
The invokedynamic
instruction contains a constant
pool index (in the same format as for the other invoke
instructions). This constant pool index references a
CONSTANT_InvokeDynamic
entry. This entry specifies the
bootstrap method (a CONSTANT_MethodHandle
entry), the
name of the dynamically linked method, and the argument types and
return type of the call to the dynamically linked method.
The following is an example of an invokedynamic
instruction. In this example, the runtime system links the dynamic
call site specified by this invokedynamic
instruction
(which is +
, the addition operator) to the
IntegerOps.adder
method
by using the bootstrap method Example.mybsm
. The methods
adder
and mybsm
are defined in the
section The Challenge of Compiling
Dynamically Typed Languages (line breaks have been added for
clarity):
invokedynamic InvokeDynamic REF_invokeStatic: Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;": +: "(Ljava/lang/Integer; Ljava/lang/Integer;) Ljava/lang/Integer;";
Note: The bytecode examples in these sections use the syntax of the ASM Java bytecode manipulation and analysis framework.
Invoking a dynamically linked method with the
invokedynamic
instruction involves the following
steps:
At runtime, when the JVM first encounters an
invokedynamic
instruction, it calls the bootstrap
method. This method links the name specified by the
invokedynamic
instruction with the code that should be
executed (the target method), which is referenced by a method
handle. If the JVM executes the same invokedynamic
instruction again, it does not call the bootstrap method; it
automatically calls the linked method handle.
The bootstrap method's return type must be
java.lang.invoke.CallSite
. A CallSite
object represents the linked state of an invokedynamic
instruction and the method handle to which it is linked.
The bootstrap method takes three or more parameters:
MethodHandles.Lookup
object, which is a factory
for creating method handles in the context of the
invokedynamic
instruction.String
object, the method name mentioned in the
dynamic call site.MethodType
object, the resolved type signature
of the dynamic call site.invokedynamic
instruction. These arguments, drawn from
the constant pool, are intended to help language implementers
safely and compactly encode additional metadata useful to the
bootstrap method. In principle, the name and extra arguments are
redundant since each call site could be given its own unique
bootstrap method. However, such a practice is likely to produce
large class files and constant poolsSee the section The Challenge of Compiling Dynamically Typed Languages for an example of a bootstrap method.
As mentioned previously, the invokedynamic
instruction contains a reference to an entry in the constant pool
with the tag CONSTANT_InvokeDynamic
. This entry
contains references to other entries in the constant pool and
references to attributes. This section briefly describes constant
pool entries used by the invokedynamic
instruction.
For more information, see the java.lang.invoke
package documentation and The Java Virtual Machine
Specification.
The following is an excerpt from the constant pool for the class
Example
, which contains the bootstrap method
Example.mybsm
that links the method +
with the Java method adder
:
class #159; // #47 Utf8 "adder"; // #83 Utf8 "(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;"; // #84 Utf8 "mybsm"; // #87 Utf8 "(Ljava/lang/invoke/MethodHandles/Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;) java/lang/invoke/CallSite;"; // #88 Utf8 "Example"; // #159 Utf8 "+"; // #166 // ... NameAndType #83 #84; // #228 Method #47 #228; // #229 MethodHandle 6b #229; // #230 NameAndType #87 #88; // #231 Method #47 #231; // #232 MethodHandle 6b #232; // #233 NameAndType #166 #84; // #234 Utf8 "BootstrapMethods"; // #235 InvokeDynamic 0s #234; // #236
The constant pool entry for the invokedynamic
instruction in this example contains three values:
CONSTANT_InvokeDynamic
tag0
#234
.The value 0
refers to the first bootstrap method
specifier in the array of specifiers stored in the
BootstrapMethods
attribute. Bootstrap method
specifiers are not in the constant pool table; they are contained
in this separate array of specifiers. Each bootstrap method
specifier contains an index to a CONSTANT_MethodHandle
constant pool entry, which is the bootstrap method itself.
The following is an excerpt from the same constant pool that
shows the BootstrapMethods
attribute, which contains
the array of bootstrap method specifiers:
[3] { // Attributes // ... Attr(#235, 6) { // BootstrapMethods at 0x0F63 [1] { // bootstrap_methods { // bootstrap_method #233; // bootstrap_method_ref [0] { // bootstrap_arguments } // bootstrap_arguments } // bootstrap_method } } // end BootstrapMethods } // Attributes
The constant pool entry for the bootstrap method
mybsm
method handle contains three values:
CONSTANT_MethodHandle
tag6
#232
.The value 6
is the subtag
REF_invokeStatic
. See the next section, 3. Using the invokedynamic Instruction,
for more information about this subtag.
The following bytecode uses the invokedynamic
instruction to call the bootstrap method mybsm
, which
links the dynamic call site (+
, the addition operator)
to the method adder
. This example uses the
+
method to add the numbers 40
and
2
(line breaks have been inserted for clarity):
bipush 40; invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;"; iconst_2; invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;"; invokedynamic InvokeDynamic REF_invokeStatic: Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;": +: "(Ljava/lang/Integer; Ljava/lang/Integer;) Ljava/lang/Integer;";
The first four instructions put the integers 40
and
2
on the stack and boxes them in the
java.lang.Integer
wrapper type. The fifth instruction
invokes a dynamic method. This instruction refers to a constant
pool entry with a CONSTANT_InvokeDynamic
tag:
REF_invokeStatic: Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;": +: "(Ljava/lang/Integer; Ljava/lang/Integer;) Ljava/lang/Integer;";
Four bytes follow the CONSTANT_InvokeDynamic
tag in
this entry:
The first two bytes form a reference to a
CONSTANT_MethodHandle
entry that references a
bootstrap method specifier:
REF_invokeStatic: Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;"
As mentioned previously, this reference to a bootstrap method
specifier is not in the constant pool table; it is contained in a
separate array defined by a class file attribute named
BootstrapMethods
. The bootstrap method specifier
contains an index to a CONSTANT_MethodHandle
constant
pool entry, which is the bootstrap method itself.
Three bytes follow this CONSTANT_MethodHandle
constant pool entry:
The first byte is the subtag REF_invokeStatic
. This
means that this bootstrap method will create a method handle for a
static method; note that this bootstrap method is linking the
dynamic call site with the static Java method
adder
.
The next two bytes form a CONSTANT_Methodref
entry
that represents the method for which the method handle is to be
created:
Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;"
In this example, the fully qualified name of the bootstrap
method is Example.mybsm
; the argument types are
MethodHandles.Lookup
, String
, and
MethodType
; and the return type is
CallSite
.
The next two bytes form a reference to a
CONSTANT_NameAndType
entry:
+: "(Ljava/lang/Integer; Ljava/lang/Integer;) Ljava/lang/Integer;"
This constant pool entry specifies the method name
(+
), argument types (two Integer
instances), and return type of the dynamic call site
(Integer
).
In this example, the dynamic call site is presented with boxed
integer values, which exactly match the type of the eventual
target, the adder
method. In practice, the argument
and return types do not need to exactly match. For example, the
invokedynamic
instruction could pass either or both of
its operands on the JVM stack as primitive int
values.
Either or both operands could also be untyped Object
values. The invokedynamic
instruction could also
receive its result as a primitive int
value, or an
untyped Object
value. In any case, the
dynMethodType
argument to mybsm
will
accurately describe the method type required by the
invokedynamic
instruction.
Independently, the adder
method could also have
been given primitive or untyped arguments or return values. The
bootstrap method is responsible for making up any difference
between the dynMethodType
and the type of the
adder
method. As shown in the code, this is easily
done with an asType
call on the target method.


GENERAL INFORMATION FOR ALL PORTS OF ENTRY
Yachts should anchor flying the Q flag. Customs very rarely visit yachts.
Within 24 hours of arrival, except at weekends, the captain must go ashore to complete entry formalities.
Note: ALL crew must now visit Immigration on arrival and departure to have their photographs taken (same procedure as at the airports).
The paperwork is simplified if any crew who are leaving the yacht, are recorded as passengers. The alternative is to place a substantial cash bond before leaving the country. This is difficult to reclaim. It is advisable for them to be noted as passengers on the zarpe from the previous port.
Important: From 21st February 2014 the Custom rules have been changed yet again and the length of time a yacht is permitted to stay in the country is no longer tied to the length of the owner's visa. The initial time is now 6 months, with the ability to apply for an extension for another 6 months. See Customs below.
Note however that this rule is not necesserily understood and practiced by all clearance ports. Krabi for one is still operating using the old rules. Printing out this pdf of the New Amendment to Customs Regulations and presenting it to Customs should you have problems is worthwhile.
PHUKET INFORMATION
AIS REQUIREMENT
As of 1 October 2014 all foreign vessels visiting Phuket are required to have an AIS Class B (or higher) transponder installed. Effective 1 January 2016 it is now mandatory for all in-coming and out-going yachts to have AIS. See the Phuket page for more details. Failure to have an AIS transponder will result in a substantial fine.
ON-LINE CHECK IN
Phuket now has an on-line check-in for yachts. The web address for this relatively new service is http://yacht.phuket.go.th. Whilst you can fill in the forms online, you still have to print them out and take them to the Customs, Immigration and Harbourmaster. However, it makes the whole process much quicker and simpler. See report on using the new yacht centre at Chalong Pier in August 2014 here.
Corruption amongst Thai Marine Officials does exist and can affect visiting cruising yachts. Read this news article for more about what to watch out for.
Last updated January 2016.
Visa on Arrival - 30 days
Yacht crew arriving without a visa will be granted a 30 day stay on arrival (a "transit visa"). It is not easy to extend this visa, so if wanting to stay longer you will have to travel out of Thailand by plane or overland and get a new visa on re-entering (see details on bond payment below).
Visas for longer stays can be issued and are accepted if one has been signed on as a passenger, not crew. Every boat needs at least one crew (normally the skipper), so the remaining crew can be classed as passengers and will then be given a 30 day visa on arrival which can be renewed twice, but only for 15 days at a time, making a total stay of 60 days (as per tourists who arrive by air).
For a list of countries entitled to visa exemption or visa on arrival go to http://www.mfa.go.th/main/en/services/123/15393-Visa-on-Arrival.html
Travelling out of Thailand - placing a bond
All yacht crew (not passengers) leaving Thailand for whatever reason without their boat, must declare the dates of departure with Immigration when checking-in and pay a security bond of THB20,000 which is refundable. This bond is in case the person decides to not leave and therefore overstays their visa – the bond is then confiscated by Immigration and could be used to deport the person when found or just held as a fine for breaking the agreement to leave.
As stated above, the bond only applies to whoever Immigration consider as crew and there must be one crew on the boat which is usually the skipper. All the others as passengers get the 30 days and can leave any way they like without the need for a security bond.
When you fly back into Thailand, your bond money will be refunded to you by Immigration in your port of entry minus a THB200 fee.
If a captain knows in advance that he will be leaving the country, he should perhaps declare one of the crew members staying on the boat as captain/crew and himself as a passenger. There must always be someone who is designated to be in charge of the boat; and it is not possible for everyone to be declared as passengers.
Note: It is possible to pay a one-off, non-recoverable fee of BT2,000 to have your passport re-stamped as a passenger.
Some Immigration departments are more strict about this requirement than others.
If you want to stay in Thailand longer than 30 days, consider getting a visa in advance. If you hold a 60 day advance visa, this also negates the requirement to pay a bond if leaving the country by other means.
See this Useful Report about visas and leaving the country by plane.
Visa in Advance
If you obtain a 60 day visa (which can be extended for another 30 days) before you arrive in Thailand, life is more simple. Most will obtain this visa in Penang. This visa is a tourist visa and your passport stamp on arrival will have the letters TR in the middle.
If you arrive with a visa, then you will be given a "white card" which negates the requirement to pay a bond if leaving the country by plane or overland.
If you need to extend this visa for an additional 30 days, go to your local Immigration office with 2 passport photographs, a copy of your passport photograph page, a copy of the page with your entry stamp and a copy of the visa itself. Prepare to wait for 2 hours and pay THB1,900.
For detailed current regulations see Visa information for The Kingdom of Thailand
For information on a long-stay visa permitting self-funding visitors over the age of 50 to stay for up to a year, see Non-Immigrant Visa Regulations.
Where to get a Visa?
There are a number of different visas issued by various Thai embassies or consulates. Yachts are advised to check with their nearest Thai embassy or consulate for details on what visas are on offer.
There is now a Thai consulate in Langkawi, but Penang is still more convenient at the moment for visas.
Last updated March 2016.
Length of Stay Permitted
Note: From 21st February 2014 the rules regarding length of stay for visiting yachts were amended.
Thai legislation now states that a vessel entering Thailand may stay for up to 6 months initially. Customs may then extend the time-limit, on application, to allow the yacht to remain in Thailand for up to another six months.
First application can be for a 4 month extension and then a final 2 month one. Both applications should be made 4 weeks before your existing permit expires as the paperwork has to go to Bankok for approval. A photo of the boat showing its name clearly displayed is required, along with a letter from the marina and photo copies of your visa and passport.
Be aware that at some Ports of Entry Customs interpret these rules in their own way (for example in Krabi, where cruisers report in 2016 that they are only giving 2 month extensions, 3 if you push).
Printing out this pdf of the New Amendment to Customs Regulations and presenting it to Customs should you have problems is worthwhile.
The fine for overstaying is 1,000 baht per day of overstay with a maximum of 10,000 baht.
Other Customs Rules
Firearms should be declared. They will be removed and held until departure, unless there is a secure locker on board, where they can be sealed under the supervision of Customs officials.
Care should be taken to declare any medication which may contain a narcotic, even if it is a prescription drug.
Last updated July 2016.
Malaria prophylaxis is recommended as there is some risk existing all year in most areas. Phuket island is reportedly free of malaria.
Water available to yachts in Thailand is not considered drinking water. It is fine for showers, washing dishes, deck etc. Drinking water in Thailand should be bought by the bottle and not taken from a tap. Unlike Malaysia and Singapore who have heavily treated tap water with lots of Chlorine in it.
Immigration charge between 200 and 300 Baht for clearing in, and for clearing out. On Saturdays/Sundays and Holidays this goes up to 500 Baht.
The bond for someone arriving by yacht and listed as crew but who plans to leave the country by other means is 20,000 Baht (cash).
Customs charge between 200 - 300 Baht on departure only. However on Saturday/Sunday and Holidays this goes up to 800 Baht on inward clearance and 1000 Baht on departure.
The Harbour Master (Port Control) charges 100 Baht on departure only (although this varies with the port).
All give correct receipts. If you check in on a public holiday or a weekend extra fees apply with both Customs and Immigration. Make sure you have the correct money and try not to turn up with 1000 Baht bills.
There is a daily charge for visiting National Parks (including National Marine Parks) of between 200 and 500 Baht per person, per day. Fees are due to increase for international visitors as of 1 February 2015. See news report here.
Last updated March 2015.
National Parks
Nearly all of the waters of Thailand are covered by one national park or another. The Chief Park Ranger can:-
The current charges (October 2014) for Koh Rok Nok, Koh Lanta, Surin & Similan islands National Parks are 400 baht ($13) per person and 200 baht for the boat for 3 days. The charges are due to increase from 1 February 2015 to 500 baht per person.
For an update on park fees for 2015 read news report here
Anchoring
Fishing
There is definitely no fishing in the Similans and Surin Islands and there is a maximum fine of 500 baht per person on the boat i.e. if there is only one line but five people on the boat the fine will be 2500 baht regardless of who was fishing.
For the other islands, you may be allowed to fish but you must ask the ranger first, again it is up to the individual ranger.
Last updated October 2014.
Phuket and surrounding waters - Birds' Nests
Yachts cruising in the waters of Phuket and surrounding waters of Phang Nga , Krabi, Trang and Satun provinces, should be aware that the practice of guarding and harvesting birds' nests is quite common on certain small islands. Do a little research before anchoring in what looks like a idyllic anchorage. It may not be so. See this news report for further details.
An interesting travel blog to read re. local customs and habits is 12 Lessons Learnt after one month travelling in Thailand.
Health Certificate to comply with State and Federal Laws to be supplied by recognised Veterinarian. Certificate should be no more than 30 days before departure if travelling with owner or 10 days before departure if pet travelling as cargo. USDA requires pets to be at least 8 weeks old and fully weaned before travel
Enquiries about bringing animals into the country made be made by contacting:
The Department of Livestock Development Bangkok Tel: 0-2251-5136, 0-2252-6944
Vaccination certificates are required for all animals entering Thailand. For further information or queries contact the website of the Customs Department of the Kingdom of Thailand.


Our Products
Save your money and time with our store. Here's the best part of our impressive assortment.
 Based on Bootstrap’s 12 column 1200px responsive grid Theme. Great looks on desktops, tablets and mobiles.
Venedor is extremely customizable, easy to use and fully responsive. Suitable for every type of store. Great as a starting point for your custom projects. This theme includes several extensions including ajax price slider that will help you improve your sales. We supply a full help with our products and after purchase support to all our customers.
On Sale
Only with us you can get a new model with a discount.
BE THE FIRST TO KNOW
Get all the latest information on Events, Sales and Offers. Sign up for the Venedor store newsletter today.
Cool Style!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sunt iure quisquam necessitatibus fugit! Nisi tempora reiciendis omnis error sapiente ipsam maiores dolorem maxime.
Jake Suasoo
10.10.2015
Best Service!
Maecenas semper aliquam massa. Praesent pharetra sem vitae nisi eleifend molestie. Aliquam molestie scelerisque ultricies. Suspendisse potenti.
Anna Retallic
08.11.2015


What's going on here?
Reverse Product Hunt surfaces the most interesting new product ideas, every day. It's a place for product-loving enthusiasts and product builders to share and geek out about new product ideas. Share your idea for a new product and get feedback, or see what others are thinking about to get inspired.
Can I submit a product Idea?
Sure thing! After logging in, click the "Post a Product Idea" link in the header and submit the product's name, tagline, and a little explanation of what you are thinking. Each post should include the:
- Product Name (make something up that sounds good to you)
- Tagline - Very short description of the product (make it catchy!)
- Description - A little more detail about the idea
What kind of products do you allow on Reverse Product Hunt?
Reverse Product Hunt is for sharing new, interesting product ideas. It isn't the place for blog posts, news articles, events, or contract services.


| President |
|---|
| 1 George Washington |
| 2 John Adams |
| 3 Thomas Jefferson |
| 4 James Madison |
| 5 James Monroe |
| 6 John Quincy Adams |
| 7 Andrew Jackson |
| 8 Martin Van Buren |
| 9 William Henry Harrison |
| 10 John Tyler |
| 11 James K. Polk |
| 12 Zachary Taylor |
| 13 Millard Fillmore |
| 14 Franklin Pierce |
| 15 James Buchanan |
| 16 Abraham Lincoln |
| 17 Andrew Johnson |
| 18 Ulysses S. Grant |
| 19 Rutherford B. Hayes |
| 20 James Garfield |
| 21 Chester Arthur |
| 22 Grover Cleveland |
| 23 Benjamin Harrison |
| 24 Grover Cleveland |
| 25 William McKinley |
| 26 Theodore Roosevelt |
| 27 William Howard Taft |
| 28 Woodrow Wilson |
| 29 Warren G. Harding |
| 30 Calvin Coolidge |
| 31 Herbert Hoover |
| 32 Franklin D. Roosevelt |
| 33 Harry S. Truman |
| 34 Dwight Eisenhower |
| 35 John F. Kennedy |
| 36 Lyndon B. Johnson |
| 37 Richard Nixon |
| 38 Gerald Ford |
| 39 Jimmy Carter |
| 40 Ronald Reagan |
| 41 George Bush |
| 42 Bill Clinton |
| 43 George W. Bush |
| 44 Barack Obama |
| 45 Donald Trump |
The president of the United States is the head of state and head of government of the United States, indirect elected to a 4-year term by the people through the Electoral College. The officeholder leads the executive branch of the federal government and is the commander-in-chief of the United States Armed Forces.


When youphotographpeople incolor,you photograph their clothes.
But when youphotographpeople inblack & white,you photograph their souls.
Dr. Ted Grant


Design stage bannersRequires content
We use banners to denote when the service is not live. There are different banners depending on the stage of delivery the project is in.
Prototype banner
When a project is live and you are iterating on the design add the class prototype
to the div with the class phase-banner
.


Visa Application
To apply for a visa to participate ICME 2016, the information listed in the following file is required for us to send you an invitation letter. Once we get the following requested information, the application will be processed as soon as possible. You are suggested to start your visa application as early as possible to avoid unexpected delays.
Please click here to download the visa application information form. Please send the completed form to<EMAIL_ADDRESS>together with a scanned copy of your passport (and the scanned copy of the accompanying person, if any) as early as possible to avoid unexpected delays.
|


Live feed of the Twists of all the accounts you follow
There were 24 Twists posted in your feed, where 2 mentioned you. 3 Accounts followed you, and you received 5 messages
<% if (options.tags && _.size(options.tags) > 0) { %><% _.each(options.tags, function (tag) { %> #<%= tag %> <% }) %>
<% } %>


We are so glad you came...
We know our digital home is not much to look at yet, but don't let that stop you. Make yourself comfortable, take a seat, and let's get to know each other...


{{ insert gtag.html }}
A collection of tools for doing reinforcement learning research in Julia.
Make it easy for new users to run benchmark experiments, compare different algorithms, evaluate and diagnose agents.
Facilitate reproducibility from traditional tabular methods to modern deep reinforcement learning algorithms.
Provide elaborately designed components and interfaces to help users implement new algorithms.
A number of built-in environments and third-party environment wrappers are provided to evaluate algorithms in various scenarios.
ReinforcementLearning.jl is a wrapper package which contains a collection of different packages in the JuliaReinforcementLearning organization. You can simply run many built-in experiments in 3 lines.
Get Started!julia> ] add ReinforcementLearningExperiments julia> using ReinforcementLearningExperiments julia> run(E`JuliaRL_BasicDQN_CartPole`)
In ReinforcementLearningAnIntroduction.jl, we reproduced most figures in the famous book: Reinforcement Learning: An Introduction (Second Edition). You can try those examples interactively online with the help of MyBinder and learn many tabular reinforcement learning algorithms.
Learn Now!In ReinforcementLearningZoo.jl, many deep reinforcement learning algorithms are implemented, including DQN, C51, Rainbow, IQN, A2C, PPO, DDPG, etc. All algorithms are written in a composable way, which make them easy to read, understand and extend.
Try Now!Join the Julia Reinforcement Learning community to learn, contribute, and get your questions answered.
Ask package usage questions, discuss designs and propose new features through github issues. Contributions through pull requests are warmly welcomed!
Create an issue! Make a PR!Ask general reinforcement learning related questions on Julia discourse in the #machinelearning domain, or on the Slack in #reinforcement-learnin channel.
Ask on Discourse! Join Julia Slack!


Fundamentals of
Data Analytics and
Predictions
Tree Methods I
Xi (Rossi) LUO
Department of Biostatistics and Data Science
School of Public Health
The University of Texas Health Science Center at Houston
Tree-Based Methods
- Tree-based methods for regression and classification
- These involve stratifying or segmenting the predictor space into a number of simple regions.
- Since the set of splitting rules used to segment the predictor space can be summarized in a
tree, these types of approaches are known as decision-tree methods.
- Tree-based methods are simple and useful for interpretation
-
very “natural” constructs
- particularly when the explanatory variables are categorical (and even better, when they are
binary)
- very easy to explain to non-statisticians
Tree Example: What to do on a weekend?
Tree-Based Methods Cont.
- However, they typically are not competitive with the best supervised learning approaches in
terms of prediction accuracy
- Hence, we will also discuss
- Bagging
- Random forests
- Boosting
- These methods grow multiple trees which are then combined to yield a single consensus prediction
- Combining a large number of trees can often result in dramatic improvements in prediction
accuracy
Decision Tree Example: Hitters Dataset
- Baseball players salary
- How would you stratify it?
- Salary is color-coded
- Low: (blue, green)
- High: (yellow, red)
Decision Tree for the Hitters Dataset—1
Decision Tree for the Hitters Dataset—2
- For the Hitters data, a regression tree for predicting the salary of a baseball player, based on
the number of years that he has played in the major leagues and the number of hits that he made
in the previous year
- Be able to solve real-world data problems using software tools
- At a given internal node, the label (of the form $X_j \lt t_k$) indicates the left-hand branch
emanating from that split, and the right-hand branch corresponds to $X_j \ge t_k$. For instance,
the split at the top of the tree results in two large branches. The left-hand branch
corresponds to Years < 4.5, and the right-hand branch corresponds to Years ≥ 4.5
- The tree has two internal nodes and three terminal nodes, or leaves
- The number in each leaf is the mean of the response for the observations that fall there
Decision Tree for the Baseball Salary Data—3
- Overall, the tree stratifies (or segments) the players into three regions of predictor space:
- $R_1=${X|Years < 4.5}
- $R_2=${X|Years ≥ 4.5, Hits < 117.5}
- $R_3=${X|Years ≥ 4.5, Hits ≥ 117.5}
Terminology for Trees
- In keeping with the tree analogy, the regions R1, R2, and R3 are known as terminal nodes
- Decision trees are typically drawn upside down, in the sense that the leaves are at the bottom
of the tree
- The points along the tree where the predictor space is split are referred to as internal nodes
- In the hitters tree, the two internal nodes are indicated by the text Years < 4.5 and Hits <
117.5
Interpretation of Tree Results
- Years is the most important factor in determining Salary, and players with less experience earn
lower salaries than more experienced players
- Given that a player is less experienced, the number of Hits that he made in the previous year
seems to play little role in his Salary
- But among players who have been in the major leagues for five or more years, the number of Hits
made in the previous year does affect Salary, and players who made more Hits last year tend to
have higher salaries.
- Surely an over-simplification, but compared to a regression model, it is easy to display,
interpret and explain
Olive Oil Example—1 (From Ruczinski & Irizarry Notes)
- 572 olive oils were analyzed for their content of eight fatty acids
- (palmitic, palmitoleic, stearic, oleic, linoleic, arachidic, linolenic, and eicosenoic)
- 9 collection areas:
- 4 from Southern Italy (North and South Apulia, Calabria, Sicily),
- 2 from Sardinia (Inland and Coastal) and
-
3 from Northern Italy (Umbria, East and West Liguria)
- The concentrations of different fatty acids vary from up to 85% for oleic acid to as low as
0.01% for eicosenoic acid.
Olive Oil Example—2
Iris Data Example
Tree-Building Process
- We divide the predictor space — that is, the set of possible values for $X_1$,$X_2$ ... $X_p$ —
into $J$ distinct and non-overlapping regions, $R_1$, $R_2$....$R_j$
- For every observation that falls into the region $R_j$ , we make the same prediction, which is
simply the mean of the response values for the training observations in $R_j$
Details of the Tree-Building Process—1
-
In theory, the regions could have any shape. However, we choose to divide the predictor space
into high-dimensional rectangles, or boxes, for simplicity and for ease of interpretation of the
resulting predictive model
- The goal is to find boxes $R_1$, $R_2$....$R_j$ that minimize the RSS, given by
$\sum_{j=1}^{J}\sum_{i\in R_j}{(yi-\hat{y_{R_j}})^2}$
- where $\hat{y_{R_j}}$ is the mean response for the training observations within the jth box
Details of the Tree-Building Process—2
-
Unfortunately, it is computationally infeasible to consider every possible partition of the
feature space into J boxes
- For this reason, we take a top-down, greedy approach that is known as recursive binary splitting
- The approach is top-down because it begins at the top of the tree and then successively
splits the predictor space; each split is indicated via two new branches further down on the
tree
- It is greedy because at each step of the tree-building process, the best split is made at
that particular step, rather than looking ahead and picking a split that will lead to a
better tree in some future step
Details of the Tree-Building Process—3
-
We first select the predictor Xj and the cut point s such that splitting the predictor space
into the regions {X|Xj < s} and {X|Xj ≥ s} leads to the greatest possible reduction in RSS
- Next, we repeat the process, looking for the best predictor and best cut point in order to split
the data further so as to minimize the RSS within each of the resulting regions
- However, this time, instead of splitting the entire predictor space, we split one of the two
previously identified regions. We now have three regions
-
Again, we look to split one of these three regions further, so as to minimize the RSS. The
process continues until a stopping criterion is reached; for instance, we may continue until no
region contains more than five observations
Predictions
We predict the response for a given test observation using the mean of the training observations in
the region to which that test observation belongs
Visualizing Tree Splitting
Pruning a Tree—1
- The process described previously may produce good predictions on the training set, but is likely
to overfit the data, leading to poor test set performance
- A smaller tree with fewer splits (that is, fewer regions $𝑅_1$ ... $𝑅_𝐽$) might lead to lower
variance and better interpretation at the cost of a little bias
- One possible alternative to the process described above is to grow the tree only so long as the
decrease in the RSS due to each split exceeds some (high) threshold
- This strategy will result in smaller trees, but is too short-sighted: a seemingly worthless
split early on in the tree might be followed by a very good split — that is, a split that leads
to a large reduction in RSS later on
Pruning a Tree—2
-
A better strategy is to grow a very large tree T0, and then prune it back in order to obtain a
subtree
- Cost complexity pruning; also known as weakest link pruning, is used to do this, consider a
sequence of trees indexed by a nonnegative tuning parameter 𝛼, for each value of α there
corresponds a subtree $𝑇 ⊂ 𝑇_0$ such that the below equation is is as small as possible
$$\sum_{m=1}^{|T|}\sum_{i\in x_iR_j}{(y_i-\hat{y}_{R_m})^2}+a|T|$$
- Here |𝑇| indicates the number of terminal nodes of the tree T, $𝑅_𝑚$ is the rectangle (i.e.
the subset of predictor space) corresponding to the mth terminal node, and $\hat{y_{Rm}}$ is the
mean of the training observations in $𝑅_𝑚$
Choosing the Best Subtree
- The tuning parameter $\alpha$ controls a trade-off between the subtree’s complexity and it’s fit
to
the training data
-
We select an optimal value $\hat{\alpha}$ using cross-validation
-
We then return to the full data set and obtain the subtree corresponding to $\hat{\alpha}$
Tree Algorithm
- Use recursive binary splitting to grow a large tree on the training data, stopping only when
each terminal node has fewer than some minimum number of observations
- Apply cost complexity pruning to the large tree in order to obtain a sequence of best
subtrees, as a function of 𝛼
- Use K-fold cross-validation to choose 𝛼. For each k = 1, . . . , K:
- Repeat Steps 1 and 2 on the (k-1)/kth fraction of the training data, excluding the
kth fold
- Evaluate the mean squared prediction error on the data in the left-out kth fold, as
a function of 𝛼
- Return subtree from Step 2 that corresponds to the chosen value of 𝛼
Baseball Example
- First, we randomly divided the data set in half, yielding 132 observations in the training set
and 131 observations in the test set
- We then built a large regression tree on the training data and varied α in order to create
subtrees with different numbers of terminal nodes
- Finally, we performed six-fold cross-validation in order to estimate the cross-validated MSE of
the trees as a function of $\alpha$
Baseball Example Tree
Baseball Example Tree Size
Quiz—1
- Pruning leads to a tree with fewer splits this leads to a model with _____ variance and _______
interpretability
- higher, worse
- higher, better
- lower, worse
- lower, better
Classification Trees—1
- Very similar to a regression tree, except that it is used to predict a qualitative response
rather than a quantitative one
- For a classification tree, we predict that each observation belongs to the most commonly
occurring class of training observations in the region to which it belongs
- Just as in the regression setting, we use recursive binary splitting to grow a classification
tree
Classification Trees—2
- In the classification setting, RSS cannot be used as a criterion for making the binary splits
- A natural alternative to RSS is the classification error rate; this is simply the fraction of
the training observations in that region that do not belong to the most common class:
$$E=1-\max_{k}(\hat{p_{mk}})$$
- $\hat{p_{mk}}$ represents the proportion of training observations in the mth region that are
from the kth class
- Other measures: Gini index and Deviance
Gini and Cross-Entropy
- The Gini index is defined by
$$G=\sum_{k=1}^{K}\hat{p_{mk}}(1-\hat{p_{mk}})$$
-
A measure of total variance across the K classes
- Gini index takes on a small value if all of the $\hat{p_{mk}}$ 's are close to zero or one
- Gini index is referred to as a measure of node purity — a small value indicates that a node
contains predominantly observations from a single class
- An alternative to the Gini index is cross-entropy, given by
$$D=-\sum_{k=1}^{K}\hat{p_{mk}}(log\hat{p_{mk}})$$
- It turns out that the Gini index and the cross-entropy are very similar numerically
Heart Data Example—1
- These data contain a binary outcome HD for 303 patients who presented with chest pain
- An outcome value of Yes indicates the presence of heart disease based on an angiographic test,
while No means no heart disease
- There are 13 predictors including Age, Sex, Chol (a cholesterol measurement), and other heart
and lung function measurements
- Cross-validation yields a tree with six terminal nodes; see next figure
Heart Data Example—2
Heart Data Example—3
Trees vs. Linear Models
Advantages and Disadvantages of Trees
- Trees are very easy to explain to people
- Trees are closely mirror human decision-making than do the regression and classification
approaches
- Trees can be displayed graphically, and are easily interpreted even by a non-expert (especially
if they are small)
- Trees can easily handle qualitative predictors without the need to create dummy variables
- Unfortunately, trees generally do not have the same level of predictive accuracy as some of the
other regression and classification approaches seen before
- However, by aggregating many decision trees, the predictive performance of trees can be
substantially improved


Toggle navigation
Ed Exchange
Directory
Docs
Server Info
API Usage
Settings
My Organization
Users
Messages
Sign Up
Sign In
Name
Account


Include rt2.js and then use it as follows:
rt2([url to convert], [callback of converted url]);
Example:
There's a div below that has an ID of "output". Here is some code:
document.getElementById("output").innerHTML = "Fetching...";
rt2("http://www.youtube.com/watch?v=dQw4w9WgXcQ", function(result) {
document.getElementById("output").innerHTML = result;
});


Airlines have loyal customers who frequently use their websites to book travel, and they have brand new prospects, who come to the page possibly because of a rumored deal. The major reason people go to airline websites is to book trips.
But like so many things today, airlines have been pummeled by COVID-19.
According to Bloomberg News, TSA reports that for one week in April 2019, 2 million travelers passed through security. For that same week in 2020, the number was 90,000, or a 95% drop in air travel.
Airline websites today need to serve two purposes: they need to be familiar places where a potential customer can research and book a trip for the distant future, but much more prominently, they need to be a place where a current customer can cancel or postpone a trip. On top of that, they need to reassure that they are sanitizing their flights, protecting their employees and if possible, playing a role in supporting health workers in the pandemic.
With these 2 purposes in mind, I decided to review Alaska Airlines, a site I have used regularly for booking trips, and recently, for canceling them.
Alaska Airlines and Canceled Travel
This blog is a user experience review of alaskaair.com and I will be analyzing their webpage.
I will use the following criteria from Steve Krug’s book “Don’t Make Me Think”.
- What site is this?
- What page am I on?
- What are the major sections?
- What are my options at this level?
- Where am I in relation to the rest of the site?
- How can I search?
What site is this?
Normally, the Alaska Airlines logo and sections would feature prominently across the top of the page, but during this time, Alaska has put key issues related to Covid-19 at the upper left, anchored by an Alaska Airlines logo. They have also put a large button to lead to the most important action that customers are doing on the site right now--changing or canceling flights. I think this works well--most companies are listing their COVID-19 info in a banner on the top, so this is a new convention that users are coming to expect.
What page am I on?
I am on the home page. I know this by the nav bar of sections and the prominent booking form. It’s not as stylized as it usually is, and the background image enticing you to travel is not that enticing! It’s pale and faded and features a crowded city of high rise apartments. It’s a strange choice at a time when crowded cities are not places people want to plan to travel to.
What are the major sections of this site?
Across the nav bar, you can choose to Book, Manage, Check In, Where We Fly, Traveling with Us, Mileage Plan and Search. When you click on those, you either get bold buttons for quick searches or dropdowns for more options. These features are common on airline sites.
What are my options at this level?
On the home page, you can just use the COVID-19 banner and take care of things there. You can scroll further down to the nav bar and do some research on other pages (like where they fly). You can book, check in, find out your flight status or manage a trip on the form. There is a big section devoted to learning more about what they are doing to stay safe.
There is also a big section reserved for getting an Alaska Airlines credit card. There is a section reserved for shopping with miles, learning about partnerships and earning miles. And then there is some boilerplate about newsletters, mobile apps, and how to contact them and social media. These latter sections seem very similar to other airlines reviewed, like United, Southwest and Delta.
Where am I?
The benefit of a product and company as knowable as Alaska Airlines means that it’s pretty easy to know where I am on the site. While they may have secondary things for me to explore (credit cards and mileage plans) the homesite offers me, front and center, what I come to airline webpages for--booking a trip (or now, canceling a trip.) And that is featured very prominently.
How can I search?
The search bar is found on the nav bar, in a darker form. It’s subtle, but because it follows conventions (upper right corner, magnifying glass) I have enough experience to know where to go to find it. Oddly, in the many years that I have been going to the site, I have never used the search tool, which suggests that the nav functions are very intuitive.
Criticisms
I have two minor criticisms of the site, given the time we are living in right now.
1) They are missing an opportunity to show their involvement in the fight to stop COVID-19. They have a blog that is very hard to find (in the footer next to social) that features them rushing materials to make masks to production lines in several states to be used across the western states. They also flew healthcare workers to New York. They could highlight a photo in their banner at the top to take you to those stories.
2) They are also missing out on some of their more interesting social media, a virtual trip to San Diego, or an invite to have a happy hour with Russell Wilson on the Alaska Airlines Instagram page. These kinds of features would be a lot more interesting than some of the boilerplate credit card and partner features but are hidden behind their tiny links to social.
Seattle U does a nice job of featuring their social media at the bottom of their home page.
Generally speaking, Alaska Airlines not only does a good job of usable design in their webpage when it’s “business as usual” but they have also been clear and direct with users who are now using the page in a way that has been much less common but in high demand now--canceling travel.
The suggestions I have for them aren’t about making it easier for the user to take care of that business, but to get some credit and build greater loyalty for the role they are playing in changing up their work to support front line workers as well as being creative in entertaining people who had to cancel travel. They deserve some credit.


ColorGray
About Developers
Color Your
Photos
In Seconds
Add a splash of life back to old photos or historic images in seconds with our deep learning model.
Upload B/W Image
Download Colored Image
Choose B/W Photo
{% if res %}
B&W Image
Colorized Image
Download
{% endif %} {% if error %}
{{ error }}
{% endif %}


This section will walk you through setting up the Connected Drink Dispenser workshop for participants. It covers the workshop setup, how procure and build hardware, and the approach to introduce the workshop and mentor the participants attending the workshop.
Deploying the workshop opens your account to anyone registering for an account from the single-page app. Each participant (user) is provisioned with a Cloud9 instance that allows them to run processes and access the Internet. Only deploy the workshop over a period of time (hours, not days) where you can monitor activity in your account, and destroy the workshop once completed to secure resources.
Each section covers details for understanding, setting up, and presenting the workshop. Follow each of these sections in order to fully build the workshop.
Follow these steps to deploy from a Cloud9 instance in the account where you wish to run the workshop:
Ensure a Route 53 hosted public zone is setup for a private domain name you have registered. The domain example.com
is used below.
Launch a Cloud9 IDE from an account with all the IAM permissions needed to deploy the Cloud Development Kit (CDK) stack, from the region where you want to deploy the workshop. As there are a lot of IAM related permissions needed, the AWS managed permissions group, AdministratorAccess, has the necessary permissions.
Open a new terminal, install dependencies, clone this repository, and create the connected-drink-dispenser-workshop/deploy/config.json
file from the template.
### Copy and paste these lines into terminal
cd ~/environment/
npm install -g cdk
npm install -g yarn
git clone https://github.com/aws-samples/connected-drink-dispenser-workshop.git
cd connected-drink-dispenser-workshop/deploy/
sudo pip-3.6 install -r requirements.txt
cp config.json.default config.json
### end of copy/paste
Update the config.json
file’s values and save the file when complete:
default
(this uses the permissions from our user account in Cloud9)cdd.example.com
)From the terminal, bootstrap the CDK into the region (optional if you are already using CDK in that region) with the command cdk bootstrap
:
cdk bootstrap
Bootstrapping environment aws://ACCOUNT/REGION...
CDKToolkit: creating CloudFormation changeset...
0/2 | 3:21:24 PM | CREATE_IN_PROGRESS | AWS::S3::Bucket | StagingBucket
0/2 | 3:21:25 PM | CREATE_IN_PROGRESS | AWS::S3::Bucket | StagingBucket Resource creation Initiated
1/2 | 3:21:47 PM | CREATE_COMPLETE | AWS::S3::Bucket | StagingBucket
2/2 | 3:21:49 PM | CREATE_COMPLETE | AWS::CloudFormation::Stack | CDKToolkit
Environment aws://ACCOUNT/REGION bootstrapped.
Deploy the workshop with the command cdk deploy
. This will create a lot of updates as the stack progresses and will take 30-50 minutes to complete due to the CloudFront deployment:
$ cdk deploy
... LIST OF RESOURCES ...
Do you wish to deploy these changes (y/n)? y
cdd-workshop: deploying...
Updated: asset.d58800906a30c9e60c2dc7e40199f78f18842fa61a81094dd212ef1d9c4607a7 (zip)
... BUILD STEPS ...
cdd-workshop.StaticSiteDistributionId8C64EF2A = E5J4ADZ0ZK1C5
cdd-workshop.UserPoolCognitoClientId49B6D8C4 = 2b38h8da7dds832qvio3vkds5b
cdd-workshop.UserPoolCognitoUserPoolIdA08E3514 = us-west-2_bnzrtUys3
Stack ARN:
arn:aws:cloudformation:us-west-2:904880203774:stack/cdd-workshop/832c88d0-1b7c-11ea-b1f9-02b80ff4b548
$
If you see errors or CREATE_FAILED messages, review the reasons, which most likely will be permissions related. At this point the CDK will attempt to rollback and delete the deployment of resources. You may need to go into CloudFormation and delete the stack manually or issue the command cdk destroy
. To resolve permissions errors, add the needed permissions to your account, and then close the Cloud9 IDE web page and relaunch from the console to refresh permissions.
With expanded permissions, attempt again to deploy the stack until the success message above is seen.
Finally, issue the command python deploy_app
to build the single page application, and upload all resources to the S3 origin bucket:
$ python deploy_app.py
... BUILD AND UPLOAD STEPS
DONE Build complete. The dist directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
Done in 65.14s.
Copying Single page web application to S3: 36 files [00:05, 6.22 files/s]
Copying Credential C formatter page to S3: 6 files [00:00, 79.67 files/s]
Copying Online documentation to S3: 446 files [00:13, 33.56 files/s]
At this point, the stack if fully deployed and ready to start! Once the workshop is over, either delete via CloudFormation or from the same Cloud9 IDE, issue the command cdk destroy
from the deploy
directory.


= header ?> = page.content ?>
You can use any valid Wren Code
<?= footer ?> is the same as writing <?wren echo.call(footer) ?>


pysnn.network
pysnn.network¶
-
class
pysnn.network.
SNNNetwork
¶ Base clase for defining SNN network, contains several convenience operators for network simulations.
-
reset_state
()¶ Resets state parameters of all submodules, requires each submodule to have a reset_state function.
-
add_layer
(name, connection, neuron)¶ Adds which
Neuron
andConnection
objects together form a layer, as well as the layer type.- Parameters
name – Name of the layer
connection –
Connection
objectneuron –
Neuron
object
-
layer_state_dict
()¶ Return state dicts grouped per layer, so a single Connection and a single Neuron state dict per layer.
- Returns
State Dicts for the
Connection
andNeuron
of the layer, as well as the layer type.
-


See The New Sonic In The Latest Sonic: The Hedgehog Trailer
by Alex WalkerThe movie still looks a touch nuts, but Sonic's design is definitely a huge improvement.
The latest trailer, Trailer D, dropped late Tuesday evening and showed off everything you need to see from the new Sonic design. The blue hedgehog is a little less life-like in its dimensions, and he's a little more palatable now. The teeth aren't so freakish either, and Sonic has much shorter legs now.
So Sonic looks more like a cartoon character now than someone in a suit, which is nice. How James Marsden and Jim Carrey are going to carry this one through.
The movie hits Australian cinemas on February 13.


Fully Responsive
Your website will ne created with modern browsers and mobile devices in mind. We employ the latest HTML, CSS and Javascript techniques that will adopt your website for all the modern devices and browsers.
OliBerry Designs is a creative Web Design studio that collects over 10+ years experience in Graphic, Web and User Experience Design, Web-Development and Marketing.
We couple handsome design esthetics with the practical knowledge of web-site production, which results in an extraordinary online presence for your business or personal need.
If you are a business, working with us is an easy process.
We will help you quickly and easily identify your customer’s needs and form the best web-design strategy to fulfill your company's goals. Web strategy includes selecting the best color theme that matches the character of your business, indentifying web content goals, web-site architechture and selecting the best ways to define you social media presence
As per personal use, whether its creating an online portfolio, private online gallery, event website, setting up a blog or any other reason, we can help as well!
If you are looking to create a significant online presence, we are happy to help. We will do our best to rapidly address any concerns in a very professional manner.
Portfolio Website
Wheather you are a photographer, musician, an artist or any creative heart at all and looking to showcase your work, portfolio website is the best way to go!
Online Portifolio will increase your visibility and get your name out there! It not only centralize and showcase yur best work but also help you communicate with your audience through comments and social media integration.
We will help to set up your online presence in no time wih greatly functioning galleries, social media integration, blog and newsletter setup.
We will also help you choose hosting and provide a training on how to update your portfolio.
Blog
If you are ready to take your blogging to the next level and use it for your business, you probably already figured that in order to own your own content and have full control over you blog design and features, it's time to move off the third-party blogging platforms.
As a blog design strategy, we will select the best graphics and color palette that matches the theme of your stories. Layout of the pages will not only hightlight your recent stories but give your reader an easy way to navigate through your best content and share the favorite stories on social media.
Newsletter integration is a must, because you probably already know that connecting with ryour community is a key for your success!
We will also take care that updating and maintaining your blog is easy and breazy.
Personal Website
Weather you want to share your personal wedding website with your guests, save sweet memories of your new-born baby, host and share special galleries with your loved ones, we would be happy to help you setup a personal website.
If you'd like the content of your website to remain private, we will take care of creating a password protected website with one or several login credentials for enyone you'd like to share!
eCommerce Website
We will consult you on all the options that are available to build an online presence for your business.
First of all, we will help you get a clarity of what would make you website work the best for your business. This will include but not limited to defining a clear vision on your goals and what your customers inspect from you.
We will help you define the best design for your business. Color psycology is one of our favorite subjects ever!
We would work on a content strategy, website features architecture and building your outreach community ways.
We would go on, but the list is getting long.
Contact us! We can help!
NonProfit Website
Taking action to help make this world a better place.
When a supporter lands on your website, we will make that your mission crystal clear.
Whether your organisation promotes the right to education, working towards protecting animals, helping to decrease the gap between social circles, the goal just to make sure your organization’s brand and identity is clear for folks who may be coming to your site for the first time.
In average, you have only 8 seconds to engage supporters once they land on your website, so lets make sure that the impression is right!
We can help to setup the best tools to make your website donor-friendly and reach your fundraising goals by keeping supporters just one click away from your donation form no matter where they are on your site.
Online Courses
Wordpress
Squarespace
HTML/CSS/JQuery
Your website will ne created with modern browsers and mobile devices in mind. We employ the latest HTML, CSS and Javascript techniques that will adopt your website for all the modern devices and browsers.
We build your website with an easy to use for updates platform in mind. Wordpress, Squarespace, Shopify. The backend system is build to make website updates an easy and intuitive process.
What the 10 years of experience in intry makes sure to teach you to build websites that include clean article links, proper tagging, XML sitemaps, and valid XHTML code.
Bonus: I will give you a training on the best SEO practices for your content.
View the traffic and behavior of visitors in real-time. Learn where they're coming from, and what search keywords they're using to find you. Goodle analytics goes a must have for your website
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo


An environment emulating the Roblox Lua API.
The Roblox library contains an environment similar to the Roblox Lua API. It is included directly into the global environment.
Gets the internal type of a userdata.
The typeof function returns the type of a value. For userdata, the internal value is returned. Other Lua values return the same as the type function.


Encrypted Video & Voice Messenger
If you are currently using a Video & Voice Messenger like Skype, Viber or Google Hangouts, you should pick an alternative here.
{% include cardv2.html
title="Mobile: Signal"
image="/assets/img/tools/Signal.png"
website="https://signal.org"
description="Signal is a mobile app developed by Open Whisper Systems. The app provides instant messaging, as well as voice and video calling.
All communications are end-to-end encrypted. Signal is free and open source."
forum="https://forum.privacytools.io/t/discussion-signal/664"
github="https://github.com/signalapp"
android=""
ios=""
mac=""
windows=""
linux=""
footer="OS: Android, iOS, macOS, Windows, Linux"
%}
{% include cardv2.html
title="Wire"
image="/assets/img/tools/wire.png"
website="https://wire.com/download/"
description="Wire is an app developed by Wire Swiss GmbH.
The Wire app allows users to exchange end-to-end encrypted instant messages, as well as make voice and video calls. Wire is free and open source. Caution "
forum="https://forum.privacytools.io/t/discussion-wire/750"
github="https://github.com/wireapp"
android=""
ios=""
mac=""
windows=""
linux=""
web=""
%}
{% include cardv2.html
title="Linphone"
image="/assets/img/tools/Linphone.png"
website="https://www.linphone.org/"
description="Linphone is an open source SIP Phone and a free voice over IP service, available on mobile and desktop environments and on web browsers. It supports ZRTP for end-to-end encrypted voice and video communication."
forum="https://forum.privacytools.io/t/discussion-linphone/751"
github="https://github.com/BelledonneCommunications"
ios=""
android=""
windows=""
linux=""
mac=""
web=""
%}
Worth Mentioning
- Jitsi - Jitsi is a free and open source multiplatform voice (VoIP), videoconferencing and instant messaging application.
- Tox - Experimental A free and open-source, peer-to-peer, encrypted instant messaging and video calling software.
- Jami (formerly Ring/SFLphone) - Gives you a full control over your communications and an unmatched level of privacy.
Related Information