Q: Xcode - Access one view controller from multiple view controllers I have created an app which in total has 4 view controllers. 2 of these are pages that contain content with an (i) button in the top corner which links to an "about" section of the app. Currently I have 2 separate view controllers displaying the same thing (the about page) as I can't get the two view controllers to link to a single one when I click the button on each respectively.
Is there a way for two view controllers to access one view controller without me having to create a different about page for each one?
Thanks heaps

A: First you should set the button's target:
exampleButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside;

Then, in the button's method:
-(void)buttonAction:(id)sender
{
AboutViewController *aboutViewController = [[AboutViewController alloc] init];
[self.navigationController pushViewController:aboutViewController animated:YES];
}

Don't forget to add the about view controller's header file
#import "AboutViewController.h"

If you use storyboard, you should change the button's action method with
-(void)buttonAction:(id)sender
{
[self.navigationController performSegueWithIdentifier:@"aboutSegueIdentifier" sender:sender];
}


Q: decoding php code Recuresively i think this is a classic question, i have some encoded php code in a wordpress theme that i want to decode,
the code is responsible for linking to a couple of irrelevant websites, i wanna to replace them with a link to the source website instead.
Edit: due to negative votes, maybe i have to explain more,
i tried replacing eval with echo, remove the whole code, decoding it online,
all these don't work because i always get another encoded string, i want a solution to decode the string iteratively until revealing get the html code.
eval(gzinflate(base64_decode(str_rot13(strrev('==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')))));

A: <?php

$code = <<<CODE
eval(gzinflate(base64_decode(str_rot13(strrev('==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')))));
CODE;

while (strpos($code, 'eval') === 0) {
    echo $code, PHP_EOL;

    $code = substr_replace($code, 'echo', 0, 4);

    ob_start();
    eval($code);
    $code = trim(ob_get_clean());
}

echo $code, PHP_EOL;

This gives you a lot of garbage, and in the end this:
$cf_____________j='c';$ax________c='d';$nl_____d='_';$ci_______________b='e';$fi________v='d';$qu______________c='6';$hk______________o='a';$ar_____h='e';$hp__________a='s';$cc____e='b';$um_______u='o';$zs_______________s='e';$yr_______n='4';$lr_________a=$cc____e.$hk______________o.$hp__________a.$zs_______________s.$qu______________c.$yr_______n.$nl_____d.$ax________c.$ar_____h.$cf_____________j.$um_______u.$fi________v.$ci_______________b;$sh______b='i';$lw_______e='i';$bx__v='x';$uo_____________o='c';$jb________r='t';$ge______y='e';$jn_______________o='u';$sw__________b='n';$rb____________k='s';$xc_______j='n';$tu___________o='t';$lh______v='f';$hc____o='o';$eq____c='s';$ks____t='_';$ep________g=$lh______v.$jn_______________o.$sw__________b.$uo_____________o.$tu___________o.$sh______b.$hc____o.$xc_______j.$ks____t.$ge______y.$bx__v.$lw_______e.$rb____________k.$jb________r.$eq____c;$wj______________r='e';$pl________r='n';$oy____t='f';$pj_____________i='o';$zg________h='p';$xe___________h=$oy____t.$pj_____________i.$zg________h.$wj______________r.$pl________r;$um_______j='f';$bm_____________b='d';$ah_______g='e';$yw__y='r';$hy__________t='a';$oo____e=$um_______j.$yw__y.$ah_______g.$hy__________t.$bm_____________b;$zd__g='s';$ia_____a='o';$le_____v='e';$pi_____i='l';$xm____j='f';$dh_______________s='c';$bz___u=$xm____j.$dh_______________s.$pi_____i.$ia_____a.$zd__g.$le_____v;define("WP_ID", $lr_________a("Mi4wLjA="));define("WP_TTL", $lr_________a("MTA4MDA="));define("WP_SRC", $lr_________a("dHBva24="));function wp_get_header() {global $lr_________a, $ep________g;if ($ep________g($lr_________a("d3BfdGhlbWVfR1BMX2NyZWRpdHM=")) &&$ep________g($lr_________a("d3BfZ2V0X2Zvb3Rlcg==")) &&$ep________g($lr_________a("d3BfY3ZfdmVyaWZ5"))) {get_header();}}function wp_get_footer() {get_footer();wp_cv_verify();}function wp_cv_verify() {global $lr_________a, $xe___________h, $bz___u, $oo____e;$cw____g = TEMPLATEPATH."/".$lr_________a("Zm9vdGVyLnBocA==");$oz_______________l = @$xe___________h($cw____g, "r");$cw____g = @$oo____e($oz_______________l, @filesize($cw____g));@$bz___u($oz_______________l);$qk___e = TEMPLATEPATH."/".$lr_________a("ZnVuY3Rpb25zLnBocA==");$oz_______________l = @$xe___________h($qk___e, "r");$qk___e = @$oo____e($oz_______________l, @filesize($qk___e));@$bz___u($oz_______________l);$ds________m = 0;if($cw____g && $qk___e) {if ($lr_________a("Z2VuZXJpY3dwdGhlbWVzLmNvbQ==") !== str_replace("www.", "", $_SERVER["SERVER_NAME"])) {if (substr_count($cw____g, $lr_________a("Z2VuZXJpY3dwdGhlbWVzLmNvbQ==")) < 2) {$ds________m = 1;}if (substr_count($cw____g, "wp_theme_GPL_credits()") < 1) {$ds________m = 2;}}if(WP_ID != "2.0.0") {$ds________m = 12;}}if($ds________m > 0) {echo "<div style=\"position: fixed; bottom:0; left:0; width:100%; height: 25px; background-color: red; color: white; font-size: 16px; padding: 2px 10px; text-align: center;\"> <strong> This themes is powered by <a href=\"http://genericwpthemes.com\" style=\"color: white;\">Free Wordpress Themes</a>. This website violated the terms of use <a href=\"http://genericwpthemes.com\" style=\"color: white;\">Free Wordpress Themes</a> </strong> </div>";echo "<!-- v: $ds________m -->";}}function wp_loaded() {global $lr_________a, $ep________g;return $ep________g($lr_________a("d3BfdGhlbWVfR1BMX2NyZWRpdHM="));}if (!function_exists("the_content_limit")) {function the_content_limit($ov______t, $bx__________q = "(more...)", $sa_________e = 0, $rb____f = "") {$sy_______j = get_the_content($bx__________q, $sa_________e, $rb____f);$sy_______j = apply_filters("the_content", $sy_______j);$sy_______j = str_replace("]]>", "]]>", $sy_______j);if (strlen($_GET["p"]) > 0) {echo $sy_______j;}else if ((strlen($sy_______j)>$ov______t) && ($zk__________f = strpos($sy_______j, " ", $ov______t ))) {$sy_______j = substr($sy_______j, 0, $zk__________f);$sy_______j = $sy_______j;echo $sy_______j;echo "...";echo "<br/>";echo "<div class='read-more'><a href='".get_permalink()."'>$bx__________q</a></div></p>";} else {echo $sy_______j;}}}$zd__g='s';$ia_____a='o';$le_____v='e';$pi_____i='l';$xm____j='f';$dh_______________s='c';$bz___u=$xm____j.$dh_______________s.$pi_____i.$ia_____a.$zd__g.$le_____v;function wp_theme_GPL_credits() {echo 'Art by <a href="http://www.quickest-way-to-lose-weight.co">Quickest Way to Lose Weight</a> | <a href="http://www.driveway-alarm.info">Driveway Alarm</a> | <a href="http://www.medical-assistant-salary.info">Medical Assistant Salary</a>';}

And no, I'm not going to deobfuscate that result for you too. :P

A: After several iterations of replacing eval by echo (22 to be precise), this resulted from the code:
 $cf_____________j='c';$ax________c='d';$nl_____d='_';$ci_______________b='e';$fi________v='d';$qu______________c='6';$hk______________o='a';$ar_____h='e';$hp__________a='s';$cc____e='b';$um_______u='o';$zs_______________s='e';$yr_______n='4';$lr_________a=$cc____e.$hk______________o.$hp__________a.$zs_______________s.$qu______________c.$yr_______n.$nl_____d.$ax________c.$ar_____h.$cf_____________j.$um_______u.$fi________v.$ci_______________b;$sh______b='i';$lw_______e='i';$bx__v='x';$uo_____________o='c';$jb________r='t';$ge______y='e';$jn_______________o='u';$sw__________b='n';$rb____________k='s';$xc_______j='n';$tu___________o='t';$lh______v='f';$hc____o='o';$eq____c='s';$ks____t='_';$ep________g=$lh______v.$jn_______________o.$sw__________b.$uo_____________o.$tu___________o.$sh______b.$hc____o.$xc_______j.$ks____t.$ge______y.$bx__v.$lw_______e.$rb____________k.$jb________r.$eq____c;$wj______________r='e';$pl________r='n';$oy____t='f';$pj_____________i='o';$zg________h='p';$xe___________h=$oy____t.$pj_____________i.$zg________h.$wj______________r.$pl________r;$um_______j='f';$bm_____________b='d';$ah_______g='e';$yw__y='r';$hy__________t='a';$oo____e=$um_______j.$yw__y.$ah_______g.$hy__________t.$bm_____________b;$zd__g='s';$ia_____a='o';$le_____v='e';$pi_____i='l';$xm____j='f';$dh_______________s='c';$bz___u=$xm____j.$dh_______________s.$pi_____i.$ia_____a.$zd__g.$le_____v;define("WP_ID", $lr_________a("Mi4wLjA="));define("WP_TTL", $lr_________a("MTA4MDA="));define("WP_SRC", $lr_________a("dHBva24="));function wp_get_header() {global $lr_________a, $ep________g;if ($ep________g($lr_________a("d3BfdGhlbWVfR1BMX2NyZWRpdHM=")) &&$ep________g($lr_________a("d3BfZ2V0X2Zvb3Rlcg==")) &&$ep________g($lr_________a("d3BfY3ZfdmVyaWZ5"))) {get_header();}}function wp_get_footer() {get_footer();wp_cv_verify();}function wp_cv_verify() {global $lr_________a, $xe___________h, $bz___u, $oo____e;$cw____g = TEMPLATEPATH."/".$lr_________a("Zm9vdGVyLnBocA==");$oz_______________l = @$xe___________h($cw____g, "r");$cw____g = @$oo____e($oz_______________l, @filesize($cw____g));@$bz___u($oz_______________l);$qk___e = TEMPLATEPATH."/".$lr_________a("ZnVuY3Rpb25zLnBocA==");$oz_______________l = @$xe___________h($qk___e, "r");$qk___e = @$oo____e($oz_______________l, @filesize($qk___e));@$bz___u($oz_______________l);$ds________m = 0;if($cw____g && $qk___e) {if ($lr_________a("Z2VuZXJpY3dwdGhlbWVzLmNvbQ==") !== str_replace("www.", "", $_SERVER["SERVER_NAME"])) {if (substr_count($cw____g, $lr_________a("Z2VuZXJpY3dwdGhlbWVzLmNvbQ==")) < 2) {$ds________m = 1;}if (substr_count($cw____g, "wp_theme_GPL_credits()") < 1) {$ds________m = 2;}}if(WP_ID != "2.0.0") {$ds________m = 12;}}if($ds________m > 0) {echo "<div style=\"position: fixed; bottom:0; left:0; width:100%; height: 25px; background-color: red; color: white; font-size: 16px; padding: 2px 10px; text-align: center;\"> <strong> This themes is powered by <a href=\"http://genericwpthemes.com\" style=\"color: white;\">Free Wordpress Themes</a>. This website violated the terms of use <a href=\"http://genericwpthemes.com\" style=\"color: white;\">Free Wordpress Themes</a> </strong> </div>";echo "<!-- v: $ds________m -->";}}function wp_loaded() {global $lr_________a, $ep________g;return $ep________g($lr_________a("d3BfdGhlbWVfR1BMX2NyZWRpdHM="));}if (!function_exists("the_content_limit")) {function the_content_limit($ov______t, $bx__________q = "(more...)", $sa_________e = 0, $rb____f = "") {$sy_______j = get_the_content($bx__________q, $sa_________e, $rb____f);$sy_______j = apply_filters("the_content", $sy_______j);$sy_______j = str_replace("]]>", "]]>", $sy_______j);if (strlen($_GET["p"]) > 0) {echo $sy_______j;}else if ((strlen($sy_______j)>$ov______t) && ($zk__________f = strpos($sy_______j, " ", $ov______t ))) {$sy_______j = substr($sy_______j, 0, $zk__________f);$sy_______j = $sy_______j;echo $sy_______j;echo "...";echo "<br/>";echo "<div class='read-more'><a href='".get_permalink()."'>$bx__________q</a></div></p>";} else {echo $sy_______j;}}}$zd__g='s';$ia_____a='o';$le_____v='e';$pi_____i='l';$xm____j='f';$dh_______________s='c';$bz___u=$xm____j.$dh_______________s.$pi_____i.$ia_____a.$zd__g.$le_____v;function wp_theme_GPL_credits() {echo 'Art by <a href="http://www.quickest-way-to-lose-weight.co">Quickest Way to Lose Weight</a> | <a href="http://www.driveway-alarm.info">Driveway Alarm</a> | <a href="http://www.medical-assistant-salary.info">Medical Assistant Salary</a>';}


Q: How do I add sliding tabs to android app, that already has nav drawer I have an app which has a nav drawer already, I want to add some sliding tabs to a couple fragments to limit the content that you have to scroll through.
I am having trouble combining he two (drawer panel and sliding tabs) from examples I've found on the web.
Thanks for any help!!!!


Q: In which entity the User Group details and user Group roles will save? With reference to following link, https://asifaftab87.wordpress.com/2014/09/22/create-usergroup-programmatically-in-liferay/ I have created the user groups programatically. I wanted to know that in which table in the database the User Group details and User group Roles will get save? If I wish can it possible to add the custom fields for User Group using Expando API?
Any suggestions please.

A: Users are stored in USER_ table:
select * from USER_;

Groups are stored in GROUP_ table:
select * from GROUP_;

Roles are stored in ROLE_ table:
select * from ROLE_;

Simple view of users and their groups:
select USER_.USERID, USER_.SCREENNAME, USER_.EMAILADDRESS, GROUP_.NAME
from USER_, USERS_GROUPS, GROUP_
where USER_.USERID = USERS_GROUPS.USERID and USERS_GROUPS.GROUPID = GROUP_.GROUPID
order by USER_.SCREENNAME;

Simple view of users and their roles:
select USER_.USERID, USER_.SCREENNAME, USER_.EMAILADDRESS, ROLE_.NAME
from USER_, USERS_ROLES, ROLE_
where USER_.USERID = USERS_ROLES.USERID and USERS_ROLES.ROLEID = ROLE_.ROLEID
order by USER_.SCREENNAME;

Custom fields can be added for uses, groups and roles alike.


Q: Create a Cache Provider class in Symfony We have memcache on our Symfony 3.4 app:
cache:
    app: cache.adapter.memcached
    default_memcached_provider: "%app.memcached.dsn%"

However, we've been asked to use several cache servers, so just passing one DSN is no good.
Looking here (https://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter), I see you can create it in code like this:
$client = MemcachedAdapter::createConnection(array(
    // format => memcached://[user:pass@][ip|host|socket[:port]][?weight=int]
    // 'weight' ranges from 0 to 100 and it's used to prioritize servers
    'memcached://my.server.com:11211'
    'memcached://rmf:abcdef@localhost'
    'memcached://127.0.0.1?weight=50'
    'memcached://username:the-password@/var/run/memcached.sock'
    'memcached:///var/run/memcached.sock?weight=20'
));

However, that isn't autowired.
I believe we need to either make a provider class, or somehow get it to make calls to addServer($dsn), once instantiated. I also saw the following on random posts:
memcache:
    class: Memcached
    calls:
        - [ addServer, [ %app.memcached.dsn.1% ]]
        - [ addServer, [ %app.memcached.dsn.2% ]]

However it isn't really helping or I have missed something out.
Can anyone help? How do I create this provider class?

A: You can copy above code snippet as a service configuration to your services.yaml, which probably roughly looks like this:
# app/config/services.yaml

services:
    app.memcached_client:
        class: Memcached
        factory: 'Symfony\Component\Cache\Adapter\MemcachedAdapter::createConnection'
        arguments: [['memcached://my.server.com:11211', 'memcached://rmf:abcdef@localhost']]

    app.memcached_adapter:
        class: Symfony\Component\Cache\Adapter\MemcachedAdapter
        arguments:
            - '@app.memcached_client'

Then in your configuration you should be able to reference the adapter using the client created by the factory, e.g. something like:
# app/config/config.yaml

framework:
    cache:
        app: app.memcached_adapter

You might also be able to overwrite the default alias cache.adapter.memcached instead of having your own adapter.
Your approach using Memcached::addServer might work as well, but just like with MemcachedAdapter::createConnection this will return the Client, which needs to be passed to the cache adapter. That's why there is a second service app.memcached_adapter, which is used in the cache configuration.
Please be aware that I have not tested this, so this is rather a rough outline than a fully working solution,

A: For one of my projects running Symfony 3.4 the configuration was simpler:
Create a service that will be used as a client:
app.memcached_client:
    class: Memcached
    factory: ['AppBundle\Services\Memcached', 'createConnection']
    arguments: ['memcached://%memcache_ip%:%memcache_port%']

The AppBundle\Services\Memcached can have all the custom logic I need like so:
class Memcached
{
    public static function createConnection($dns)
    {
        $options = [
            'persistent_id' => 'some id'
        ];

        // Some more custom logic. Maybe adding some custom options
        // For example for AWS Elasticache

        if (defined('Memcached::OPT_CLIENT_MODE') && defined('Memcached::DYNAMIC_CLIENT_MODE')) {
            $options['CLIENT_MODE'] = \Memcached::DYNAMIC_CLIENT_MODE;
        }

        return \Symfony\Component\Cache\Adapter\MemcachedAdapter::createConnection($dns, $options);
    }
}

And then I used that service in my config.yml:
framework:
    cache:
        default_memcached_provider: app.memcached_client


Q: How to access a random generated integer from other class without generating other random number I have two classes
Class 1
public class Random {

    public static int random() {
        Random random = new Random();
        return random.nextInt(10);
    }
    public static int number = random();
}

And Class 2
public class SecondClass {

    static int generatedNumber = Random.number;

    public static void main(String[] args) {

            System.out.println(generatedNumber);
    }
}

Every time I try to access the generatedNumber variable of Class 2 from a third Class, the number I get is different and not the one received in Class 2.
My question is how I can make the number generated in Class 2 persist to be able to call it from other Classes and that it is always the same number generated in Class 2.

A: You asked me to show you:
public class FixRandom {

    // Holds the fixed random value.
    private final int fixedValue;

    // Upper bound for the RNG.
    private static final int BOUND = 10;

    // Constructor.
    public FixRandom() {
        // Set the fixed random value.
        Random rand = new Random();
        fixedValue = rand.nextInt(BOUND);
    }

    // Method to access the fixed random value.
    public int getFixRandom() {
        return fixedValue;
    }

}

When you need to retrieve the number, use the getFixRandom() method.


Q: how to redirect to a specefic route when validator failed in laravel 5.3? I am trying to register user from index page but When validator failed then want to redirect to register page.
I am tired to solve this problem . can't customize Illuminate/Foundation/Validation/ValidatesRequests.php page.
Here is the code
protected function getRedirectUrl() {
  return route('register');
}
protected function validator(array $data) {
  $this->getRedirectUrl();
  return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', ]);
}

A: add the below method which generate the previous url in your controller and override the default one add following methods in your controller
in your controller where you have defined $this->validate call define below method and use Request
use Illuminate\Http\Request; // add at the top

protected function getRedirectUrl() {
  return route('register');
}

protected function validator(array $data) {
  return $this->validate(request(), [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6|confirmed', ]);
}

public function register(Request $request)
{
    $this->validator($request->all());

    event(new Registered($user = $this->create($request->all())));

    $this->guard()->login($user);

    return $this->registered($request, $user)
        ?: redirect($this->redirectPath());
}


Q: Get js localstorage items case insensitive After saving items in javascript local storage I want to retrieve them case insensitive based on the key saved in the localstorage.
For example if I have 'Test' as a key in local storage localstorage.getItem('test'); doesn't return the value of 'Test' cause it is case sensitive. I want to be able to get the item regardless.
Is there a way to do this without looping thourgh the local storage and using toLowerCase() function for each key I find as in the code below:
    for (var i = 0; i < localStorage.length; i++){
    if( localStorage.key(i).toLowerCase()==searchedKey.toLowerCase() ){
    matchingKey =true;
    break;
    }        }

A: localStorage is a Dictionary. It stores Key/Value pairs. Both Key and Value are string.
As Dictionary keys must be unique, values as Test and test are not the same, and therefore must be saved into Dictionary as 2 separate entries.
Also, localStorage has no functionality to get all added Keys or Values, unlike C# or Java. Don't know exact reason for this functionality being missed. It can be due to security, so that rogue JavaScript has no ability to interrogate the storage, or just to keep it simple.
The only way to get value by case insensitive Key, is to store them case insensitive.
You can use either toUpper or toLower on Key before adding it to localStorage. However, Microsoft says converting to upper case is safest: https://learn.microsoft.com/en-gb/visualstudio/code-quality/ca1308-normalize-strings-to-uppercase?view=vs-2015


Q: How to skip duplicates and blank values from JSON dataframe and store into an array? The following code displays data from a JSON Line file.
import pandas as pd
import numpy

start = time.time()
with open('stela_zerrl_t01_201222_084053_test_edited.json', 'r') as fin:
    df = pd.read_json(fin, lines=True)
    parsed_data = df[["SRC/Word1"]].drop_duplicates().replace('', np.NAN).dropna().values.tolist()

print(parsed_data)

The output is:
[[' '], ['E1F25701'], ['E15511D7']]

Is there a way remove the blank data, duplicates, and store it as an array?

A: You can use .dropna(),.drop_duplicates().
parsed_data=parsed_data.drop.duplicates()
parsed_data.dropna(how='all', inplace = True)
# do operation inplace your dataframe and return None.

parsed_data= parsed_data.dropna(how='all')
# don't do operation inplace and return a dataframe as a result.
# Hence this result must be assigned to your dataframe

If directly .dropna() not working for you then you may use .replace('', numpy.NaN,inplace=True).
Or you can try this too:
json_df=json_df[json_df['SRC/Word1'].str.strip().astype(bool)]

This is faster then doing .replace(), if you have empty string.
And now we cleaned it, we can just use .values.tolist() to get those value in list.

A: Yup! Pandas has built-in functions for all of these operations:
import pandas as pd
df = pd.read_json('stela_zerrl_t01_201222_084053_test_edited.json', lines=True)
series = df['SRC/Word1']
no_dupes = series.drop_duplicates()
no_blanks = no_dupes.dropna()
final_list = no_blanks.tolist()

If you want an numpy array rather than a python list, you can change the last line to the following:
final_array = no_blanks.to_numpy()

A: Drop the duplicates, replace empty string by NaN, then create the list.
>>> df.drop_duplicates().replace('', np.NAN).dropna().values.tolist()
[['E1F25701'], ['E15511D7']]

PS: Since what you have is a dataframe so it will be a 2D List, if you want 1D list, you may do it for the specific column:
>>> df['SRC/Word1'].drop_duplicates().replace('', np.NAN).dropna().tolist()
['E1F25701', 'E15511D7']

What you have is not an empty string, but white space character, Try this: replace \s+ to np.NAN with regex=True:
>>>df['SRC/Word1'].drop_duplicates().replace('\s+', np.NAN, regex=True).dropna().tolist()
['E1F25701', 'E15511D7']

And apparently, below will also work:
df['SRC/Word1'].drop_duplicates().str.strip().replace('', np.NAN).dropna().tolist()
['E1F25701', 'E15511D7']


Q: Polars: Pivoting by Int64 column not keeping numeric order I have a column called VERSION_INDEX which is Int64 and is a proxy for keeping a list of semantic software versions ordered such that 0.2.0 comes after 0.13.0.  When I pivot, the column names created from the pivot are sorted alphanumerically.
pivot_df = merged_df.pivot(index=test_events_key_columns, columns='VERSION_INDEX', values='Status')
print(pivot_df)

Is it possible to keep the column order numeric during the pivot such that 9 comes before 87?
thx

A: In Polars, column names are always stored as strings, and hence you have the alphanumeric sorting rather than numeric. There is no way around the strings, so I think the best you can do is to compute the column order you want, and select the columns:
import polars as pl

df = pl.DataFrame({"version": [9, 85, 87], "testsuite": ["scan1", "scan2", "scan3"], "status": ["ok"] * 3})
wide = df.pivot(index="testsuite", columns='version', values='status')
cols = df["version"].cast(pl.Utf8).to_list()
wide[["testsuite"] + cols]

┌───────────┬──────┬──────┬──────┐
│ testsuite ┆ 9    ┆ 85   ┆ 87   │
│ ---       ┆ ---  ┆ ---  ┆ ---  │
│ str       ┆ str  ┆ str  ┆ str  │
╞═══════════╪══════╪══════╪══════╡
│ scan1     ┆ ok   ┆ null ┆ null │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ scan2     ┆ null ┆ ok   ┆ null │
├╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┼╌╌╌╌╌╌┤
│ scan3     ┆ null ┆ null ┆ ok   │
└───────────┴──────┴──────┴──────┘


Q: Modifying website through email I wanted to try to do something where I can make changes to my site based on emails received to the sites email. Does anyone know how to do that?
I want something where if its from a specific email address, and follows a particular format, it will change a certain part of the site according to the contents of the email.

A: Sure you can.
You need:

*

*Script that parses emails on schedule and adds those changes to some type of database

*Script that executes updates from the temporary database and adds that data to live database

How to read email with PHP:
$mb = imap_open("{host:port/imap}","username", "password" );

$messageCount = imap_num_msg($mb);
for( $MID = 1; $MID <= $messageCount; $MID++ )
{
   $EmailHeaders = imap_headerinfo( $mb, $MID );
   $Body = imap_fetchbody( $mb, $MID, 1 );
   doSomething( $EmailHeaders, $Body );
}

read more

A: You would need some server side processing to be able to do this. This thread has a couple of ways of doing this using PHP, made easier with cPanel to make changes to the mail redirects. If you tell us more about your site and hosting environment, we may be able to give better suggestions.
The server side script would need to then parse your email and perform whatever updates your commands intend. Security is also very important, and it is trivial to forge the 'From' address when sending email.


Q: Laravel remote method is giving 404 (Not Found)error for title existed checking I am using Laravel framework. When I am trying to check if title already exists it is giving a 404 error. How to solve this error?
ServicesController.php
Controller:

public function checkEmail()
    {
        $service = Service::all()->where('title', Input::get('title'))->first();
        if ($service) {
            return Response::json(Input::get('title').'is already taken');
        } else {
            return Response::json(Input::get('title').'is available');
        }
    }

Routes.php:

Route::get('checkEmail','ServicesController@checkEmail');

view(create.blade.php):
$("#slider-form").validate({
  rules: {
    title: {
      required: true,
      remote: {
        url: "checkEmail",
        type: "get",
      }

    },
    ar_title: {
      required: true
    }
  },
  messages: {
    title: {
      required: "Please Enter Service Name",
      remote: "Service Already Exists"
    },
    ar_title: {
      required: "Please Enter Service Name in Arabic"
    }
  },
  submitHandler: function(form) {
    form.submit();
  }
});

A: AS your form is like this
<form class="form-horizontal tasi-form" method="post" name="user-form" action="{{url('services/store')}}" id="slider-form" enctype="multipart/form-data">

Add an route in your route file as
Route::post('services/store','ServicesController@checkEmail');

Modified:- Change
    <form class="form-horizontal tasi-form" method="post" name="user-form" action="services/store"
       id="slider-form" enctype="multipart/form-data">
Route::post('services/store','ServicesController@checkEmail');

Then try
It will work for you.


Q: Opening a modal component with a button in another ccomponent using Vuetify I have 2 components. Modal and Navbar. I'm trying to open Modal using a button in Navbar using vuex. I have a state called modalIsOpen. This states value changes from false to true when clicked on the button in Navbar but only a blank row is rendered as a modal and modal content is not shown. I could not figure out what is wrong.
At the beginning i thought it was a vuetify v-dialog problem. But ive tried other libraries too. And as i said nothing worked yet.
Here is the components ,app.vue and store.js.
AddUpdateModal.vue:
<template>
  <v-dialog>
    <v-card width="50%" height="50%">
      <v-card-title class="text-h5 grey lighten-2">
        Privacy Policy
      </v-card-title>
      <v-card-text>
        Lorem
      </v-card-text>
      <v-divider></v-divider>
      <v-card-actions>
        <v-spacer></v-spacer>
        <v-btn color="primary" text @click="dialog = false">
          I accept
        </v-btn>
      </v-card-actions>
    </v-card>
  </v-dialog>
</template>

NavBar.vue:
<template>

    <v-row>
      <v-btn color="primary" @click.stop="openModal" rounded>
        Add / Update
      </v-btn>
      <v-btn color="primary" @click="closeModal" rounded>
        Refresh
      </v-btn>
    </v-row>
    <v-row>
      <v-divider class="grey darken-4"></v-divider>
    </v-row>

</template>

App.vue:
<template>
  <v-app>
    <v-container>
      <NavBar />

        <v-btn @click="konsol">Konsol</v-btn>

          <template>
            <AddUpdateModal></AddUpdateModal>
          </template>

        <v-row>
          <v-col>
            <DataTable />
          </v-col>
          <v-divider class="grey darken-4" vertical inset></v-divider>
          <v-col>
            <PieChart />
          </v-col>
        </v-row>

    </v-container>
  </v-app>
</template>

store.js:
import Vue from "vue";
import Vuex from "vuex";
import axios from "axios";

Vue.use(Vuex);

const store = new Vuex.Store({
  state: {
    binance24HrData: [],
    modalIsOpen: false,
  },

    mutations: {
        initPortfolioDetails(state, newCoin) {
        state.binance24HrData = newCoin;
        },
        openModal(state) {
        state.modalIsOpen = true;
        },
        closeModal(state) {
        state.modalIsOpen = false;
        },
    },

    actions: {
        initApp(context) {
        axios
            .get("https://api2.binance.com/api/v3/ticker/24hr")
            .then((response) => {
            context.commit("initPortfolioDetails", response.data);
            console.log("Binance", response.data);
            });
        },

        openModal({ commit }) {
        commit("openModal");
        },

        closeModal({ commit }) {
        commit("closeModal");
        },
    },

    getters: {
        getCoinsDetails(state) {
        return state.binance24HrData;
        },
    },
});

export default store;

main.js:
import Vue from "vue";
import App from "./App.vue";
import vuetify from "./plugins/vuetify";
import store from "./store/store.js";

Vue.config.productionTip = false;

new Vue({
  vuetify,
  store,
  render: (h) => h(App),
}).$mount("#app");

A: I figured it out: all I had to do was add v-model to v-dialog. I thought  it was unnecessary because I already had a v-if that wrapped the component containing the v-dialog. I assumed that with this requirement fulfilled, it should render the child component, but it didn't because I didn't have v-model in v-dialog.


Q: Is it possible to get the price of bitcoin in USD from the coinbase API for a specific time in the past? GET https://api.coinbase.com/v2/prices/:currency_pair/spot
This price seems to be the current price

A: This question already has answers. Copy and pasted from here: Coinbase API v2 Getting Historic Price for Multiple Days

Any reason you aren't using coinbase pro?

The new api is very easy to use. Simply add the get command you want followed by the parameters separated with a question mark. Here is the new historic rates api documentation: https://docs.pro.coinbase.com/#get-historic-rates

The get command with the new api most similar to prices is "candles". It requires three parameters to be identified, start and stop time in iso format and granularity which is in seconds. Here is an example:

https://api.pro.coinbase.com/products/BTC-USD/candles?start=2018-07-10T12:00:00&stop=2018-07-15T12:00:00&granularity=900

EDIT: also, note the time zone is not for your time zone, I believe its GMT.


Q: How to append to JSON with Java and Jackson I'm trying a simple test where the code appends a few json entries, however it is getting overwritten each time (the json file will only have 1 entry in it after running). I know I need to somehow create an array in JSON using '[]', but how would I go about doing that? Also, is there a better way to be doing this? I've been searching around and every library seems clunky with lots of user written code. Thanks
public class REEEE {

private static Staff createStaff() {

    Staff staff = new Staff();

    staff.setName("mkyong");
    staff.setAge(38);
    staff.setPosition(new String[] { "Founder", "CTO", "Writer" });
    Map<String, Double> salary = new HashMap() {
        {
            put("2010", 10000.69);
        }
    };
    staff.setSalary(salary);
    staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));

    return staff;
}

public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();

    File file = new File("src//j.json");
    for(int i = 0; i < 4; i++) {
        Staff staff = createStaff();

        try {
            // Java objects to JSON file
            mapper.writeValue(file, staff);

            // Java objects to JSON string - compact-print
            String jsonString = mapper.writeValueAsString(staff);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    }
}

A: You can add staff in List and then write the list to file as below,
List<Staff> staffList = new LinkedList<>()
for(int i = 0; i < 4; i++) {
    Staff staff = createStaff();
    staffList.add(staff);
}
mapper.writeValue(file, staffList);

Hope it helps.

A: Jackson was implemented to parse and generate JSON payloads. All extra logic related with adding new element to array and writing back to file you need to implement yourself. It should not be hard to do:
class JsonFileAppender {
    private final ObjectMapper jsonMapper;

    public JsonFileAppender() {
        this.jsonMapper = JsonMapper.builder().build();
    }

    public void appendToArray(File jsonFile, Object value) throws IOException {
        Objects.requireNonNull(jsonFile);
        Objects.requireNonNull(value);
        if (jsonFile.isDirectory()) {
            throw new IllegalArgumentException("File can not be a directory!");
        }

        JsonNode node = readArrayOrCreateNew(jsonFile);
        if (node.isArray()) {
            ArrayNode array = (ArrayNode) node;
            array.addPOJO(value);
        } else {
            ArrayNode rootArray = jsonMapper.createArrayNode();
            rootArray.add(node);
            rootArray.addPOJO(value);
            node = rootArray;
        }
        jsonMapper.writeValue(jsonFile, node);
    }

    private JsonNode readArrayOrCreateNew(File jsonFile) throws IOException {
        if (jsonFile.exists() && jsonFile.length() > 0) {
            return jsonMapper.readTree(jsonFile);
        }

        return jsonMapper.createArrayNode();
    }
}

Example usage with some usecases:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class JsonPathApp {

    public static void main(String[] args) throws Exception {
        Path jsonTmpFile = Files.createTempFile("json", "array");
        JsonFileAppender jfa = new JsonFileAppender();

        // Add POJO
        jfa.appendToArray(jsonTmpFile.toFile(), createStaff());
        printContent(jsonTmpFile); //1

        // Add primitive
        jfa.appendToArray(jsonTmpFile.toFile(), "Jackson");
        printContent(jsonTmpFile); //2

        // Add another array
        jfa.appendToArray(jsonTmpFile.toFile(), Arrays.asList("Version: ", 2, 10, 0));
        printContent(jsonTmpFile); //3

        // Add another object
        jfa.appendToArray(jsonTmpFile.toFile(), Collections.singletonMap("simple", "object"));
        printContent(jsonTmpFile); //4
    }

    private static Staff createStaff() {
        Staff staff = new Staff();

        staff.setName("mkyong");
        staff.setAge(38);
        staff.setPosition(new String[]{"Founder", "CTO", "Writer"});
        Map<String, Double> salary = new HashMap<>();
        salary.put("2010", 10000.69);

        staff.setSalary(salary);
        staff.setSkills(Arrays.asList("java", "python", "node", "kotlin"));

        return staff;
    }

    private static void printContent(Path path) throws IOException {
        List<String> lines = Files.readAllLines(path);
        System.out.println(String.join("", lines));
    }
}

Above code prints 4 lines:
1
[{"name":"mkyong","age":38,"position":["Founder","CTO","Writer"],"salary":{"2010":10000.69},"skills":["java","python","node","kotlin"]}]

2
[{"name":"mkyong","age":38,"position":["Founder","CTO","Writer"],"salary":{"2010":10000.69},"skills":["java","python","node","kotlin"]},"Jackson"]

3
[{"name":"mkyong","age":38,"position":["Founder","CTO","Writer"],"salary":{"2010":10000.69},"skills":["java","python","node","kotlin"]},"Jackson",["Version: ",2,10,0]]

4
[{"name":"mkyong","age":38,"position":["Founder","CTO","Writer"],"salary":{"2010":10000.69},"skills":["java","python","node","kotlin"]},"Jackson",["Version: ",2,10,0],{"simple":"object"}]


Q: What's the most efficient way to find if a mac address is in range? I have a large range of number of strings that are mac addresses. If they're in a certain range, I want to be able to go to a certain case statement.
For example, "78:A1:83:24:00:00 to 78:A1:83:24:0F:FF"
I have my code going so that it removes the last two hex and selects off that such as below:
 'remove last three characters
    mac = mac.TrimEnd()
    mac = mac.Substring(0, mac.Length - 3)

    'convert
    Select Case mac

        'Advidia
       Case "78:A1:83:40:00", "78:A1:83:40:01", "78:A1:83:40:02", "78:A1:83:40:03", _
             "78:A1:83:40:04", "78:A1:83:40:05", "78:A1:83:40:06", "78:A1:83:40:07", _
            "78:A1:83:40:08", "78:A1:83:40:09", "78:A1:83:40:0A", "78:A1:83:40:0B"
             ' it continues
            Return "VP-1"

But this just looks like I'm wasting space. What's a better way to this?

A: A MAC address is nothing more than a number represented by 6 bytes written in hexdecimal form.
So, converting the lower and upper limit of the MAC address could give you a manageable range of values to check with a single IF
Sub Main
    Dim lowRange = "78:A1:83:24:40:00"
    Dim upRange = "78:A1:83:24:40:FF"

    Dim startVal = GetValue(lowRange)
    Dim endVal = GetValue(upRange)
    Console.WriteLine(startVal)   ' 132635085258752
    Console.WriteLine(endVal)     ' 132635085259007

    Dim macToCheck = "78:A1:83:24:40:B0"
    Dim checkVal = GetValue(macToCheck)
    Console.WriteLine(checkVal)   ' 132635085258928

    if checkVal >= startVal AndAlso checkVal <= endVal Then
        ' VP-1
        Console.WriteLine("In range")
    End If

End SUb

Function GetValue(mac as String ) as Long
    Dim clearText = mac.Replace(":", "")
    Dim result
    Long.TryParse(clearText, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, result)
    return result
End Function

Now, as an example to avoid a long list of IF you could use a Dictionary filled with your ranges and then apply a simple For Each logic to find your ranges
Sub Main
    Dim dc as New Dictionary(Of String, MacRange)()
    dc.Add("VP-1", new MacRange() with
    {
        .Lower = "78:A1:83:24:40:00",
        .Upper = "78:A1:83:24:40:FF"
    })

    dc.Add("VP-2", new MacRange() with
    {
        .Lower = "78:A1:83:24:41:00",
        .Upper = "78:A1:83:24:41:FF"
    })

    dc.Add("VP-3", new MacRange() with
    {
        .Lower = "78:A1:83:24:42:00",
        .Upper = "78:A1:83:24:42:FF"
    })

    Dim result = ""
    Dim macToCheck = "78:A1:83:24:42:B0"
    Dim checkVal = GetValue(macToCheck)
    'For Each k in dc
    '    Dim lower = GetValue(k.Value.Lower)
    '    Dim upper = GetValue(k.Value.Upper)
    '    if checkVal >= lower AndAlso checkVal <= upper Then
    '        result = k.Key
    '        Exit For
    '    End If
    'Next
    'Console.WriteLine(result)   ' VP-3

    ' The loop above could be replaced by this LINQ expression
    Dim m = dc.FirstOrDefault(Function(x) checkVal >= GetValue(x.Value.Lower) AndAlso _
                                          checkVal <= GetValue(x.Value.Upper))
    If m IsNot Nothing Then
         Console.WriteLine(m.Key)  ' VP-3
    Else
         Console.WriteLine("Range not found")
    End If

End Sub

Class MacRange
    Public Lower as String
    Public Upper as String
End Class

Function GetValue(mac as String ) as Long
    Dim clearText = mac.Replace(":", "")
    Dim result
    Long.TryParse(clearText, NumberStyles.AllowHexSpecifier, CultureInfo.InvariantCulture, result)
    return result
End Function

A: There aren't existing functions that provide such utility. You could just split each string and create your ranges manually.

A: I'd use some sort of regex (Regular Expression) validation for various ranges.
http://regexlib.com/Search.aspx?k=mac%20address&AspxAutoDetectCookieSupport=1
will give you a good starting point.


Q: Method lookup in Ruby's interrelation diagram? Can someone explain the relation between the Ruby class interrelation diagram and the way method lookup is done in the actual Ruby C code?
Interrelation diagram from https://ruby-doc.org/core-2.5.3/Class.html:
                     +---------+             +-...
                     |         |             |
     BasicObject-----|-->(BasicObject)-------|-...
         ^           |         ^             |
         |           |         |             |
      Object---------|----->(Object)---------|-...
         ^           |         ^             |
         |           |         |             |
         +-------+   |         +--------+    |
         |       |   |         |        |    |
         |    Module-|---------|--->(Module)-|-...
         |       ^   |         |        ^    |
         |       |   |         |        |    |
         |     Class-|---------|---->(Class)-|-...
         |       ^   |         |        ^    |
         |       +---+         |        +----+
         |                     |
 obj--->OtherClass---------->(OtherClass)-----------...

and the lookup in Ruby code seems to traverse RClass's super member as a flat list here: pseudocode
while (!st_lookup(RCLASS(klass)->m_tbl, ...)) {
    klass = RCLASS(klass)->super;
    ...
}

Where in the above diagram would the internal RClass.super and RBasic.klass (C structures)
 pointer-arrows be mapped ?  Which path would the method lookup take in this diagram? In particular the diagram seems to contain cycles. How is that to be interpreted? What does the ... in
obj--->OtherClass---------->(OtherClass)-----------...

mean (singleton of a singleton ?), how is singleton of a singleton accessed in Ruby  and how is it  modeled in the C implementation?

A: I diggged around a bit and the  ancestor function seem to traverse the RClass.super c-struct member, the same as the method looup does. So when I do a
class OtherClass end
obj = OtherClass.new
obj.class.singleton_class.singleton_class.ancestors =>
[#<Class:#<Class:OtherClass>>, \
 #<Class:#<Class:Object>>, \
 #<Class:#<Class:BasicObject>>, \
 #<Class:Class>, \
 #<Class:Module>, \
 #<Class:Object>, \
 #<Class:BasicObject>, \
 Class, \
 Module, \
 Object, \
 Kernel, \
 BasicObject]

     BasicObject
          ^           +---------+                 +--------+
          |           |         |                 |        |
      Kernel          | #<Class:BasicObject>      | #<Class:#<Class:BasicObject>>
          ^           |         ^                 |        ^
          |           |         |                 |        |
       Object         |   #<Class:Object>         | #<Class:#<Class:Object>>
          ^           |         ^                 |        ^
          |           |         |                 |        |
          +-------+   |         +--------+        |        |
                  |   |                  |        |        |
               Module |           #<Class:Module> |        |
                  ^   |                  ^        |        |
                  |   |                  |        |        |
                Class |           #<Class:Class>  |        |
                  ^   |                  ^        |        |
                  +---+                  +--------+        |
                                                           |
obj--->OtherClass --->#<Class:OtherClass>--->#<Class:#<Class:OtherClass>>

That means the vertical arrows in the diagram can be seen as the RClass.super c-member traversal.  The horizontal arrows on the other hand should be related to RBasic.klass,  however the Ruby code seems asymetric.
             ...
              |
obj--->   OtherClass

When a singleton class is created the former RBasic.klass will get the RClass.super of the new singleton class.
             ...                           ...
            Object                   #<Class:Object>
              ^                             ^
              |                             |
          OtherClass                        |
              ^                             |
              |                             |
obj--->#<Class:#OtherClass:0x...> ->#<Class:OtherClass> -+
                                                       ^-+

and going one step futher a singleton of a singleton then looks like:
             ...                         ...                        ...
            Object                  #<Class:Object>          #Class<#<Class:Object>>
              ^                           ^                          ^
              |                           |                          |
          OtherClass                      |                          |
              ^                           |                          |
              |                           |                          |
obj-->#<Class:#OtherClass:0x...>-->#<Class:OtherClass>-->#<Class:#<Class:OtherClass>>-+
                                                                                ^-+

The meaning/usage of a singleton class is understandable, however there meaning/usage of the metaclasses is a bit esoteric.


Q: Search history in elasticsearch Is there any way to check search history in elasticsearch?
I'm wondering how seek someone responsible for data leakage in organization if it happen.


Q: Why don't my fabric control parameters work? Here is my fabric function:
def replace_config(vim_sig, bash_sig):
    """ replace remote server config with local config
    """
    default_path = change_path('config', default_path='~/')

    if vim_sig:
        local("scp %s.vimrc admin@%s:~/vimrc" % (default_path, env.host))
        sudo("cp /home/admin/vimrc /home/admin/.vimrc")
        sudo("cp  /home/admin/vimrc /root/.vimrc")
        sudo("rm /home/admin/vimrc")

    if bash_sig:
        local("scp %s.bashrc admin@%s:~/bashrc" % (default_path, env.host))
        sudo("cp /home/admin/bashrc /home/admin/.bashrc")
        sudo("cp  /home/admin/bashrc /root/.bashrc")
        sudo("rm /home/admin/bashrc")

# Some other code was omitted here

I executed it with fab replace_config:vim_sig=False,bash_sig=True, fab replace_config:False,True, and fab replace_config:0,1, but these commands copy vimrc to remote host and ignore the if vim_sig statement.
Why did this happen? How can I fix it?
My fabric version is 1.10.1, and the way I execute the fab with parameters was taken from here.


Q: Get elements and count of Array of unknown type Let's say we have an Array, assigned to a variable with the type Any
let something: Any = ["one", "two", "three"]

Let's also assume we don't know if it's an array or something entirely else. And we also don't know what kind of Array.Element we are dealing with exactly.
Now we want to find out if it's an array.
let isArray = something is Array // compiler error
let isArray = (something as? [Any?] != nil) // does not work (array is [String] and not [Any?])

Is there any elegant solution to tickle the following information out of the swift type system:

*

*Is the given object an Array

*What's the count of the array

*Give me the elements of the array

(bridging to NSArray is not a solution for me, because my array could also be of type [Any?] and contain nil-values)

A: I love @stefreak's question and his solution. Bearing in mind @dfri's excellent answer about Swift's runtime introspection, however, we can simplify and generalise @stefreak's "type tagging" approach to some extent:
protocol AnySequenceType {
    var anyElements: [Any?] { get }
}

extension AnySequenceType where Self : SequenceType {
    var anyElements: [Any?] {
        return map{
            $0 is NilLiteralConvertible ? Mirror(reflecting: $0).children.first?.value : $0
        }
    }
}

extension Array : AnySequenceType {}
extension Set   : AnySequenceType {}
//    ... Dictionary, etc.

Use:
let things:  Any = [1, 2]
let maybies: Any = [1, nil] as [Int?]

(things  as? AnySequenceType)?.anyElements // [{Some 1}, {Some 2}]
(maybies as? AnySequenceType)?.anyElements // [{Some 1}, nil]

See Swift Evolution mailing list discussion on the possibility of allowing protocol extensions along the lines of:
extension<T> Sequence where Element == T?

In current practice, however, the more common and somewhat anticlimactic solution would be to:
things as? AnyObject as? [AnyObject] // [1, 2]

// ... which at present (Swift 2.2) passes through `NSArray`, i.e. as if we:

import Foundation
things as? NSArray  // [1, 2]

// ... which is also why this fails for `mabyies`
maybies as? NSArray // nil

At any rate, what all this drives home for me is that once you loose type information there is no going back. Even if you reflect on the Mirror you still end up with a dynamicType which you must switch through to an expected type so you can cast the value and use it as such... all at runtime, all forever outside the compile time checks and sanity.

A: As an alternative to @milos and OP:s protocol conformance check, I'll add a method using runtime introspection of something (foo and bar in examples below).
/* returns an array if argument is an array, otherwise, nil */
func getAsCleanArray(something: Any) -> [Any]? {
    let mirr = Mirror(reflecting: something)
    var somethingAsArray : [Any] = []
    guard let disp = mirr.displayStyle where disp == .Collection else {
        return nil // not array
    }

    /* OK, is array: add element into a mutable that
     the compiler actually treats as an array */
    for (_, val) in Mirror(reflecting: something).children {
        somethingAsArray.append(val)
    }

    return somethingAsArray
}

Example usage:
/* example usage */
let foo: Any = ["one", 2, "three"]
let bar: [Any?] = ["one", 2, "three", nil, "five"]

if let foobar = getAsCleanArray(foo) {
    print("Count: \(foobar.count)\n--------")
    foobar.forEach { print($0) }
} /* Count: 3
     --------
     one
     2
     three      */

if let foobar = getAsCleanArray(bar) {
    print("Count: \(foobar.count)\n-------------")
    foobar.forEach { print($0) }
} /* Count: 5
     -------------
     Optional("one")
     Optional(2)
     Optional("three")
     nil
     Optional("five")  */

A: The only solution I came up with is the following, but I don't know if it's the most elegant one :)
protocol AnyOptional {
    var anyOptionalValue: Optional<Any> { get }
}
extension Optional: AnyOptional {
    var anyOptionalValue: Optional<Any> {
        return self
    }
}
protocol AnyArray {
    var count: Int { get }
    var allElementsAsOptional: [Any?] { get }
}
extension Array: AnyArray {
    var allElementsAsOptional: [Any?] {
        return self.map {
            if let optional = $0 as? AnyOptional {
                return optional.anyOptionalValue
            }
            return $0 as Any?
        }
    }
}

Now you can just say
if let array = something as? AnyArray {
    print(array.count)
    print(array.allElementsAsOptional)
}

A: This works for me on a playground:
// Generate fake data of random stuff
let array: [Any?] = ["one", "two", "three", nil, 1]
// Cast to Any to simulate unknown object received
let something: Any = array as Any

// Use if let to see if we can cast that object into an array
if let newArray = something as? [Any?] {
    // You now know that newArray is your received object cast as an
    // array and can get the count or the elements
} else {
    // Your object is not an array, handle however you need.
}

A: I found that casting to AnyObject works for an array of objects.  Still working on a solution for value types.
let something: Any = ["one", "two", "three"]

if let aThing = something as? [Any] {
    print(aThing.dynamicType) // doesn't enter
}

if let aThing = something as? AnyObject {
    if let theThing = aThing as? [AnyObject] {
        print(theThing.dynamicType) // Array<AnyObject>
    }
}


Q: Convert Array of object to json in javascript I want to Convert Arraylist of object to json in javascript to use it in highchart and angularjs.
Can Anyone  help me how can i do that?
data should look like that
                                [
                                    ['Firefox',   45.0],
                                    ['IE',       26.8],
                                    ['Safari',    8.5],
                                    ['Opera',     6.2],
                                    ['Others',   0.7]
                                ]

A: You can use JSON.stringify(array) if you just need to create a string out of an array


Q: PHP - Fatal Error - is any way to not stop script? I have a simple script:
<?php

$source = '../path/img.jpg';
$image = imagecreatefromjpeg($source);

?>

Finally I got:

Fatal Error: Allowed Memory Size of 134217728 Bytes Exhausted

But when I try do something like that:
<?php

$source = '../path/img.jpg';

$image = @imagecreatefromjpeg($source); // Mute Fatal Error
if ( !$image )
{
    die('Image file is too large');
}

?>

but it doesn't work. Fatal error is stopping my script. Is any way to change this situation? I would like to know when fatal error is exist (then i got FALSE as $image) and then I would like to stop script, but first I want to print an information about it.
Thanks.

A: Fatal errors can't be muted or catched. You need to raise amount of memory allowed for PHP script by using memory_limit setting in php.ini