I've been a zone leader with DZone since 2008, and I'm crazy about community. Every day I get to work with the best that JavaScript, HTML5, Android and iOS has to offer, creating apps that truly make at difference, as principal front-end architect at Avego. James is a DZone Zone Leader and has posted 610 posts at DZone. You can read more from them at their website. View Full User Profile

Do You Really Need Java 7?

10.17.2008
| 25169 views |
  • submit to reddit

It's a long wait for Java 7 and there's a lot of speculation about what we can expect once the final JSR is out. I took a look through the what's coming up to find out if there's anything I actually needed.

One thing that struck me about the whole thing is that maybe there's less demand for a new Java version because of the following reasons:

  1. The advancements made in both Java 5 and 6 have satisfied most of our development needs from the JDK.
  2. One of the main things I was looking forward to in future versions was the reduced footprint from the JRE. Once again, that's already cleared with with Java 6 Update 10. 
  3. We've got so many frameworks out there, that we are no longer so dependent on JRE changes
  4. There's a whole lot of focus on JavaFX releases from Sun. Maybe this has taken over from old fashioned excitement about the next major version of Java.

Either way, from reading various breakdowns and predictions about Java 7, I decided to put together my own list of what I'd like to see happen.

No Closures

Neal Gafter has a closures prototype completed, but I'm still not convinced that it should be part of Java 7. When I interviewed Joshua Bloch a few months back I asked him for his opinion on the closures debate. 

As readers of the first edition know, I value simplicity and clarity above all else. So it should come as no surprise that I don't want to see anymore major additions to the Java programming language. It's already as complex as a language should be. If Java programmers want to use features that aren't present in the language, I think they're probably best off using another langauge that targets the JVM, such a Scala and Groovy.

I agree 100% with this. Simplicity is key and the thought of having closures in there just muddies the waters.  This feature has caused so much of a split in the Java camp, that it just doesn't feel right to include. Not for now at least. For those of you unfamiliar with closures, there's a good introduction here.

Better I/O

This is definitely something I'm looking forward to. The introduction of NIO was great a few years back. JSR 203  will include much better filesystem APIs. There's a good overview of the JSR over at David Linsin's blog, and on this article from Java.net. 

Making Swing Easier

I'm not saying it's too complicated right now or anything, but JSR296 would be a welcome addition. It has the aim of making desktop applications easier to create in Swing - which is something that's needed. The Eclipse RCP has raised the bar for desktop applications, and Swing needs to be able to compete. This specification will make it easier, and faster,  to get your Swing applications off the ground.

There's an excellent article on the Sun Developer Network outline how the new Swing Application Framework can be used. Geertjan has also written a nice account of what it actually means. 


If you want to keep track of what's going on in Java 7 discussions, the best place to go is Alex Miller's linkblog on the topic. It's been a great basis for me to get some insight into what may be coming up.

You've read what I'd like included, but what do you think is most important? And do you actually need Java 7?

Comments

JeffS replied on Fri, 2008/10/17 - 2:14pm in response to: Serge Bureau

[quote=SergeBureau]

 

Annotations, autoboxing should not be there at all, and generics is just an awful patch.

Closures would be much more useful than any of them.

 [/quote]

 

Annotations are great, actually.  For injecting behavior into classes, annotations are a great alternative to "XML Hell".

Autoboxing is a nice convenience.

Generics are nice to have in some situations.  But the implementation left a bit to be desired.

Closures could be cool, too. 

But again, let's be careful about feature bloat.

Jacek Furmankiewicz replied on Fri, 2008/10/17 - 2:16pm in response to: JeffS

Yeah, I am afraid that Sun's house of cards will collapse sometime soon...and without them Java will be in a lot of trouble, since there is no real open source community that could pick up the slack when it comes to the core JDK code itself.

Raveman Ravemanus replied on Fri, 2008/10/17 - 2:22pm

Java already has Closures, since Java6 you can use scripting languages that have Closures in Java.

You think closures in Java7 will help you? how many of you are using Java6 now? I'm not. Use JRuby with Java6 and you dont need to wait 2(or more) years for Java7 to be adopted at your company. Its just a lib, so it wont be as big of a problem as moving to next version of Java.

I like idea of closures and i do use them in Javascript, but they can be very bad for all of us. Look at retarded bugs that you should know in SCJP or Java Puzzles. I think both of those circuses would be easy when compared to misused closures.  Damn, I saw some generic subclasses that take 2 or 3 generic params that I dont even care to understand(they cant be that hard, but it just looks scary).

 

"Sun wasting time with JavaFX that nobody is interested"

I think JavaFX is like JSF - nobody likes it, but 2 years from now it will be used by many companies. If you do Swing maybe you should move to JavaFX. I hate to do GUI because of Swing, I used to love that in other languages. 

Raveman Ravemanus replied on Fri, 2008/10/17 - 2:27pm

damn, JeffS just said what i said :P i need to refresh pages more often, my bad.

J Szy replied on Fri, 2008/10/17 - 2:53pm in response to: Ricky Clarkson

[quote=rickyclarkson]

You seem to have inserted some logic that I didn't write.  Java doesn't have to have closures because C#, PHP, C++, Delphi, JavaScript, Ruby, Python, Haskell, Scala, Groovy, Smalltalk, Lisp, D, VB.NET and Perl do, but because they're useful.  That's why closures are in those languages. 

[/quote]

Well, but it's Java that has probably more developers than any two of those languages together. It's Java that most successful projects are written in. It's Java that has the richest ecosystem of libraries and tools.

And all that without closures.

[quote=rickyclarkson]

Here's an example where closures are useful:

List<Integer> lengths = listOfStrings.map(string =>  string.length());

There are many more, and you can write them all in Java today, at the cost of unreadable code.

[/quote]

Oh yes, and some people are even able to make a hash table full of closures.

It would be more useful to see a non-trivial project rewritten using closures; even if they are really useful (which I believe they are not) it's possible there are other reasons to leave closures out of the language such as readability or maintainablity of the code.

Or Java may be already including macros as well to catch up with Arc.

J Szy replied on Fri, 2008/10/17 - 3:42pm in response to: Harald Krake

[quote=hk18689]

When it comes to new (enterprise-) projects, Java is facing a competitor which is getting stronger and stronger: DotNet. Therefore the Java platform must evolve in many ways, and one certainly is the language itself. You're not forced to use closures or reifiable generics, but it is important to keep the "product" up to date. Otherwise decision makers will eventually consider Java as outdated. This would be fatal for the whole platform -- including all those new languages like Groovy, Scala and whatever comes next. Just my 2 cents...

[/quote]

You seem to assume that the most important selling point of a development platform is the number of the core language features. But if it were so, we'd be all switching to Arc right now, away from Ruby. Somehow we are not.

It is even debatable whether the core language features are a selling point at all.

Java must be kept up to date, but to keep up it needs to support new APIs, standards and pseudostandards, it needs to exploit new operating system capabilities and so on. It's standard libraries and what they call the ecosystem that is the selling point, not the closures or lack thereof.

JeffS replied on Fri, 2008/10/17 - 4:07pm in response to: J Szy

[quote=partyzant]

It is even debatable whether the core language features are a selling point at all.

Java must be kept up to date, but to keep up it needs to support new APIs, standards and pseudostandards, it needs to exploit new operating system capabilities and so on. It's standard libraries and what they call the ecosystem that is the selling point, not the closures or lack thereof.

[/quote]

 

Bingo.

 And the Java ecosystem trumps language features in other platforms any day, every time.

vincent cobra replied on Fri, 2008/10/17 - 7:04pm

Just some thoughts...

About JavaFX

At this very moment, I don't see JavaFX going anywhere. The syntax might be attractive to new developers. Who's using JavaFX right now at work or in some OSS projects??? I only know 2 among many thousands. Do I still write applets? No. Would I think about JavaFX if I am compelled to write applets? Not at this time.

About Groovy and others

Groovy and other scripting languages are cool, the developers of those languages seem to care and like what they do, people are writing some nice articles, demos, etc. But... but... I would not be suprised that those scripting languages are used by less than 1% of developers accross the world and for trivial tasks. Personally I would only use a scripting language to leverage few parts of a pure Java application and to have some dynamic modules and such. Only in few occasions, I would be tempted to write an application using mostly a scripting language.

 Java Swing

I wonder if the JSR-296 isn't too late for the party. Many developers have been rolling their own frameworks for ages or have developed their programming styles for swing applications.I don't really believe that Swing is too complicated, I rather find it very flexible even with the existing annoyances.

 Java features

I personally wouldn't mind having closures. However, I do feel that the language is getting bloated but a part of me is crying for something new and exciting(lambda functions as in Python, etc.). It's not a bad thing to borrow nice ideas in other existing languages and to implement it, if it is possible.

I hope JDK7 features will give enough time to developers for bug fixes. So many bugs have been around for so long... and some bugs exist that you can't easily explain to customers. 

Jean-Francois P... replied on Fri, 2008/10/17 - 7:37pm in response to: Mikael Grev

Great Mikael,

 that's exactly what I was about to say.

In my company, we are using essentially Java, C# or PHP for our various projects.

In the PHP team, nobody is using objects (PHP has them!).

In the C# team, nobody is using delegates, let alone closures.

In the Java team, people are using generics (no choice when you use some Collections!) but nobody (almost) develops genericized classes/methods.

The reason: engineers do not master these language features!

When you have 100 engineers in your company, you cannot expect all of them to be experts in one language. If one is an expert and use his expertise to use complex constructs in that language, then only he will be able to read and maintain the code he has produced. That maybe OK for a guy working on Open Source project but not for a company that develops projects involving teams of 5, 10 or more engineers during months or years.

Jean-Francois

Otengi Miloskov replied on Fri, 2008/10/17 - 8:42pm in response to: Jean-Francois Poilpret

I'm agree and is sad, For example OOP in PHP is bolten on and people that learn PHP they are introduce first the procedural way so they don't touch best practices and OOP until last but is already late.

Maybe if we include to Java FP concepts it will ge bloated and difficult and the avarage joe will not use never that features, thats right.

But for the people that wants more, Java or PHP is not the answer. maybe it is Scala, Groovy, Clojure or Haskell. Me personaly Im looking and my favorites are Clojure, Haskell and Python so soon may I replace Java.  I'm a freelancer so for me it is more easy to pick better technology. My customers they just want the job done they dont care if I do it in Java or Python or Haskell.

By the way check this clip http://nitrogen-erlang.tumblr.com/? How easy with this framework is to create a flikr photo album searcher in Erlang, It is awesome.

Ricky Clarkson replied on Sat, 2008/10/18 - 3:03am in response to: Mikael Grev

People in real companies won't use your TimingFramework 1.6 without closures.  If 'time' was built into the language, you could write:

time {

    myExpensiveCode();

}

Without it being built into the language, calling such a method from a library looks like:

time(new Runnable() {

    public void run() {

        my expensive code

    }

});

and inside that block, 'this', 'return', 'continue' have a different meaning.  With closures, especially the BGGA proposal, you could write it as:

time() {

    my expensive code

You can still tell it's a method call, which I think is a bad thing, but probably lots of people prefer it that way, because they haven't seen Guy Steele's talk, Growing a Language.

So imagine working with the average corporate development team, and trying to stop them writing the repetitive boilerplate rubbish for timing some code.  Changing their code to use a Runnable makes it too long, breaks the semantics (regarding this, return, break, continue) and is just plain unreadable.  With closures in the language, it's much easier to encourage unrepetitive code. 

 

Ricky Clarkson replied on Sat, 2008/10/18 - 3:08am in response to: JeffS

It's quite amusing that you want LINQ but not closures.  LINQ is entirely based on lambdas (what the wider community calls closures) and generics.  from e in list select e * 2 compiles to: list.Select(e => e*2).  This isn't just an implementation detail, you need to know this when writing your own LINQ backend, admittedly not a task most developers face.

Ricky Clarkson replied on Sat, 2008/10/18 - 3:11am in response to: Raveman Ravemanus

Moving to JRuby means you lose typing and speed.  It's like moving from a Ferrari to a horse.

Ricky Clarkson replied on Sat, 2008/10/18 - 3:20am in response to: J Szy

A hashtable full of closures is quite reasonable as an implementation of the strategy pattern.  I fail to see the problem with it.

Most non-trivial projects don't get rewritten, so it's hard to give you such an example.  That said, I personally have a 20kloc Java project rewritten to 4kloc of Scala, but that probably counts as trivial.

Is there some evidence that closures cause unreadable code or unmaintainable code?

Macros would be good for Java if they were closer to Lisp macros than to C++ macros, but honestly I wouldn't want to try to design such a thing.  I wouldn't be able to make it simple enough, though perhaps someone else could.  Macros work best for simple languages.

Ricky Clarkson replied on Sat, 2008/10/18 - 3:25am in response to: J Szy

"You seem to assume that the most important selling point of a development platform is the number of the core language features. But if it were so, we'd be all switching to Arc right now, away from Ruby."

Ruby has far more core language features than Arc.  Implementing Arc takes a good Lisp programmer a day.  Implementing Ruby is a really big timesink.

The core language features were a selling point back when Java started; now they're more of an embarrassment.  enum is the only feature I can think of without flaws. 

Ricky Clarkson replied on Sat, 2008/10/18 - 3:28am in response to: Jean-Francois Poilpret

That's amazing, considering it takes about 5 minutes to understand delegates, including the corner cases.  Though nobody using objects in PHP is probably a positive.

Harald Krake replied on Sat, 2008/10/18 - 5:37am in response to: J Szy

[quote=partyzant]

You seem to assume that the most important selling point of a development platform is the number of the core language features.

[/quote]

Where did I write that?

I wrote "Otherwise decision makers will eventually consider Java as outdated."

You're arguing from a technical point of view. That's ok for a developer, but developers are rarely asked when it comes to the decision whether to go with M$ or the Java platform. Developers come into play when the decision is already met! And this is decided on other criteria. One is the perspective. Will Java be the leading platform in 3 years? For a new project you cannot afford to bet on the wrong horse. 10 years ago I just needed to suggest Java and all was fine. Today I'm asked to elaborate the benefits of either platform. I would never, never, never suggest "compensating" features missing from the Java language by mixing in "modern" languages like Groovy. Guess what the next question would be: "ok, and how many extra Groovy developers do we need then?" Did you notice the word "extra" ? You don't need extra Ruby developers for C#, don't you?

Java, the language and the platform, must be improved permanently and this must be communicated! Falling behind -- whether it is technically relevant or not -- is psychologically bad because it is interpreted as "outdated". Java isn't outdated and I understand the concerns not to bloat the language. But I'm sure the language can be improved in a technical elegant way. Btw., it's not only a matter of the language itself but also the platform as a whole, the tools, the APIs and everything that has an impact on productivity, quality and cost.

So, please don't ask whether we need features x,y or z. Better struggle for the most elegant implementation. We need Java 7, and 8 and 9 and whatever comes next. It's never too late. The second mouse gets the cheese...

J Szy replied on Sat, 2008/10/18 - 10:04am in response to: Ricky Clarkson

[quote=rickyclarkson]

Most non-trivial projects don't get rewritten, so it's hard to give you such an example.  That said, I personally have a 20kloc Java project rewritten to 4kloc of Scala, but that probably counts as trivial.

[/quote]

That probably doesn't count as a Java project rewritten in Java-with-closures.

[quote=rickyclarkson]

Is there some evidence that closures cause unreadable code or unmaintainable code?

[/quote]

I'd rather see strong evidence that closures improve the code reliability and maintainability.

It's hardly a good reason to include them in Java because they maybe won't harm. :-)

[quote=rickyclarkson]

Macros would be good for Java if they were closer to Lisp macros than to C++ macros, but honestly I wouldn't want to try to design such a thing.  I wouldn't be able to make it simple enough, though perhaps someone else could.  Macros work best for simple languages.

[/quote]

I can't imagine any improvement to Java that would justify inviting macros, even CL crowd admits that they are a nightmare to debug and maintain. 

J Szy replied on Sat, 2008/10/18 - 11:06am in response to: Ricky Clarkson

[quote=rickyclarkson]

Ruby has far more core language features than Arc.  Implementing Arc takes a good Lisp programmer a day.  Implementing Ruby is a really big timesink.

[/quote]

Arc has a s-expression based syntax - if someone implements it in Lisp, they get the parser for free. It also has nearly no standard library so there is very little to implement.

[quote]

The core language features were a selling point back when Java started; now they're more of an embarrassment.  enum is the only feature I can think of without flaws. 

[/quote]

Not really, Java had very little core language features when compared to C++, Perl or even Common Lisp.

The standard library was the strongest selling point, but simplicity (as in lack of core language features) was also significant.

 

Michael Easter replied on Sat, 2008/10/18 - 11:26am

 

Neal's last name is Gafter

+1 for BGGA closures

Many good comments here. Big kudos to Ricky Carlson for clarity and reason (IMO).

 

 

J Szy replied on Sat, 2008/10/18 - 11:45am in response to: Harald Krake

[quote=hk18689]

Developers come into play when the decision is already met! And this is decided on other criteria. One is the perspective. Will Java be the leading platform in 3 years? For a new project you cannot afford to bet on the wrong horse.

[/quote]

I don't need to be certain that Java will rule the world in 100 years, it's enough that I'm pretty sure that it will be a strong player 10 years from now.

[quote]

10 years ago I just needed to suggest Java and all was fine. Today I'm asked to elaborate the benefits of either platform. I would never, never, never suggest "compensating" features missing from the Java language by mixing in "modern" languages like Groovy. Guess what the next question would be: "ok, and how many extra Groovy developers do we need then?" Did you notice the word "extra" ? You don't need extra Ruby developers for C#, don't you?

[/quote]

Imagine, I don't need extra Groovy developers for Java either. Surprising, isn't it?

I just don't need those "missing" features. Some of them (not closures though) would be nice to have but I am always happy to trade them for state of the art class library, containers, frameworks and internet standard implementations.

Yes, there was a moment in time where Java had no real competition but of course it could not last forever. Now there is a strong competitor, but closures are not a c#'s strength. It's its growing ecosystem that is a threat for Java, and also better integration with the OS.

[quote]

But I'm sure the language can be improved in a technical elegant way.

[/quote]

I would like to see some things from C#, like the 'internal' keyword, but throwing every feature into Java just because C# has it is no good.

Harald Krake replied on Sat, 2008/10/18 - 12:02pm in response to: J Szy

[quote=partyzant]

The standard library was the strongest selling point, but simplicity (as in lack of core language features) was also significant.

[/quote]

Java was the first reasonable OS-independent development platform & language. Software companies switched to Java because of its OS-independence and surely not because it was so comfortably slow and had such a lousy and incomplete API, which was a joke compared to what was available for NT and Unixes in the second half of the 90's. The things you're probably talking about appeared just a few years ago -- in parallel with DotNet...

 

Ricky Clarkson replied on Sat, 2008/10/18 - 12:02pm in response to: J Szy

Well, seeing as the various compilers that add closures to Java are all not actually final products, it would be a bit odd for me to rewrite my Java project in Java-with-closures.  I think I'd only do that if I was comfortable with the idea of fixing the compiler myself if it does strange things.  So you're asking for the impossible.  One can only give analogies really.  Perhaps you can find a C# project that has been altered to use lambdas (what the wider community calls closures) rather than delegate syntax, and compare the difficulties they had before and after.  If any scientific studies have been carried out you'll probably be able to dismiss them as trivial.

For strong evidence, try taking a LINQ tutorial and porting the code to Java.  Or any beginnerish Haskell tutorial.

Regarding macros, I have temptations to use macros in pretty much every language I use.  For example, at work, I'm forced to write documentation saying that a null parameter input will yield a NullPointerException.  I'd really rather not write that again and again, and instead write a macro, methodThatDoesntAcceptNulls, or similar.   Source code manipulation is pretty useful.

Ricky Clarkson replied on Sat, 2008/10/18 - 12:14pm in response to: J Szy

C#'s 'internal' means 'private to the assembly'.  Java doesn't really have a concept of assemblies, though individual tools like maven and OSGi do.  This should be addressed by the OSGi or the superpackages JSR, though it seems like the rule is that the most flawed wins.

In Scala packages 'inherit' from each other, so x.y can see x's package-private data.  This is a reasonable alternative.

Harald Krake replied on Sat, 2008/10/18 - 12:18pm in response to: J Szy

[quote]I don't need to be certain that Java will rule the world in 100 years, it's enough that I'm pretty sure that it will be a strong player 10 years from now.[/quote]

Sure? ;)

[quote]Now there is a strong competitor, but closures are not a c#'s strength[/quote]

One more chance to make it even better! ;)

It's as always with new things. When I heard about generics the first time, I didn't see any evidence why I should need that. Later, having played with it, I was so convinced that I "generified" a whole framework. Same will happen with closures. Since I learned Ruby, I'm really missing closures in Java.

[quote]I would like to see some things from C#, like the 'internal' keyword, but throwing every feature into Java just because C# has it is no good.[/quote]

Agreed!

Per Olesen replied on Sat, 2008/10/18 - 1:52pm

I would like to have Java7 if it comes with better support for dynamic languages on the VM. All this talk about Java as a language. The world, and Sun, is starting to see, that it more the VM as a platform than it is the language Java, that they have such a strong lead on. And that is true, IMHO.

 

So, if we will be getting something like dynamic dispatch on the VM level, I believe dynamic languages developments like JRuby and Jython can do a much better job than they already are doing today.

 I am talking about giving language developments the tools to build great, performing languages on top of the VM.

J Szy replied on Sat, 2008/10/18 - 2:26pm in response to: Ricky Clarkson

[quote=rickyclarkson]

Well, seeing as the various compilers that add closures to Java are all not actually final products, it would be a bit odd for me to rewrite my Java project in Java-with-closures.  I think I'd only do that if I was comfortable with the idea of fixing the compiler myself if it does strange things.  So you're asking for the impossible.

[/quote]

Do I really? Someone has put the effort into building those closure-enabled compilers, so it would not either be impossible to take a medium sized open source project and rewrite it using closures to have real evidence of how they help. Somehow it didn't happen.

[quote]

One can only give analogies really.  Perhaps you can find a C# project that has been altered to use lambdas (what the wider community calls closures) rather than delegate syntax, and compare the difficulties they had before and after.  If any scientific studies have been carried out you'll probably be able to dismiss them as trivial.

[/quote]

Well, I'd very like to see some real life example because so far languages that support closures aren't famous for their readable and maintainable code. My, even Python has only simple lambdas. But maybe let's copy Perl instead, first class regex syntax anyone?

[quote]

For strong evidence, try taking a LINQ tutorial and porting the code to Java.  Or any beginnerish Haskell tutorial

[/quote]

This is exactly why I look for a real life example and not some tutorial. I want to see not only the syntax but also the impact that the change would have on the rest of the code. Would it lead to more or less duplication? Would it make refactoring easier or harder? Would it play well with existing language features or not? Those questions, and many more should be answered before the closures, which, in the BGGA example are quite radical a change and it's not something one will be able to easily avoid if it's included.

[quote]

Regarding macros, I have temptations to use macros in pretty much every language I use.  For example, at work, I'm forced to write documentation saying that a null parameter input will yield a NullPointerException.  I'd really rather not write that again and again, and instead write a macro, methodThatDoesntAcceptNulls, or similar.   Source code manipulation is pretty useful.

[/quote]

If macros could serve only for similar purposes I'd support them but this is not the case. Especially Lisp style macros which are a very powerful gun to shoot oneself in the foot with.

J Szy replied on Thu, 2008/10/23 - 6:54am in response to: Ricky Clarkson

[quote=rickyclarkson]It's quite amusing that you want LINQ but not closures.  LINQ is entirely based on lambdas (what the wider community calls closures) [/quote]

Closures are not lambdas. I agree that one-expression lambdas could be useful.

 

EDIT(20081023): While there are use cases when one-expressions lambdas could indeed be of some use, after thinking more deeply about the issue I concluded that they are nearly as problematic as other kinds and therefore I now think that they are shouldn't be included either.

J Szy replied on Sat, 2008/10/18 - 2:48pm in response to: Harald Krake

[quote=hk18689]

[quote=partyzant]The standard library was the strongest selling point, but simplicity (as in lack of core language features) was also significant.[/quote]

Java was the first reasonable OS-independent development platform & language.[/quote]

Yes, it was also one of its selling points. It may be argued whether its promised WORA was stronger a selling point than the standard library. I believe it was standard library because the real success of Java is the server side and that's where the OS-independence is not so important and the availability of libraries certainly is.

Either way I don't see core language features as an important selling point. OK, maybe leaving out some core language features present in C++ was a selling point. :-)

J Szy replied on Sat, 2008/10/18 - 2:52pm in response to: Ricky Clarkson

[quote=rickyclarkson]

In Scala packages 'inherit' from each other, so x.y can see x's package-private data.  This is a reasonable alternative.

[/quote]

I like this one. Either way, I think there is a need to allow classes to declare members as "library-private".

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.