text:
Q: add class to element which grandgrandparent has no "display:none" style using jQuery I want to add class to select element if his grandgrandparent hasn't style="display:none" atribute
html is like this( here I don't want to add class):

      <select></select>

and here I want to add class to select element:

      <select></select>

is there any possibility to do that?

A: Try this out (for grandparent):
$('select').each(function(){
    var grandparent = $(this).parent().parent();
    if(grandparent.is(':visible')) { //grandparent is not hidden
       // do something
    }
    else {
       // do something else
    }
});

Try this (for great-grandparent):
$('select').each(function(){
    var g_grandparent = $(this).parent().parent().parent();
    if(g_grandparent.is(':visible')) { //great-grandparent is not hidden
       // do something
    }
    else {
       // do something else
    }
});

A: Or this
$("select").filter(function(){
    return $(this).parent().parent().parent().is(":visible");
}).addClass("visible");

http://jsfiddle.net/2Qu7r/

A: First add the missing equal sign :
style="display:none"

then you can just do :
$('select').addClass(function() {
    return $(this).parents().eq(2).is(':visible') ? 'myClass' : '';
});

FIDDLE

A: How about this? This finds the great grandparent of the select, checks for visibility and then adds the new class to the select for you:
var element = $("select").parent().parent().parent();
if(element.is(":visible")) {
    element.find("select").addClass("new-added-class");
}

Check it out on JSFIDDLE


text:
Q: Find value of a with given angle The equations of the line $L$ and the plane $\Pi$ are as follows:
$$
L: \qquad x-5=-(y+1); z = 4
$$
$$
\Pi : \qquad \alpha x + z = 5\alpha +4
$$
where $\alpha$ is a constant.
If the angle between the line $L$ and $\Pi$ is $\pi/6$, what is the value of $\alpha$?
There are two answers, one positive and negative, but the answers I got is only  negative. Any help please. Thanking you guys in advanced :D

A: $$L:\begin{pmatrix} x \\ y \\ z\end{pmatrix}=\begin{pmatrix} 5 \\ -1 \\ 4\end{pmatrix}+ \lambda \begin{pmatrix}1 \\ -1\\ 0 \end{pmatrix}$$
$$\frac{|\langle(1,-1,0),(\alpha, 0,1)\rangle|}{\sqrt2\cdot \sqrt{\alpha^2+1}}=\cos\frac{\pi}6$$
$$\frac{|\alpha|}{\sqrt2\cdot \sqrt{\alpha^2+1}}=\cos\frac{\pi}6$$
Hopefully you can solve for $\alpha$ to obtain one positive and one negative value of $\alpha$ from here.

redpajama_set_name: RedPajamaStackExchange


text:
Q: how could i get the tooltip alignment fixed how could i get the tooltip alignment fixed, so that the tooltip shows above the bar
http://jsbin.com/mutirodawa/edit?html,output

 bar
   .on("mousemove", function(d) {
     divTooltip.style("right", d3.event.pageX + 30 + "px");
     divTooltip.style("top", d3.event.pageY + 45 + "px");
     divTooltip.style("display", "inline-block");
     var x = d3.event.pageX,
       y = d3.event.pageY
     var elements = document.querySelectorAll(':hover');
     l = elements.length
     l = l - 1
     elementData = elements[l].__data__
     divTooltip.html(elementData.name + "<br>" + elementData.value);
   });
 bar
   .on("mouseout", function(d) {
     divTooltip.style("display", "none");
   });

A: To make the tooltip showing above each bar, I attached the handler to each bar individually:
http://jsbin.com/pixicunasi/1/edit?html,js,output


text:
Q: How to draw route by selecting a markers with places autocomplete? I want to draw route on map when I place the destination marker from the Places AutoComplete search bar. As soon as I select the Drop location from Auto Complete, I want the route. I have seen some examples of drawing path but can't find any via the Places Autocomplete. My map and Places Autocomplete are working properly. How do I do it?
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    if (!Places.isInitialized()) {
        Places.initialize(getApplicationContext(), "my_api_ke");
    }

    /*Map Initialisation*/
    mv = findViewById(R.id.Gmapview);
    mv.onCreate(savedInstanceState);
    mv.getMapAsync(this);

    lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    provider = lm.getBestProvider(new Criteria(), false);

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    checkLocationPermission();
    enableMyLocationIfPermitted();

    //Initialize AutoCompleteSupportFragment

    //Pickup Search Bar
    supportFragment = (AutocompleteSupportFragment)
            getSupportFragmentManager().findFragmentById(R.id.pickup);

    supportFragment1 = (AutocompleteSupportFragment) getSupportFragmentManager()
            .findFragmentById(R.id.drop);

    //Initialize the Fields to get Latitude and Langitude and name of the selected place.
    supportFragment.setPlaceFields(Arrays.asList(Place.Field.LAT_LNG, Place.Field.NAME));
    supportFragment1.setPlaceFields(Arrays.asList(Place.Field.LAT_LNG, Place.Field.NAME));

    //Placing Pickup Marker
    supportFragment.setOnPlaceSelectedListener(newPlaceSelectionListener(){
        @Override
        public void onPlaceSelected(@NonNull Place pickup) {

            Log.i("PickUP", "Place: " + pickup.getName() + ", ");
            String name = pickup.getName();
            LatLng latLng = pickup.getLatLng();

            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.title(name);
            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            gm.addMarker(markerOptions);

            gm.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 11));

        }

        @Override
        public void onError(@NonNull Status status) {
            Log.i("pickup", "An error occurred: " + status);

        }
    });

    //Placing Drop Marker
    supportFragment1.setOnPlaceSelectedListener(new PlaceSelectionListener() {
        @Override
        public void onPlaceSelected(@NonNull Place drop) {
            Log.i("Drop", "Place: " + drop.getName() + ", ");

            String name = drop.getName();
            LatLng latLng = drop.getLatLng();

            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
            gm.addMarker(markerOptions);

            gm.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 11));

        }

        @Override
        public void onError(@NonNull Status status) {
        Log.i("drop", "An error occurred: " + status);

        }
    });
}

A: Supposing your LatLng objects are correct and you only need to draw routes, here what you should do
Create a Helper class called DirectionsJSONParser that will later decode your polyline and give you a list of latitude longitude objects.
Here is the link for that class DirectionsJSONParser
For RetrofitClient those are the imports make sure you add them
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;

Add this to your build.gradle(app) file
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-scalars:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'

Create a retrofit client
//this is a singleton of Retrofit
public class RetrofitClient {
private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl) {
    if(retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(ScalarsConverterFactory.create())
                .build();
    }
 //return retrofit object
    return retrofit;
 }
}

Next create a google API interface
public interface IGoogleAPI {

@GET
Call<String> getPath(@Url String url);
}

Create a Common class
public class Common {
   public static String baseURL = "https://maps.googleapis.com/";
   public static IGoogleAPI getGoogleAPI() {
        return RetrofitClient.getClient(baseURL).create(IGoogleAPI.class);
    }
}

Last but not least , declare a variable in your activity
IGoogleAPI mService;

Initialize that variable in onCreate
mService = Common.getGoogleAPI();

Create a method to draw routes
private void getDirection() {

  String requestAPI;
    try {

        requestAPI = "https://maps.googleapis.com/maps/api/directions/json?" +
                "mode=driving&" +
                "transit_routing_preference=less_driving&" +
                "origin=" + pickupMarker.getLatitude() + "," + pickupMarker.getLongitude() +
                "&destination=" + dropMarker.getLatitude() + "," + dropMarker.getLongitude() + "&" +
                "key=" + getResources().getString(R.string.google_direction_apis);

        mService.getPath(requestAPI)
                .enqueue(new Callback<String>() {
                    @Override
                    public void onResponse(Call<String> call, retrofit2.Response<String> response) {
                        try {
                            new ParserTask().execute(response.body().toString());

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

                    @Override
                    public void onFailure(Call<String> call, Throwable t) {

                    }
                });

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

}

Don't forget

*

*To add retrofit dependencies in your build.gradle

*To change your API_KEY in the requestString.

It's a long code so if you have any problem tell me .
Call this function getDirection() after you get the drop location.
EDIT
private class ParserTask extends AsyncTask<String, Integer, List<List<HashMap<String, String>>>> {

    ProgressDialog mDialog = new ProgressDialog(NavigationTracking.this);

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mDialog.setMessage("Executing...");
        mDialog.show();
    }

    @Override
    protected List<List<HashMap<String, String>>> doInBackground(String... strings) {
        JSONObject jObject;
        List<List<HashMap<String, String>>> routes = null;
        try {
            jObject = new JSONObject(strings[0]);
            DirectionJsonParser parser = new DirectionJsonParser();
            routes = parser.parse(jObject);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return routes;
    }

    @Override
    protected void onPostExecute(List<List<HashMap<String, String>>> lists) {
        mDialog.dismiss();

        ArrayList points = null;
        PolylineOptions polylineOptions = null;

        Toast.makeText(NavigationTracking.this, "" + lists.size(), Toast.LENGTH_SHORT).show();

        for (int i = 0; i < lists.size(); i++) {

            points = new ArrayList();
            polylineOptions = new PolylineOptions();

            List<HashMap<String, String>> path = lists.get(i);

            for (int j = 0; j < path.size(); j++) {
                HashMap<String, String> point = path.get(j);

                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));

                LatLng position = new LatLng(lat, lng);

                points.add(position);

            }

            polylineOptions.addAll(points);
            polylineOptions.width(10);
            polylineOptions.color(Color.RED);
            // the shortest line between two points
            polylineOptions.geodesic(true);
        }

        if (polylineOptions != null) {
            direction = mMap.addPolyline(polylineOptions);
        }

    }
}

Declare
private Polyline direction;

And add this test before calling getDirection()
if (direction != null)
    direction.remove();

EDIT 2
Declare 2 LatLng variables before onCreate() like this :
LatLng pickupLoc;
LatLng dropLoc;

Then when you are picking places your code become like this
//Placing Pickup Marker
supportFragment.setOnPlaceSelectedListener(newPlaceSelectionListener(){
    @Override
    public void onPlaceSelected(@NonNull Place pickup) {

        Log.i("PickUP", "Place: " + pickup.getName() + ", ");
        String name = pickup.getName();
        pickupLoc = pickup.getLatLng();

        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(pickupLoc );
        markerOptions.title(name);
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
        gm.addMarker(markerOptions);

        gm.moveCamera(CameraUpdateFactory.newLatLngZoom(pickupLoc, 11));

    }

    @Override
    public void onError(@NonNull Status status) {
        Log.i("pickup", "An error occurred: " + status);

    }
});

//Placing Drop Marker
supportFragment1.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(@NonNull Place drop) {
        Log.i("Drop", "Place: " + drop.getName() + ", ");

        String name = drop.getName();
        dropLoc = drop.getLatLng();

        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(dropLoc );
        markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED));
        gm.addMarker(markerOptions);

        gm.moveCamera(CameraUpdateFactory.newLatLngZoom(dropLoc, 11));

        //here you test if your locations aren't null call getDirection() like this

        if (pickupLoc != null && dropLoc != null) {
            if (direction != null)
               direction.remove();

            getDirection();
        }

    }

    @Override
    public void onError(@NonNull Status status) {
    Log.i("drop", "An error occurred: " + status);

    }
});

A: So the answer by @Amine is mostly correct but some slight changes are required which I am giving here :
private void getDirection() {

String requestAPI;
try {

    requestAPI = "https://maps.googleapis.com/maps/api/directions/json?" +
            "mode=driving&" +
            "transit_routing_preference=less_driving&" +
            "origin=" + pickuploc.latitude() + "," +
             pickuploc.longitude() +
            "&destination=" + droploc.latitude() + "," +
             droploc.longitude() + "&" +
            "key=" + getResources().getString(R.string.google_direction_apis);

             /*If you get "PolylineOptions cannot be null" error and app crashes
             while trying to draw polyline then try pasting your API
             key in string directly like this "key=somekey". Though only for testing. */

             mService.getPath(requestAPI)
            .enqueue(new Callback<String>() {
                @Override
                public void onResponse(Call<String> call, retrofit2.Response<String>
             response) {
                    try {
                        new ParserTask().execute(response.body().toString());

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

                @Override
                public void onFailure(Call<String> call, Throwable t) {

                }
            });

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

}


text:
Q: Горизонтальная прокрутка работает колесиком мышки. Как сделать аналог свайпом? Есть вот такой блок с горизонтальной прокруткой контента. Если использовать колесик мышки, то контент разделенный на колонки, плавно переходит от одной колонки к другой, ровно перелистывается информация колесиком.
В js добавлен свайп...
Как сделать, чтобы через свайп Влево/Вправо тоже можно было также плавно переходит с одной колонки на другую, как если бы использовать колесик мыши?

function horizontalScroll(e){
  isHorizontal = true;
  var that = this;
  that.elementWidth = that.elementWidth || getColumnWidth(that);

  var scrollDirection = ( e.wheelDeltaY )? (0 - e.wheelDeltaY) : ( e.detail),
      actualColumn = Math.round( that.scrollLeft / that.elementWidth),
      targetColumn = (scrollDirection > 0 )? actualColumn + 1 : actualColumn - 1;

  if(scrollElementToColumn( that, targetColumn )) {
    e.preventDefault();
  } else {
    isHorizontal = false;
  }

}

function getColumnWidth(that){
  var style = window.getComputedStyle(that, null);
  var columnWidth = parseFloat( style.columnWidth || style.MozColumnWidth || style.webkitColumnWidth );
  var columnGap = parseFloat( style.columnGap || style.MozColumnGap || style.webkitColumnGap );
  return columnWidth + columnGap;
}

function scrollElementToColumn(that, columnIndex){
  that.elementWidth = that.elementWidth || getColumnWidth(that);

  var expectedPlaceToScroll = Math.round(columnIndex * that.elementWidth),
      distanceToScroll = Math.abs( that.scrollLeft - expectedPlaceToScroll ),
      defaultScrollShift = 30,
      savedScrollLeft = that.scrollLeft,
      scrollShift = ( defaultScrollShift < distanceToScroll )? defaultScrollShift : distanceToScroll ;

  if(that.scrollLeft < expectedPlaceToScroll){
    that.scrollLeft = that.scrollLeft + scrollShift;
  }else if(that.scrollLeft > expectedPlaceToScroll){
    that.scrollLeft = that.scrollLeft - scrollShift;
  }

  if(that.scrollLeft !== expectedPlaceToScroll && savedScrollLeft !== that.scrollLeft ){
    that.actuallyMoving = setTimeout( function(){scrollElementToColumn( that, columnIndex )}, 10);
    return true;
  }

  if( that.actuallyMoving ) clearTimeout(that.actuallyMoving);
  return false;
}

$(document).ready(function() {
  var elems = document.getElementsByClassName('mario');
  var i;
  for(i = 0, nb = elems.length; i < nb; i++){
    if (elems[i].addEventListener) {
      elems[i].addEventListener("mousewheel", horizontalScroll, false);// IE9, Chrome, Safari, Opera
      elems[i].addEventListener("DOMMouseScroll", horizontalScroll, false);// Firefox
    } else elems[i].attachEvent("onmousewheel", horizontalScroll);// IE 6/7/8
  }

  window.addEventListener('resize', function(e){
    console.log('resizing, i saw you !');
    for(i = 0, nb = elems.length; i < nb; i++){
      elems[i].elementWidth = getColumnWidth(elems[i]);
    }
  });
});

// at least 100 px are a swipe
// you can use the value relative to screen size: window.innerWidth * .1
const offset = 100;
let xDown, yDown

window.addEventListener('touchstart', e => {
  const firstTouch = getTouch(e);

  xDown = firstTouch.clientX;
  yDown = firstTouch.clientY;
});

window.addEventListener('touchend', e => {
  if (!xDown || !yDown) {
    return;
  }

  const {
    clientX: xUp,
    clientY: yUp
  } = getTouch(e);
  const xDiff = xDown - xUp;
  const yDiff = yDown - yUp;
  const xDiffAbs = Math.abs(xDown - xUp);
  const yDiffAbs = Math.abs(yDown - yUp);

  // at least <offset> are a swipe
  if (Math.max(xDiffAbs, yDiffAbs) < offset ) {
    return;
  }

  if (xDiffAbs > yDiffAbs) {
    if ( xDiff > 0 ) {
      console.log('left');
    } else {
      console.log('right');
    }
  } else {
    if ( yDiff > 0 ) {
      console.log('up');
    } else {
      console.log('down');
    }
  }
});

function getTouch (e) {
  return e.changedTouches[0]
}
@import url(https://fonts.googleapis.com/css?family=Montserrat);
html, body {
  overflow: hidden;
}

.poscustomtext {
    display: flex;
    justify-content: center;
    align-items: center;
}

.content-wrapper {
  height: 100vh;
  display: flex;
  justify-content: center;
  text-align: center;
  flex-flow: column nowrap;
}
.content-title {
  font-size: 12vh;
  line-height: 1.4;
}

article.mario {
    height: 100vh;
    width: calc(100vw - 0px);
    column-width: calc(100vw - 0px);
    column-gap: calc(5vw + 0px);
    /* column-gap: 317px; */
    column-rule: 2px dotted #ddd;
    overflow: auto;
    padding-top: 120px;
}
/*article.mario {
  height: 100vh;
  width: 100vw;
  column-width: 100vw;
  column-gap: 5vw;
  column-rule: 2px dotted #ddd;
  text-align: justify;
  overflow: auto;
  margin: auto;
}*/
article.mario {
    height: 80vh;
    width: calc(80vw - 0px);
    column-width: calc(80vw - 0px);
    column-gap: calc(5vw + 0px);
    /* column-gap: 317px; */
    column-rule: 2px dotted #ddd;
    overflow: auto;
    padding: 0 20px;
    border: solid 8px black;
}
article.mario:hover {
    border: solid 8px gold;
}
.emphase {
  display: block;
  background-color: #DDD;
  text-align: center;
  font-weight: bold;
}
<!DOCTYPE html>

  <meta charset="UTF-8">
  <title>test</title>

<link rel="stylesheet" href="css/style.css">

В ту пору, когда Headhunter была анонсирована, мода на стелс-экшены только-только начинала зарождаться, и любой мало-мальски приличный проект, хоть как-то позволяющий игроку бесшумно расправляться с неприятелями, сразу же нарекали "слелсом" и сталкивали лоб в лоб с Metal Gear Solid.

Это только потом выяснится, что в Headhunter вообще-то есть много и от Resident Evil, и даже от Driver. Да и сама по себе боевая система, включая знаменитую (да-да, ту самую, что позже будет популяризована не без помощи Resident Evil 4) камеру из-за плеча, куда ближе к Syphon Filter, нежели детищу Konami. Но маркетинг ведь - штука сродни эпидемии: что надуют в ушко - в то и уверуешь.

И все было бы ничего, кабы датой релиза не значился конец 2001-го, а в качестве целевой платформы не был бы выбран Dreamcast. Тут даже к Ванге не ходи, чтобы понять всю абсурдность подобного решения - от консоли в ту пору уже публично открестилась даже сама Sega, а мир с замиранием сердца ждал релиза второй части похождений Снейка. Неудивительно, что в Headhunter в итоге сыграли три с половиной человека, а про вышедший спустя полгода PS2-порт львиная доля владельцев данной консоли даже и не слыхивала.

А жаль, ведь игра вполне себе могла претендовать на лавры одного из лучших консольных экшенов того поколения. Что еще интереснее - перед нами практически уникальный пример проекта, на 80% состоящего из откровенной копипасты, но при этом умело связанной в единое и уж очень гармоничное целое. Причем, как это ни странно, даже обладающего своим узнаваемым лицом.

И хотя разработкой занималась никому доселе не известная шведская студия Amuze, высоко задранную планку качества ощущаешь уже с первых минут. Оркестровые мотивы за авторством Ричарда Жака (британского композитора, к тому времени уже сделавшего себе громкое имя благодаря внушительному списку "сеговских" проектов) пробирают до глубины души. FMV-вставки с "живыми" актерами, стилизованные под новостную сводку, удивляют не на шутку. Равно как и агитационные плакаты, которые можно наблюдать на экране загрузок.

Но вот уж где геймера ждет настоящий шок, так это на поприще графики. Великолепные модели персонажей (удивило разве что отсутствие мимики, да и сами лица объективно слабее, чем в той же Code Veronica) и потрясающая детализация окружения, которую ранее, в основном, можно было наблюдать лишь на рендренных фонах - вот чего точно не следовало ожидать от безвестной команды шведов. Движок при этом очень редко дает сбои в виде просадки fps, а сама по себе картинка смотрится очень гладкой и четкой.

Слегка придя в себя от поросячьего восторга, начинаешь разбираться в деталях сюжета. В принципе, ничего из ряда вон здесь игра уже предложить не может. Завязка достаточно стандартна - по крайней мере, если проводить аналогии с художественными фильмами. Главный герой в лице Джека Вейда просыпается в госпитале, где встречается с дочерью убитого основателя ACN - крупнейшей корпорации, служащей законодательным органом будущего. Принципы ее функционирования очень просты - группа специальных агентов, именуемых "хэдхантерами", выслеживает опаснейших преступников, после чего берет под стражу и отправляет в подводную тюрьму. Там провинившимся супостатам предлагается принять участие в гладиаторской битве на арене. В случае проигрыша ACN имеет право распорядиться внутренними органами потерпевшего фиаско человека на свое усмотрение.

Когда-то Джек и сам был "охотником за головами", причем номером один. Именно поэтому Энджи и просит нашего героя помочь ей в расследовании убийства. Вот только те самые загадочные события, что привели Джека к больничной койке и амнезии, послужили причиной аннулирования "хэдхантерской" лицензии. Так что, процесс сбора мозаики под названием "Убийство Кристофера Штерна" придется объединить с так называемым "возвращением в школу".

Поначалу сюжет развивается довольно-таки плавно. В лучших традициях Resident Evil основную массу ключевых фактов можно подцепить не из роликов (здесь они представлены как в виде кат-сцен на движке, так и CG-видео), а при помощи различных документов и записок, так что не ленитесь осматривать каждый уголок. Однако ближе к финалу вектор развития кардинально сменится, шагнув от былого (уж простите за небольшой спойлер) футуристического детектива в сторону научной фантастики с характерными для нее нотками антиутопии.

С точки же зрения геймплея, Headhunter представляет собой достаточно интересный симбиоз сразу нескольких проектов, названия которых были обозначены в самом начале статьи. Передвижение между ключевыми точками осуществляется верхом на байке, модель управления которым достаточно своеобразна. Да и сам город отличается на редкость убогой проработкой - страшненькие здания с размазанными текстурками, полнейшее отсутствие интерактивности и жителей на улицах. Что таким образом пытались нам показать разработчики - решительно непонятно.

Основное же действие будет разворачиваться на локациях закрытого типа, как правило отличающихся внушительными размерами. Набор самый стандартный: заправка, офисное здание, морской порт, торговый центр. В ряде случаев будет необходимо решить какую-нибудь головоломку, как правило построенную на стандартном скелете "возьми предмет там и примени его здесь". В общем, ничего особенного - поклонники Silent Hill и Resident Evil справятся в два счета.

Куда интереснее дела обстоят с экшен-составляющей, изрядно смахивающей на серию Syphon Filter. Герой достаточно подвижен - например, может лихо троллить своих врагов, перекатываясь из стороны в сторону. Да, сейчас это уже никого не удивляет, но тогда смотрелось вполне себе в новинку. Вы, конечно же, не поверите, но одной из первых игр (самой первой, если что, был дремучий экшен WinBack 1999 года розлива) с пресловутой возможностью стрелять из-за угла или баррикад стала именно Headhunder.

Арсенал у Джека самый стандартный - пистолет, дробовик, автомат, гранатомет и еще парочка взрывоопасных экземпляров. Единственное новаторство - это пустые гильзы, которые можно использовать для привлечения врагов. Правда, рассчитать траекторию полета оных с высокой точностью порой оказывается достаточно трудно, так что назвать все эту затею хорошей и удобной язык не повернется. Лучше уж старое-доброе "снейковское" простукивание стен.

К слову, о Metal Gear Soild. В игре есть ровным счетом три незначительных момента, которые, собственно, и роднят детище Кодзимы с нашим пациентом. Первое - стелс-миссии, с которыми придется регулярно иметь дело в процессе получения лицензий. Тут уж действительно настоящий "стелс" - никакого оружия кроме собственных рук, с помощью которых Джек не прочь свернуть вражескую шею и вышеупомянутые гильзы. Второе - это оформление самой виртуальной реальности, внутри которой и будет проходить выполнение тестов. Наконец, последнее - это часы с возможностью совершения видеозвонка. Эдакий продвинутый вариант знаменитого кодека.

И, наконец, отдельным пунктом хотелось выделить боссов, в работе над которыми Amuzeпостаралась как следует. Особой харизмой здешние злодеи похвастаться не могут, однако куда важнее для нас тот факт, что каждая битва строго уникальна и требует сугубо индивидуального подхода к тому или иному супостату. Никакой рутиной в духе "хоровод вокруг громилы с последующим "спусканием" в его тушку всего имеющегося арсенала" здесь не пахнет и подавно.

Подводя итоги, хочется сказать, что судьба Headhunter все же очень печальна. Конечно, даже с натяжкой игра не способна называться хитом, поскольку мелких огрехов хватает и в геймплее, и сюжете. Да и сама по себе концепция, отличающаяся засильем клише, все-таки не может претендовать на значимые лавры. В то же время, перед нами очень качественный проект, который вполне мог бы принести своим создателям больше денег, а для владельцев PS2 и DC стать куда более значимым (в плане известности) подарком, нежели он является. Хотя, впрочем, лучше уж быть эдаким lost treasure, чем служить пустым местом.

***

И напоследок… о сиквеле замолвите слово.

В 2004-м году на PS2 и Xbox вышло продолжение под названием Headhunter: Redemption, действие которого разворачивалось спустя 20 лет с момента окончания оригинальной игры. За прошедшие годы виртуальный мир сильно изменился - теперь это уже был чистейший киберпанк с присущими для него неоновыми небоскребами, а нотки антиутопии заиграли еще сильнее. Как итог - жителей города распределили между двумя кастами, низшей и высшей.

Несмотря на ряд объективных достоинств, плохого в Headhunter: Redemption было куда больше. Это и невнятный сюжет, и странное управление с какой-то совершенно недекватной системой прицеливания. Наконец, сменив сеттинг, игра сильно сдала в плане разнообразия локаций. Да и сам по себе графический движок по меркам 2004 года смотрелся просто достойно, но не более того.

A: Спасибо за написание функции «horizontalClick» alex Roosso
https://ru.stackoverflow.com/users/331743/alex-roosso
Горизонтальная прокрутка контента. В данной версии реализовано:
1) Прокрутка контента колёсиком мыши, когда курсор мыши находить в области блока с контентом.
2) Прокрутка контента кнопками (желтые кнопки слева и справа).
3) Прокрутка контента с помощью технологии Свайп на сенсорных устройствах.
4) Прокрутка контента с помощью стрелок клавиатуры (стрелки: влево/вправо).
Код черновой. Поэтому, если у вас есть решения лучше, буду рад вашим предложениям.
Рабочий пример:

function horizontalScroll(e){
isHorizontal = true;
var that = this;
that.elementWidth = that.elementWidth || getColumnWidth(that);

var scrollDirection = ( e.wheelDeltaY )? (0 - e.wheelDeltaY) : ( e.detail),
actualColumn = Math.round( that.scrollLeft / that.elementWidth),
targetColumn = (scrollDirection > 0 )? actualColumn + 1 : actualColumn - 1;

if(scrollElementToColumn( that, targetColumn )) {
e.preventDefault();
} else {
isHorizontal = false;
}
}

function horizontalClick(that, to){
isHorizontal = true;

that.elementWidth = that.elementWidth || getColumnWidth(that);

var actualColumn = Math.round( that.scrollLeft / that.elementWidth),
targetColumn = actualColumn + to;

if(!scrollElementToColumn( that, targetColumn )) {
isHorizontal = false;
}
}

function getColumnWidth(that){
var style = window.getComputedStyle(that, null);
var columnWidth = parseFloat( style.columnWidth || style.MozColumnWidth || style.webkitColumnWidth );
var columnGap = parseFloat( style.columnGap || style.MozColumnGap || style.webkitColumnGap );
return columnWidth + columnGap;
}

function scrollElementToColumn(that, columnIndex){
that.elementWidth = that.elementWidth || getColumnWidth(that);

var expectedPlaceToScroll = Math.round(columnIndex * that.elementWidth),
distanceToScroll = Math.abs( that.scrollLeft - expectedPlaceToScroll ),
defaultScrollShift = 30,
savedScrollLeft = that.scrollLeft,
scrollShift = ( defaultScrollShift < distanceToScroll )? defaultScrollShift : distanceToScroll ;

if(that.scrollLeft < expectedPlaceToScroll){
that.scrollLeft = that.scrollLeft + scrollShift;
}else if(that.scrollLeft > expectedPlaceToScroll){
that.scrollLeft = that.scrollLeft - scrollShift;
}

if(that.scrollLeft !== expectedPlaceToScroll && savedScrollLeft !== that.scrollLeft ){
that.actuallyMoving = setTimeout( function(){scrollElementToColumn( that, columnIndex )}, 10);
return true;
}

if( that.actuallyMoving ) clearTimeout(that.actuallyMoving);
return false;
}

$(document).ready(function() {
var elems = document.getElementsByClassName('mario');
var scx = document.getElementById( 'screenx' );
var i;
for(i = 0, nb = elems.length; i < nb; i++){
if (elems[i].addEventListener) {
elems[i].addEventListener("mousewheel", horizontalScroll, false);// IE9, Chrome, Safari, Opera
elems[i].addEventListener("DOMMouseScroll", horizontalScroll, false);// Firefox
} else elems[i].attachEvent("onmousewheel", horizontalScroll);// IE 6/7/8
}

$("#next").on('click', function() {
horizontalClick(elems[0], 1);
});

$("#prev").on('click', function() {
horizontalClick(elems[0], -1);
});

// at least 100 px are a swipe
// you can use the value relative to screen size: window.innerWidth * .1
const offset = 100;
let xDown, yDown

scx.addEventListener('touchstart', e => {
const firstTouch = getTouch(e);

xDown = firstTouch.clientX;
yDown = firstTouch.clientY;
});

scx.addEventListener('touchend', e => {
if (!xDown || !yDown) {
return;
}

const {
clientX: xUp,
clientY: yUp
} = getTouch(e);
const xDiff = xDown - xUp;
const yDiff = yDown - yUp;
const xDiffAbs = Math.abs(xDown - xUp);
const yDiffAbs = Math.abs(yDown - yUp);

// at least <offset> are a swipe
if (Math.max(xDiffAbs, yDiffAbs) < offset ) {
return;
}

if (xDiffAbs > yDiffAbs) {
if ( xDiff > 0 ) {
horizontalClick(elems[0], -1);
} else {
horizontalClick(elems[0], 1);
}
} else {
if ( yDiff > 0 ) {
console.log('up');
} else {
console.log('down');
}
}
});

window.addEventListener('keydown', function (e) {
switch (e.which) {
case 37: // left
horizontalClick(elems[0], -1);
break;

case 39: // right
horizontalClick(elems[0], 1);
break;

default:
return; // exit this handler for other keys
}

e.preventDefault(); // prevent the default action (scroll / move caret)
});

window.addEventListener('resize', function(e){
console.log('resizing, i saw you !');
for(i = 0, nb = elems.length; i < nb; i++){
elems[i].elementWidth = getColumnWidth(elems[i]);
}
});
});

function getTouch (e) {
  return e.changedTouches[0]
}
@import url(https://fonts.googleapis.com/css?family=Montserrat);
html, body {
  overflow: hidden;
}

.background {
  background-size: cover;
  background-repeat: no-repeat;
  background-position: center center;
  overflow: hidden;
  will-change: transform;
  -webkit-backface-visibility: hidden;
          backface-visibility: hidden;
  height: 130vh;
  position: fixed;
  width: 100%;
  -webkit-transform: translateY(30vh);
          transform: translateY(30vh);
  transition: all 1.2s cubic-bezier(0.22, 0.44, 0, 1);
}
/*.background:before {
  content: "";
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.3);
}*/
.background:first-child {
  /*background-image: url(https://i.postimg.cc/kXq9Qmnj/bgd1.jpg);*/
  -webkit-transform: translateY(-15vh);
          transform: translateY(-15vh);
}
.background:first-child .content-wrapper {
  -webkit-transform: translateY(15vh);
          transform: translateY(15vh);
}
.background:nth-child(2) {
  background-image: url(https://i.postimg.cc/W14vywqg/photo-1424746219973-8fe3bd07d8e3.jpg);
}
.background:nth-child(3) {
    background-image: url(https://i.postimg.cc/TY0xQ41T/photo-1433840496881-cbd845929862.jpg);
}
/* Set stacking context of slides */
.background:nth-child(1) {
  z-index: 3;
}
.poscustomtext {
    display: flex;
    justify-content: center;
    align-items: center;
}
.background:nth-child(3) .content-wrapper {
    height: 100vh;
    display: flex;
    justify-content: center;
    text-align: left;
    flex-flow: column nowrap;
    color: #fff;
    font-family: Arial;
    text-transform: none;
    -webkit-transform: translateY(40vh);
    transform: translateY(40vh);
    will-change: transform;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    transition: all 1.7s cubic-bezier(0.22, 0.44, 0, 1);
}
.background:nth-child(2) {
  z-index: 2;
}

.background:nth-child(3) {
  z-index: 1;
}

.content-wrapper {
  height: 100vh;
  display: flex;
  justify-content: center;
  text-align: center;
  flex-flow: column nowrap;
  color: #fff;
  font-family: Montserrat;
  text-transform: uppercase;
  -webkit-transform: translateY(40vh);
          transform: translateY(40vh);
  will-change: transform;
  -webkit-backface-visibility: hidden;
          backface-visibility: hidden;
  transition: all 1.7s cubic-bezier(0.22, 0.44, 0, 1);
}
.content-title {
  font-size: 12vh;
  line-height: 1.4;
}

.background.up-scroll {
  -webkit-transform: translate3d(0, -15vh, 0);
          transform: translate3d(0, -15vh, 0);
}
.background.up-scroll .content-wrapper {
  -webkit-transform: translateY(15vh);
          transform: translateY(15vh);
}
.background.up-scroll + .background {
  -webkit-transform: translate3d(0, 30vh, 0);
          transform: translate3d(0, 30vh, 0);
}
.background.up-scroll + .background .content-wrapper {
  -webkit-transform: translateY(30vh);
          transform: translateY(30vh);
}

.background.down-scroll {
  -webkit-transform: translate3d(0, -130vh, 0);
          transform: translate3d(0, -130vh, 0);
}
.background.down-scroll .content-wrapper {
  -webkit-transform: translateY(40vh);
          transform: translateY(40vh);
}
.background.down-scroll + .background:not(.down-scroll) {
  -webkit-transform: translate3d(0, -15vh, 0);
          transform: translate3d(0, -15vh, 0);
}
.background.down-scroll + .background:not(.down-scroll) .content-wrapper {
  -webkit-transform: translateY(15vh);
          transform: translateY(15vh);
}

#prev {
    width: 100px;
    height: 100px;
    border-radius: 50%;
    background: rgba(255, 235, 59, 0.75);
    cursor: pointer;
    position: absolute;
    left: 0;
    top: calc(50% - 50px);
 z-index: 9;
}
#next {
    width: 100px;
    height: 100px;
    border-radius: 50%;
    background: rgba(255, 235, 59, 0.75);
    cursor: pointer;
    position: absolute;
    right: 0;
    top: calc(50% - 50px);
 z-index: 9;
}

article.mario {
    height: 80vh;
    width: calc(80vw - 0px);
    column-width: calc(80vw - 0px);
    column-gap: calc(5vw + 0px);
    /* column-gap: 317px; */
    column-rule: 2px dotted #ddd;
    overflow: hidden;
    border: solid 8px black;
}
article.mario:hover {
    border: solid 8px gold;
}
.customtext {
    padding-top: 0px;
    padding-right: 40px;
    padding-bottom: 0px;
    padding-left: 40px;
    text-align: justify;
}
.emphase {
  display: block;
  background-color: #DDD;
  text-align: center;
  font-weight: bold;
}
.bsb {
    width: 200px;
    height: 200px;
    background-color: blue;
    overflow-y: auto;
}

В ту пору, когда Headhunter была анонсирована, мода на стелс-экшены только-только начинала зарождаться, и любой мало-мальски приличный проект, хоть как-то позволяющий игроку бесшумно расправляться с неприятелями, сразу же нарекали "слелсом" и сталкивали лоб в лоб с Metal Gear Solid.

Это только потом выяснится, что в Headhunter вообще-то есть много и от Resident Evil, и даже от Driver. Да и сама по себе боевая система, включая знаменитую (да-да, ту самую, что позже будет популяризована не без помощи Resident Evil 4) камеру из-за плеча, куда ближе к Syphon Filter, нежели детищу Konami. Но маркетинг ведь - штука сродни эпидемии: что надуют в ушко - в то и уверуешь.

И все было бы ничего, кабы датой релиза не значился конец 2001-го, а в качестве целевой платформы не был бы выбран Dreamcast. Тут даже к Ванге не ходи, чтобы понять всю абсурдность подобного решения - от консоли в ту пору уже публично открестилась даже сама Sega, а мир с замиранием сердца ждал релиза второй части похождений Снейка. Неудивительно, что в Headhunter в итоге сыграли три с половиной человека, а про вышедший спустя полгода PS2-порт львиная доля владельцев данной консоли даже и не слыхивала.

А жаль, ведь игра вполне себе могла претендовать на лавры одного из лучших консольных экшенов того поколения. Что еще интереснее - перед нами практически уникальный пример проекта, на 80% состоящего из откровенной копипасты, но при этом умело связанной в единое и уж очень гармоничное целое. Причем, как это ни странно, даже обладающего своим узнаваемым лицом.

И хотя разработкой занималась никому доселе не известная шведская студия Amuze, высоко задранную планку качества ощущаешь уже с первых минут. Оркестровые мотивы за авторством Ричарда Жака (британского композитора, к тому времени уже сделавшего себе громкое имя благодаря внушительному списку "сеговских" проектов) пробирают до глубины души. FMV-вставки с "живыми" актерами, стилизованные под новостную сводку, удивляют не на шутку. Равно как и агитационные плакаты, которые можно наблюдать на экране загрузок.

Но вот уж где геймера ждет настоящий шок, так это на поприще графики. Великолепные модели персонажей (удивило разве что отсутствие мимики, да и сами лица объективно слабее, чем в той же Code Veronica) и потрясающая детализация окружения, которую ранее, в основном, можно было наблюдать лишь на рендренных фонах - вот чего точно не следовало ожидать от безвестной команды шведов. Движок при этом очень редко дает сбои в виде просадки fps, а сама по себе картинка смотрится очень гладкой и четкой.

Слегка придя в себя от поросячьего восторга, начинаешь разбираться в деталях сюжета. В принципе, ничего из ряда вон здесь игра уже предложить не может. Завязка достаточно стандартна - по крайней мере, если проводить аналогии с художественными фильмами. Главный герой в лице Джека Вейда просыпается в госпитале, где встречается с дочерью убитого основателя ACN - крупнейшей корпорации, служащей законодательным органом будущего. Принципы ее функционирования очень просты - группа специальных агентов, именуемых "хэдхантерами", выслеживает опаснейших преступников, после чего берет под стражу и отправляет в подводную тюрьму. Там провинившимся супостатам предлагается принять участие в гладиаторской битве на арене. В случае проигрыша ACN имеет право распорядиться внутренними органами потерпевшего фиаско человека на свое усмотрение.

Когда-то Джек и сам был "охотником за головами", причем номером один. Именно поэтому Энджи и просит нашего героя помочь ей в расследовании убийства. Вот только те самые загадочные события, что привели Джека к больничной койке и амнезии, послужили причиной аннулирования "хэдхантерской" лицензии. Так что, процесс сбора мозаики под названием "Убийство Кристофера Штерна" придется объединить с так называемым "возвращением в школу".

Поначалу сюжет развивается довольно-таки плавно. В лучших традициях Resident Evil основную массу ключевых фактов можно подцепить не из роликов (здесь они представлены как в виде кат-сцен на движке, так и CG-видео), а при помощи различных документов и записок, так что не ленитесь осматривать каждый уголок. Однако ближе к финалу вектор развития кардинально сменится, шагнув от былого (уж простите за небольшой спойлер) футуристического детектива в сторону научной фантастики с характерными для нее нотками антиутопии.

С точки же зрения геймплея, Headhunter представляет собой достаточно интересный симбиоз сразу нескольких проектов, названия которых были обозначены в самом начале статьи. Передвижение между ключевыми точками осуществляется верхом на байке, модель управления которым достаточно своеобразна. Да и сам город отличается на редкость убогой проработкой - страшненькие здания с размазанными текстурками, полнейшее отсутствие интерактивности и жителей на улицах. Что таким образом пытались нам показать разработчики - решительно непонятно.

Основное же действие будет разворачиваться на локациях закрытого типа, как правило отличающихся внушительными размерами. Набор самый стандартный: заправка, офисное здание, морской порт, торговый центр. В ряде случаев будет необходимо решить какую-нибудь головоломку, как правило построенную на стандартном скелете "возьми предмет там и примени его здесь". В общем, ничего особенного - поклонники Silent Hill и Resident Evil справятся в два счета.

Куда интереснее дела обстоят с экшен-составляющей, изрядно смахивающей на серию Syphon Filter. Герой достаточно подвижен - например, может лихо троллить своих врагов, перекатываясь из стороны в сторону. Да, сейчас это уже никого не удивляет, но тогда смотрелось вполне себе в новинку. Вы, конечно же, не поверите, но одной из первых игр (самой первой, если что, был дремучий экшен WinBack 1999 года розлива) с пресловутой возможностью стрелять из-за угла или баррикад стала именно Headhunder.

Арсенал у Джека самый стандартный - пистолет, дробовик, автомат, гранатомет и еще парочка взрывоопасных экземпляров. Единственное новаторство - это пустые гильзы, которые можно использовать для привлечения врагов. Правда, рассчитать траекторию полета оных с высокой точностью порой оказывается достаточно трудно, так что назвать все эту затею хорошей и удобной язык не повернется. Лучше уж старое-доброе "снейковское" простукивание стен.

К слову, о Metal Gear Soild. В игре есть ровным счетом три незначительных момента, которые, собственно, и роднят детище Кодзимы с нашим пациентом. Первое - стелс-миссии, с которыми придется регулярно иметь дело в процессе получения лицензий. Тут уж действительно настоящий "стелс" - никакого оружия кроме собственных рук, с помощью которых Джек не прочь свернуть вражескую шею и вышеупомянутые гильзы. Второе - это оформление самой виртуальной реальности, внутри которой и будет проходить выполнение тестов. Наконец, последнее - это часы с возможностью совершения видеозвонка. Эдакий продвинутый вариант знаменитого кодека.

И, наконец, отдельным пунктом хотелось выделить боссов, в работе над которыми Amuzeпостаралась как следует. Особой харизмой здешние злодеи похвастаться не могут, однако куда важнее для нас тот факт, что каждая битва строго уникальна и требует сугубо индивидуального подхода к тому или иному супостату. Никакой рутиной в духе "хоровод вокруг громилы с последующим "спусканием" в его тушку всего имеющегося арсенала" здесь не пахнет и подавно.

Подводя итоги, хочется сказать, что судьба Headhunter все же очень печальна. Конечно, даже с натяжкой игра не способна называться хитом, поскольку мелких огрехов хватает и в геймплее, и сюжете. Да и сама по себе концепция, отличающаяся засильем клише, все-таки не может претендовать на значимые лавры. В то же время, перед нами очень качественный проект, который вполне мог бы принести своим создателям больше денег, а для владельцев PS2 и DC стать куда более значимым (в плане известности) подарком, нежели он является. Хотя, впрочем, лучше уж быть эдаким lost treasure, чем служить пустым местом.

***

И напоследок… о сиквеле замолвите слово.

В 2004-м году на PS2 и Xbox вышло продолжение под названием Headhunter: Redemption, действие которого разворачивалось спустя 20 лет с момента окончания оригинальной игры. За прошедшие годы виртуальный мир сильно изменился - теперь это уже был чистейший киберпанк с присущими для него неоновыми небоскребами, а нотки антиутопии заиграли еще сильнее. Как итог - жителей города распределили между двумя кастами, низшей и высшей.

Несмотря на ряд объективных достоинств, плохого в Headhunter: Redemption было куда больше. Это и невнятный сюжет, и странное управление с какой-то совершенно недекватной системой прицеливания. Наконец, сменив сеттинг, игра сильно сдала в плане разнообразия локаций. Да и сам по себе графический движок по меркам 2004 года смотрелся просто достойно, но не более того.


text:
Q: Execute XSLT to create HTML page to display XML items Experts:
Input XML:
<Users>
      <User>
            <Name>1</Name>
            <Phrase>User 1 Code</Phrase>
            <Value>1111</Value>
      </User>
      <User>
            <Name>2</Name>
            <Phrase>User 2 Code</Phrase>
            <Value>2222</Value>
      </User>
</Users>

Question:
How can I have a HTML page that upon click of a button on the page, would run a xslt code that will execute to fetch all the "Value" elements' values and popup an alert message with those values?


text:
Q: Spark sum up values regardless of keys My list of tuples looks like this:
Tup = [(u'X45', 2), (u'W80', 1), (u'F03', 2), (u'X61', 2)]

I want to sum all values up, in this case, 2+1+2+2=7
I can use Tup.reduceByKey() in spark if keys are the same. But which function can I use in spark to sum all values up regardless the key?
I've tried Tup.sum() but it give me (u'X45', 2, u'W80', 1, u'F03', 2, u'X61', 2)
BTW Due to large dataset, I want to sum it up in RDD, so I don't use Tup.collect() and sum it up out of Spark.

A: This is pretty easy.
Conceptually, you should first map on your original RDD and extract the 2nd value. and then sum those
In Scala
val x = List(("X45", 2), ("W80", 1), ("F03", 2), ("X61", 2))
val rdd = sc.parallelize(x)
rdd.map(_._2).sum()

In Python
x = [(u'X45', 2), (u'W80', 1), (u'F03', 2), (u'X61', 2)]
rdd = sc.parallelize(x)
y = rdd.map(lambda x : x[1]).sum()

in both cases the sum of 7 is printed.


text:
Q: Why do you lose a drive when configuring RAID 5? RAID 5 requires a minimum of three disks in order to work. Say each disk is 2 TB, and you have four disks, for a total of 8 TB. In RAID 5, your total capacity drops to 6 TB. Why? If the "spare disk" (albeit distributed) is only storing parity bits for all your files, why does it need an entire disk to do so? It makes sense why you lose drives in other configurations, as they are usually mirrors, but this I do not understand. I also do not understand the way RAID actually works in-depth, and would like a further explanation.

A: The disk is not a "spare". It's used for parity information.
The data between all other drives is run through an XOR computation, the result of which is stored on the parity drive. Due to the nature of XOR, if any of the drives that were used in the computation are lost, the information can be restored from the information on all other drives.
XOR stands for exclusive or and is a binary operation which results in 1 if one and only one of the inputs is 1, otherwise the result is 0.
So let's look at an example with 3 disks. If you have a 1 on the first disk and a 0 on the second disk, you put a 1 on the parity disk.
1 XOR 0 = 1

If any of the 3 disks would go offline, running the same XOR operation on the remaining disks will return the value that was on the disk which is now offline.
? XOR 0 = 1 => 1
1 XOR ? = 1 => 0
1 XOR 0 = ? => 1


text:
Q: Should "romaji" be capitalized? Should, "romaji", a loanword from Japanese, be capitalized because it is ultimately related to "Rome", which is a proper noun?
I came across Should capitalization be preserved in loanwords? , but "romaji" is usually not written in romaji in Japanese. For example, it's written ローマ字 in the Japanese edition of Wikipedia. How heterological!

A: In English the convention is to capitalise proper nouns.  If romaji were a proper noun I would certainly capitalise it, however, in this case it is only related to a proper noun.  Here there is a grey area where some words are inconsistently capitalised, for example, anglophone.  It seems in this particular case convention is not to capitalise, as seen with the similar word kanji.

A: The word romaji is a noun, and it is not directly derived from a proper noun. So, it is not typically capitalized (as attested, for example, in the Oxford English Dictionary). It is different from, e.g., the adjective Roman (related to the modern city of Rome, or to the ancient Rome).

A: Kanjidict gives the translation as lowercase romaji:

For the benefit of those who don't know what this word means, it is a foreign word rendered in Japanese using Roman letters.

A: "Romaji" in Japanese is not derived from Rome, the city (per se).
It IS derived from "romanization," that is the use of the "roman" alphabet to describe Japanese sounds. But "romanization" is in the lower case, and therefore, so should "romaji."


text:
Q: XGBoost Classifier illogical results I tried to model an XGBoost Classifier in order to predict if a sport action will be converted or not in a goal on the same principle that VAEP model in soccer (Valuing Actions by Estimating Probabilities).
My train set is made of all type of actions which can occurred, an x value which is close to 1 when the team is near the opposite goal, a meter value which represents the number of meters gained during the actions but also a variable Point which represents if a goal has happened in the 10 following actions (1 if a goal in the 10 actions, 0 otherwise). This last variable is one I am trying to predict. I have 113 features in my dataset for nearly 45000 rows.
My training set looks like this :

My output looks like this :

My XGBoost model looks like this :

However, when I am trying to predict the probability of a new game, I am obtaining very illogical results because when I am comparing to the column Scoring_Probability I have really low probabilities when my Points value is in 1 whereas I am supposed to obtain an higher probability. Do you have an idea of what could be the different problems or how I could improve my model (reducing features, more rows in my dataset, ...).

Thanks in advance for your time !


text:
Q: Matrices and determinants question. Establish that if A is the matrix
\begin{bmatrix}
    b+c & a^2 & a \\
    c+a & b^2 & b \\
    a+b & c^2 & c \\
  \end{bmatrix}
then $|A| = -(a-b)(b-c)(c-a)(a+b+c)$.

A: using linearity with respect to the first column, those matrix have the same determinant:
\begin{bmatrix}
    b+c & a^2 & a \\
    c+a & b^2 & b \\
    a+b & c^2 & c \\
  \end{bmatrix}
\begin{bmatrix}
    b+c + a& a^2 & a \\
    c+a + b& b^2 & b \\
    a+b +c & c^2 & c \\
  \end{bmatrix} whose determinant is $a+b +c$ multiplied by
\begin{bmatrix}
    1 & a^2 & a \\
    1 & b^2 & b \\
    1 & c^2 & c \\
  \end{bmatrix} which is  $-1 \times$ the Vandermonde determinant.


text:
Q: Date browsers problem - if manually changed and focus on it - did not save I have a problem related to Date type which I'm using in smartgwt.
I set up the date to have the possibility to change it manually:
setAttribute("useTextField", true);

In Firefox and Chrome (and maybe other browsers , except Internet Explorer) if first I'm selecting a date with that pop-up calendar and than change it manually and then let the focus on the date field and going to save the document (actually is a form with multiple fields) the date changed manually it is lost, the date choosed from calendar it is saved. This is not happening in Internet Explorer.
In all browsers, if I select from Calendar a date and  than change it manually and change the focus from it everythings goes fine - the manually changed date it is saved into db.
Need some advices.
Thank you a lot.
Later edit:
I'm using com.smartgwt.client.widgets.form.fields.DateItem widget.
DateItem date = new DateItem("A date");
date.setWidth(320);
date.setWrapTitle(false);
date.setAttribute("useTextField", true);
date.setAttribute("inputFormat", "yyyy/MM/dd");
date.setAttribute("displayFormat", "toJapanShortDate");

I'm adding this date on a DynamicForm:
DynamicForm  form = new DynamicForm();
form.setFields(date);

and this form on a VLayout object:
VLayout editLayout = new VLayout(30);
editLayout.addMember(form);

The problem is reproducing  in browsers like Firefox & Chrome when:

*

*I'm selecting first the date from calendar - say I'm selecting 2011/02/11

*I'm changing the day in 2011/02/12 manually - and I'm not changing the focus from this date field

*I'm pressing the 'Save' button.

After these steps the date is 2011/02/11 and not 2011/02/12 how it should be.
In Internet Explorer browser did not happen - the date after the steps above is 2011/02/12!
Later edit:
I'm using a DataSource for updating the data.
I'm having a UserObject  and in the userUpdate method I'm creating this user object first with values from fields (which are on the DynamicForm) - by calling the generateUserObjectFromForm() method
UserObject   user = generateUserObjectFromForm();

Here, in this method I'm doing something like:
user.setAddedDate(date.getValueAsDate()),
but here the date.getValueAsDate() value is the one selected from calendar, not the one modified manually.
I've tried also with:
date.getValue() //Fri Feb 11 00:00:00 GMT+200 2011
date.getValueField() // null
date.getValueAsDate() //Fri Feb 11 00:00:00 GMT+200 2011
date.getDisplayField() //null
date.getDisplayValue()//l2011/02/11

but none worked properly.
I'm using an request object (UserUpdateRequest) for updating the user.
UserUpdateRequest looks like:

public class UserUpdateRequest implements IsSerializable
{
    UserObject user = null;

    public UserUpdateRequest ()
    {
    }

    public UserUpdateRequest (UserObject user)
    {
        this.user = user;
    }

    public UserObject getUser ()
    {
        return user;
    }
}

final UserUpdateRequest request = new UserUpdateRequest(user);

and on the RPC user update method I'm sending this UserUpdateRequest request.
Later edit (15 february):
I've discovered why is happening this issue related to focus, and this is because in the project I'm not using a Button object - and a com.google.gwt.event.dom.client.ClickEvent for it. I'm using a personalized widget:
package de.vogella.gwt.helloworld.client;
import com.smartgwt.client.widgets.Label;

public class buttonLabel extends Label
{
    public buttonLabel (String text, String elementID)
    {
        super();
        setContents(text);
        setAutoWidth();
        setBaseStyle("wwHoverLabel");
        setShowRollOver(true);
    }

}

and this use com.smartgwt.client.widgets.events.ClickHandler().
Anyway I do not know how to resolve this ....
I've created a small project with this issue where I've put also a Button object (Save1) and also a personalized button buttonLabel (Save2) - both with clickhandlers.
Here is the link where you can download sources of this small project I've created: link
Case1:
say for example we choose date 2011/02/16 and we change manually the date into 2011/02/17 and push the button Save1 - everything works fine - the date remains 2011/02/17
Case2-a - line
Window.alert("2 " + date.getValue()); un-commented:
say for example we choose date 2011/02/16 and we change manually the date into 2011/02/17 and push the button Save2 - in the warning message date value is 2011/02/16 but in the field date remains 2011/02/17
Case2-b - line
Window.alert("2 " + date.getValue()); uncommented:
say for example we choose date 2011/02/16 and we change manually the date into 2011/02/17 and push the button Save2 - the value from field date is automatically changed to 2011/02/16
Later later edit:
Since I can't figure out how to solve my problem I'm thinking for the moment at a temporary solution.
So, I have:
DateItem date = new DateItem("Adate");
date.setWidth(120);
date.setWrapTitle(false);
date.setAttribute("useTextField", true);
date.setAttribute("inputFormat", "yyyy/MM/dd");
date.setAttribute("displayFormat", "toJapanShortDate");

Because the attribute useTextField is set to true we can see the text entry field. How can I make this text entry field to be un-editable. Actually I want to have only the possibility to choose the date from calendar and not to change it manually.

A: The following code should work.
DateItem date = new DateItem("Adate");
date.setAttribute("useTextField", true);
date.setAttribute("inputFormat", "yyyy/MM/dd");
date.setAttribute("displayFormat", "toJapanShortDate");
TextItem textItem = new TextItem();
textItem.setAttribute("readOnly", "true");
date.setTextFieldProperties(textItem);


text:
Q: How to setup my UserService using the cake pattern inside of play? Currently I am using guice to wireup my UserService inside of a controller like:
@Singleton
class UserController @Inject()(userService: UserService) extends Controller {
  def show(userId: Int) {
      val user = userService.get(userId)
      Ok("hello " + user.name)
  }
}

My UserService looks like:
abstract class UserService {
  def get(userId: Int): User
}

class UserServiceImpl @Inject()(val userDao: UserDao) extends UserService {
  def get(userId: Int): User = {
    // ....
  }
}

If I wanted to drop guice as a dependency and use the cake pattern, what would the code look like and how would I integrate this into Play so I could use this service in my Controllers?

A: Here's a suggestion with package names to give you an idea of how to organize all of this.
 package controllers.users

 trait UserController extends Controller {
     this: UserService =>

     def show(userId: Int) = {
         val user = this.get(userId)
         Ok("hello "  + user.name)
     }
 }

 package services.users

 trait UserService {
     def get(userId: Int): User
 }

 package services.users.impl

 trait UserServiceImpl extends UserService {
     def get(userId: Int) = { /*implementation*/ }
 }

 package controllers

 object UserController extends UserController with UserServiceImpl

You can put your services and your controller traits anywhere you like in the project. You should put your controller object directly in the controllers package to make routing most convenient.


text:
Q: What is the purpose of having a suffix for Java Primitive Data Types? Sorry for a beginners question! I am learning Java and I'm a bit confused on one topic.
For example, I am declaring and initializing a variable as a float such as:
float myVariable = 9.5;

In some tutorials online, I see floats being declared and initalized like that, but also with a suffix such as this:
float myVariable = 9.5F;

What is the purpose of the the suffix if I am already saying "float myVariable"?
Thanks!

A: Floating point literals are by default of double type. So, 9.5 is double not float. To make it float we append an f at the end.
So, in first case:
float myVariable = 9.5;

You are trying to assign a double type literal to a float type variable, which requires an explicit typecasting. The statement won't compile. You need to add a cast there:
float myVariable = (float) 9.5;

While in 2nd case:
float myVariable = 9.5F;

there is no conversion.

A: Java uses suffixes with these primitives types, here is a brief intro:
float
float fVariable = 5.5 is by default double while float fVariable = 5.5f makes it float
long
long lVariable = 55 here literal 55 is by default int type but long lVariable = 55l makes it long type.
double
double dVariable = 5.5 and double dVariable = 5.5d are similar but here d suffix is  optional

A: Have you tried to compile your code?
This will not compile, because by default all floating-point literals are doubles
float myVariable = 9.5;

You can use explicit cast operation
float myVariable = (float) 9.5;

But it's too verbose, so thankfully the 'F' suffix was introduced:
float myVariable = 9.5F;

BTW, both UPPER ('F') and lower ('f') cases are allowed.

A: Thought it might be worth providing an answer that cites the specification. From §3.10.2 Floating-Point Literals:

A floating-point literal is of type float if it is suffixed with an
  ASCII letter F or f; otherwise its type is double...

In other words, 9.5 and 9.5f are two distinct literals with different types.

*

*9.5 is of type double and cannot be assigned to a float without
explicit casting

*9.5f is of type float (and as such can obviously be
assigned to a variable of type float)


text:
Q: install GeoIP2-php without using composer (manually) how i can install GeoIP2 PHP without using composer and Dependencies (Just manually) , what classes i need to include . should i use __autoload function ? ,
<?php

require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;

// This creates the Reader object, which should be reused across
// lookups.
$reader = new Reader('GeoLite2-City.mmdb');

// Replace "city" with the appropriate method for your database, e.g.,
// "country".

$Ips = array('105.155.240.8');

$record = $reader->city('31.147.255.255');

print($record->country->isoCode . "\n"); // 'US'

?>


text:
Q: Google map fragment is null? I am trying to embed Google map in Activity. I integrated it a couple of times before but It's not happening right now.
My layout file:
<fragment
   android:id="@+id/location_map"
   android:name="com.google.android.gms.maps.SupportMapFragment"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_gravity="right|center_vertical" />

Map Class
@EActivity(R.layout.location_activity)
public class FIndLocationActivity extends AppCompatActivity implements OnMapReadyCallback {

@AfterExtras
void afterViewCreated() {
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.location_map);
    mapFragment.getMapAsync(this);
    .....
    .....
    }
}

mapFragment remains always Null. What am I doing wrong here? I also followed this tutorial but still it's throwing null. I am using actual device to test the app.

A: Check if you added all credentials for GMaps in your app, including additional egl 'uses' lines in manifest. This may be the issue why system can't create fragment.


text:
Q: Xpath 1.0: ancestor-or-self::NameTest/NameTest[predicate] does not work as I expect I am dealing with an XML vocabulary that has "default values": i.e., if a node does not have a certain subnode, I'd like to find the nearest enclosing node that has that subnode, and use its string value as the value of the original node's subnode.
E.g., if I have a tree
Super_node
    sub_node: XXX
    ...
        context_node
            /* does not have a child with name sub_node */

and no intervening nodes between Super_node and context_node have a child sub_node, I want an expression that evaluates to XXX.
I was thinking that the following query should work, but I always get a node list:
string(ancestor-or-self::*/sub_node[1]/text())

My thinking is that ancestor-or-self::* returns, in reverse document order, the list of context_node, parent_of_context_node, ..., Super_node.  I apply the sub_node test to that, and get the list of sub_nodes in that list, again, hopefully, in reverse document order.
I then apply the predicate [1], which should return the first element of that list.  However, this predicate seems to be not effective: in my implementation (which I think is based on libxml2), I still receive a list.
What does work, I found after poking around on Stack Exchange a bit, is
string((ancestor-or-self::*/sub_node)[last()]/text())

Why is the predicate [1] above not effective?

A: The expression
ancestor-or-self::*/sub_node[1]

means
ancestor-or-self::*/(child::sub_node[1])

which selects the first sub_node element child of every ancestor element.
I suspect you were thinking of
(ancestor-or-self::*/sub_node)[1]

which selects all the sub_node children of all the ancestor elements, sorts them into document order, and then returns the first node in this list.
Predicates like [1] bind more strongly than "/".


text:
Q: How to get the time stamp of the first day of current week in Java? What does the cal.get() method mean?
    public static int getTimesWeekmorning(){

    Calendar cal = Calendar.getInstance();
    cal.set(cal.get(Calendar.YEAR),cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0,0);
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    return (int) (cal.getTimeInMillis()/1000);
    }


text:
Q: Using NoRM to access MongoDB from F# Testing out NoRM https://github.com/atheken/NoRM from F# and trying to find a nice way to use it. Here is the basic C#:
class products
{
    public ObjectId _id { get; set; }
    public string name { get; set; }
}

using (var c = Mongo.Create("mongodb://127.0.0.1:27017/test"))
{
    var col = c.GetCollection<products>();
    var res = col.Find();
    Console.WriteLine(res.Count().ToString());
}

This works OK but here is how I access it from F#:
type products() =
    inherit System.Object()

    let mutable id = new ObjectId()
    let mutable _name = ""

    member x._id with get() = id and set(v) = id <- v
    member x.name with get() = _name and set(v) = _name <- v

Is there an easier way to create a class or type to pass to a generic method?
Here is how it is called:
use db = Mongo.Create("mongodb://127.0.0.1:27017/test")
let col = db.GetCollection<products>()
let count = col.Find() |> Seq.length
printfn "%d" count

A: Have you tried a record type?
type products = {
    mutable _id : ObjectId
    mutable name : string
    }

I don't know if it works, but records are often good when you just need a class that is basically 'a set of fields'.

A: Just out of curiosity, you can try adding a parameter-less constructor to a record. This is definitely a hack - in fact, it is using a bug in the F# compiler - but it may work:
type Products =
  { mutable _id : ObjectId
    mutable name : string }
  // Horrible hack: Add member that looks like constructor
  member x.``.ctor``() = ()

The member declaration adds a member with a special .NET name that is used for constructors, so .NET thinks it is a constructor. I'd be very careful about using this, but it may work in your scenario, because the member appears as a constructor via Reflection.
If this is the only way to get succinct type declaration that works with libraries like MongoDB, then it will hopefuly motivate the F# team to solve the problem in the future version of the language (e.g. I could easily imagine some special attribute that would force F# compiler to add parameterless constructor).

A: Here is a pretty light way to define a class close to your C# definition: it has a default constructor but uses public fields instead of getters and setters which might be a problem (I don't know).
type products =
    val mutable _id: ObjectId
    val mutable name: string
    new() = {_id = ObjectId() ; name = ""}

or, if you can use default values for your fields (in this case, all null):
type products() =
    [<DefaultValue>] val mutable _id: ObjectId
    [<DefaultValue>] val mutable name: string


text:
Q: Is there a complete test for GLR parser? Is there a complete series tests to test if a GLR parser is correctly written?
I'am writing a GLR parser, so I want to find some tests for my code. I can't figured out a complete test suit by my self because of some missing conditions perhaps.
I've already written some tests to test the parser. But I don't know if it will fail on other conditions. So I need "a complete test", may be a lot of people adding test cases to the test. That could promise the parser can handle any cases. GLR parser can handle any context-free grammar, so a lot of conditions are needed to be tested.


text:
Q: how can i check json response has own property with switch case? switch (res) {
case res.hasOwnProperty('userName'):
console.log('a');
break;
}

how can i check  json response has own property with switch case ?
this is my json object
{
"userName": [
    "فقط حروف فارسی را وارد کنید"
],
"userLname": [
    "نام خانوادگی بنمیتواند خالی باشد"
],
"userAddress": [
    "آدرس صحیح نیست",
    "فقط حروف فارسی را وارد کنید"
],
"userWeb": [
    "آدرس وبسایت وارد شده اشتباه است ",
    "دامنه وارد شده صحیح نیست"
],
"userTeleid": [
    "حروف انگلیسی را فقط ساپورت میکند"
],
"userInsta": [
    "حروف انگلیسی را فقط ساپورت میکند"
]

}
Can the switch do this correctly? Are all items checked in order?

A:
Can the switch do this correctly?

Yes, but that's really not what switch is for. Use if:
if (res.hasOwnProperty('userName')) {
    console.log('a');
}

The way to do it with switch (don't do this!) is:
switch (true) {
    case res.hasOwnProperty('userName'):
        console.log('a');
        break;
}

That works because in JavaScript (unlike some other languages), case labels are expressions. The switch expression is evaluated and then each case expression is evaluated and tested against the switch expression using strict equality (===).
Or you could do this (which would work in most languages, not just JavaScript);
switch (res.hasOwnProperty('userName')) {
    case true:
        console.log('a');
        break;
}

But again: Don't do that. Use an if. That's what it's for. :-)

A: why not simply
if ('userName' in res) {
   ...
}

?
...if for any reason You HAVE to use a switch You can still write it like:
switch(true) {
  case 'userName' in res:
    // ...
    break;
  case 'userLname' in t:
    // ...
    break;
  // ...
}

but I do NOT recommend it, the if version does a great job there

A: I would rather store the properties you want to check in an array and iterate over it :

const res = {
"userName": [
    "فقط حروف فارسی را وارد کنید"
],
"userLname": [
    "نام خانوادگی بنمیتواند خالی باشد"
],
"userAddress": [
    "آدرس صحیح نیست",
    "فقط حروف فارسی را وارد کنید"
],
"userWeb": [
    "آدرس وبسایت وارد شده اشتباه است ",
    "دامنه وارد شده صحیح نیست"
],
"userTeleid": [
    "حروف انگلیسی را فقط ساپورت میکند"
],
"userInsta": [
    "حروف انگلیسی را فقط ساپورت میکند"
]}

const propertiesToCheck = ["userName", "userLname", "userWeb", "foo"];

propertiesToCheck.forEach(property =>
{
    if (res.hasOwnProperty(property))
        console.log(property + " exists");
    else
        console.log(property + " does not exist");
});


text:
Q: Singular and Plural words matching with Pandas This question is an extension to my previous question Multiple Phrases Matching Python Pandas. Although I had figured out the way after an answer to solve my problem, some typical problem in singular and plural words appeared.
ingredients=pd.Series(["vanilla extract","walnut","oat","egg","almond","strawberry"])

df=pd.DataFrame(["1 teaspoons vanilla extract","2 eggs","3 cups chopped walnuts","4 cups rolled oats","1 (10.75 ounce) can Campbell's Condensed Cream of Chicken with Herbs Soup","6 ounces smoke-flavored almonds, finely chopped","sdfgsfgsf","fsfgsgsfgfg","2 small strawberries"])

What I simply needed was match the phrases in the ingredients Series with the phrases in the DataFrame. As a Pseudo code,

If ingredients(singular or plural) found in phrase in the DataFrame,
  return the ingredient. Or otherwise, return false.

This was achieved by an answer given as follows,
df.columns = ['val']
V = df.val.str.lower().values.astype(str)
K = ingredients.values.astype(str)
df['existence'] = map(''.join, np.where(np.char.count(V, K[...,np.newaxis]),K[...,np.newaxis], '').T)

And I also applied following to fill the empty cells with NAN so that I can easily filter out the data.
df.ix[df.existence=='', 'existence'] = np.nan

The results we as follows,
print df
                                                 val        existence
0                        1 teaspoons vanilla extract  vanilla extract
1                                             2 eggs              egg
2                             3 cups chopped walnuts           walnut
3                                 4 cups rolled oats              oat
4  1 (10.75 ounce) can Campbell's Condensed Cream...             NaN
5    6 ounces smoke-flavored almonds, finely chopped           almond
6                                          sdfgsfgsf              NaN
7                                        fsfgsgsfgfg              NaN
8  2 small strawberries                                           NaN

This was correct all along but when singular and plural words mapping are not like almond=> almonds apple=> apples. when something appear like strawberry=>strawberries, This code recognize it as a NaN.
To improve my code to detect such occurrences. I like to change my ingredients Series to data Frame as follows.
#ingredients

#inputwords       #outputword

vanilla extract    vanilla extract
walnut             walnut
walnuts            walnut
oat                oat
oats               oat
egg                egg
eggs               egg
almond             almond
almonds            almond
strawberry         strawberry
strawberries       strawberry
cherry             cherry
cherries           cherry

So my logic here is whenever a word in #inputwords appear in the phrase I want to return the word in the other cell. I other words, when strawberry or strawberries appear in the phrase, the code just out put the word next to it strawberry. So that my final result will be
                                                 val        existence
0                        1 teaspoons vanilla extract  vanilla extract
1                                             2 eggs              egg
2                             3 cups chopped walnuts           walnut
3                                 4 cups rolled oats              oat
4  1 (10.75 ounce) can Campbell's Condensed Cream...             NaN
5    6 ounces smoke-flavored almonds, finely chopped           almond
6                                          sdfgsfgsf              NaN
7                                        fsfgsgsfgfg              NaN
8  2 small strawberries                                           strawberry

I cannot find a way to incorporate this functionality to the existing code or write a new code to do so. can anyone help me with this?

A: consider using a stemmer :)
http://www.nltk.org/howto/stem.html
taken straight out of their page:
    from nltk.stem.snowball import SnowballStemmer
    stemmer = SnowballStemmer("english")
    stemmer2 = SnowballStemmer("english", ignore_stopwords=True)
    >>> print(stemmer.stem("having"))
    have
    >>> print(stemmer2.stem("having"))
    having

Refactor your code to stem all words in the sentence before matching them with the ingredients list.
nltk is an awesome tool for exactly what you're asking!
Cheers

A: # your data frame
df = pd.DataFrame(data = ["1 teaspoons vanilla extract","2 eggs","3 cups chopped walnuts","4 cups rolled oats","1 (10.75 ounce) can Campbell's Condensed Cream of Chicken with Herbs Soup","6 ounces smoke-flavored almonds, finely chopped","sdfgsfgsf","fsfgsgsfgfg","2 small strawberries"])

# Here you create mapping
mapping = pd.Series(index = ['vanilla extract' , 'walnut','walnuts','oat','oats','egg','eggs','almond','almonds','strawberry','strawberries','cherry','cherries'] ,
          data = ['vanilla extract' , 'walnut','walnut','oat','oat','egg','egg','almond','almond','strawberry','strawberry','cherry','cherry'])
# create a function that checks if the value you're looking for exist in specific phrase or not
def get_match(df):
    match = np.nan
    for key , value in mapping.iterkv():
        if key in df[0]:
            match = value
    return match
# apply this function on each row
df.apply(get_match, axis = 1)


text:
Q: Regenerating access keys in Azure by REST API For Azure there is an API Endpoint that allows to regenerate key.
The endpoint looks like
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey?api-version=2017-06-01

Documentation states

When you have code that needs to access or modify resources, you must set up an Azure Active Directory (AD) application.

However, when I use it (i.e. create POST request) I'm getting error Authentication failed. The 'Authorization' header is missing. I tried to follow this tutorial and I did all the steps except Assign application to role What role should I select to be able to regenerate password? How do I do that? Am I getting this correct?

A: I think you could use Storage Account Key Operator Service Role.
The Storage Account Key Operators are allowed to list and regenerate keys on Storage Account.
Storage Account Contributor: Lets you manage storage accounts, but not access to them.
Contributor:Lets you manage everything except access to resources.
If you have some more action to operate, you could use more powerful roles, but if you only want to regenerate key, I suggest that you could use Storage Account Key Operator Service Role.


text:
Q: How to customize tinyMCE built-in buttons like -silverstripe- CMS when I had a look on http://demo.silverstripe.com/admin/ [user-name:admin ,password:admin]
I noticed that they have overridden the insert image button and also the insert flash buttonthey have replaced it with their own widget.

The Question is What is the easiest way achieve this or the best guide ?
note : I'm not using sliverstripe or any ready made CMS

A: Adding your own buttons is quite well described at the TinyMCE web: http://tinymce.moxiecode.com/tryit/custom_toolbar_button.php
Pasted from site:
tinyMCE.init({
    mode : "textareas",
    theme : "advanced",
    theme_advanced_buttons1 : "mybutton,bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink",
    theme_advanced_buttons2 : "",
    theme_advanced_buttons3 : "",
    theme_advanced_toolbar_location : "top",
    theme_advanced_toolbar_align : "left",
    theme_advanced_statusbar_location : "bottom",
    plugins : 'inlinepopups',
    setup : function(ed) {
        // Add a custom button
        ed.addButton('mybutton', {
            title : 'My button',
            image : 'img/example.gif',
            onclick : function() {
                // Add you own code to execute something on click
                ed.focus();
                ed.selection.setContent('Hello world!');
            }
        });
    }
});

Just change this as you please.


text:
Q: Showing the basis of a Hilbert Space have the same cardinality I am trying to show that if we have two orthonormal families $\{a_i\}_{i\in K}$ and $\{b_j\}_{j\in S}$ and these are the basis of some Hilbert Space H, then they have the same cardinality.
So If I suppose that the $\{a_i\}_{i\in K}$ is countable, i.e., that $K$ is countable and that $S$ is uncountable, then we want to show that this leads to a contradiction.
As the $\{b_i\}_{i\in K}$ forms a basis we know that and $a_n$ as:
$$a_n=\sum_{1}^{\infty} c_ib_i$$
Now if we let the set $D_n=\{i|\mbox{for i in the sum of}\ a_n\}$ and then take:
$D:=\bigcup_n^{\infty} D_n$ then this is the set of all indices and it is a countable set as it is the countable union of countable sets.
Take $l\in{S}$ that is not in $D$ then as $b_l\in H$ and as the $\{a_i\}_{i\in K}$ forms a basis we have that:
$$b_l\in \overline{lin\{\sum_{i=1}^{\infty} a_i\}}$$
Then from above we have that:
$$\overline{lin\{\sum_{i=1}^{\infty} a_i\}}=\overline{lin\{b_d|d\in D\}}$$
If we now consider $$ ||b_l||^2=\sum _1^{\infty} c_i\langle b_{d_i}, b_l \rangle =0$$ so we have the contradiction.
So is the above proof correct and can we generalise this further to different cardinalities? Does H have to be a Hilbert space for this to be true?
Thanks very much for any help.

A: Let $(a_i)_{i \in K}$ and $(b_j)_{j\in S}$ two bases of a Hilbert space $H$. Following your idea, we will show that $|S| \le |K|$ and by symmetry conclude $|S| = |K|$. Note that for finite dimensional spaces everything we are up to is well known from basic linear algebra. So we will suppose $\aleph_0 \le |K|, |S|$ in what follows.
Let $i \in K$, then we can write, as the $(b_j)$ form a basis
\[ a_i = \sum_{j\in S_i} \langle a_i, b_j\rangle b_j \]
for some countable subset $S_i \subseteq S$. Let $S' := \bigcup_{i\in K} S_i$. If there were any $l \in S \setminus S'$, we have, as $(a_i)$ is a basis,
$$ b_l \in H = \overline{\operatorname{lin}\{a_i : i \in K\}} $$
on the other hand, for each $i$
$$ a_i \in \overline{\operatorname{lin}\{b_j: j \in S_i\}} \subseteq
   \overline{\operatorname{lin}\{b_j : j \in S'\}} $$
so $b_l \in  \overline{\operatorname{lin}\{b_j : j \in S'\}}$, hence there is a countable $T \subseteq S'$ with $b_l \in \overline{\operatorname{lin}\{b_j : j \in T\}}$, giving
$$ \|b_l\|^2 = \sum_{j \in T}|\langle b_l, b_j\rangle|^2 = 0 $$
Contradiction.
So $S = S'$ and hence
$$ |S| = |S'| = \left|\bigcup_{i \in K} S_i\right| \le |K| \cdot\sup_i |S_i| \le |K| \cdot \aleph_0 = |K| $$
as desired.


text:
Q: Can a Interpreted language have a entry point I want to know, do only compiler based languages use a entry point, or if a interpreter based language can also use entry points, if yes then please give 1 example.

A: I shell scripts starts at the beginning of the script file. A python program starts at the beginning of the python file. In both cases you can call that the "entry" point.
The decision, if a program starts at the beginning of the file (like in both the examples above) or starts at a specific function (like main) has nothing to do with the decision to make a language compiled or interpreted. It is a mere language design consideration.
Addition
It is actually a quite common for example in python to do something like
# include statements and
# class definitions and
# function definitions go here

def main():
    pass
    #do main stuff here

if __name__ == "__main__":
    main()

This defines a main function and the first non-definition statement calls it, if the module is the main program file.

A: A typical way a program is started in Linux is by a shell calling fork+execve.  The new process is loaded and begins execution at the entry point specified by the format of the executable; for example ELF. In the case of an interpreted language, the executable is the interpreter specified on the first line after #! such as /usr/bin/python.


text:
Q: How to kill php connection from client side? I am using jquery with php.
On  the client side the user can close the dialogbox or it will stop ajax request due to the time-out limit.
The problem is the mysql is still continue the process which is in the "sending data state".
But the php process no longer available because of:
set_time_limit(20);

Are there way to kill the PHP::PDO connection with  mysql process?
Thanks Arman.

A: Sounds like you're using persistent database connections. With those, the connection from mysql<->php is kept alive regardless of whether a client is actually connected or not. This allows queries to keep running and keeps any variables, locks, temporary tables, etc... to stay alive and gum up the works.
Disable persistent connections, and your 'stuck' queries will die when the client disconnects and PHP cleans up afterwards.


text:
Q: CSS hover is not working . Where am I getting it wrong? I have a problem with basic css hover. I don't understand why it's not working.

.container {
  position: relative;
}

i {
  color: #319a31;
  font-size: 70px;
  position: absolute;
  top: 40%;
}

.col-sm-6:hover i {
  color: #ff8533;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />

A: It's working i guess . Restart your browser or try to run this code in a different browser.


text:
Q: Can't display results where the ending matches I'm making a rhyme dictionary, and I have a database table with 3 coloumns, the user will search the database and the search keywords will search database where the ending of the word matches with the word in textbox.
When I enter some keyword into textbox
I get ERROR: Incorrect syntax near the keyword 'LIKE'.
This is how my database looks like
Here is how my aspx looks like:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

    <title>Kafiye Dizini - Türkçe Kafiye Bulma Sözlüğü - Uyak Bulucu Sözlük - İstediğiniz harf ile biten kelimeleri bulan sözlük</title>
    <meta name="description" content="İstediğiniz harfler ile biten kelimeleri bulmanızı sağlayan sözlük" />
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
    <link href="style.css" rel="stylesheet" />

    <form id="form1" runat="server">

İletişim: fahrettinveysel@gmail.com

Kafiye Dizini

İstediğiniz harf veya hece ile biten kelimeleri bulmanızı sağlayan sözlük

                        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

Örnek Arama

                        <input type="text" class="ornekaramatextbox" value="rop" disabled="disabled" />

filantrop
gardırop
hipermetrop
mikrop
mizantrop

    </form>

and this is my aspx.cs
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    SqlConnection cnn = new SqlConnection("Initial Catalog=kafiyedizini;Data Source=localhost;Integrated Security=SSPI;");

    protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text != "")
        {
            cnn.Open();
            SqlCommand cmd = new SqlCommand("SELECT kelime1,kelime2,kelime3 FROM kelimeler LIKE @arama", cnn);
            cmd.Parameters.AddWithValue("@arama", "%" + TextBox1.Text);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    resultbox1.InnerHtml += dr.GetString(0);
                    resultbox2.InnerHtml += dr.GetString(1);
                    resultbox3.InnerHtml += dr.GetString(2);
                }
            }

            cnn.Close();
        }
        else
        {
            resultbox1.InnerHtml += "please enter data";
        }
    }
}

A: You are missing WHERE part of the SQL query
Example:
SELECT * FROM test WHERE test.Id LIKE '%asd%'

I also think, dr.Read() executes PER ROW.
Hope this helps

A: The initial sql statement in your question should look like this
SELECT kelime1,kelime2,kelime3 FROM kelimeler where kelime1 LIKE @arama OR kelime2 LIKE @arama or kelime3 like @arama

You missed the where and the fields you want to use in your like statement.
to have each result in a separate 'box' you better investigate how a GridView works or a DataRepeater.
Closest in your initial code what could work, including support for handling null/emtpy values for one the fields returned, nicely filling the 3 resultboxes:
        var f1 = dr.GetString(0);
        var f2 = dr.GetString(1);
        var f3 = dr.GetString(2);
        if (!String.IsNullOrEmpty(f1))
            resultbox1.InnerHtml += String.Format("
{0}
",f1);
        if (!String.IsNullOrEmpty(f2))
            resultbox2.InnerHtml += String.Format("
{0}
",f2);
        if (!String.IsNullOrEmpty(f3))
            resultbox1.InnerHtml += String.Format("
{0}
",f3);


text:
Q: Verify $\tau=\{A \subseteq \mathbb{R}| |\mathbb{R}\setminus A| \leq |\mathbb{N}| \}$ is a topology Consider the set $\tau=\{A \subseteq \mathbb{R}| |\mathbb{R}\setminus A| \leq |\mathbb{N}|  \}$
Verify it is a topology

*

*obviously $\mathbb{R} \in \tau$  since $ |\mathbb{R}\setminus \mathbb{R}|=0 \leq |\mathbb{N}|  \}$
but $\emptyset\notin \tau$ ? because $ |\mathbb{R}\setminus \emptyset|=|\mathbb{R}|  \leq |\mathbb{N}|  \}$ is false.... (1) this is a problem, Should I assume $\emptyset$ is there anyway?

*Let $A_\alpha \in \tau$ $  \forall \alpha \in I$ $\implies$ $ |\mathbb{R}\setminus A_\alpha|  \leq |\mathbb{N}| $ $\forall \alpha$ now let $U=\bigcup_{\alpha \in I}A_\alpha$
$| \mathbb{R}\setminus\bigcup_{\alpha \in I}A_\alpha|=| \bigcap_{\alpha \in I} \mathbb{R}\setminus A_\alpha| $
...(2) Now here is where I am unsure how can I justify this cardinality is $\leq |\mathbb{N}| $, what theorem should I invoque?

*Let $A_\alpha \in \tau$ $  \forall \alpha =1,...,m$ $\implies$ $ |\mathbb{R}\setminus A_\alpha|  \leq |\mathbb{N}| $ $\forall \alpha$ now let $B=\bigcap_{\alpha=1}^mA_\alpha$
$| \mathbb{R}\setminus\bigcap_{\alpha=1}^mA_\alpha|=|\bigcup_{\alpha=1}^m \mathbb{R}\setminus A_\alpha| $
...(3) Same  here , how can I justify this cardinality is $\leq |\mathbb{N}| $, what theorem should I invoque?

A: As you've noticed, $\tau$ is not actually a topology, since it fails to include the empty set. While this may be a trick question, I suspect that the omission is actually an oversight. I would point out that $\varnothing\notin\tau$, so that in fact $\tau$ is not a topology, but I would go on to prove that $\tau\cup\{\varnothing\}$ is a topology.
For your second question, pick any $\alpha_0\in I$ and observe that
$$\bigcap_{\alpha\in I}(\Bbb R\setminus A_\alpha)\subseteq\Bbb R\setminus A_{\alpha_0}\;,$$
so that automatically
$$\left|\bigcap_{\alpha\in I}(\Bbb R\setminus A_\alpha)\right|\le|\Bbb R\setminus A_{\alpha_0}|\;.$$
Finally, for the third question, what do you know about the union of a finite number of countable sets?


text:
Q: Solution to equation (is it possible?) After stumbling through some dense fog of algebra, I have come across the following problem - any help would be much appreciated!
I'm currently trying to solve the following equation, but my efforts to date have been inconsequential. I was wondering whether anyone had some suggestions on how to proceed with solving the following equation for $x$? Clearly, in the case where $w_3 = 0$, one can easily solve a quadratic equation, but, if possible, I'd ideally like a general method for solving the equation rather than thinking about this on a case by case basis (since the $w_i$ are themselves functions of many parameters which ideally shouldn't be restricted to special cases).
The equation I'm trying to solve for $x$ is: $$a_1x^2 + a_2x + a_3x^{1-\frac{1}{\alpha}} + a_4 = 0$$
where $a_1, a_2, a_3, a_4 > 0$, and $\alpha > 0$ is a fixed parameter.
Thank you!

A: For arbitrary (irrational) $\alpha$ there is an obstacle to solving the equation beyond the mere fact that it is not a polynomial equation.  The coefficients $w_1,w_2,w_3,w_4$ are assumed to be positive, so that there are no changes-in-sign in the equation and Descartes' rule (generalized) tells us there are no positive roots.
But on the other hand $x^{1-\frac{1}{\alpha}}$ is only well-defined for positive $x$ when $\alpha \in (0,1)$ is irrational.  So putting these two observations together would say there is not even a possibility of numerical approximation of a root (no positive root exists and it is unclear what complex root might be meaningful).


text:
Q: C# programming for trimming first three lines and last four lines Below is my XML file. I want to get the node "name" from the XML using C#
'EventObjectsRead' ('73')
message attributes:
SATRCFG_OBJECT [xml] =
<ConfData>
  <CfgAgentGroup>
    <CfgGroup>
      <DBID value="225"/>
      <tenantDBID value="101"/>
      <name value="CBD"/>
      <routeDNDBIDs>
        <DBID value="825"/>
      </routeDNDBIDs>
      <capacityTableDBID value="0"/>
      <quotaTableDBID value="0"/>
      <state value="1"/>
      <capacityRuleDBID value="0"/>
      <siteDBID value="0"/>
      <contractDBID value="0"/>
    </CfgGroup>
    <agentDBIDs>
      <DBID value="128"/>
      <DBID value="133"/>
      <DBID value="135"/>
      <DBID value="385"/>
      <DBID value="433"/>
    </agentDBIDs>
  </CfgAgentGroup>
</ConfData>

IATRCFG_TOTALCOUNT [int] = 1
IATRCFG_OBJECTCOUNT [int] = 1
IATRCFG_OBJECTTYPE [int] = 5
IATRCFG_REQUESTID [int] = 3

Is there a way to get node "name" directly from above XML or if i need to trim first three lines and last four lines. how can i do it.

A: You could extract the node you are looking for using Regex on the original string (where str is your string data):
// Use Regex to match the exact string and parse that to XElement.
string nameXML = Regex.Match(str, @"<name +value="".*"" */>").Groups[0].Value;
XElement name = XElement.Parse(nameXML);

Or here is an example where you can strip the invalid lines, parse the XML and then access the data from an XML object:
// Split the string into groups using newline as a delimiter.
string[] groups = str.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
// Use skip and take to trim the first 3 and last 4 elements.
// Rejoin the remainder back together with empty strings and parse the XElement.
string xmlString = string.Join(string.Empty, groups.Take(groups.Length - 4).Skip(3));
XElement xml = XElement.Parse(xmlString);
// Use Descendants and First to get the first node called 'name' in the XML.
XElement name = xml.Descendants("name").First();

A: From the string what you provided us and the describtion of what you want to do i assume taht you want to extract the XMl from the file. I would do this in the following way:
        string text = System.IO.File.ReadAllText(@"C:\docs\myfile.txt");
        Regex r = new Regex("<ConfData>(.|\r\n)*?</ConfData>");
        var v = r.Match(text);

        string myResult = "<ConfData>" + v.Groups[0].ToString() + "</ConfData>";

A: Here are two ways to achieve this. Either with string operation or with RegEx:
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Name: {0}", GetNameFromFileString(File.ReadAllText("file.txt")));
        Console.WriteLine("Name: {0}", GetNameFromFile("file.txt"));
    }

    private static string GetNameFromFileString(string filecontent)
    {
        Regex r = new Regex("(?<Xml><ConfData>.*</ConfData>)", RegexOptions.Singleline);
        var match = r.Match(filecontent);
        var xmlString = match.Groups["Xml"].ToString();
        return GetNameFromXmlString(xmlString);
    }

    private static string GetNameFromFile(string filename)
    {
        var lines = File.ReadAllLines(filename);
        var xml = new StringBuilder();
        var isXml = false;
        foreach (var line in lines)
        {
            if (line.Contains("<ConfData>"))
                isXml = true;
            if (isXml)
                xml.Append(line.Trim());
            if (line.Contains("</ConfData>"))
                isXml = false;
        }

        var text = xml.ToString();
        return GetNameFromXmlString(text);
    }

    private static string GetNameFromXmlString(string text)
    {
        var xDocument = XDocument.Parse(text);
        var cfgAgentGroupt = xDocument.Root.Element("CfgAgentGroup");
        var cfgGroup = cfgAgentGroupt.Element("CfgGroup");
        var name = cfgGroup.Element("name");
        var nameValue = name.Attribute("value");
        var value = nameValue.Value;
        return value;
    }
}