Hspec provides several combinators that can be used to set expectations about the outcome of code examples.
A common expectation is that two values are equal. shouldBe
can be used
here:
x `shouldBe` 23
shouldBe
can be used in combination with IO
actions. Here is an example:
launchMissiles >>= (`shouldBe` Left "permission error")
shouldReturn
is a shortcut for that. The above code can be simplified to:
launchMissiles `shouldReturn` Left "permission error"
shouldSatisfy
requires that some predicate holds for a given value.
xs `shouldSatisfy` (not . null)
It is similar to HUnit's assertBool
, but it gives a more detailed error
message if the expectation fails.
Hspec provides a mechanism to state that an action throws an exception. Here is a basic example:
launchMissiles `shouldThrow` anyException
The type of shouldThrow
is:
shouldThrow :: Exception e => IO a -> Selector e -> Expectation
It takes an IO
action and a Selector
. The Selector
describes the precise nature of the expected exception.
There are several predefined selectors:
anyException :: Selector SomeException
anyErrorCall :: Selector ErrorCall
anyIOException :: Selector IOException
anyArithException :: Selector ArithException
The selector anyException
can be used to expect an arbitrary exception.
Likewise anyErrorCall
, anyArithException
and anyIOException
can be used
to expect arbitrary exceptions of type ErrorCall
, ArithException
and
IOException
respectively.
A Selector
is just a predicate. It can simultaneously constrain the type and
value of an exception. This can be used in various ways, e.g. you can expect a
specific exception value:
launchMissiles `shouldThrow` (== ExitFailure 1)
The module System.IO.Error
exports predicates to classify IOException
s.
Those can be used in combination with shouldThrow
to expect specific
IOException
s. Here is an example that uses
isPermissionError
to require our hypothetic
launchMissiles
action to fail with a permission error:
launchMissiles `shouldThrow` isPermissionError
runhaskell Spec.hs readFile when specified file does not exist throws an exception [✔] Finished in 0.0005 seconds 1 example, 0 failures
Both error
and undefined
throw exceptions of type
ErrorCall
.
There is no Eq
instance for ErrorCall
, hence it is not possible to use ==
to expect a specific exception value of type ErrorCall
. The following won't
work:
evaluate (error "foo") `shouldThrow` (== ErrorCall "foo") -- This won't work!
Pattern matching can be used instead, but Hspec provides a combinator,
errorCall
, to make this more convenient. Here is how it's
used:
evaluate (error "foo") `shouldThrow` errorCall "foo"
runhaskell Spec.hs Prelude.head throws an exception if used with an empty list [✔] Finished in 0.0005 seconds 1 example, 0 failures
evaluate
can be used to expect exceptions from pure code:
evaluate (1 `div` 0) `shouldThrow` anyArithException
However, evaluate
only forces its argument to weak head normal form. To
better understand what that means, let's look at an other example:
evaluate ('a' : undefined) `shouldThrow` anyErrorCall
Here evaluate
does not force the exception. It only evaluates its argument
until it encounters the first constructor. Here the constructor is :
, as soon
as evaluate
sees :
it's done. It does not look at the arguments of that
constructor.
force
can be used to force the exception:
(evaluate . force) ('a' : undefined) `shouldThrow` anyErrorCall
Note that return $!!
(or any other mechanism that relies solely on seq
)
does not work reliably! (see the discussion at
#5129)
runhaskell Spec.hs div throws an exception if the second argument is 0 [✔] evaluate forces exceptions [✘] evaluate . force forces exceptions [✔] Failures: Spec.hs:13:34: 1) evaluate forces exceptions did not get expected exception: ErrorCall To rerun use: --match "/evaluate/forces exceptions/" Randomized with seed 921447365 Finished in 0.0005 seconds 3 examples, 1 failure
GHC's semantics for imprecise exceptions can be tricky. But simple examples
are evident. If we look at the exceptional value error "foo" + error "bar"
it may
be tempting to assume that the following expectation holds:
evaluate (error "foo" + error "bar" :: Int) `shouldThrow` errorCall "foo"
There is a pretty good chance that this will indeed hold, but it may equally
well fail. The reason is that +
does not give any guarantees about the
evaluation order of its arguments.
Semantically an exceptional value contains a set of exceptions. When we "look" at the value, one representative from the set is chosen in a non-deterministic way.
For our simple example the set of exceptions is {ErrorCall "foo", ErrorCall
"bar"}
, so we have to be prepared to encounter any of those. We can
accommodate for this by combining errorCall "foo"
and errorCall "bar"
with
||
:
evaluate (error "foo" + error "bar" :: Int)
`shouldThrow` (||) <$> errorCall "foo" <*> errorCall "bar"
The details of imprecise exceptions are described in the paper
A semantics for imprecise exceptions.
But beware that GHC does not fully adhere to those semantics (see
#1171,
#2273,
#5561,
#5129).
runhaskell Spec.hs an exceptional value contains a set of exceptions (semantically) [✔] Finished in 0.0005 seconds 1 example, 0 failures


Please let the next student create theirs now, and go watch the robot draw yours.


Jennylynnramz
Add more
(current)
Expiring Soon
View all Products
Submit a new item:
Product Name
Expiration Year
Expiration Month
1 - January
2 - February
3 - March
4 - April
5 - May
6 - June
7 - July
8 - August
9 - September
10 - October
11 - November
12 - December
Expiration Day
Storage Method
Refrigerator
Freezer
Refrigerate After Opening
Shelf Stable
Submit


@(firstname: String, company: String, pass: String, email:String, regid:String) @regid
You have been designated as a sponsor representative for your company, @company. If this is not the case, please forward this email to sponsorscans@@devoxx.co.uk and just ignore this email.
Please open a web browser to https://leadscan-pwa.devoxx.co.uk. The Scan application works on Android with Chrome, iPhone 10 and in a web browser.
User = @email
Password = @pass
The application https://leadscan-pwa.devoxx.co.uk allows you to scan attendee badges and take notes. All leads scanned by you will be sent to your company's representative at the end of the event.
On Thursday morning we will come by to your booth to see if everything is ok
Regards,
The Devoxx UK Team


screen_transitions
Animate routes easily with AnimatedRoute Helper class.
Getting Started
It is very easy to has custom screen transition on Flutter, all you need to do is add a the transition type to your theme:
MaterialApp(
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(builders: {
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
}),
...
)
You can also define your own custom transition, I have implemented a simple helper class that make your life easier.
Navigator.of(context).push(RouteAnimationHelper.createRoute(destination : Screen2(), animType: AnimType.slideStart, duration: 450, curve: Curves.ease));
You choose one of the following types:
enum AnimType{
slideStart, slideBottom, scale, fade, size, rotate
}
You can also supply a curve although Curves.ease - which is the default - is the best IMHO


Google enters gaming with cloud-based streaming service Stadia
by ReutersAlphabet’s Google on Tuesday launched Stadia, a cloud-based service that allows users to stream games including “Assassin’s Creed Odyssey” and “NBA 2K20” on Chrome web browser.
The service will start with a slate of 22 games and stream 4K videos at 60 frames per second, which can also be accessed through Google’s Chromecast and Pixel devices.
Google is offering the 4K version as part of its premium service, Stadia Pro, priced at $9.99 per month. The free high-definition version is expected to roll out next year.
“We have over 450 games in development right now that will be coming out in 2020 and beyond,” Google Vice President and General Manager Phil Harrison told Reuters.
Stadia will need at least 10Mbps internet speed for the base 720p resolution and 35Mbps to stream games in 4K. Early reviews of Stadia have complained of latency, the time delay between pressing a button and getting the reaction on screen.
The success of cloud gaming depends heavily on the underlying network and how much controlled-latency traffic it can support during periods of peak demand, said Steve Alexander, chief technology officer at Ciena Corp, a telecom equipment maker.
Analysts are also pinning the success of Stadia on the content it offers as most of the games on the platform are already available on consoles.
“Stadia will live or die by its content,” said George Jijiashvili, senior analyst at Ovum, a brokerage firm, adding that an underwhelming number of launch titles was making it difficult to generate real excitement.
Stadia will compete with Microsoft Corp’s Project xCloud, which is likely to be launched next year, and Nvidia’s GeForce Now that is out on public beta.
Sony also offers a game streaming platform PlayStation Now at $9.99 per month that includes over 800 games across its console titles.
Google is billing Stadia for non-gamers, but it will need to work out some kinks to make it more attractive than a console or a personal computer, Chaim Seigel, an analyst with Elazar Advisors, said.
The service is currently available in 14 countries, including the United Kingdom, the United States, Canada, Norway, France, and Germany.


Dr. Norman Bolaug
This is a preview of his career
Responsive Web Design Projects - Build a Tribute Page
Wiki pedia


public interface IDuplexBrokerClient extends IAttachableDuplexOutputChannel
// Create the broker client.
IDuplexBrokerFactory aBrokerFactory = new DuplexBrokerFactory();
IDuplexBrokerClient aBrokerClient = aBrokerFactory.createBrokerClient();
// Register handler to process subscribed messages from the broker.
aBrokerClient.brokerMessageReceived().subscribe(myMessageHandler);
// Attach output channel and be able to communicate with the broker.
// E.g. if the broker communicates via TCP.
IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
IDuplexOutputChannel anOutputChannel = aMessaging.createDuplexOutputChannel("tcp://<IP_ADDRESS>:9843/");
aBrokerClient.attachDuplexOutputChannel(anOutputChannel);
// Now when the connection with the broker is establish so we can subscribe for
// messages in the broker.
// After this call whenever somebody sends the message type 'MyMessageType' into the broker
// the broker will forward it to this broker client and the message handler
// myMessageHandler will be called.
aBrokerClient.subscribe("MyMessageType");
// Create the broker client.
IDuplexBrokerFactory aBrokerFactory = new DuplexBrokerFactory();
IDuplexBrokerClient aBrokerClient = aBrokerFactory.createBrokerClient();
// Attach output channel and be able to communicate with the broker.
// E.g. if the broker communicates via TCP.
IMessagingSystemFactory aMessaging = new TcpMessagingSystemFactory();
IDuplexOutputChannel anOutputChannel = aMessaging.createDuplexOutputChannel("tcp://<IP_ADDRESS>:9843/");
aBrokerClient.attachDuplexOutputChannel(anOutputChannel);
// Now when the connection with the broker is establish so we can publish the message.
// Note: the broker will receive the message and will forward it to everybody who is subscribed for MyMessageType.
aBrokerClient.sendMessage("MyMessageType", "Hello world.");
| Modifier and Type | Method and Description |
|---|---|
Event<BrokerMessageReceivedEventArgs> |
brokerMessageReceived()
Event raised when a subscribed message type is received from the broker.
|
Event<DuplexChannelEventArgs> |
connectionClosed()
Event raised when the connection with the service was closed.
|
Event<DuplexChannelEventArgs> |
connectionOpened()
Event raised when the connection with the service was open.
|
void |
sendMessage(java.lang.String messageType,
java.lang.Object serializedMessage)
Publishes the message via the broker.
|
void |
subscribe(java.lang.String messageType)
Subscribes for the message type.
|
void |
subscribe(java.lang.String[] messageType)
Subscribes for list of message types.
|
void |
unsubscribe()
Unsubscribe all messages.
|
void |
unsubscribe(java.lang.String messageType)
Unsubscribes from the specified message type.
|
void |
unsubscribe(java.lang.String[] messageTypes)
Unsubscribes from specified message types.
|
attachDuplexOutputChannel, detachDuplexOutputChannel, getAttachedDuplexOutputChannel, isDuplexOutputChannelAttached
Event<DuplexChannelEventArgs> connectionOpened()
Event<DuplexChannelEventArgs> connectionClosed()
Event<BrokerMessageReceivedEventArgs> brokerMessageReceived()
void sendMessage(java.lang.String messageType, java.lang.Object serializedMessage) throws java.lang.Exception
messageType
- event identifierserializedMessage
- message content.java.lang.Exception
void subscribe(java.lang.String messageType) throws java.lang.Exception
messageType
- identifies the type of the message which shall be subscribed.java.lang.Exception
void subscribe(java.lang.String[] messageType) throws java.lang.Exception
messageType
- list of message types which shall be subscribed.java.lang.Exception
void unsubscribe(java.lang.String messageType) throws java.lang.Exception
messageType
- message type the client does not want to receive anymore.java.lang.Exception
void unsubscribe(java.lang.String[] messageTypes) throws java.lang.Exception
messageTypes
- list of message types the client does not want to receive anymore.java.lang.Exception
void unsubscribe() throws java.lang.Exception
java.lang.Exception


--- title: module name here keywords: fastai sidebar: home_sidebar summary: "API details." description: "API details." ---
say_hi
say_hi(to)
to
Enthusiastically say hi to someone
say_hi("Helena")
'Hii Helena!'
This is the same as assert say_hi("bla") == "Hii bla"
assert say_hi("bla") == "Hii bla"
test_eq(say_hi("Alex"),"Hii Alex!")


Find Usages
The Find Usages
action is a multi-step process, and each step of the process requires involvement from the custom language plugin.
The language plugin participates in the Find Usages process by registering an implementation of
FindUsagesProvider
in the com.intellij.lang.findUsagesProvider
extension point, and through the PSI implementation using
PsiNamedElement
and
PsiReference
interfaces.
Example: Implementation of FindUsagesProvider in Properties language plugin
The steps of the Find Usages
action are the following:
-
Before the
Find Usages
action can be invoked, the IDE builds an index of words present in every file in the custom language. Using the WordsScanner implementation returned from FindUsagesProvider.getWordsScanner(), the contents of every file are loaded and passes it to the words scanner, along with the words consumer. The words scanner breaks the text into words, defines the context for each word (code, comments or literals) and passes the word to the consumer. The simplest way to implement the words scanner is to use the DefaultWordsScanner implementation, passing to it the sets of lexer token types which are treated as identifiers, literals and comments. The default words scanner will use the lexer to break the text into tokens, and will handle breaking the text of comment and literal tokens into individual words. -
When the user invokes the Find Usages action, the IDE locates the PSI element the references to which will be searched. The PSI element at the cursor (the direct tree parent of the token at the cursor position) must be either a PsiNamedElement or a PsiReference which resolves to a PsiNamedElement. The word cache will be used to search for the text returned from the PsiNamedElement.getName() method. Also, if the text range of the PsiNamedElement includes some other text besides the identifier returned from
getName()
(for example, if the PsiNamedElement represents a JavaScript function and its text range includes the “function
” keyword in addition to the name of the function), the methodgetTextOffset()
must be overridden for the PsiNamedElement, and must return the start offset of the name identifier within the text range of the element. -
Once the element is located, the IDE calls FindUsagesProvider.canFindUsagesFor() to ask the plugin if the Find Usages action is applicable to the specific element.
-
When showing the Find Usages dialog to the user, FindUsagesProvider.getType() and FindUsagesProvider.getDescriptiveName() are called to determine how the element should be presented to the user.
-
For every file containing the searched words, the IDE builds the PSI tree and recursively descends that tree. The text of each element is broken into words and then scanned. If the element was indexed as an identifier, every word is checked to be a PsiReference resolving to the element the usages of which are searched. If the element was indexed as a comment or literal and the search in comments or literals is enabled, it checks if the word is equal to the name of the searched element.
-
After the usages are collected, results are shown in the usages pane. The text shown for each found element is taken from the FindUsagesProvider.getNodeText() method.
To have the title of the found element be correctly displayed in the title of the Find Usages toolwindow, you need to provide an implementation of the ElementDescriptionProvider interface. The ElementDescriptionLocation passed to the provider in this case will be an instance of UsageViewLongNameLocation.
Example: ElementDescriptionProvider for Properties language plugin


Search
Preparing search index...


I was born in Liaocheng, Shandong province, China in 1997. I received B.Eng. and M. Eng degrees in Software Engineering of Liaocheng University, China in 2020 and 2023, respectively. Now, I am pursuing my ph. D. degree in School of Software Engineering, South China University of Technology.
My Ph.D's supervisor is Prof. Yi Xiang. My master's supervisor is A.P. Yuyan Han.
My research interests include intelligent optimization algorithms and their applications (smart manufacturing, smart shop, smart computing, smart grid, iterative greedy algorithms, multi-objective optimization algorithms, evolutionary algorithms, and reinforcement learning).
I have published 9 academic papers in multiple internationally renowned journals such as *IEEE Transactions on Emerging Topics in Computational Intelligence*, *Swarm and Evolutionary Computation*, *Expert Systems with Applications*, and *Knowledge based Systems*. Please refer to my Google Scholar page for details.
You can contact me via emails: 987352978@qq.com(recommend<EMAIL_ADDRESS>✨ News
- 2023.05: 🎉 My paper entitled: "Energy Efficient Iterative Greedy Algorithm for the Distributed Hybrid Flow Shop Scheduling with Blocking Constraints" has been accepted as a regular paper at ***IEEE Transactions on Emerging Topics in Computational Intelligence***. More details can be found at Publications.
- 2022.12: 🎉 I won the Third Prize for Innovation Achievements of Graduate Students in Shandong Province.
🏫 Educations
- 2023.09 ~ 2027.07, PhD.Eng. Student in School of Software Engineering, South China University of Technology
- 2020.09 ~ 2023.07, M.Eng. Student in Schoold of Computer Science and Technology, Liaocheng University
- 2016.09 ~ 2020.07, B.Eng. student in School of Computer Science and Technology, Liaocheng University
📖 Publications
📝 Regular Papers
- Energy Efficient Iterative Greedy Algorithm for the Distributed Hybrid Flow Shop Scheduling with Blocking Constraints. Haoxiang Qin, Yuyan Han✉, Qingda Chen, Ling Wang, Yuting Wang, Junqing Li, and Yiping Liu. IEEE Transactions on Emerging Topics in Computational Intelligence, Accepted, 2023.[DOI: 10.1109/TECI.2023.3271331][PDF], Impact Factor: 4.851, Q2
- Intelligent Optimization Under Blocking Constraints: A Novel Iterated Greedy Algorithm for the Hybrid Flow-Shop Group Scheduling Problems. Haoxiang Qin, Yuyan Han✉, Yuting Wang✉, Yiping Liu, Junqing Li, and Quanke Pan. knowledge-based systems, vol.258, no. 109962, pp.1-24, 2022. [DOI: 10.1016/j.knosys.2022.109962][PDF], Impact Factor: 8.139, Q1
- A collaborative iterative greedy algorithm for the scheduling of distributed heterogeneous hybrid flow shop with blocking constraints. Haoxiang Qin, Yuyan Han✉, Yiping Liu, Junqing Li, Quanke Pan, Xue Han. Expert Systems with Applications, vol.201, no. 117256, pp.1-15, 2022, [10.1016/j.eswa.2022.117256][PDF] , Impact Factor: 8.665, Q1
- An improved iterated greedy algorithm for the energy-efficient blocking hybrid flow shop scheduling problem. Haoxiang Qin, Yuyan Han✉, Biao Zhang, Leilei Meng, Yiping Liu, Quanke Pan, Dunwei Gong. Swarm and Evolutionary Computation, vol.69, no. 100992, pp.1-18, 2021.[10.1016/j.swevo.2021.100992][PDF], Impact Factor: 10.267, Q1
- A double level mutation iterated greedy algorithm for blocking hybrid flow shop scheduling. Haoxiang Qin, Yuyan Han✉， Qingda Chen， Junqing Li， Hongyan Sang. Control and Decision, vol.37, no. 9, pp.2323-2332, 2021. [10.13195/j.kzyjc.2021.0607] [PDF], EI, Chinese authoritative journals
- An effective local search algorithm with restart strategy for energy-efficient distributed blocking flowshop scheduling problem with setup times. Xue Han, Yuyan Han✉, Biao Zhang, Haoxiang Qin, Junqing Li, Yiping Liu, Dunwei Gong. Applied soft computing, vol.129, no. 109502, pp.2323-2332, 2022. [10.1016/j.asoc.2022.109502] [PDF], Impact Factor: 8.263, Q1
💬 Conference Papers
- Adapting a reinforcement learning method for the distributed blocking hybrid flow shop scheduling problem. Haoxiang Qin, Yuting Wang✉, Yuyan Han✉, Qingda Chen, Junqing Li.The 5th Asian Conference on Artificial Intelligence Technology (ACAIT), Haikou, China, pp.751-757, 2021. [10.1109/ACAIT53529.2021.9731228] [PDF]
- A quick and effective iterated greedy algorithm for energy-efficient hybrid flow shop scheduling problem with blocking constraint. Haoxiang Qin, Yuyan Han✉, Junqing Li, Hongyan Sang, Qingda Chen. 2021 11th International Conference on Information Science and Technology (ICIST), Chengdu, China, pp.325-331, 2021. [10.1109/ICIST52614.2021.9440648] [PDF]
- An improved iterated greedy algorithm for the distributed flow shop scheduling problem with sequence-dependent setup times. Xue Han, Yuyan Han✉, Yiping Liu, Quanke Pan, Haoxiang Qin, Junqing Li. 2021 11th International Conference on Information Science and Technology (ICIST), Chengdu, China, pp.332-340, 2021. [10.1109/ICIST52614.2021.9440591][PDF]
🎖 Honors and Awards
- 2022.12 Third Prize for Innovation Achievements of Graduate Students in Shandong Province.
- 2022.05 Outstanding student at Liaocheng University.
- 2020.08 Outstanding student of the International Graduate School of Artificial Intelligence.
📚 Project Experience
- 2022.09-2025.12 Guangyue Youth Scholar Innovation Talent Program support received from Liaocheng University，LCUGYTD2022-03，Key member
- 2019.01-2022.12 National Natural Science Foundation of China，Intelligent and optimal scheduling theory and method for multi-line surface mount shop（Number：61973203），member
- 2019.01-2022.12 National Natural Science Foundation of China，An evolutionary algorithm for solving multi-objective constrained optimization problems in continuous environments（Number：61966012），member
- 2019.01-2021.12 National Natural Science Foundation of China，Evolutionary optimization algorithm for multi-modal and multi-objective hybrid flow scheduling（Number：61803192）, member
🙂 Hobbies and Interests
👀 Research Interests
- Shop Scheduling (Hybrid Flow Shop，Blocking Flow Shop, Distributed Scheduling，Group, etc)
- Electric Scheduling（Smart Grids，ERM Power System Optimization，Uncertain，Risk Factor, etc）
- Intelligent optimization algorithms（Meta heuristics, such as iterative greedy algorithms, genetic algorithms, differential evolution algorithms, etc; Heuristic algorithms such as NEH algorithm, MME algorithm, etc）
- Multi-objective optimization, constrained multi-objective optimization (NSGA-II algorithm, MOEA/D algorithm, Meme algorithm)
- Reinforcement learing
- Route Planning
🗺 Daily Interests
- Like to travel ✈🏞🏖
- Lift, work out, and stay fit 🏋♂🏃
- Painting, Art, and I like secondary anime, movies, as well as American and Japanese dramas 🖌📺
- Read, like to read all kinds of books 📗📘
- Handicrafts, pet breeding 🐶🐱🦜
- Learn various languages 🗣
🏨 Academic Activities
- 2022.08，The 5th Academic Conference on Intelligent Optimization and Scheduling, with two papers presented in poster format, Taiyuan, Shanxi.
- 2021.06，The 4th Conference on Intelligent Optimization and Scheduling, Changsha, Hunan.
- 2022.10, The 3rd Conference on Intelligent Optimization and Scheduling, Nanning, Guangxi.
👥 Cooperating Members
---Graduate Student tutors---
----Paper co-authorship---
-💻 Internships
- None.


Word Clock
Word clock contains a grid of letters and lights up corresponding letters to form the words that display the current time. The project is currently in its final stages in assembly, we can't wait for it to be finished.
Word clock contains a grid of letters and lights up corresponding letters to form the words that display the current time. The project is currently in its final stages in assembly, we can't wait for it to be finished.
IEE members are busy preparing to compete in the Southeast Con 2017 hardware competition, wish them luck! You can read more about the competition here.
Our senior advisor Tom is spearheading the development of the chess playing robot. The robot uses a gantry crane system to move its claw on the chess board to pick up and drop game pieces.
Last year Harvey created a simple prototype of the BB-8 Robot that can be remotely controlled. However that prototype was missing the second ball that acted as BB-8's head. After Southeast Con, we are planning to finish the project to wrap up our year.
The Laser Harp was designed as a means of promoting cross-discipline engineering by creating a series of musical instruments that converted readings from the breaking of laser beams into musical notes.
Duke IEEE constructed a drink maker to show off at Duke’s Founders’ Day event in 2014. The drink maker was controlled using Bluetooth communication from a phone to measure out and mix certain ratios of ingredients to make a fantastic beverage. President Brodhead was the first person to try it out!


Could not update Wallet
[Tap to retry]
Scan status finished with error
[Tap to retry]
{{index.totalBalanceStr }}
Opening Wallet...
Updating Status...
Updating Balance...
Updating Pending Transactions...
Scanning Wallet funds...
Recreating Wallet on BWS...
{{index.totalBalanceAlternative}} {{index.alternativeIsoCode}}


Let's go straight into an example. We'll create a small "Hello, World!" program. The end result shall look as follows:
package com.foo.myapp; import java.lang.String; import java.lang.System; public class Main { public static void main(String pArgs) { System.out.println("Hello, world!"); } }
Okay, no surprises. Now, here 's the generator
public void generateHelloWorldJava(File pTargetDir) { final JSGFactory factory = JSGFactory.create(); final Source s = factory.newSource("com.foo.myapp.Main").makePublic(); final Method mainMethod = s.newMethod("main").makePublic().makeStatic(); mainMethod.parameter(JSGQName.STRING_ARRAY, "pArgs"); mainMethod.body().line(System.class, ".out.println(", q("Hello, world!"), ");"); // The class has been created, now have it written to disk: factory.writeTo(new File("target/generated-sources/myapp"); }
Having seen the example, let's break it down into the relevant parts:
The first line is about creating a factory.
final JSGFactory factory = JSGFactory.create();
The factory is an instance of JSGFactory. It is an object, that you will rarely notice, unless you are generating a real lot of Java source files. The purpose of the factory is basically to collect all the generated sources, so that you may persist them at a later point in one go.
The factory is being used to create Source objects. These objects are basically representations of a Java source file, which is being generated. For every Java source file, that you want to generate, you must create a Source object. Creating a Source object works like this:
final Source s = factory.newSource("com.foo.myapp.Main").makePublic();
The newSource method accepts a single argument, which is the fully qualified class name of the generated Java class. (Fully qualified = Package name, plus class name. In our example, we'll generate a class named Main in the package com.foo.myapp. The Source object is a builder: In other words, it is configured by invoking other methods on it, which return the Source object. In the example, we want the generated class to be public. So, we invoke the method makePublic on it.
The next line uses the source builder to create a new method, named "main". By creating the method, we do in fact create another builder, so the creation looks like this:
final Method mainMethod = s.newMethod("main").makePublic().makeStatic();
The methods makePublic, and makeStatic are being invoked on the method builder, declaring that the method should be "public", and "static".
The method builder is also used to add parameters to the method:
mainMethod.parameter(JSGQName.STRING_ARRAY, "pArgs");
Note the use of the builtin constant JSGQName.STRING_ARRAY to specify the parameter types. Such constants exist for a lot of commonly used types, including java.lang.Integer, java.lang.Long, java.lang.Boolean, java.lang.Object, java.lang.String, java.util.List, java.util.Map, and the primitive types. For other types, see the dedicated document.


---
layout: simple
---
Pictures
Grapes - Red - Seedless - Sold by the Bag - Estimated Bag Weight 2 Pounds $1.69/lb
Pickup $3.38
Delivery $3.38
Add to cart
Avocado - Small
Pickup $0.89 each
Delivery $0.89 each
Add to cart
Apple - Red Delicious - Large
Pickup $0.97 each
Delivery $0.97 each
Add to cart
Beef Choice Boneless Top Loin Strip Steak (1 Steak)
Pickup $7.00 each
Delivery $7.00 each
Add to cart
Salmon Atlantic Fillet (Fresh Farm Raised) (Service Counter)
Pickup $9.37 each
Delivery $9.37 each
Add to cart
Harmony Bouquet Bronze/ Purple/ Hot Pink Theme B
Pickup $9.37 each
Delivery $9.37 each
Add to cart
Top


The only thing that drives our car, is our Passion.
IITH Racing is a team of Engineering students from IIT Hyderabad who shares a passion for Automobiles and work into designing, building and testing an All-Terrain Car. Making ATV better and team stronger every year. This team was founded in year 2013 and since then, we have been participating in BAJA SAE India and competing against teams from all over India.
BAJA SAE India is a student competition that involves designing, Engineering , Planing, Manufacturing and racing ALL-TERAIN Vehicles. The competition Goal include safety, good engineering practice, engineering design, and education of participating students. Each teams goal is to design and build aprototype of a rugged single seat, off-road recreational four wheel vehicle. It should be able to negotiate in all types of weather without any damage.
Frame & Ergonomics
A frame acts as the skeleton for the entire vehicle and is designed while taking care of ergonomics. It provides a rigid connection between the front and rear suspension, creates structural support for the other necessary systems and provides protection and comfort for the driver.
Suspension and Steering
Suspension acts as connecting medium between the sprung and unsprung mass of the ATV. It is crucil for the vehicles's stability.Steering system is a mechanical linkage which is helpful for a vehicle to follow the desired course.
Upsprung & brakes
Unsprung & brakes department primarily works on wheel assembly and brakes of vehicles and deals with tires,wheels, hubs, master cylinder, brakes callipers, pedals and rotars. Steering kunckle is also designed and fbricated with input from suspension & steering department.
Power Train
The Powertrain department forms the powerhouse of the vehicle. With Briggs and Stratton Engine as power source, a CVT is used as primary transmission component, and a Garbox (with differential) as a fixed, final reduction stage. Our main aim is to achieve balance between efficiency and Performance.
IITH ATV SAE 2015 is a vehicle equipted with Biggs and Stratton Engine (10 bhp) with overall length of 102 inches, and overall height of 72 inches. Having Dry Weight of 230 kg.
IITH ATV SAE 2016 is a vehicle equipted with Biggs and Stratton Engine (10 bhp) with overall length of 96 inches, and overall height of 72 inches. Having Dry Weight of 270 kg.
IITH ATV SAE 2017 is a vehicle equipted with Biggs and Stratton Engine (10 bhp) with overall length of 102 inches, and overall height of 27 inches. Having Dry Weight of 220 kg.
COMING SOON.


We have a few pieces of work below, but you are also welcome to visit our popular community pages:
We have a few pieces of work below, but you are also welcome to visit our popular community pages:
Site: Ka-Prow Bistro
Summary: This project was has been an ongoing, work-in-progress for a couple of years. I do not maintain the site anymore, but help from time to time with blog articles, photography and minor changes.
List of responsibilities:
Site: Learn English with Drew
Summary: Cerebral Ideas was hired to design and develop a CMS (content management system) that would allow the client to build a feature rich English learning site. The initial launch version is available above; the final version was altered by my client after hand-off.
List of responsibilities:
Site: Transform Blog
Summary: Cerebral Ideas was hired to design and develop a Wordpress blog for a prominent business speaker. The objective was to present David McNally in a warm, personal style while providing a good reading experience using a platform that allowed independent maintainability by the client.
List of responsibilities:
Site: Unavailable
Summary: Cerebral Ideas was initially brought in to design an enterprise-level web-application for a patient accounting system for education. Then, after the initial design & prototyping phase, our responsibilities were extended to developing the application's client-side in a client-server architecture. This application is still in development and is behind a login, so it is unavailable for sharing.
List of responsibilities:
Site: Unavailable
Summary: Design and engineer the user-experience for a suite of applications that will be used within a web-based intranet. This web-application is responsible for heavy data management and uses very large, complex forms and UI/Ix tools. This project is still in development, and it too is behind a login.
List of responsibilities:


|
<%
var district = _(rc).filter(function (x) { return x.type === "DISTRICT";});
var transit = _(rc).filter(function (x) { return x.type === "TRANSIT CORRIDOR";});
var business = _(rc).filter(function (x) { return x.type === "BUSINESS CORRIDOR";});
%>
<% if ( district.length > 0 ) { %>
This property is located in the <%= district[0].name %> Post Construction District.
<% } %>
<% if ( business.length > 0 ) { %>
This property is located within a Distressed Business District and
<% } else { %>
This property is not located within a Distressed Business District and
<% } %>
<% if ( transit.length > 0 ) { %>
is located within a Transit Station Area.
<% } else { %>
is not located within a Transit Station Area.
<% } %>
<% if ( business.length > 0 || transit.length > 0) { %>
PCCO mitigation options apply. For more information, please call<PHONE_NUMBER>.
<% } %>
|


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/Extra.20instance.20makes.20exact_dec_trivial.20fail.html ---
Here's a simple proof by exact_dec_trivial
:
import data.list.basic def foo (n : nat) : Prop := n = 0 instance : decidable_pred foo := begin intro n, simp [foo], apply_instance end example : ∀ n ∈ [0], foo n := by tactic.exact_dec_trivial
The proof succeeds because the instance decidable_forall_mem {p : α → Prop} [decidable_pred p] (l : list α) : decidable (∀ x ∈ l, p x)
is available. Although not necessary, having an extra instance of this type does not affect the proof:
import data.list.basic def foo (n : nat) : Prop := n = 0 instance : decidable_pred foo := begin intro n, simp [foo], apply_instance end instance bar {α} {p : α → Prop} [decidable_pred p] (l : list α) : decidable (∀ x ∈ l, p x) := decidable_of_iff _ list.all_iff_forall_prop example : ∀ n ∈ [0], foo n := by tactic.exact_dec_trivial
But if you add a slightly different instance of the same type:
import data.list.basic def foo (n : nat) : Prop := n = 0 instance : decidable_pred foo := begin intro n, simp [foo], apply_instance end instance baz {α} {p : α → Prop} [decidable_pred p] (l : list α) : decidable (∀ x ∈ l, p x) := begin cases l, apply decidable.is_true, intros x h, cases h, rw list.forall_mem_cons, apply and.decidable, end example : ∀ n ∈ [0], foo n := by tactic.exact_dec_trivial
Then exact_dec_trivial
doesn't work anymore. What's the difference between bar
and baz
that causes this?
If you set the option pp.proofs
to true and #print baz
, you're going to see a proof term. Part of it is:
eq.mpr (baz._proof_2 l_hd l_tl) and.decidable
I'm wondering if, with baz._proof_2
being opaque, eq.mpr
can't unfold it to do recursion on it.
@Mario Carneiro ?
Actually, now that I look more closely at baz._proof_2
, I see that it refers to propext
which is an axiom it cannot use for computation.
don't use tactics for definitions...
I think there's a similar issue with functions defined via nat.strong_rec_on
that the kernel/VM cannot unfold proofs
Never use rw
or cast
to construct decidable
instances
use decidable_of_iff
instead (you can then prove the iff statement however you want)
This is important because decidable_of_iff
does not use cast
to get from one type to another, it pattern matches on one and uses the iff statement to get to the other
If you use rw
, it will cast across propext
and the resulting term will get stuck in reduction, even when it should be provable
This should be pinned or some such, these are impossible to debug for me. The last advice I got wrt. looking into #reduce
was to put a breakpoint in C++ code :-/.
here's the important part of the example:
set_option pp.implicit true #reduce @baz _ foo _ [0] -- @eq.rec Type (decidable (0 = 0 ∧ ∀ (x : ℕ), false → x = 0)) (λ (_x : Type), _x) -- (@is_true (0 = 0 ∧ ∀ (x : ℕ), false → x = 0) _) -- (decidable (∀ (x : ℕ), x = 0 ∨ false → x = 0)) -- (propext _)
it's stuck on a reduction of propext
(example slightly unelided for clarity)
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


What if I were to make a semantic map for the concept ‘Bloc? A few ideas come to mind immediately: unique experience,...
 These see...
Read more »
Consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra n...
Read more »
This is an example of a post which includes a feature image specified in the front matter of the post. The feature im...
Read more »
Jeykll supports the use of Markdown with inline HTML tags which makes it easier to quickly write posts with Jekyll, w...
Read more »


--- layout: post title: Earthquake in Delhi !? date: 2010-02-25 01:18:29.000000000 +01:00 categories: - linux tags: - delhi - earthquake - news status: publish type: post published: true meta: _edit_last: '1' _oembed_79d21305723a1ee97ae17ffb8f625e6c: '{{unknown}}' _oembed_13e11ab08558d43a7786fef5bbd3ba2a: '{{unknown}}' _oembed_c199487d1af59f336d06068ac72eda2b: '{{unknown}}' _oembed_ebc7b8490f178adbe5d6e862b5103f1b: '{{unknown}}' _oembed_7c045717788149edba18afbee71f8c2b: '{{unknown}}' author: ---
UPDATE: Its official Now! A small quake of Magnitude 2.5 hit Rohtak region in Haryana
PRELIMINARY EARTHQUAKE REPORT
Date of Occurrence: 25/02/2010
Time: 00:51:52.0 HRS(IST)
Intensity: SLIGHT
Magnitude: 2.5
Epicentre: Lat. 28.6°N Long. 76.9°E
Region: DISTRICT ROHTAK, HARYANA
There was another earthquake in Japan as well.
Earthquake Information (Information about Seismic Intensity at each site)
Issued at 08:39 JST 25 Feb 2010
Occurred at (JST) Latitude
(degree) Longitude
(degree) Depth Magnitude Region Name
08:35 JST 25 Feb 2010 35.7N 139.5E 30km 3.2 Tokyo-to Tama-tobu
Apparently there was a earthquake in delhi on February 25th, 2010 around 0050 Hrs. There are no confirmed news as of now. Tweeples are tweeting away on twitter about the earthquake. Non of the TV News channel have anything on them as of now. They are all showing Sachin's 200 quake or some other news.
Keep checking for more updates.
Kaveri Ahuja was one of the first tweeples to report it on twitter while the rest of Delhi Tweeples join the crowd.
http://twitter.com/#search?q=earthquake%20delhi
Earthquake!! I felt an EARTHQUAKE!
Delhi 12:51 AM EARTHQUAKE. Birds & animals are shreiking outside!
Kaveri further states:
The epicentre was NOT Delhi. Probably not even India. I felt the shock wavr run from my foot to toe. #Earthquake
And she is an experienced one :( :
YES. Im VERY SURE. It was an EARTHQUAKE. Epicentre cant be here. But it was a bad one somewhere. I have felt many in my life Latur, Kashmir.
Though seems it wasnt that huge. People in Noida are saying they didnt feel anything.
Though seems otherwise in Gurgaon
Will keep you updated on it.
UPDATE: Twitter is dying down on earthquake tweets in delhi. Seems it was a small one. Hope all stays well.
UPDATE 2: Apparently it wasn't just Delhi but some in Uttaranchal as well.
Mild earthquake in Bageshwar Uttaranchal. Some people in South Delhi felt tremors. Seems nothing major.


Built to the highest quality standards in the industry to withstand the most demanding facility and studio environment, the commercial line of Spinner® bikes is designed to withstand the rigors of thousands of classes over several years. Precor®, the world-wide leader in quality personalized fitness solutions, is the exclusive manufacturer of the Commercial Series of Spin® bikes.
There are no products listed in this subcategory.
{{/if}}


Hello Peeps! The name is Demond Bivins. I'm an ambitious, self-taught coder looking to work with other talented IT professionals in creating, websites, apps and software. I’m eager to learn more, attentive and looking to thrive in a productive and focused environment. After getting an associates degree in web design, I decided to become a web developer since I became more interested in learning code. I'm currently enrolled Free Code Camp and have built a few projects that I'm very proud of.


Databases
From data model to database
labict.be
Step 1 - Creating a relation for each entity
Step a - Create table for each entity
- Use the same name of the entity for the table.
- Pick the primary key (identity of entity)
- Designated using a key symbol.
- The ideal primary key is short, numeric, and fixed.
- Surrogate keys meet the ideal, but have no meaning to users.
Step b - Specify Candidate Keys
- The terms candidate key and alternate key are synonymous.
- Candidate keys are unique determinants of a relation.
- Some use AKn.m notation, where n is the number of the alternate key, and m is the column number in that alternate key.
Step c - Specify Column Properties: Null Status
- Null status indicates whether or not the value of the column can be NULL.
- An alternate key can have a null status of NULL.
- If a value is however specified, then it must be unique !
Step c - Specify Column Properties: Data Types
- Generic data types:
- CHAR(n) and VARCHAR(n)
- DATE, TIME and DATETIME
- MONEY
- INTEGER
- DECIMAL
Reference - Sql Server 2008 Data Types
Reference - MySQL 5.1 Data Types
Reference - MySQL 5.1 Data Types
Reference - MySQL 5.1 Data Types
Step d - Specify Column Properties: Default Value
- A default value is the value supplied by the DBMS when a new row is created and the attribute is not specified by the user.
- The most common default value is NULL.
- Other common default values are
- A specified string (ex. "New Employee")
- The current date or time
- The result of triggers
- Default value is determined by some logic or is calculated based on other values.
- We see database triggers later.
Step d - Specify Column Properties: Default Value
- Default values can be documented as followed.
Step d - Specify Column Properties: Data Constraints
- Data constraints are limitations on data values:
- Domain constraint: column values must be in a given set of specific values.
- Examples:
- Gender: Male or Female
- Employee contract: part-time, full time, ...
- Range constraint: column values must be within a given range of values.
- Examples:
- Birthdate: between 1920 and NOW()
Step d - Specify Column Properties: Data Constraints
- Data constraints are limitations on data values:
- Intrarelation constraint: column values are limited by comparison to values in other columns in the same table.
- Examples:
- Date of contract renewal > date of current contract
- Interrelation constraint: column values are limited by comparison to values in other columns in other tables.
- Examples:
- Referential integrity constraints on foreign keys.
Step d - Specify Column Properties: Verify normalization
- The tables should be normalized based on the data model.
- Verify that all tables are:
- We see this later
Step 2 – Creating associations (relationships)
Step 2 – Creating associations (relationships)
- Associations between entities are realized by adding foreign keys (which point to the primary key of the other table in the relationship).
- Start with associations between strong entities.
- Weak entities are entities which cannot exist on their own.
- Weak entities are entities which cannot exist on their own.
Step a – Strong Entity Associations - 1:1
- Place the key of one entity in the other entity as a foreign key.
- Minimum cardinality considerations may be important.
- O-M will require a different design than M-O.
- One design will be very preferable.
Step a – Strong Entity Associations - 1:1
- Enforcement of maximum cardinality:
- Foreign key is indicated as candidate key to force uniqueness
Step a – Strong Entity Associations - 1:1
- There is no preferred implementation (unless logically selected based on business logic).
- There would have been a preferred implementation however in the case of a M-O or O-M association (see book page 211 – Opmerking).
Step a – Strong Entity Associations - 1:N
- Place the primary key of the table on the one side of the relationship into the table on the many side of the relationship as the foreign key.
- The one side is the parent table and the many side is the child table, so "place the key of the parent in the child."
Step a – Strong Entity Associations - 1:N
- Who else thinks there is something wrong with this example?
Step a – Strong Entity Associations - N:M
- In an N:M strong entity relationship there is no place for the foreign key in either table.
- A COMPANY may supply many PARTs.
- A PART may be supplied by many COMPANYs.
Step a – Strong Entity Associations - N:M
- The solution is to create an intersection relation or association relation that stores data about the corresponding rows from each entity.
- An intersection relation consists only of the primary keys of each relation which form a composite primary key.
- An association relation consists of the primary keys of each relation which form a composite primary key with extra attributes.
- Each relation's primary key becomes a foreign key linking back to that relation.
Step a – Strong Entity Associations - N:M
Step a – Strong Entity Associations - N:M
- Notice the cardinalities
- Weak and ID-dependant => mandatory
- Keep original cardinalities on side of intersection / association relation
Step a – Strong Entity Associations - N:M
Step a – Strong Entity Associations - N:M
Step a – Strong Entity Associations - N:M
- Higher order relationships can be implemented using binary relationships combined with intersection/association relations.
- Associations between multiple entities are possible.
- Each entity is associated with the association relation using a binary association.
Step a – Strong Entity Associations - N:M
Overview of intersection and association relations
- An intersection relation
- Holds the relationships between two strong entities in an N:M relationship
- Contains only the primary keys of the two entities
- As a composite primary key
- As foreign keys
- An association relation
- Has all the characteristics of an intersection relation
- PLUS it has one or more columns of attributes specific to the associations of the other two entities
Step b – Relationships with ID-Dependent Entities
- Three typical uses for ID-Dependent Entities:
- Representing N:M Relationships
- The Multivalued Attribute Pattern
- Archetype/Instance Pattern
Step b – The Multivalued Attribute Pattern
- Many entities have attributes that are multivalued.
- One example is a contact person for a company. One company can have multiple contacts. Creating a new row in the company entity for each contact would create a multivalued dependency.
- The solution to this is store the contacts in a separate relation.
Step b – The Multivalued Attribute Pattern
Step b – The Archetype/Instance Pattern
- Many entities have attributes that are multivalued.
- One example is a contact person for a company. One company can have multiple contacts. Creating a new row in the company entity for each contact would create a multivalued dependency.
- The solution to this is store the contacts in a separate relation.
Step b – The Archetype/Instance Pattern
- Used when you have a number of objects (instances) that are bound to some blueprint like model (archetype).
Step b – The Archetype/Instance Pattern
Step b – The Archetype/Instance Pattern
Step c – Subtype Relationships
- Primary keys of the subtypes are the same as of the super type.
Step 3 - Specifying the logic for enforcing the minimum cardinality
Minimum Cardinality
- Relationships can have the following types of minimum cardinality:
- O-O: parent optional and child optional
- M-O: parent mandatory and child optional
- O-M: parent optional and child mandatory
- M-M: parent mandatory and child mandatory
- We will use the term action to mean a minimum cardinality enforcement action.
- No action needs to be taken for O-O relationships.
Cascading Updates and Deletes
- A cascading update occurs when a change to the parent’s primary key is applied to the child’s foreign key.
- Surrogate keys never change and there is no need for cascading updates when using them.
- A cascading delete occurs when associated child rows are deleted along with the deletion of a parent row.
- Strong entities generally do not cascade deletes.
- Weak entities generally do cascade deletes.
Step a – Parent Is Required (M-O)
- A publisher may have published a book.
- A publisher can publish many books.
- A book must be published by a publisher.
- A book can only be published by one publisher.
- Publisher is the parent while books are the children.
Step a – Parent Is Required (M-O)
Step a – Parent Is Required (M-O)
- Implementing actions for M-O associations
- Make sure that:
- Every child has a parent.
- Operations never create orphans.
- The DBMS will enforce the action as long as:
- Referential integrity constraints are properly defined.
- The foreign key column has a null status of 'NOT NULL'.
Step a – Parent Is Required (M-O)
- When the child entity is a strong entity cascaded deletion is mostly forbidden.
- Children have to be assigned another parent before the parent can be deleted.
- In case of weak child entities cascaded deletion is a good option.
- When the parent is deleted most of the time the weak child information is useless anyway.
Step b – Child Is Required (O-M)
- A woman must have a pair of shoes.
- A woman may have many shoes.
- A pair of shoes may be owned by a woman.
- A pair of shoes can by owned by one woman.
- The parent is the woman, the shoes are the children.
Step b – Child Is Required (O-M)
- The parent is the woman, the shoes are the children.
- A lot harder to enforce! Need for triggers
Step b – Child Is Required (O-M)
- Implementing actions for O-M associations
- The DBMS does not provide much help.
- Triggers or other application codes will need to be written.
- A trigger is a stored program that is executed by the DBMS whenever a specified event occurs on a specified table or view.
- A trigger is defined based on a table action:
- on delete
- on insert
- on update
Step c – Parent & Child are Required (M-M)
- A database which holds legendary highscores of players.
- A player must have a highscore.
- A player may have many highscores.
- A highscore is owned by a single player.
- Player is the parent, highscores are the children.
Step c – Parent & Child are Required (M-M)
- This is extremely hard to enforce and can only be enforces by specialized triggers.
- Because of dependencies triggers can deadlock each other.
- If possible we place this logic in higher application layers.
Step c – Parent & Child are Required (M-M)
- Implementing actions for M-M associations
- The worst of all possible worlds
- Especially in strong entity relationships.
- All actions must be applied simultaneously.
- Complicated and careful application programming will be needed.
- In relationships between strong and weak entities the problem is often easier when all transactions are initiated from the strong entity side.
Step c – Parent & Child are Required (M-M)
- Implementing actions for M-M (with weak children)
- In relationships between strong and weak entities it is often possible to ignore the action on the children.
Step c – Parent & Child are Required (M-M)
- Implementing actions for M-M (with weak children)
- In relationships between strong and weak entities it is often possible to ignore the action on the children.
Step c – Parent & Child are Required (M-M)
- Implementing actions for M-M (with weak children)
- This is because a phone contact will mostly be added, removed or updated from the company context.
- This will for example be managed by a frontend web application.
- Actions on parents will be required.
- When adding a company we can first create a phone contact with null values.
- Deletion actions are mostly cascaded.
Enforcing Minimum Cardinality
Remember this ?
- 1:1 Strong Entity Relationships
- Preferable implementation?
Remember this ?
- 1:1 Strong Entity Relationships
Tips
- Child references the parent!
- First of all, the parent is table which is referenced by FK from child. So you can't say that your parent table references the child: it's not correct.
- Secondly, 1:1 relations can be made through:
- Primary Keys in both tables
- Primary Key in parent and Unique Foreign Key in child


[gecode-users] missing doc for element constraint
Guido Tack
tack at gecode.org
Thu Aug 5 10:56:46 CEST 2010
Denys Duchier wrote:
> Guido Tack <tack at gecode.org> writes:
>
>> These element constraints are for 2d matrices of width w and height h encoded in the IntVarArgs a.
>
> that's the missing information. the constraint is then actually:
> a(x,y) = z
> or is it:
> a(y,x) = z
> for a matrix a or width w and height h. It would be really nice to make
> this clear.
The constraint is a[x+w*y] = z, and w*h must be a.size(), just as the documentation says.
I don't want to discuss whether that's a(x,y) or a(y,x) because there's been enough confusion about the Matrix class already... In programming terms (as opposed to mathematics), a is a 2d array in row-major order, and z is constrained to be the element in row y and column x. I'll add that to the documentation.
The minimodel library contains element constraints on Matrix objects, which of course internally use these post functions.
Cheers,
Guido
--
Guido Tack, http://people.cs.kuleuven.be/~guido.tack/
More information about the users
mailing list


We visualize dogs!
- unleash scalable e-services
- exploit scalable bandwidth
- scale mission-critical technologies
- syndicate proactive e-markets
- extend open-source systems
- orchestrate best-of-breed e-tailers
- benchmark killer platforms
- synergize integrated networks
- recontextualize ubiquitous supply-chains
- incubate robust infomediaries
- scale efficient methodologies
- envisioneer e-business action-items
- revolutionize global metrics
- leverage user-centric technologies


Homework 4
The url 'https://jsonplaceholder.typicode.com/users' has a list of users in JSON format. Please type the url in your browser to see the data. This assignment asks you to use two APIs to retrieve data fromteh url. The first API is the old XMLHttpRequest and its callback syntax. The second is the new fetch method and its promise syntax. When access your web page, just display the following two results (in italic blue format) - format the results whatever you want. Tips: use Chrome dev tools to debug / test your code interactively.
Callback
Use the Old XMLHttpRequest method and its callback syntax to retrive the data from the above url and display the list of user emails - the results are sorted by alphabet order.
Promise
Use the new fetch method and its promise snytax to display the list of user's usernames. The result is sorted by the username length - shortest first.


Nelson Mandela
Champion of Freedom
Here's a timeline of Nelson Mandela's life
- 1918 - Born in Mvezo, Umtata
- 1927 - Was adopted by Jongintaba Dalindyebo after his father died
- 1939 - Entered the elite University of Fort Hare, the only Western-style higher learning institute for South African blacks at the time
- 1944 - Joined the African National Congress (ANC) and worked with fellow party members, to establish its youth league, the ANCYL
- 1944 - Married his first wife, Evelyn Ntoko Mase
- 1952 - Helped lead the ANC’s Campaign for the Defiance of Unjust Laws, traveling across the country to organize protests against discriminatory policies
- 1952 - Opened South Africa’s first black law firm, which offered free or low-cost legal counsel to those affected by apartheid legislation
- 1956 - Was arrested and went on trial for treason
- 1957 - Divorced his first wife, Evelyn Ntoko Mase after having four children together
- 1958 - Married Winnie Madikizela-Mandela, his second wife
- 1961 - Was acquitted of all charges
- 1961 - Co-founded and became the first leader of Umkhonto we Sizwe (“Spear of the Nation”), also known as MK, a new armed wing of the ANC
- 1962 - Was charged with inciting workers' strikes and leaving the country without permission
- 1964 - Mandela and two of his co-accused were found guilty on all charges and sentenced to life imprisonment rather than death
- 1964 - Initially classified as the lowest grade of prisoner, Class D, he was permitted one visit and one letter every six months
- 1969 - An escape plan was developed but it was abandoned after being infiltrated by an agent of the South African Bureau of State Security (BOSS)
- 1970 - Met British Labour Party MP Dennis Healey
- 1975 - Mandela had become a Class A prisoner, allowing greater numbers of visits and letters
- 1978 - Celebrated his 60th birthday in prison
- 1982 - Transferred to Pollsmoor Prison in Tokai, Cape Town
- 1988 - Moved to Victor Verster Prison near Paarl
- 1990 - Released from prison
- 1992 - Announced his seperation from his wife after she was sentenced to prison
- 1994-1999 - Became South Africa's First Black President
- 2004 - Retired from public life because his health was declining
- 2013 - Died at the age of 95.
"I learned that courage was not the absence of fear, but the triumph over it. The brave man is not he who does not feel afraid, but he who conquers that fear."
-
If you have time, you should read more about this incredible human being on his Wikipedia entry


Get to know Xero is a learning module you can work through to become
familiar with the core features of the Xero platform.
- 👉 Please follow the instruction steps and complete the exercises as directed.
- ⏳ This course will take you approximately 45mins to complete.
- 💻 You can log back into the course using the course link from your email or logging into Xero at xero.com.
- 🗓 You have 45 days access to this course from the date enrolled.
- ❗ If you get stuck at any time during this course, there is free 24 hour online help available via Xero Central.
- ❓ To access the help articles on Xero Central, click the ? icon in the top right hand corner of the screen and select Get support on Xero Central.
- 🔎 Search for the topic you’d like help with
We would love your feedback.
- We hope you enjoy completing these exercises.
- And learn more about Xero! 👏
📚 One of Xero Electrical’s customers, Bayside Club phoned to request a
delivery of 11 silver light fittings. The package is ready to be sent out
and you have been asked to raise the invoice.
Looking at the price list for light fittings we can see the following:
- Silver Light Fittings - $12.50 each
- Callout Fee - $75.00 each
- Delivery Fee - $35.00 each
A 20% discount on the callout fee was offered and is to be deducted from the
price above.
Using the date 10 Feb 2021, create and approve the sales invoice. Payment
is due 7 days from job completion.
⚡ Activity 6.1
- From the Dashboard, click on the New sales invoice button.
- Complete the invoice details as follows.
- Customer: Bayside Club. Select 10 Feb 2021 as the date and +7 in the due date to create a due date of 17 Feb 2021
- Leave the invoice number as the default.
- Populate the descriptions, quantities, and unit price for the Silver light fittings and callout fee lines
- (leave the Item cell blank, and exclude the delivery fee line. We will cover this in the next step as you setup an inventory item).
- Don't forget to record a 20% discount against the callout fee.
- Code to the accounts as follows:
- Silver Light Fittings - Electrical Sales (201)
- Callout Fee - Callout Fees (208)
For the delivery fee, we will create an untracked inventory item, as this is a charge that we include on most invoices.
⚡ Activity 6.2
- On the third Invoice line, click into the Item field and select + New Item.
- Item Code: Del Fee
- Item Name: Delivery Fee
- Leave I purchase this item unticked.
- We'll populate the I sell this item section with the following details:
- Unit Price: $35 (this is a standard charge)
- Sales Account: Delivery Fees (Code 209)
- Tax Rate: leave as the default 'tax rate = No'
- Sales Description (this is what will appear on your invoices): Delivery Fee
- Leave I track this item unticked.
- Select Save
- Complete line 3 of the invoice for the Delivery Fee.
- Delivery Fee - Delivery Fee (209)
✅ Great work
📘 Learn more about Invoicing in Xero


Create new Wallet
Restore from seed
Addresses
Generate new address
Refresh balances
Rootchain balance
Childchain balance
Deposit
From address:
Token contract address (blank for ETH):
Value (wei):
wei
Send
Transfer
From address:
To address:
Token contract address (blank for ETH):
Value (wei):
wei
Send
Exit
From address:
Exit


Drag the lines left endpoint anywhere in the grey area.
Drag the lines right endpoint to any of the white circles.


The system is being developed by the Administrators at the TUM Chair of Applied Software Engineering.
It aims improve the interaction with the Mendeley platform by identifying additional document correlations such as tag based research fields and duplicates.


首先，登录https://github.com建一个仓库，名字为username.github.com，将username替换为你实际的用户名，必须使用你的用户名，这点很重要。
执行以下几个命令
git clone https://github.com/plusjade/jekyll-bootstrap.git username.github.com
cd username.github.com
rm -f .git && rm -f .gitignore
git init
git add .
git remote add origin https://github.com/username/username.github.com.git
git push origin master 之所以删除.git等文件，重新初始化仓库，是为了去掉原作者的提交信息。
等待几分钟后，访问username.github.io即可显示初始页面。
假设你已经使用gem安装jekll在本地电脑上，否则使用以下命令安装：
$ yum install ruby
$ gem install jekyll
那么你可以cd到本地git仓库中，运行以下命令：
$ cd username.github.com
$ jekyll serve
然后打开浏览器，输入http://<IP_ADDRESS>:4000 就可以看到你的博客雏形。
可以使用rake命令创建post
$ rake post title="Hello World"
rake命令会自动在_posts目录下创建一篇带有YAML段落的文章，文章名会被格式化，并带有日期。例如2016-06-12-helloworld.md
在文章的头部有如下内容:
---
layout: post
title: "Hello World"
date: 2016-06-08 17:00:12
categories: [jekyll,mood]
---
这段内容成为YAML Front Matter，Jekyll在处理这个文件时，会把它当成特殊文件处理，如果没有这段内容，Jekyll只会认为这个文件是一个静态文件，不会进行我们希望的markdown2html。
layout指明这篇文章使用哪个模板，模板文件定义在_layouts文件夹下。
categories表示这篇文章属于哪个类别，Jekyll会根据文章的类别进行归类，便于你浏览。
其实Jekyll会为每个category创建一个文件夹，然后将生成的html文件放到对应的category下.
依然是通过rake命令创建页面
Create pages easily via rake task:
$ rake page name="about.md"
Create a nested page:
$ rake page name="pages/about.md"
Create a page with a “pretty” path:
$ rake page name="pages/about"
this will create the file: ./pages/about/index.html
添加或修改完文章后，本地提交，然后推向github。
$ git add .
$ git commit -m "Add new content"
$ git push origin master
You can find and browse the latest official themes in the Theme Explorer. The theme explorer is still a work in progress; it shows full-website previews of all available themes.
Additionally, designers are free to publish their own themes as long as they are packaged appropriately. You can then use the same installation method outlined below to install the theme.
Directly browse current Theme Packages on GitHub: https://github.com/jekyllbootstrap
Install a theme by using the rake task and passing in the theme’s git url.
$ rake theme:install git="https://github.com/jekyllbootstrap/theme-the-program.git"
The installer uses git to download the Theme Package and then installs it. If you have obtained a Theme Package in another way, such as zip download, you can manually place it into your ./_theme_packages folder and then run the installer with the name of the theme.
$ rake theme:install name="THEME-NAME"
As a convenience, after the install is successful, the task will ask you if you’d like to switch to the newly installed theme. Type ‘y’ and enter to switch!
Once your themes are installed you can switch between them via rake task:
$ rake theme:switch name="the-program"
# for 0.1.0 users `rake switch_theme` still works.
Your Jekyll-Bootstrap blog can be configured by setting options within the ./_config.yml
file. You’ll note the extensive documentation provided within the file itself. Let’s go over some of these in detail:
Jekyll provides extensive customization options as to how your blog post permalinks will be generated. You can consult the format table here: Jekyll Permalinks
Jekyll-Bootstrap ships with the traditional default format for blogs:
permalink: /:categories/:year/:month/:day/:title/
Any category structure specified on a post will be included within the url, then the date, and finally the post title.
Play around with what url configuration works best for you.
All post and page urls in Jekyll-Bootstrap expect to be prepended with BASE_PATH
The BASE_PATH configuration is for special scenarios in which your blog must run from a sub-directory. The main scenario being if your blog will be hosted on a GitHub Project Page. If you are deploying this website for one of your GitHub projects you must set BASE_PATH to the name of your GitHub project.
In any case, you can leave this blank if you have defined a CNAME for your site. More info is available at: http://pages.github.com
NOTE:
When in localhost, your site will run from root “/” regardless of BASE_PATH.
Jekyll-Bootstrap ships with widget codes that enable commenting for Disqus, Intense Debate, livefyre, and Facebook Comments.
To enable commenting for your blog you will need to have setup an account with one of these providers. In the _config.yml you should see a hash named comments as shown below:
# Settings for comments helper
# Set 'provider' to the comment provider you want to use.
# Set 'provider' to false to turn commenting off globally.
#
comments :
provider : disqus
disqus :
short_name : jekyllbootstrap
livefyre :
site_id : 123
intensedebate :
account : 123abc
facebook :
appid : 123
num_posts: 5
width: 580
colorscheme: light
Choose a Provider
Set provider to the provider you intend to use. Make sure to specify your account credentials for the relevant provider within the hash named for that provider.
In the example above, the disqus provider will be used and will be provided with jekyllbootstrap as the account short_name.
Use a Custom Provider
To use a custom provider, set provider: custom
. Next create a file at this path:
./_includes/custom/comments
This file will load wherever the theme has included its comments so you can inject your own widget code via this file. If you have a provider I don’t know about, consider opening a GitHub Issue so I can include it!
Disable Comments
Set provider: false
to disable comments globally.
Disable comments for individual pages/posts by specifying comments: false
in the page/post YAML Front Matter:
---
layout: post
category : lessons
comments : false
tags : [yay]
---
Jekyll-Bootstrap ships with website analytics codes for Google, and GetClicky.
To enable analytics for your blog you will need to have setup an account with one of these providers. In the _config.yml
you should see a hash named analytics
as shown below:
# Settings for analytics helper
# Set 'provider' to the analytics provider you want to use.
# Set 'provider' to false to turn analytics off globally.
#
analytics :
provider : google
google :
tracking_id : 'UA-123-12'
getclicky :
site_id :
Choose a Provider
Set provider to the provider you intend to use. Make sure to specify your account credentials for the relevant provider within the hash named for that provider.
In the example above, the google provider will be used and will be provided with UA-123-12 as the account tracking_id.
Use a Custom Provider
To use a custom provider, set provider: custom
. Next create a file at this path:
./_includes/custom/analytics
This file will load wherever the theme has included its analytics so you can inject your own widget code via this file. If you have a provider I don’t know about, consider opening a GitHub Issue so I can include it!
Disable Analytics
Set provider: false
to disable analytics globally.
Disable analytics for individual pages/posts by specifying analytics: false
in the post/page YAML Front Matter:
---
layout: post
category : lessons
analytics : false
tags : [yay]
---


Search Name:
Save
Clear/Start New
Save/Export
Reload
Prompts
Google Results
Pages
Related Info
Social Media


MultiMona is designed to be as easy to use as possible. It is intended for domestic (or small scale merchant) users who wish to use a desktop computer for their day to day Monacoin transactions.
This guide will provide you with the first steps you should take after you have installed MultiMona so that you can be confident about how to get things done safely.
When you first open MultiMona a new, empty wallet is created for you called "multimona.wallet". In order to get you started quickly, this wallet will not have a password so it will not be encrypted.
You should now password protect your wallet.
MultiMona is very careful to maintain backups of wallets and as such it is always useful to know where your wallets are being stored.
You can always see the file location of your current wallet in the main title bar of your MultiMona window. For instance, it might say: "MultiMona - My wallet - /Users/jim/Library/Application Support/MultiMona/multimona.wallet". The file name at the end is where your wallet is stored.
Everyone likes to receive monacoin and MultiMona makes this simple.
The receiving monacoin article explains how to generate new receiving addresses and how to keep track of them.
Spending monacoin on goods and services helps to keep the Monacoin economy growing.
The sending monacoin article explains how sending monacoin to someone is done.
That's all there is to it. MultiMona will alert you if there is a newer version available and we recommend that you keep your version up to date as the developers are continuously improving it. If you encounter any problems, the main help contents provide answers to many common questions and you should have a look there first.
Here are some related articles:


Query1
(type GraduateStudent ?X)
(takesCourse ?X http://www.Department0.University0.edu/GraduateCourse0)
- This query bears large input and high selectivity. It queries about just one class and one
property and does not assume any hierarchy information or inference.
Query2
(type GraduateStudent ?X)
(type University ?Y)
(type Department ?Z)
(memberOf ?X ?Z)
(subOrganizationOf ?Z ?Y)
(undergraduateDegreeFrom ?X ?Y)
- This query increases in complexity: 3 classes and 3 properties are involved. Additionally,
there is a triangular pattern of relationships between the objects involved.
Query3
(type Publication ?X)
(publicationAuthor ?X http://www.Department0.University0.edu/AssistantProfessor0)
- This query is similar to Query 1 but class Publication has a wide hierarchy.
Query4
(type Professor ?X)
(worksFor ?X http://www.Department0.University0.edu)
(name ?X ?Y1)
(emailAddress ?X ?Y2)
(telephone ?X ?Y3)
- This query has small input and high selectivity. It assumes subClassOf relationship between
Professor and its subclasses. Class Professor has a wide hierarchy. Another feature is
that it queries about multiple properties of a single class.
Query5
(type Person ?X)
(memberOf ?X http://www.Department0.University0.edu)
- This query assumes subClassOf relationship between Person and its subclasses and subPropertyOf relationship between memberOf and its subproperties. Moreover, class Person
features a deep and wide hierarchy.
Query6
(type Student ?X)
- This query queries about only one class. But it assumes both the explicit subClassOf relationship
between UndergraduateStudent and Student and the implicit one between GraduateStudent
and Student. In addition, it has large input and low selectivity.
Query7
(type Student ?X)
(type Course ?Y)
(teacherOf http://www.Department0.University0.edu/AssociateProfessor0 ?Y)
(takesCourse ?X ?Y)
- This query is similar to Query 6 in terms of class Student but it increases in the number of
classes and properties and its selectivity is high.
Query8
(type Student ?X)
(type Department ?Y)
(memberOf ?X ?Y)
(subOrganizationOf ?Y http://www.University0.edu)
(emailAddress ?X ?Z)
- This query is further more complex than Query 7 by including one more property.
Query9
(type Student ?X)
(type Faculty ?Y)
(type Course ?Z)
(advisor ?X ?Y)
(takesCourse ?X ?Z)
(teacherOf ?Y ?Z)
- Besides the aforementioned features of class Student and the wide hierarchy of class Faculty,
like Query 2, this query is characterized by the most classes and properties in the query set and there is a triangular pattern of relationships.
Query10
(type Student ?X)
(takesCourse ?X http://www.Department0.University0.edu/GraduateCourse0)
- This query differs from Query 6, 7, 8 and 9 in that it only requires the (implicit) subClassOf
relationship between GraduateStudent and Student, i.e., subClassOf relationship between
UndergraduateStudent and Student does not add to the results.
Query11
(type ResearchGroup ?X)
(subOrganizationOf ?X http://www.University0.edu)
- Query 11, 12 and 13 are intended to verify the presence of certain reasoning capabilities
in the system. In this query, property subOrganizationOf is defined as transitive. Since
in the benchmark data, instances of ResearchGroup are stated as a sub-organization of a
Department individual and the later suborganization of a University individual, inference
about the subOrgnizationOf relationship between instances of ResearchGroup and University
is required to answer this query. Additionally, its input is small.
Query12
(type Chair ?X)
(type Department ?Y)
(worksFor ?X ?Y)
(subOrganizationOf ?Y http://www.University0.edu)
- The benchmark data do not produce any instances of class Chair. Instead, each Department
individual is linked to the chair professor of that department by property headOf. Hence this
query requires realization, i.e., inference that that professor is an instance of class Chair because
he or she is the head of a department. Input of this query is small as well.
Query13
(type Person ?X)
(hasAlumnus http://www.University0.edu ?X)
- Property hasAlumnus is defined in the benchmark ontology as the inverse of property degreeFrom,
which has three subproperties: undergraduateDegreeFrom, mastersDegreeFrom,
and doctoralDegreeFrom. The benchmark data state a person as an alumnus of a university using
one of these three subproperties instead of hasAlumnus. Therefore, this query assumes
subPropertyOf relationships between degreeFrom and its subproperties, and also requires inference
about inverseOf.
Query14
(type UndergraduateStudent ?X)
- This query is the simplest in the test set. This query represents those with large input and
low selectivity and does not assume any hierarchy information or inference.


Kaitlyn La
DBC Boot
Projects
About
Contact
This is my first bike.
This is my second bike.
This is my first bike:
Honda CBR F4i


A Day in Alearia: Logo
CardRPG: Card Elements (Unreleased)
Untitled Card Game: Cursor (Unreleased)
Rubble Town Rumble: Shop Icons (Placeholder)
Imaginari: Items (Placeholder)
Real Hand Shooter Test 1
Real Hand Shooter Test 2
Real Hand Shooter Test 3
Website Favicon
Website Folder


The knapsack problem is a particular type of integer program with just one constraint. Each item that can go into the knapsack has a size and a benefit. The knapsack has a certain capacity. What should go into the knapsack so as to maximize the total benefit? As an example, suppose we have three items as shown in Table 4, and suppose the capacity of the knapsack is 5.
The stages represent the items: we have three stages j=1,2,3. The state at stage j represents the total weight of items j and all following items in the knapsack. The decision at stage j is how many items j to place in the knapsack. Call this value .
This leads to the following recursive formulas: Let be the value of using units of capacity for items j and following. Let represent the largest integer less than or equal to a.


Enter The Animation Code
OK
Enter The Static Code
OK
EkShiksha
Physics
Change Theme
Choose Objects
Animation Code Editor
Drag/Drop Control Editor
User Control
User Display
Static Code Editor
Save Progress
Save as
Light
Change Theme
X
setBackground1
setBackground2
setBackground3
setBackground4
setBackground5
OK
Basic Info
X
Exp name:
Author name:
Submit
Change Objects
X
Drag/Drop Controller
X
ObjectName
Enter a,b,c for the equation of form ax+by+c=0
a
b
c
Submit
User Controls
X
variable name:
display name:
min:
max:
step:
on change code:
Submit
User Controls(Display)
X
Name:
Submit


Date: 17 Feb, 2015
Good Food restaurant was opened in June 1985 gaining our first award only seven months after opening. We were inspired by chef Mark Stevenson's culinary skills and career and the history of Scottish food and native cuisine.


|
prometheus-client-c
0.1.1
Prometheus client for the C programming language
|
Functions for retrieving metric samples from metrics given an ordered set of labels. More...
Go to the source code of this file.
Typedefs | |
| typedef struct prom_metric | prom_metric_t |
| A prometheus metric. More... | |
Functions | |
| prom_metric_sample_t * | prom_metric_sample_from_labels (prom_metric_t *self, const char **label_values) |
| Returns a prom_metric_sample_t*. More... | |
| prom_metric_sample_histogram_t * | prom_metric_sample_histogram_from_labels (prom_metric_t *self, const char **label_values) |
| Returns a prom_metric_sample_histogram_t*. More... | |
Functions for retrieving metric samples from metrics given an ordered set of labels.
| typedef struct prom_metric prom_metric_t |
A prometheus metric.
| prom_metric_sample_t* prom_metric_sample_from_labels | ( | prom_metric_t * | self, |
| const char ** | label_values | ||
| ) |
Returns a prom_metric_sample_t*.
The order of label_values is significant.
You may use this function to cache metric samples to avoid sample lookup. Metric samples are stored in a hash map with O(1) lookups in average case; nonethless, caching metric samples and updating them directly might be preferrable in performance-sensitive situations.
| self | The target prom_metric_t* |
| label_values | The label values associated with the metric sample being updated. The number of labels must match the value passed to label_key_count in the counter's constructor. If no label values are necessary, pass NULL. Otherwise, It may be convenient to pass this value as a literal. |
| prom_metric_sample_histogram_t* prom_metric_sample_histogram_from_labels | ( | prom_metric_t * | self, |
| const char ** | label_values | ||
| ) |
Returns a prom_metric_sample_histogram_t*.
The order of label_values is significant.
You may use this function to cache metric samples to avoid sample lookup. Metric samples are stored in a hash map with O(1) lookups in average case; nonethless, caching metric samples and updating them directly might be preferrable in performance-sensitive situations.
| self | The target prom_histogram_metric_t* |
| label_values | The label values associated with the metric sample being updated. The number of labels must match the value passed to label_key_count in the counter's constructor. If no label values are necessary, pass NULL. Otherwise, It may be convenient to pass this value as a literal. |


DevaCurl has been synonymous with curly hair for years. DevaCurl originated from the first DevaChan salon opened in New York City in 1994. Nearly 30 years later, the brand has transformed the lives of curly and kinky heads around the world. Not only had the brand become a pioneer in the beauty industry, but the overarching natural-hair movement. Since February 2020, multiple class-action lawsuits have been filed against the brand alleging hair-loss and complete chemical damage as a result of using the products. Popular beauty YouTube creator Ayesha Malik had posted a video of the damage her famous curls sustained, and since then the lawsuit has snowballed. Whether you’re considering DevaCurl products for you or a loved one, this guide goes over the chemicals at the center of the lawsuit and what to look out for.
Propylene Glycol, Cocamidopropyl Betaine, Phenoxyethanol, Laureth-4, Ceteareth-20, Diazolidinyl Urea.
Propylene Glycol is used to preserve moisture in Devacurl products. At certain amounts, Propylene Glycol can cause seizures, and it is widely used to make anti-freeze. Cocamidopropyl Betaine is used as a surfactant in DevaCurl products. It is a known carcinogen and irritates both mucus membranes and skin. Phenoxyethanol is also a carcinogen and linked to causing reactions like eczema. Laureth-4 is another surfactant commonly used in cuticle softeners and deodorants and can cause acne. Ceteareth-20 works to speed the passage of chemicals directly into your bloodstream and is suggested to avoid putting on irritated skin. Diazolidinyl Urea acts as formaldehyde in DevaCurl products. The very same formaldehyde that when in contact with heat acts as a chemical relaxer on hair.
A great step to combat the use of these tricky ingredients is to download the ThinkDirty App. The app allows you to scan the barcode of your beauty products and breaks down the ingredients that make the product ‘dirty.’ Shopping for curly hair products is already very expensive, but affordable alternatives do exist. If you’re on a budget, try Shea Moisture. While not all of their products clean, their coconut/hibiscus line scores very well on the ThinkDirty app. If you are looking for something on the pricier side, check out Briogeo. Briogeo is 93-100% naturally derived and is vegan as well. They provide a comprehensive ingredient glossary on their website that breaks down what you’re consuming.