text:
Answering the Mysteries of Jesus Christ - December 26
"In other words, Mormonism rejects traditional Christian orthodoxy at the onset - this rejection is the very logic of Mormonism's existence."
~Albert Mohler (from "Are Mormons Christian?")
Today's Answer
The Trinity in Genesis?
John Gill
God's great and incommunicable name Jehovah is always in the singular and is never used plurally; the reason of which is because it is expressive of his essence, which is but one. It is the same with "I AM that I AM." But the first name of God we meet with in Scripture, and that in the first verse of it, is plural; "In the beginning God (Elohim) created the heaven and the earth" (Gen. 1:1), and therefore must design more than one, at least two, and yet not precisely two, or two only; then it would have been dual. But it is plural, and cannot design fewer than three.
Now Moses might have made use of other names of God in his account of the creation; as his name Jehovah, by which he made himself known to Moses and to the people of Israel; or Eloah, the singular of Elohim, which is used by him (Deut. 32:15, 16) and in the book of Job frequently. So, it was not a lack of singular names of God, nor the barrenness of the Hebrew language, which obliged him to use a plural word. It was no doubt of choice and with design; and which will be more evident when it is observed that one end of the writings of Moses is to root out the polytheism of the heathens and to prevent the people of Israel from going into it. Therefore, it may seem strange that he should begin his history with a plural name of God. He must have some design in it, which could not be to inculcate a plurality of gods, for that would be directly contrary to what he had in view in writing and to what he asserts (Deut. 6:4).
And then the historian goes on to make mention of the Persons of the Trinity, who, besides the Father, included in this name, are the Spirit of God, that moved upon the face of the waters, and the Word of God (Gen. 1:2), which said, "Let there be light, and there was light"; and which spoke that, and all things, out of nothing; see (John 1:1-3). And it may be further observed, that this plural wordElohim is, in this passage, in construction with a singular verb, bara, rendered "created"; which some have thought is designed to point out a plurality of persons and the unity of the divine essence: but if this is not judged sufficient to build it upon, let it be further observed, that the word Elohim is sometimes in construction with a plural verb, as in Gen. 20:13; Gen. 35:7; 2 Sam. 7:23, where Elohim is said to cause Abraham to wander from his father's house; to appear to Jacob; and to go forth to redeem Israel - all which are personal actions.
Adapted from A Body of Doctrinal Divinity, Book 1, Chapter 27, by John Gill.
Today's Video
What is the Role of the Holy Spirit Today?
Answered by Paul Tripp
Do you have questions about the life, ministry, and resurrection of Jesus Christ?
Get real answers at Jesus.org.


NAPA is happy to inform our members that the hearing for AB 328, PA OTP Bill, has been moved to April 5th. This gives PAs more time to continue commenting on the Bill. Please support by following the instructions below. Tell legislators your story as a PA, and please have your family members also comment as Nevada residents as well. You can also sign up on the Nevada legislature page for alerts on this and other PA bills.
We are very excited to share that NAPA has secured introduction of AB 328 in the Nevada Legislature! This bill aims to achieve Optimal Team Practice for PAs in Nevada and needs a STRONG showing of PA support! NAPA Is working diligently to advocate on your behalf and we need your help to get the bill passed in the legislature. Please take a moment to follow this link to submit comments TODAY and ask your colleagues and friends to do so in support of PAs as well.


text:
Crochet pour ces dames est un roman policier écrit par l'écrivain français Georgius en 1958.
C'est le troisième roman publié par l'auteur. Il paraît sous la signature de Georgius ; le pseudonyme de Jo Barnais est rappelé entre parenthèses, mais le personnage qui porte ce nom,
et qui était le héros des deux romans précédents, est ici remplacé par un policier : l'inspecteur Lamorrige.

Résumé
Venu pour enquêter sur la mort, peut-être accidentelle, du secrétaire de mairie Antoine Barjon, l'inspecteur Lamorrige arrive à Bourgueil-l'Étang au moment où l'on découvre le corps du maire et celui d'une inconnue, carbonisés dans un incendie criminel. Le maire et le secrétaire de mairie avaient à Paris une double vie, et l'enquête va même concerner la caravane du Tour de France ...

Personnages
 Inspecteur Lamorrige, du premier district de la police de Versailles.
 Commissaire Germinax, son supérieur.
 Inspecteur-adjoint Chadal, du premier district de la police de Versailles.
 Firmin Fréval : maire de Bourgueil-l'Étang.
 Antoine Barjon : secrétaire de mairie de Bourgueil-l'Étang.
 Gustave Sabord : cafetier à Bourgueil-l'Étang.
 Eugène Marillier : conseiller municipal à Bourgueil-l'Étang.
 M. Humbrecht : propriétaire d'hôtels à Paris.
  Humbrecht, son épouse.
 Ravenel et Pichard : journalistes à L'Équipe.
 Alfred, dit la Filoche : camelot.
 Fanzetti : garagiste à Paris.
 Le père Mahu : grossiste aux Halles.
 Petit-Louis et Jeannot : hommes de main.
 Ghislaine, Rosy, Minou : entraîneuses au Tipperary.
 Béatrice : danseuse au Tipperary.

Édition
 Série noire , 1958

Commentaire
 Après le monde du music-hall et celui des courses hippiques, Georgius aborde ici le Tour de France ; non le peloton des coureurs, mais la caravane et les attractions qui s'installent de ville en ville à chaque étape. Le "crochet" dont il est question dans le titre n'est pas un accessoire de tricot, mais un concours de chanson amateur.
 L'inspecteur Lamorrige est le narrateur. Plus posé que Jo Barnais, son langage est moins fleuri. Georgius ne le réutilisera pas dans ses romans suivants et reviendra au tandem Lambert-Chadal de ses deux premiers livres.

Autour du livre
 Dans Mort aux ténors et Tornade chez les flambeurs, les personnages consomment bon nombre de fines à l'eau. Dans Crochet pour ces dames, Georgius est plus précis puisque son héros commande systématiquement un Henco : marque disparue d'un cognac "pour boire à l'eau", selon une publicité de 1956 de la maison Hennessy.

Roman policier français
Roman de Georgius
Roman français paru en 1958
1958 en littérature policière
Ouvrage publié dans la Série noire

redpajama_set_name: RedPajamaWikipedia


Should LGBTQ+ studies be a part of the curriculum?
This is the question that we explored as a group, and based on the statistical evidence gathered, the points for and against the question, and my own personal beliefs and experiences, I think that the answer is yes. We should absolutely be including LGBTQ+ studies in the curriculum, but it should also be taken a step further, toward inclusivity in every subject.
I believe this because while specifically having LGBTQ+ studies as a portion of the curriculum is vital towards educating all students on aspects of gender identity and sexual orientation, LGBTQ+ students exist beyond one unit in one class. This is where LGBTQ+ inclusive education comes in when talking about other subject areas. It does not have to be a huge and complicated unit in every subject area, either. As a teacher, doing something as simple as introducing yourself at the beginning of the year with your name and pronouns can have an enormous impact on any LGBTQ+ students in your classroom.
The topic of whether or not LGBTQ+ studies should be included in the curriculum is a controversial topic of debate among many parents who believe that including LGBTQ+ studies is an attempt to "turn children gay". This is clearly a false argument used to feebly disguise bigotry and spread fear. But the side arguing for the inclusion of LGBTQ+ studies focusses on the safety and success of the students, not the personal comfort of the parents.
Many studies show that having all students educated on LGBTQ+ topics decreases the rate of bullying motivated by sexuality or gender identity, makes LGBTQ+ students feel safer at school, decreases the amount of school missed, and generally increases the academic success of LGBTQ+ students. Because of the higher rates of mental illness in LGBTQ+ teenagers, it is of the utmost importance to include any curriculum or school organizations that will increase their support network and lead to a more positive school environment.
If the main debate is between the safety of students and the opinions of parents, I think that these parents do not deserve to have a voice in whether or not LGBTQ+ studies belong in the curriculum. Student safety, emotional wellbeing, and general success should always take precedence over opinions that will directly harm these students if taken into account.
My personal experiences also colour my opinion on whether or not LGBTQ+ studies should be included in the curriculum. When I was in high school, we received no positive information about the LGBTQ+ community, and it negatively impacted the mental health of me and many of my friends and peers. This has given me a firm belief that not including LGBTQ+ studies in the curriculum in a positive and accurate light is not only taking away from students' educations, but also directly harming queer students.
Since it is the responsibility of schools to provide a safe environment for all students, schools that fail to incorporate LGBTQ+ studies into the curriculum are failing to protect the approximately 10% of students in their schools that identify as LGBTQ+, not to mention additional students that will come to an understanding of their sexual orientation or gender identity after leaving high school.


text:
//
//  GroupEditViewController.m
//  JieXinIphone
//
//  Created by 高大鹏 on 14-2-26.
//  Copyright (c) 2014年 sunboxsoft. All rights reserved.
//

#import "GroupEditViewController.h"
#import "LinkDateCenter.h"
#import "LinkDataHelper.h"
#import "User.h"
#import "GroupDataHelper.h"
#import "ChatHistoryViewController.h"
#import "ChatDetailViewController.h"
#import "ChatConversationListFeed.h"
#import "MailHelp.h"
#import "SynContacts.h"
#import "GroupSendMsgViewController.h"
#import "SynUserInfo.h"
#import "SynUserIcon.h"

#define page_Margin 0
#define Cell_Height 80
#define Cell_Width 75
#define Constant   4567
#define ScrollView_Width 300
#define AlertTag  5671

typedef enum{
    ADD_Operate = 1,
    DEL_Operate,
}operatorType;

@interface GroupEditViewController ()
{
    UIScrollView *_sv;
}

@property (nonatomic, retain) UITapGestureRecognizer *tapGestureTel2;
@property (nonatomic, retain) UITapGestureRecognizer *tapGestureTel;
@property (nonatomic, retain)     SynContacts *synView;

@end

@implementation GroupEditViewController
{
    BOOL _canDelete;
    BOOL _hasPower;   //是否为群主
}

@synthesize membersView;
@synthesize groupid,creatorid;
@synthesize editBtn,doneBtn;
@synthesize membersArr;
@synthesize pageControl;
@synthesize linkDepartmentView;
@synthesize personWillDelete;
@synthesize tapGestureTel;
@synthesize tapGestureTel2;
@synthesize titleLabel;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.membersArr = [[[NSMutableArray alloc] init] autorelease];
        self.personWillDelete = [[[NSMutableArray alloc] init] autorelease];
        isCanSelect = NO;
        _canDelete = NO;
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveGroupMemberDataNotification:)
                                                     name:kGroupMemberData
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveGroupMemberChangeDataNotification:)
                                                     name:kGroupMemberChangesData
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveDeleteMasterNotification:)
                                                     name:kGroupDeleteMaster
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveDeleteMassNotification:)
                                                     name:kGroupDeleteMass
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveStatusNotification:)
                                                     name:kGetUserStatus object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(receiveRenameNotification:)
                                                     name:kRenameGroupName object:nil];
    }
    return self;
}

- (id)initWithGroupid:(NSString *)groupstr
{
    self = [super init];
    if (self) {
        self.groupid = groupstr;
        self.creatorid = [[GroupDataHelper sharedService] getGroupCreatorByid:groupid];

        groupType = [[GroupDataHelper sharedService] getGroupTypeByid:groupid];
        NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
        if ([creatorid isEqualToString:sessionId]) {
            _hasPower = YES;
        }
        else
        {
            _hasPower = NO;
        }
    }
    return self;
}

- (void)loadSubviews
{
    _sv = [[UIScrollView alloc] initWithFrame:CGRectMake(0, self.iosChangeFloat+44, 320, kScreen_Height-20-44)];
    _sv.showsHorizontalScrollIndicator = NO;
    _sv.showsVerticalScrollIndicator = NO;
    [self.view addSubview:_sv];
    [_sv release];

    self.synView = [[[SynContacts alloc] init] autorelease];
    UIImageView *bgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 300, 10)];
    bgView1.image = [UIImage imageNamed:@"list_bg5-2.png"];
    bgView1.userInteractionEnabled = YES;
    [_sv addSubview:bgView1];
    [bgView1 release];

    UIImageView *bgView2 = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10+330, 300, 10)];
    bgView2.image = [UIImage imageNamed:@"list_bg5.png"];
    bgView2.userInteractionEnabled = YES;
    [_sv addSubview:bgView2];
    [bgView2 release];

    UIImageView *bgView3 = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10+10, 300, 320)];
    bgView3.image = [UIImage imageNamed:@"list_bg4.png"];
    bgView3.userInteractionEnabled = YES;
    [_sv addSubview:bgView3];
    [bgView3 release];

    self.membersView = [[[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 300, 340)] autorelease];
    membersView.showsVerticalScrollIndicator = NO;
    membersView.showsHorizontalScrollIndicator = NO;
    membersView.pagingEnabled = YES;
    membersView.delegate = self;
    [bgView3 addSubview:membersView];

    self.tapGestureTel2 = [[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(TwoPressGestureRecognizer:)]autorelease];
    [tapGestureTel2 setNumberOfTapsRequired:2];
    [self.membersView addGestureRecognizer:tapGestureTel2];

    //右上角
   self.editBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    editBtn.frame = CGRectMake(280, self.iosChangeFloat+10, 30, 22.5);
    editBtn.tintColor = [UIColor clearColor];
    if (!_hasPower) {
        editBtn.hidden = YES;
    }
    [editBtn setImage:[UIImage imageNamed:@"add_lxr.png"] forState:UIControlStateNormal];
    [editBtn addTarget:self action:@selector(changeMember:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:editBtn];

    //右上角
    self.doneBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    doneBtn.frame = CGRectMake(270, self.iosChangeFloat+10, 50, 22.5);
//    doneBtn.tintColor = [UIColor clearColor];
    [doneBtn setTitle:@"完成" forState:UIControlStateNormal];
    doneBtn.titleLabel.font = [UIFont boldSystemFontOfSize:16];
    [doneBtn setTitleColor:kMAIN_THEME_COLOR forState:UIControlStateNormal];
//    [doneBtn setImage:[UIImage imageNamed:@"add_lxr.png"] forState:UIControlStateNormal];
    [doneBtn addTarget:self action:@selector(changeMemberDone:) forControlEvents:UIControlEventTouchUpInside];
    doneBtn.hidden = YES;
    [self.view addSubview:doneBtn];

    //返回按钮
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(0, self.iosChangeFloat, 100, kNavHeight);
    [btn setImage:[UIImage imageNamed:@"fanhui.png"] forState:UIControlStateNormal];
    [btn setImageEdgeInsets:UIEdgeInsetsMake(13, 9, 13, 80)];
    //    [btn setImageEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 0)];
    [btn addTarget:self action:@selector(turnBack) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];

//<<<<<<< .mine
//    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(30, self.iosChangeFloat, 100, kNavHeight)];
//    titleLabel.textColor = [UIColor blackColor];
//    titleLabel.font = [UIFont boldSystemFontOfSize:16];
//=======
    self.titleLabel = [[[UILabel alloc] initWithFrame:CGRectMake(30, self.iosChangeFloat, 200, kNavHeight)] autorelease];
    titleLabel.textColor = [UIColor colorWithRed:76.0/255.0 green:73.0/255.0 blue:72.0/255.0 alpha:1.0];
    titleLabel.font = [UIFont systemFontOfSize:16];

    titleLabel.text = @"群组资料";
    [self.view addSubview:titleLabel];

    //历史记录按钮
    UIButton *historyBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    historyBtn.frame = CGRectMake(10, 200+160, 140, 45);
    [historyBtn setImage:[UIImage imageNamed:@"lishi_jilu.png"] forState:UIControlStateNormal];
    [historyBtn addTarget:self action:@selector(watchHistory:) forControlEvents:UIControlEventTouchUpInside];
    [_sv addSubview:historyBtn];

    //清空聊天记录
    UIButton *clearMessBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    clearMessBtn.frame = CGRectMake(170, 200+160, 140, 45);
    [clearMessBtn setImage:[UIImage imageNamed:@"clear_lishi.png"] forState:UIControlStateNormal];
    [clearMessBtn addTarget:self action:@selector(clearMess:) forControlEvents:UIControlEventTouchUpInside];
    [_sv addSubview:clearMessBtn];

    //修改名称
    UIButton *renameBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    renameBtn.frame = CGRectMake(10, 250+160, 300, 45);
    [renameBtn setImage:[UIImage imageNamed:@"xiugai_group.png"] forState:UIControlStateNormal];
//    renameBtn.tintColor = [UIColor clearColor];
//    [renameBtn setBackgroundColor:[UIColor yellowColor]];
//    [renameBtn setTitle:@"修改群组名称" forState:UIControlStateNormal];
//    [renameBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
    if (![creatorid isEqualToString:sessionId])
    {
        renameBtn.hidden = YES;
    }
    [renameBtn addTarget:self action:@selector(renameBtnPressed) forControlEvents:UIControlEventTouchUpInside];
    [_sv addSubview:renameBtn];

    //退出/解散群组按钮
    UIButton *quitBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    quitBtn.frame = CGRectMake(10, 300+160, 300, 45);
    quitBtn.tintColor = [UIColor clearColor];
    if ([creatorid isEqualToString:sessionId])
    {
        [quitBtn setImage:[UIImage imageNamed:@"jiesan_group.png"] forState:UIControlStateNormal];
    }
    else
    {
        [quitBtn setImage:[UIImage imageNamed:@"tuichu_group.png"] forState:UIControlStateNormal];
        quitBtn.frame = CGRectMake(10, 250+160, 300, 45);
    }

    [quitBtn addTarget:self action:@selector(quitGroup:) forControlEvents:UIControlEventTouchUpInside];
    [_sv addSubview:quitBtn];

    [_sv setContentSize:CGSizeMake(320, CGRectGetMaxY(quitBtn.frame)+5)];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    [super createCustomNavBarWithoutLogo];
    [self loadSubviews];
    [self getGroupMembers];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];
    [personWillDelete removeAllObjects];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark -
#pragma mark GroupMembers Methods

- (void)loadGroupMembers
{
    int memberCount = [membersArr count];
    int pages = (memberCount - 1)/16 + 1;
    membersView.contentSize = CGSizeMake(300*pages, 340);

    if (!pageControl)
    {
        self.pageControl = [[[UIPageControl alloc] init] autorelease];
        pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
        pageControl.currentPageIndicatorTintColor = [UIColor darkGrayColor];
        pageControl.frame = CGRectMake(0, 0, 20, 5);
        pageControl.center = CGPointMake(membersView.center.x,10+328);
        [pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
        pageControl.numberOfPages = pages;
        pageControl.currentPage = 0;
        [_sv addSubview:pageControl];
    }
    else
    {
        pageControl.numberOfPages = pages;
    }

    for (int i = 0; i < memberCount; ++i)
    {
        NSArray *coordinateArr = [NSArray arrayWithArray:[self getMemberRowAndRank:i]];
        //以下参数从0开始
        int page = [[coordinateArr objectAtIndex:0] intValue];
        int row = [[coordinateArr objectAtIndex:1] intValue];
        int rank = [[coordinateArr objectAtIndex:2] intValue];

        CGRect rect = CGRectZero;
        rect = CGRectMake(page_Margin*(2*page+1)+Cell_Width*rank+page*ScrollView_Width, page_Margin+row*Cell_Height, Cell_Width, Cell_Height);
        [self initCellView:rect andUserIndex:i];
    }
}

- (void)initCellView:(CGRect)rect andUserIndex:(int)index
{
    UIView *bgView = [[UIView alloc] initWithFrame:rect];
    bgView.tag = index + Constant;
    [membersView addSubview:bgView];

    UIImageView *logoView = [[UIImageView alloc] initWithFrame:CGRectMake(17.5, 5, 40, 40)];
    NSString *imageInfo = [self getImageFromInfo:[membersArr objectAtIndex:index]];
    if ([imageInfo hasSuffix:@"jpg"]) {
        logoView.image = [UIImage imageWithContentsOfFile:imageInfo];
        int status = [[[membersArr objectAtIndex:index] objectForKey:@"status"] intValue];
        if (status == 0 || status ==4)
        {
            logoView.image = [self convertToGrayStyle:logoView.image];
        }
    }
    else
    {
        logoView.image = UIImageWithName(imageInfo);
    }
    logoView.tag = index + Constant;
    logoView.userInteractionEnabled = YES;
    [bgView addSubview:logoView];

    //添加长按手势
    UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    [logoView addGestureRecognizer:longPressRecognizer];

    self.tapGestureTel = [[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(pressGestureRecognizer:)]autorelease];
    [tapGestureTel setNumberOfTapsRequired:1];
    [logoView addGestureRecognizer:tapGestureTel];

    [tapGestureTel requireGestureRecognizerToFail:tapGestureTel2];

    UILabel *titleLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(17.5, 50, 40, 15)];
    titleLabel2.text = [[membersArr objectAtIndex:index] objectForKey:@"nickname"];
    titleLabel2.font = [UIFont systemFontOfSize:12];
    titleLabel2.textAlignment = NSTextAlignmentCenter;
    [bgView addSubview:titleLabel2];

    UIButton *delBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [delBtn setTag:(index+Constant)];
    delBtn.frame = CGRectMake(17.5, 5, 40, 40);
    [delBtn addTarget:self action:@selector(deleteMember:) forControlEvents:UIControlEventTouchUpInside];
//    [delBtn setBackgroundColor:[UIColor yellowColor]];
    [delBtn setImage:[UIImage imageNamed:@"deleteTag.png"] forState:UIControlStateNormal];
    [delBtn setImageEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 20)];
    delBtn.hidden = YES;
    [bgView addSubview:delBtn];
    [bgView bringSubviewToFront:delBtn];
}

#pragma mark -
#pragma mark Wobble Methods

-(void)BeginWobble
{
    NSAutoreleasePool* pool=[NSAutoreleasePool new];
    for (UIView *view in membersView.subviews)
    {
        srand([[NSDate date] timeIntervalSince1970]);
        float rand=(float)random();
        CFTimeInterval t=rand*0.0000000001;
        [UIView animateWithDuration:0.1 delay:t options:0  animations:^
         {
             view.transform=CGAffineTransformMakeRotation(-0.05);
         } completion:^(BOOL finished)
         {
             [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionRepeat|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionAllowUserInteraction  animations:^
              {
                  view.transform=CGAffineTransformMakeRotation(0.05);
              } completion:^(BOOL finished) {}];
         }];
    }
    [pool release];
}

-(void)EndWobble
{
    NSAutoreleasePool* pool=[NSAutoreleasePool new];
    for (UIView *view in membersView.subviews)
    {
        [UIView animateWithDuration:0.1 delay:0 options:UIViewAnimationOptionAllowUserInteraction|UIViewAnimationOptionBeginFromCurrentState animations:^
         {
             view.transform=CGAffineTransformIdentity;
         } completion:^(BOOL finished) {}];
    }
    [pool release];
}

#pragma mark -
#pragma mark Handling long presses Methods

-(void)TwoPressGestureRecognizer:(UIGestureRecognizer *)gr
{
    NSLog(@"tag:%d",gr.view.tag);
    if (_hasPower || groupType == TempGroup)
    {
        _canDelete = !_canDelete;
        if (_canDelete)
        {
            for (UIView *view in membersView.subviews)
            {
                for (id elem in view.subviews) {
                    if ([elem isKindOfClass:[UIButton class]])
                    {
                        UIButton *btn = (UIButton *)elem;
                        btn.hidden = NO;
                    }
                }
            }

            [self BeginWobble];
        }
        else
        {

            for (UIView *view in membersView.subviews)
            {
                for (id elem in view.subviews)
                {
                    if ([elem isKindOfClass:[UIButton class]])
                    {
                        UIButton *btn = (UIButton *)elem;
                        btn.hidden = YES;
                    }
                }
            }
            [self EndWobble];
            [self changeMembers:personWillDelete andOperator:DEL_Operate];
        }
    }

}

#pragma mark -
#pragma mark Handling long presses Methods

-(void)handleLongPress:(UILongPressGestureRecognizer*)longPressRecognizer
{
    int index = longPressRecognizer.view.tag - Constant;
    NSString *userid = [[membersArr objectAtIndex:index] objectForKey:@"userid"];
    if (longPressRecognizer.state == UIGestureRecognizerStateBegan)
    {
        User *user = [[LinkDateCenter sharedCenter] getUserWithUserId:userid];
        self.customAllertView = [[[CustomAlertView alloc] initWithAlertStyle:User_Style withObject:user] autorelease];
        [self.view addSubview:_customAllertView];
        _customAllertView.delegate = self;
    }
}

-(void)pressGestureRecognizer:(UIGestureRecognizer *)gr
{
    int index = gr.view.tag - Constant;
    NSString *userid = [[membersArr objectAtIndex:index] objectForKey:@"userid"];
    ChatDetailViewController *detail = [[ChatDetailViewController alloc] initWithNibName:nil bundle:nil];
    ChatConversationListFeed  *feed = [[[ChatConversationListFeed alloc] init] autorelease];
    feed.isGroup = 0;
    feed.relativeId = [userid intValue];
    feed.loginId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
    detail.conFeed = feed;
    [[AppDelegate shareDelegate].rootNavigation pushViewController:detail animated:YES];
    [detail release];
}

- (NSArray *)getMemberRowAndRank:(int)usrIndex
{
    int page = usrIndex/16;
    int row = (usrIndex - page*16)/4;
    int rank = (usrIndex - page*16)%4;
    NSArray *cdnArr = [NSArray arrayWithObjects:[NSNumber numberWithInt:page],[NSNumber numberWithInt:row],[NSNumber numberWithInt:rank],nil];

    return cdnArr;
}

- (NSString *)getImageFromInfo:(NSDictionary *)member
{
    NSString *id = [member objectForKey:@"userid"];
    NSInteger sex = [[member objectForKey:@"sex"] integerValue];
    NSString *status = [member objectForKey:@"status"];
    if(![id isEqualToString:@""])
    {
        //看某文件是否存在
        NSString *filePath = [NSString stringWithString:[NSString stringWithFormat:@"%@/%@.jpg",[[SynUserIcon sharedManager] getCurrentUserBigIconPath],id]];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if ([fileManager fileExistsAtPath:filePath] != NO)
        {
            return filePath;
        }
        else
        {
            if (sex == 0)
            {
                if ([status isEqualToString:@"0"])//离线
                {
                    status = @"fm_offline.png";
                }
                else if ([status isEqualToString:@"2"])//忙碌
                {
                    status = @"fm_busy.png";
                }
                else if ([status isEqualToString:@"3"])//离开
                {
                    status = @"fm_invisible.png";
                }
                else if ([status isEqualToString:@"4"])//隐身
                {
                    status = @"fm_offline.png";
                }
                else
                {
                    status = @"fm_online.png";
                }
            }
            else
            {
                if ([status isEqualToString:@"0"])//离线
                {
                    status = @"m_offline.png";
                }
                else if ([status isEqualToString:@"2"])//忙碌
                {
                    status = @"m_busy.png";
                }
                else if ([status isEqualToString:@"3"])//离开
                {
                    status = @"m_invisible.png";
                }
                else if ([status isEqualToString:@"4"])//隐身
                {
                    status = @"m_offline.png";
                }
                else
                {
                    status = @"m_online.png";
                }
            }
        }
    }

    return status;
}

- (void)clearGroupMembers
{
    for (UIView *view in membersView.subviews) {
        [view removeFromSuperview];
    }
}

#pragma mark -
#pragma mark buttonPressed Methods

- (void)turnBack
{
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)renameBtnPressed
{

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"修改群组名称" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"修改",nil];
//    UITextField * txt = [[UITextField alloc] init];
//    txt.backgroundColor = [UIColor whiteColor];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    alert.tag = 199999;
//    txt.frame = CGRectMake(alert.center.x+65,alert.center.y+48, 150,23);
//    [alert addSubview:txt];
    [alert show];
}

- (void)changeMember:(UIButton *)sender
{
    isCanSelect = !isCanSelect;
    doneBtn.hidden = !isCanSelect;
    editBtn.hidden = isCanSelect;

    self.linkDepartmentView = [[LinkDepartmentView alloc] initWithFrame:CGRectMake(0, self.iosChangeFloat+44, kScreen_Width, kScreen_Height-(self.iosChangeFloat+44)) withLinkViewStyle:LinkDepartmentView_select];
    [linkDepartmentView.tableListView configRefreshType:NoRefresh];
    NSMutableArray *usersArr = [NSMutableArray array];
    for (NSDictionary *dic in membersArr)
    {
        User *user = [[User alloc] initWithAttributes:dic];
        [usersArr addObject:user];
        [user release];
    }
    linkDepartmentView.choosedUsers = usersArr;
    [self.view addSubview:linkDepartmentView];
}

- (void)changeMemberDone:(UIButton *)sender
{
    isCanSelect = !isCanSelect;
    doneBtn.hidden = !isCanSelect;
    editBtn.hidden = isCanSelect;

    if (linkDepartmentView)
    {
        //1、取出源id数组和返回id数组
        NSMutableArray *addArr = [NSMutableArray array];
//        NSMutableArray *delArr = [NSMutableArray array];
        NSMutableArray *feedbackArr = [NSMutableArray array];
        NSMutableArray *sourceArr = [NSMutableArray array];

        for (User *user in linkDepartmentView.choosedUsers)
        {
            [feedbackArr addObject:user.userid];
        }

        for (NSDictionary *dic in membersArr)
        {
            [sourceArr addObject:[dic objectForKey:@"userid"]];
        }

        //2、分别请求增加成员和减少成员
//        for (NSString *mid in sourceArr)
//        {
//            if (![feedbackArr containsObject:mid])
//            {
//                [delArr addObject:mid];
//            }
//        }

        for (NSString *mid in feedbackArr)
        {
            if (![sourceArr containsObject:mid])
            {
                [addArr addObject:mid];
            }
        }

        if ([addArr count] == 0) {
            [linkDepartmentView removeFromSuperview];
            return;
        }
        if ([addArr count]!=0)
        {
            [self changeMembers:addArr andOperator:ADD_Operate];
        }

//        if ([delArr count]!=0)
//        {
//            [self changeMembers:delArr andOperator:DEL_Operate];
//        }

        [linkDepartmentView removeFromSuperview];
    }
}

- (void)watchHistory:(UIButton *)sender
{
    ChatHistoryViewController *chatHistory = [[ChatHistoryViewController alloc] initWithNibName:nil bundle:nil];
    ChatConversationListFeed *feed = [[[ChatConversationListFeed alloc] init] autorelease];
    feed.relativeId = [groupid intValue];
    feed.loginId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
    chatHistory.conFeed = feed;
    [self.navigationController pushViewController:chatHistory animated:YES];
    [chatHistory release];

}

- (void)clearMess:(UIButton *)sender
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"是否清空聊天记录" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    alertView.tag = 10086;
    [alertView show];
    [alertView release];

}

- (void)quitGroup:(UIButton *)sender
{
    [self quitGroup];
}

- (void)deleteMember:(UIButton *)sender
{
    int index = sender.tag - Constant;
    __block CGRect newframe;
    for (int i = index; i < [membersArr count]; i++)
    {
        UIView *obj = [membersView viewWithTag:i + Constant];

        //抖动后重置Frame
        NSArray *coordinateArr = [NSArray arrayWithArray:[self getMemberRowAndRank:i]];
        //以下参数从0开始
        int page = [[coordinateArr objectAtIndex:0] intValue];
        int row = [[coordinateArr objectAtIndex:1] intValue];
        int rank = [[coordinateArr objectAtIndex:2] intValue];

        CGRect rect = CGRectMake(page_Margin*(2*page+1)+Cell_Width*rank+page*ScrollView_Width, page_Margin+row*Cell_Height, Cell_Width, Cell_Height);

        __block CGRect nextframe = rect;
        if (i == index)
        {
            //删除这个view
            [obj removeFromSuperview];
        }
        else
        {
            //重新设置后面view的tag
            obj.tag = i+Constant-1;
            for (UIView *v in obj.subviews)
            {
                int count = 0;
                if ([v isKindOfClass:[UIImageView class]]) {
                    v.tag = i+Constant - 1;
                    count++;
                }
                //把每个按钮的tag重新设置
                if ([v isMemberOfClass:[UIButton class]])
                {
                    v.tag = i+Constant - 1;
                    count++;
                }

                if (count == 2) {
                    break;
                }
            }
            //并且位置动画改变
            [UIView animateWithDuration:0.6 animations:^
             {
                 obj.frame = newframe;
             } completion:^(BOOL finished)
             {

             }];
        }
        //记住上一个view的位置
        newframe = nextframe;
    }

     [personWillDelete addObject:[[membersArr objectAtIndex:index] objectForKey:@"userid"]];

//    [membersArr removeObjectAtIndex:index];
    int pages = ([membersArr count] - 1)/8 + 1;
    if ([membersArr count] == 0)
    {
        pages = 1;
    }
    [membersView setContentSize:CGSizeMake(pages*ScrollView_Width, 160)];

    if (!pageControl)
    {
        self.pageControl = [[[UIPageControl alloc] init] autorelease];
        pageControl.pageIndicatorTintColor = [UIColor lightGrayColor];
        pageControl.currentPageIndicatorTintColor = [UIColor darkGrayColor];
        pageControl.frame = CGRectMake(0, 0, 20, 5);
        pageControl.center = CGPointMake(membersView.center.x,10+328);
        pageControl.numberOfPages = pages;
        pageControl.currentPage = 0;
        [_sv addSubview:pageControl];
    }
    else
    {
        pageControl.numberOfPages = pages;
    }

}

#pragma mark -
#pragma mark socketConnection Methods

- (void)getGroupMembers
{
    [[STHUDManager sharedManager] showHUDInView:self.view];
    NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
    NSArray *msgArr = @[@{@"type": @"req"},@{@"sessionID": sessionId},@{@"cmd":@"groupMember"},@{@"groupID": groupid}];
    NSString *xmlStr = [UploadXmlMaker getXmlStrFromArr:[NSMutableArray arrayWithArray:msgArr]];
    [[YiXinScoketHelper sharedService] sendDataToServer:xmlStr];
}

- (void)quitGroup
{
    [[STHUDManager sharedManager] showHUDInView:self.view];
    NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];

    NSString *type = @"";
    if ([creatorid isEqualToString:sessionId]) //群主
    {
        type = @"1";
    }
    else  //非群主
    {
       type = @"2";
    }

    NSArray *offLineArr = @[@{@"type": @"rsp"},@{@"sessionID": sessionId},@{@"cmd":@"DelGroup"},@{@"GroupId": groupid},@{@"Type": type}];

    NSString *xmlStr = [UploadXmlMaker getXmlStrFromArr:[NSMutableArray arrayWithArray:offLineArr]];
    [[YiXinScoketHelper sharedService] sendDataToServer:xmlStr];
}

- (void)changeMembers:(NSMutableArray *)list andOperator:(operatorType)type  //1增加,2删除
{
    if ([list count]==0) {
        return;
    }
    [[STHUDManager sharedManager] showHUDInView:self.view];
    NSString *operate = [NSString stringWithFormat:@"%d",type];
    NSString *memberlist = @"";
    for (int i = 0; i < [list count]-1; ++i)
    {
        memberlist = [[memberlist stringByAppendingString:[list objectAtIndex:i]] stringByAppendingString:@","];
    }
    memberlist = [memberlist stringByAppendingString:[list lastObject]];

    NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
    NSArray *msgArr = @[@{@"type": @"rsp"},@{@"sessionID": sessionId},@{@"cmd":@"GroupMem"},@{@"GroupId": groupid},@{@"Type": operate},@{@"MemberId": memberlist}];
    NSString *xmlStr = [UploadXmlMaker getXmlStrFromArr:[NSMutableArray arrayWithArray:msgArr]];
    [[YiXinScoketHelper sharedService] sendDataToServer:xmlStr];
}

#pragma mark -
#pragma mark NotificationReturnDatas

- (void)receiveGroupMemberDataNotification:(NSNotification *)notification
{
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"1"] )
    {
        [membersArr removeAllObjects];
        NSString *listString = [infoDic objectForKey:@"list"];
        NSArray *usr = [listString componentsSeparatedByString:@";"];
        for (NSString *str in usr)
        {
            if ([str isEqualToString:@""]) {
                break;
            }
            NSMutableDictionary *dicTemp=[NSMutableDictionary dictionary];

            NSArray *status = [str componentsSeparatedByString:@","];
            [dicTemp setValue:[status objectAtIndex:0] forKey:@"userid"];
            [dicTemp setValue:[status objectAtIndex:1] forKey:@"status"];

            int statusValue = [[status objectAtIndex:1] intValue];
            if (statusValue == 1||statusValue == 5||statusValue == 6||statusValue == 7) {

                [membersArr insertObject:dicTemp atIndex:0];
            }
            else
            {
                [membersArr addObject:dicTemp];
            }
        }

        for (NSMutableDictionary *user in membersArr)
        {
            NSMutableDictionary *dic = [NSMutableDictionary dictionary];
            dic = [[LinkDateCenter sharedCenter] getUserNameByUserID:[user objectForKey:@"userid"]];
            [user setValue:[dic objectForKey:@"nickname"] forKey:@"nickname"];
            [user setValue:[dic objectForKey:@"usersig"] forKey:@"usersig"];
            [user setValue:[dic objectForKey:@"sex"] forKey:@"sex"];
        }

        //加载群组成员
        [self loadGroupMembers];
        self.titleLabel.text = [NSString stringWithFormat:@"群组资料(%d人)",[membersArr count]];
    }
    else
    {
        [ShowAlertView showAlertViewStr:@"获取群成员失败"];
    }
}

//改变群成员
- (void)receiveGroupMemberChangeDataNotification:(NSNotification *)notification
{
    [personWillDelete removeAllObjects];
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"0"] )
    {
        NSString *str = [infoDic objectForKey:@"MemberId"];
        NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
        NSArray *msgArr = @[@{@"type": @"req"},@{@"sessionID": sessionId},@{@"cmd":@"getUserStatus"},@{@"userlist": str}];
        NSString *xmlStr = [UploadXmlMaker getXmlStrFromArr:[NSMutableArray arrayWithArray:msgArr]];
        [[YiXinScoketHelper sharedService] sendDataToServer:xmlStr];
        [[STHUDManager sharedManager] showHUDInView:self.view];
    }
    else
    {
        [ShowAlertView showAlertViewStr:@"更改群成员失败"];
    }
}

- (void)receiveDeleteMasterNotification:(NSNotification *)notification
{
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"0"] )
    {
        NSString *gid = [infoDic objectForKey:@"GroupId"];
        NSString *gName = [[GroupDataHelper sharedService] getGroupNameByid:gid];
        NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM groupInfoTable WHERE groupId = '%@'",gid];
        [[GroupDataHelper sharedService] operateGroupDB:sqlStr];

        NSString *msg = [NSString stringWithFormat:@"%@ 已经被解散",gName];
        [[NSNotificationCenter defaultCenter] postNotificationName:kDeleteAConversation object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:gid,@"groupid", nil]];

        UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
        aler.tag = AlertTag;
        [aler show];
        [aler release];

    }
    else
    {
        [ShowAlertView showAlertViewStr:@"操作失败"];
    }
}

- (void)receiveDeleteMassNotification:(NSNotification *)notification
{
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"0"] )
    {
        NSString *gid = [infoDic objectForKey:@"GroupId"];
        NSString *gName = [[GroupDataHelper sharedService] getGroupNameByid:gid];
        NSString *sqlStr = [NSString stringWithFormat:@"DELETE FROM groupInfoTable WHERE groupId = '%@'",gid];
        [[GroupDataHelper sharedService] operateGroupDB:sqlStr];

        NSString *nickName = [[[LinkDateCenter sharedCenter] getUserNameByUserID:[infoDic objectForKey:@"MemberId"]] objectForKey:@"nickname"];
        NSString *msg = [NSString stringWithFormat:@"%@已经退出 %@",nickName,gName];

        [[NSNotificationCenter defaultCenter] postNotificationName:kDeleteAConversation object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:gid,@"groupid", nil]];
        UIAlertView *aler = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
        aler.tag = AlertTag;
        [aler show];
        [aler release];
    }
    else
    {
        [ShowAlertView showAlertViewStr:@"操作失败"];
    }
}

- (void)receiveStatusNotification:(NSNotification *)notification
{
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"1"] )
    {
        NSMutableArray *memberChanged = [[NSMutableArray alloc] init];
        NSString *listString = [infoDic objectForKey:@"statuslist"];
        NSArray *usr = [listString componentsSeparatedByString:@";"];
        for (NSString *str in usr)
        {
            if ([str isEqualToString:@""]) {
                break;
            }
            NSMutableDictionary *dicTemp=[NSMutableDictionary dictionary];

            NSArray *status = [str componentsSeparatedByString:@","];
            [dicTemp setValue:[status objectAtIndex:0] forKey:@"userid"];
            [dicTemp setValue:[status objectAtIndex:1] forKey:@"status"];
            [memberChanged addObject:dicTemp];
        }

        for (NSMutableDictionary *user in memberChanged)
        {
            NSMutableDictionary *dic = [NSMutableDictionary dictionary];
            dic = [[LinkDateCenter sharedCenter] getUserNameByUserID:[user objectForKey:@"userid"]];
            [user setObject:[dic objectForKey:@"nickname"] forKey:@"nickname"];
            [user setObject:[dic objectForKey:@"usersig"] forKey:@"usersig"];
            [user setObject:[dic objectForKey:@"sex"] forKey:@"sex"];
        }

        for (NSDictionary *dic in memberChanged)
        {
            if ([membersArr containsObject:dic]) {
                [membersArr removeObject:dic];
            }
            else
            {
//                [membersArr addObject:dic];
                int statusValue = [[dic objectForKey:@"status"] intValue];
                if (statusValue == 1||statusValue == 5||statusValue == 6||statusValue == 7) {

                    [membersArr insertObject:dic atIndex:0];
                }
                else
                {
                    [membersArr addObject:dic];
                }
            }
        }

        [self clearGroupMembers];
        [self loadGroupMembers];
    }
    else
    {
        [ShowAlertView showAlertViewStr:@"操作失败"];
    }
}

- (void)receiveRenameNotification:(NSNotification *)notification
{
    NSDictionary *infoDic = [notification userInfo];
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    if (infoDic && [[infoDic objectForKey:@"result"] isEqualToString:@"0"] )
    {
        NSString *groupName = [infoDic objectForKey:@"newname"];
        NSString *sqlStr = [NSString stringWithFormat:@"UPDATE groupInfoTable SET groupName='%@' WHERE  groupId='%@'",groupName,[infoDic objectForKey:@"groupid"]];
        [[GroupDataHelper sharedService] operateGroupDB:sqlStr];

    }
    else
    {
        [ShowAlertView showAlertViewStr:@"操作失败"];
    }
}

#pragma mark -
#pragma mark notificationErrorReturn

- (void)connectErrorNotification:(NSNotification *)notification
{
    [[STHUDManager sharedManager] hideHUDInView:self.view];
    [ShowAlertView showAlertViewStr:@"连接错误"];
}

#pragma mark -
#pragma mark UIAlertView Delegate

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (alertView.tag == 10086)
    {
        if (buttonIndex == 1) {
            NSString *loginId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
            BOOL result = [[ChatDataHelper sharedService] deleteMessagesWithRelativeId:[groupid intValue]  withToUserId:[loginId intValue]];
            if (result)
            {
                //清空了

//                [[NSNotificationCenter defaultCenter] postNotificationName:kDeleteAllMessages object:nil];

                [[NSNotificationCenter defaultCenter] postNotificationName:kDeleteAConversation object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:groupid,@"groupid", nil]];
            }
        }
    }
    else if (alertView.tag == AlertTag)
    {
        [self.navigationController popToRootViewControllerAnimated:YES];
    }
    else if (alertView.tag == 199999)
    {
        if (buttonIndex == 1) {

            UITextField *tf=[alertView textFieldAtIndex:0];

            if (tf.text.length > 0)
            {
                //发送新的群组名称
                [[STHUDManager sharedManager] showHUDInView:self.view];
                NSString *sessionId = [[NSUserDefaults standardUserDefaults] objectForKey:kSessionId];
                NSArray *msg = @[@{@"type": @"req"},@{@"sessionID": sessionId},@{@"cmd":@"RENAME_GROUP"},@{@"groupid": self.groupid},@{@"newname": tf.text}];

                NSString *xmlStr = [UploadXmlMaker getXmlStrFromArr:[NSMutableArray arrayWithArray:msg]];
                [[YiXinScoketHelper sharedService] sendDataToServer:xmlStr];
            }
            else
            {
                return;
            }
        }
        else
        {
            return;
        }
    }
    else
    {
        [self.navigationController popViewControllerAnimated:YES];
    }

}

//#pragma mark -
//#pragma mark UIScrollView Delegate
//
//- (void)scrollViewDidScroll:(UIScrollView *)sender
//{
//    int page = membersView.contentOffset.x / 300;
//    pageControl.currentPage = page;
//}

-(void)contactAlertViewWith:(id)object withStyel:(ContactBtnStyle)style
{
    switch (style) {
        case ContactBtn_callPhone:
            [self contactsListViewCallPhone:[(User *)object telephone]];
            break;
        case ContactBtn_callMobile:
            [self contactsListViewCallMobilePhone:[(User *)object mobile]];
            break;
        case ContactBtn_addPerson:
        {
            [self contactsAddPerson:(User *)object];
        }
            break;
        case ContactBtn_sendMess:
            [self contactsListViewSendSMS:[NSArray arrayWithObject:(User *)object]];
            break;
        default:
            break;
    }
}

#pragma mark - contacts method
-(void)contactsListViewCallMobilePhone:(NSString *)mobile
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",mobile]]];
}

-(void)contactsListViewCallPhone:(NSString *)telPhone
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",telPhone]]];
}

-(void)contactsListViewSendEmail:(User *)user
{
    [MailHelp sharedService].recipients = [NSArray arrayWithObjects:user.email, nil];
    [MailHelp sharedService].isShowScreenShot = NO;
    [[MailHelp sharedService] sendMailWithPresentViewController:self];
}

-(void)contactsListViewSendSMS:(NSArray *)array
{
    NSString *phoneStr = @"";
    NSString *distanceDbPath = [[SynUserInfo sharedManager ]getCurrentUserDBPath];
    FMDatabase *distanceDataBase = [FMDatabase databaseWithPath:distanceDbPath];
    if(![distanceDataBase open]){//打开数据库
    }
    NSString *sqlStr = [NSString stringWithFormat:@"select userid, nickname, sex, usersig, telephone, mobile, email, field_char1 from im_users where userid=?;"];
    FMResultSet *rs = [distanceDataBase executeQuery:sqlStr,[[NSUserDefaults standardUserDefaults] objectForKey:kSessionId]];
    if ([rs next])
    {
        phoneStr = [rs stringForColumn:@"mobile"];
    }
    [rs close];
    [distanceDataBase close];

    if (![phoneStr length])
    {
        [ShowAlertView showAlertViewStr:@"您的帐号还未绑定手机号码"];
        return;
    }
    GroupSendMsgViewController *sendMsg = [[GroupSendMsgViewController alloc] initWithNibName:nil bundle:nil];
    sendMsg.phoneStr = phoneStr;
    sendMsg.selectArr = [NSMutableArray arrayWithArray:array];
    [self.navigationController pushViewController:sendMsg animated:YES];
    [sendMsg release];
}

-(void)contactsAddPerson:(User *)user
{
    NSMutableArray *array = [NSMutableArray array];
    [array addObject:user];
    [_synView synContacts:array];
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {

    int page = self.membersView.contentOffset.x / ScrollView_Width;

    pageControl.currentPage = page;
}

#pragma mark - messagedelegate
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                 didFinishWithResult:(MessageComposeResult)result {
    NSString *msg;

    switch (result) {
        case MessageComposeResultCancelled:
            msg = @"发送取消";
            break;
        case MessageComposeResultSent:
            msg = @"发送成功";
            [self alertWithTitle:nil msg:msg];
            break;
        case MessageComposeResultFailed:
            msg = @"发送失败";
            [self alertWithTitle:nil msg:msg];
            break;
        default:
            break;
    }

    NSLog(@"发送结果:%@", msg);

    [self dismissViewControllerAnimated:YES completion:NULL];
}

- (void) alertWithTitle:(NSString *)title msg:(NSString *)msg
{
    UIAlertView*alert = [[UIAlertView alloc] initWithTitle:title
                                                   message:msg delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

- (void)changePage:(id)sender {

    int page = pageControl.currentPage;
    [self.membersView setContentOffset:CGPointMake(ScrollView_Width * page, 0)];

}

#pragma mark -
#pragma mark UIView相关
/*
 此函数用于将图片变灰
 输入参数:(UIImage *)需要改变的图片
 输出参数:(UIImage *)变色后的图片
 */
- (UIImage *) convertToGrayStyle:(UIImage *)img
{
    int kRed = 1;
    int kGreen = 2;
    int kBlue = 4;
    int colors = kGreen;
    int m_width = img.size.width;
    int m_height = img.size.height;
    uint32_t *rgbImage = (uint32_t *) malloc(m_width * m_height * sizeof(uint32_t));
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(rgbImage, m_width, m_height, 8, m_width * 4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextDrawImage(context, CGRectMake(0, 0, m_width, m_height), [img CGImage]);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    // now convert to grayscale
    uint8_t *m_imageData = (uint8_t *) malloc(m_width * m_height);
    for(int y = 0; y < m_height; y++) {
        for(int x = 0; x < m_width; x++) {
            uint32_t rgbPixel=rgbImage[y*m_width+x];
            uint32_t sum=0,count = 0;

            if (colors & kRed) {
                sum += (rgbPixel>>24) & 255;
                count++;
            }

            if (colors & kGreen) {
                sum += (rgbPixel>>16) & 255;
                count++;
            }

            if (colors & kBlue) {
                sum += (rgbPixel>>8) & 255;
                count++;
            }
            m_imageData[y*m_width+x]=sum/count;
        }
    }
    free(rgbImage);
    // convert from a gray scale image back into a UIImage
    uint8_t *result = (uint8_t *) calloc(m_width * m_height * sizeof(uint8_t) * 4, 1);
    // process the image back to rgb
    for(int i = 0; i < m_height * m_width; i++) {
        result[i*4] = 0;
        int val = m_imageData[i];
        result[i*4+1] = val;
        result[i*4+2] = val;
        result[i*4+3] = val;
    }
    free(m_imageData);
    // create a UIImage
    colorSpace = CGColorSpaceCreateDeviceRGB();
    context = CGBitmapContextCreate(result, m_width, m_height, 8, m_width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);
    CGImageRef image = CGBitmapContextCreateImage(context);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    UIImage *resultUIImage = [UIImage imageWithCGImage:image];
    CGImageRelease(image);
    // make sure the data will be released by giving it to an autoreleased NSData
    [NSData dataWithBytesNoCopy:result length:m_width * m_height];

    return resultUIImage;
}

- (void)dealloc
{
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kGroupMemberData object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kGroupMemberChangesData object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kGroupDeleteMaster object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kGroupDeleteMass object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kGetUserStatus object:nil];
//    [[NSNotificationCenter defaultCenter] removeObserver:self name:kRenameGroupName object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    self.linkDepartmentView = nil;
    self.membersArr = nil;
    self.membersView = nil;
    self.groupid = nil;
    self.editBtn = nil;
    self.tapGestureTel = nil;
    self.tapGestureTel2 = nil;
    self.customAllertView = nil;
    self.personWillDelete = nil;
    self.synView = nil;
    [super dealloc];
}

@end

redpajama_set_name: RedPajamaGithub


text:
A propranolol nem szelektív kompetitív β-adrenoceptor antagonista, mindkét altípust (β1, β2) egyaránt gátolja. Nincs intrinsic sympathomimeticus aktivítása, terápiás adagban membránstabilizáló hatása gyenge. Mint más β-adrenoceptor antagonistáknak, a propranololnak is vannak negatív inotrop hatásai. A propranolol csökkenti a vezetési sebességet a sinoatrialis és az atrioventrikuláris csomók között, és a β-adrenerg gátlás révén csökkenti a myocardialis automatizmust. Tartósan alkalmazva, mint minden béta-receptor blokkoló, a perctérfogat csökkentése, valamint a renin-elválasztás gátlása és a központi adrenerg béta-receptorokra gyakorolt hatása miatt vérnyomáscsökkentő hatással rendelkezik. Általában hatékonyan csökkenti a myocardium oxigén-felhasználását és a coronariák vérátfolyását. Az erythrocytákban a propranolol hozzájárul a 2,3-difoszfoglicerát intracelluláris eloszlásának újrarendeződéséhez, ezáltal csökkenti a hemoglobin oxigén-affinitását, ami növeli a szöveti oxigén-ellátást. Migrén-ellenes hatását a propranolol valószínűleg az agyi erek vasodilatációjának gátlásával, illetve a pia mater véredényeiben levő β-adrenoceptorok gátlásával éri el. A propranolol racém keverék, egyaránt tartalmazza a β-adrenoceptor gátlásért felelős S(-), illetve a kardiovaszkuláris hatásokért nem, de a tiroxin trijódtironinná való átalakulásának gátlásért (s így bizonyos mellékhatásokért is) felelős R(+) izomert.

Készítmények
HUMA-PRONOL
PROPRA
PROPRANOLOL

Fordítás

ATC C07
Béta-blokkolók
Naftalinok
Éterek
Alkoholok
Aminok


You was fuel level sensor. Served it to you some time. But here suddenly now - and it breaks. what to do in such case? Just, about this you learn from article.
Probably my advice you may seem unusual, however for a start sense set most himself question: does it make sense repair your broken fuel level sensor? may more rational will buy new? Inclined considered, sense learn, how money is a new fuel level sensor. For it necessary just make desired inquiry your favorites finder.
So, if you still decided their hands practice repair, then in the first instance necessary learn how repair fuel level sensor. For it sense use any finder, eg, google.
Think you do not vain spent time and this article helped you fix fuel level sensor. The next time I will tell how repair the water tap or the water tap.


text:
Don't drill your own teeth! And quashing other rotten dental advice on TikTok
Health News Florida | By Chaseedaw Giles - Kaiser Health News
Chasedaw Giles
A silver-plated brass set of grills comes with a bottom front, single top, and plastic tweezers for $10.99, sold through Amazon.
TikTok videos extol doing your own cosmetic dentistry like gluing gems to your front teeth or filing down your teeth. The trouble is social media rarely shows the mistakes or the pain.
Watch enough TikTok videos and you're sure to see one extolling a special kind of do-it-yourself dentistry. Not about brushing and flossing, except maybe flossing with strands of your hair. These are videos on drilling into your teeth and cementing gems to them or filing your teeth to reshape them.
People have been styling their teeth for centuries across the globe throughout North and South America, Africa, and Asia. But social media — particularly TikTok, where everything old and new is nip/tucked into short videos with trendy sounds and served up fresh to young eyes — has breathed life into trends like tooth gems. Celebrities such as Drake, Rihanna, and Bella Hadid wore them years ago. Now, some TikTok influencers are selling DIY gem kits.
But it doesn't stop there. There are DIY tooth replacement kits and bedazzled grills available online for under $25, and recipes for homemade toothpaste and whitening treatments. The TikTok hashtag #DIYdentist has 2.6 million views. It's enough to make any licensed dentist or orthodontist cringe.
The professionals wholeheartedly agree that DIY dentistry is a very bad idea. Dental care can be expensive, and orthodontic treatment is usually considered cosmetic and not covered by dental insurance — which 65 million Americans don't have. And, according to the 2020 "Annual Review of Public Health" report, people who are low-income, uninsured, members of racial minority groups, immigrants, or living in rural areas are more likely to have poor oral health.
So, is the high cost of dental treatment driving these viral trends among young people, or is it the lure of supposedly painless, instantly changed smiles?
Dr. Ruchi Sahota, a Fremont, California, dentist and spokesperson for the American Dental Association, said she can understand why patients want to try DIY dentistry at home. "I just don't know how [they] could do it safely," she said, especially altering the shape of their teeth. While filing teeth is something a dentist might do to smooth out imperfections or create space between teeth during treatment for braces, for instance, some people are doing it themselves to smooth away chips in teeth or create vampire-like fangs for aesthetic reasons. "When we practice dentistry, we do it with the background information of years of training, X-rays, and the experience that helps us decide when and how to do the treatment," Sahota said.
Even tooth gems applied correctly with oral bonding materials are troublesome, she said, because they "are adding something to your teeth that will also attract bacteria. You're increasing your risk of cavities, of gum infections. And you're increasing your risk of chipped teeth, of inflammation inside your mouth."
Chaseedaw Giles
A temporary tooth repair kit, sold through Amazon for under $25, came with plastic "veneers" in different shapes for missing teeth and moldable plastic beads for repairs. It did not come with printed instructions. When asked by KHN about this listing, Amazon did not respond. Instead, the product was removed from the site.
DIY prices are certainly part of the allure. On Amazon, a 25-piece tooth gem kit was selling for $12.99 from Tondiamo, a brand that also sells children's earwax removal tools, waterproof adhesive bandages, and chainsaw chains. The kit comes with 10 rhinestones, a mini-LED keychain to cure the adhesive, four wooden sticks, five disposable applicator brushes, and five cotton rolls.
But no instructions.
Reviews on Amazon complained of the gems not sticking. Some suggested using nail glue — which is toxic and can damage tooth enamel. But among Amazon's "frequently bought together" suggestions: a bottle of epoxy resin glue.
A gold-plated, single-tooth grill front for $7.98 from TCOTBE and a set of silver-plated, brass fronts for $10.99 from OOCC both advertised that "one size fits most," but reviewers said otherwise. "Save your money and use foil (old school way) if you want a grill lol," one buyer warned. Bleeding gums were a common complaint among the reviewers.
Perhaps the most bizarre DIY find was a temporary tooth repair kit for under $25 from CZsy. It came with plastic "veneers" in different shapes for missing teeth, and moldable plastic beads for repairs.
It also did not come with printed instructions, but these were buried in the product description on Amazon's site:
Drop into hot water above 130 degrees for about two minutes.
Shape the size what you want.
No company information or websites could be found for some of these brands, but the products had one thing in common: a bar code sticker reading "Made in China." Instead of responding to a request by KHN for an explanation of its policies, Amazon removed the listing for replacement teeth. The other items were still available to order at publication time.
Screenshots from Amazon
via Kaiser Health News
The reviews for the gold-plated, single-tooth grill set were mixed.
It's not just DIY dentistry giving licensed professionals a toothache. Vendors touting certificates to apply composite veneers and partials — dentures that replace missing teeth when someone still has multiple natural teeth in place — are sprouting up on social media. Vendors like Marie's Beauty Bar in Philadelphia will apply composite veneers over less-than-perfect smiles — in this case, starting at $1,999 per hour with a $499 deposit — as a lower-cost alternative to porcelain veneers, which require shaving down the natural teeth. The merchant advertises veneer training for $5,999. Marie's Beauty Bar did not respond to emails or voice messages seeking comment.
DIY dentistry isn't just a phenomenon of young people on social media. "There are teens, adolescents, even adults that are trying these things," said Dr. Amber Bonnaig, a dentist in Marietta, Georgia, and a state director for DentaQuest, a Boston company. "A major contributing factor is lack of access to dental care."
DIY can appear a viable alternative, especially since a person with severely damaged teeth, in severe pain, or with mounting dental bills from repairing DIY damage rarely displays the disappointing results on TikTok. Social media users, for the most part, display carefully curated highlights, not adverse reactions.
"The 'cool thing' right now is all these hacks to make things supposedly easier or more accessible," she said. Caveat emptor, or let the buyer beware, she cautioned. Reviews from influencers who often receive free services in exchange for promotional posts may be biased. Bonnaig warned that complications could occur many days, weeks, or months after treatment.
A 25-piece tooth gem kit, sold through Amazon for $12.99, contains 10 rhinestones, one mini-LED keychain to cure the adhesive, four wooden sticks, five disposable applicator brushes, and five cotton rolls. The kit does not come with glue or instructions.
Even when people aren't daring to drill their own teeth, they can do damage with other social trends like drinking "healthy Coke," a concoction of balsamic vinegar — which has a higher acid content than the actual soft drink — and flavored carbonated water. It's a recipe for severe erosion of tooth enamel.
Sahota has seen what these viral trends can do. "Patients have been drinking or swishing with lemon water, or maybe apple cider vinegar, and that has caused acid or erosions on their teeth," she said. "The patients will say, 'Oh, yeah, you know, I saw online that, you know, this will be better for my health. And so I've been doing it every night.' That's when I'll bring a mirror and show them exactly what the effect of that trend has made on your teeth."
Such low-cost hacks may end up costing patients far more in the long run. Sahota suggested that consumers looking for safe ways to enhance their smiles can scour the products on the Mouth Healthy site that sports the ADA seal of acceptance. Bonnaig and Sahota both implore patients to discuss their oral and cosmetic concerns with a dentist.
Every tooth and every mouth is unique, and there is no safe one-size-fits-all DIY hack. "You can have a beautiful smile," Sahota said, "even if it's not perfect."
KHN (Kaiser Health News) is a national newsroom that produces in-depth journalism about health issues. Together with Policy Analysis and Polling, KHN is one of the three major operating programs at KFF (Kaiser Family Foundation). KFF is an endowed nonprofit organization providing information on health issues to the nation.
Copyright 2022 Health News Florida
Health News Florida dental careoral healthsocial mediaTikTok
Chaseedaw Giles - Kaiser Health News
Coverage from WUSF.
How distribution of the COVID-19 vaccine exposes inequities in Florida's health care system.
An Edward R. Murrow Award-winning series explores the high costs of the pandemic for children and young adults.

redpajama_set_name: RedPajamaCommonCrawl


text:
Home COLUMNS Irony of peace award amid border friction
Irony of peace award amid border friction
By C Uday Bhaskar
In a surprise announcement, India's little-known child rights adherent Kailash Satyarthi and Pakistan's Malala Yousafzai have together been awarded this year's prestigious Nobel Peace Prize "for their struggle against the suppression of children and young people and for the right of all children to education".
This prize assumes significance not only because this is the first time that the legacy of Mahatma Gandhi (who incidentally did not receive the Nobel) has been acknowledged by the Nobel committee. Concurrently, it is a first for Pakistan, in that a young girl internationally recognized for braving a brutal Taliban attack and who remains committed to education for the girl-child has been awarded the coveted prize.
But this joint award is even more ironically poignant, coming as it does when India and Pakistan are engaged in an intense exchange of ordnance across the contested Line of Control in Jammu & Kashmir and heavily guarded International Border. The fact that innocent civilians have been killed on both side underscores the imperative of nurturing peace on the sub-continent despite the revisionist agenda of the 'deep-state' in Pakistan.
Kailash Satyarthi has been active in the movement against child labour since the 1990s. His organization Bachpan Bachao Andolan has freed thousands of hapless children from various forms of servitude and helped in their successful re-integration, rehabilitation and education.
The Norwegian Noble committee awarded the peace prize to Kailash Satyarthi for showing great personal courage and strength. The committee noted that Satyarthi followed the great tradition of Mahatma Gandhi and has headed various forms of peaceful protests and demonstrations, focusing on the grave exploitation of children for financial gain. The Committee further added: "His contribution towards the development of important convention on child's rights is immense."
In relation to Malala Yousafzai, it was observed that she has shown by personal example that even children and young people can contribute to improving their own situation. It is pertinent to note that Malala has worked under the most dangerous situations and the citation said: "Through her heroic struggle, she has become a leading spokesperson for girls' right to education."
An exile of sorts, who cannot return to her country because of the Taliban threat, Malala's choice for the Peace Prize draws attention to Pakistan's most severe socio-cultural challenge – that of radical and ideological extremism which, among other inflexible strictures, forbids girls from obtaining education. Malala herself is a victim of such radical extremism and was shot at by the Taliban in 2012 for supporting girl's education and protesting against curbs imposed by extremist forces.
On the other hand, in India, though gender-equity is not as distorted, the status of children in general and women in particular leaves a lot to be desired. The shameful Nirbhaya case of December 2012 is illustrative. The plight of young children who are forced into employment that often takes the form of servitude bordering on bonded labour is one of India's glaring omissions. Estimates of the total number of Indian children who are forced into labour vary from 12 to 17 million – and this is deplorable.
Satyarthi symbolizes the quiet one-man crusade against this form of exploitation and hopefully the Nobel prize (despite its incongruous reference to the Hindu-Muslim identity of the awardees) will focus much needed attention and spur a more concerted collective effort in this regard.
The improvement of basic human security indicators which includes a secure future for children and the removal of misplaced cultural taboos that target girls and women is a challenge for large parts of southern Asia. In their respective trajectories, both Satyarthi and Malala have emerged as role-model crusaders for the struggle against suppression of children and young people.
As the guns remain silent and an uneasy peace prevails on the India-Pakistan border, hope for that abiding peace remains elusive. Perhaps it may yet filter through the many tears that scar the faces of the oppressed children of the sub-continent.
That the sub-continent still has a wry sense of humour is summed up in this lighter vein quip from Pakistan doing the cyber rounds:
"When Pakistan is getting its first Nobel Peace Prize, an Indian comes and steals half of it. I'm going to call one half of the 2014 Nobel Peace prize as Azad Nobel Peace Prize and the other half as Indian Held Nobel Peace Prize."
Previous articleHuma unveils Forevermark festive collection
Next articleIndia offers help to make affordable Ebola drugs
PROFILE: Fashion Icon Karen Millen OBE
SPECIAL: BREXIT TO DERAIL NHS
Boris, we need funds, not reforms!


shall both of them claim ot,about ot any rules to fixed staff cant claim ot?
11/02/2019 15:43:48 There is no law to say staff with salary more than 2K cannot claim OT. Although this category of staff may not be covered by the Employment Act, but if they are required to work overtime they should be paid extra for such work. You just can't ask them to work OT for free. In some companies, for those with salary more than 2k, they will paid overtime based on a ceiling of RM2000 even though their salary is more than that.
11/02/2019 16:33:43 Appreciate so much for your sharing,will discuss with my officer again.


text:
Q: The arctangent is a strange floating point number I have 2 players in a game (Cod 4). I read X, Y, Z and store them in: eX, eY and eZ for enemy coordinates, and pX, pY and pZ for my player, then I get the Vector for X and Z:
if (eX <=  pX and  eZ < pZ) is true then
VectorX = pX - eX
VectorZ = pZ - eZ

Then I tried this: Atan (VectorX/VectorZ) * 180.0f / PI (the game uses degrees so I convert from radians), then the number I got divided by 360 but that gives me a crazy float like 5.5343434e-44.
What does this mean, and why does it happen?

A: Expanding on what KittyL wrote in his/her comment to the question (why do people answer in comments?), atan() has returned a floating point number close to $0$. $5.5343434$e-$44$ means $5.5343434\times10^{-44}$). This is a perfectly fine result if, for example, VectorX is a small positive number and VectorZ is a large positive number.

redpajama_set_name: RedPajamaStackExchange


text:
#import <CoreGraphics/CoreGraphics.h>
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 Function that returns property name defined by this protocol for given WebDriver Spec property name
 */
NSString *wdAttributeNameForAttributeName(NSString *name);

/**
 Protocol that should be implemented by class that can return element properties defined in WebDriver Spec
 */
@protocol FBElement <NSObject>

/*! Element's frame in CGRect format */
@property (nonatomic, readonly, assign) CGRect wdFrame;

/*! Element's frame in NSDictionary format */
@property (nonatomic, readonly, copy) NSDictionary *wdRect;

/*! Element's name */
@property (nonatomic, readonly, copy) NSString *wdName;

/*! Element's label */
@property (nonatomic, readonly, copy) NSString *wdLabel;

/*! Element's type */
@property (nonatomic, readonly, copy) NSString *wdType;

/*! Element's value */
@property (nonatomic, readonly, strong, nullable) id wdValue;

/*! Whether element is enabled */
@property (nonatomic, readonly, getter = isWDEnabled) BOOL wdEnabled;

/*! Whether element is visible */
@property (nonatomic, readonly, getter = isWDVisible) BOOL wdVisible;

/*! Whether element is accessible */
@property (nonatomic, readonly, getter = isWDAccessible) BOOL wdAccessible;

/*! Whether element is an accessibility container (contains children of any depth that are accessible) */
@property (nonatomic, readonly, getter = isWDAccessibilityContainer) BOOL wdAccessibilityContainer;

/**
 Returns value of given property specified in WebDriver Spec

 @param name name of property defined in WebDriver Spec
 */
- (nullable id)fb_valueForWDAttributeName:(NSString *__nullable)name;

@end

NS_ASSUME_NONNULL_END


text:
Bretton Woods Update 83
Nov/Dec 2012
The World Bank and industrial policy: Hands off or hands on?
Former deputy secretary general of UNCTAD Carlos Fortin, of the Institute of Development Studies, examines the Bank's record on industrial policy over the last 20 years and shows that the Bank's position is more nuanced.
World Bank and climate change
A new Bank report warns about the impacts of climate change, but concerns have been raised about its own track record. While the Bank has increased its renewable energy share, its continued funding of fossil fuels and focus on large scale dams remain controversial.
The IMF in Egypt: revolution or coming full circle?
The Egyptian government has finally concluded an initial loan agreement with the International Monetary Fund (IMF) following two years of continual negotiations.
26 November 2012 | Guest comment
World Bank on jobs: "a race to the bottom"?
Two October World Bank reports reveal a contradictory message for developing countries' labour markets.
Call for freeze on World Bank 'land grabs'
As Oxfam called on the World Bank to freeze large scale land acquisitions, the Bank's new agriculture strategy remained under wrap. Concerns have also been raised about ongoing initiatives on 'climate-smart agriculture' and the development of Doing Business in Agriculture.
IFIs' new "house of cards" in Central and Eastern Europe
IFIs are renewing their focus on Central and Eastern European states. This comes amidst fears that growth in the region needs to be rekindled. The World Bank has promised more funding for countries at risk of instability. However, IMF loans being negotiated with Romania and Hungary have met with controversy.
IMF controversy: is austerity backfiring?
The IMF's shift in stance regarding easing Greece's debt burden reflects a deepening controversy about whether austerity policies are counter-productive.
Safe in Bank hands? World Bank safeguards review launched
The World Bank finally launched the two-year review of its environmental and social safeguard policies in October.
IMF and the Troika: three's a crowd?
The Troika has announced another Greek debt agreement, but disputes between the Fund and its Troika partners over debt reduction remain unresolved.
IMF new view on capital flows: "landmark" but still only a "baby-step forward"
The IMF's new "institutional view" on capital flows, despite being more flexible than its previous stances, has nonetheless angered developing countries who blame rich country policy for volatility in financial movements.
"Cosmetic" changes to IMF governance
The IMF is about to embark on a new round of negotiations over governance reform, but acrimony persists and already-agreed changes remain unimplemented.
World Bank corporate scorecard
Every six months the World Bank issues a corporate scorecard, which is submitted each Autumn to the Bank's annual meetings. The scorecard is supposed to "provide a snapshot of the Bank's overall performance, including its business modernisation, in the context of development results." It is compiled by Bank staff to "facilitat[e] strategic dialogue between management and the board on progress made and areas that need attention."
6 December 2012 | Inside the institutions
Kim's World Bank strategy: real change or "PR exercise"?
The World Bank's new president Jim Yong Kim set out his vision for the institution at the Bank's annual meetings in mid October, but his desire to build a 'solutions' bank and end absolute poverty comes with few details or big changes at the Bank. Next year's replenishment of the International Development Association (IDA) will put Kim's vision to the test.
IFC education funds bypassing the poor
A new study by Karen Mundy and Francine Menashy of the University of Toronto reveals that the International Finance Corporation's (IFC) education funding pays limited attention to poverty and distributional issues.
Turkey to repay IMF debts by April
The Turkish prime minister, Recep Tayyip Erdogan, declared in September that "we will cut it [our $1.3 billion IMF debt] to zero by next April", according to Anatolia News Agency.
Bank to review its country classifications
In response to China and India's graduation from low-income country (LIC) to middle-income country status (MIC), the Bank has decided to review its country classification system.
IMF-Zimbabwe relations tentatively resume
In September the IMF executive board praised Zimbabwe's efforts to repay its debts to the Fund and relaxed restrictions on technical assistance.
World Bank's health work challenged on gender
Gender Action's new report Banking on health, published in October, examines IFIs' commitment to addressing gender issues in health-related projects.
Bangladesh to raise VAT under IMF pressure
The Bangladeshi government is being pressured by the IMF's Asia and Pacific department officials to implement its recommendations, including raising the VAT rate, despite opposition from local civil society organizations.
Pakistan loan talks despite debt cancellation calls
Talks between the IMF and Pakistan under post-programme monitoring resumed in September. Despite confidence amongst Pakistan officials in their country's capacity to repay its loans, the IMF fears the need for a second loan early next year
IFC's Oyu Tolgoi mine prompts complaint
In October, Mongolian herdsmen took a complaint to the Compliance Advisor/Ombudsman, the International Finance Corporation's (IFC) accountability mechanism, against the Oyu Tolgoi mine being considered for World Bank support.
IMF names investment banker as Western Hemisphere department head
Former Mexican deputy finance minister Alejandro Werner is to head the IMF's Western Hemisphere department overseeing Latin America.
IMF staff warn of risks from derivatives markets
A new IMF working paper links heavy bank trading to market risks if "financial deepening" occurs as it emerges that over-the-counter (OTC) derivatives trades are set to avoid US and European market infrastructure regulations.
World Bank accused of racial discrimination
An online petition launched by an international group of current and former Bank staffers, justice for blacks, calls upon Human Rights Watch, the Bank's governing board and the US government to investigate the Bank's flagrant inability to uphold its policy of "zero-tolerance policy for discrimination".
CAO to facilitate dispute resolution over Chad-Cameroon pipeline
In November, the Compliance Advisor/ Ombudsman (CAO), the accountability mechanism for the Bank's private sector arm, published its assessment of a 2011 complaint from a Chadian group of NGOs on behalf of local inhabitants and communities affected by a pipeline in Chad.
Please nominate 2012 best Bankspeak and resources
Continuing a much-heralded tradition at the Bretton Woods Project, the first issue of 2013 will feature 'Bankspeak of the year' and 'resources of the year'.


text:
Home/ROK News/Rise of Civilizations to Change Name into Rise of Kingdoms
Rise of Civilizations to Change Name into Rise of Kingdoms
TheGeneral March 7, 2019
A big change is soon coming to Rise of Civilizations and our favorite strategy game on mobile. The game will change its name into Rise of Kingdoms.
While many of the older players were expecting something more substantial in terms of gameplay, Rise of Civilizations Rise of Kingdoms is the change that we're getting.
Why did Lilith decide to change the name for one of the best and most popular strategy games on mobile right now?
No, they didn't do it in order to get use more confused. They did it (as they have explained in a video published on their official Facebook page) because in some countries over the world they simply couldn't register the original name – Rise of Civilizations – as a trademark.
They had two options: either have different names for the game in various countries and therefore cause more confusion or simply change the name. They chose what seems to me too the best option, which is getting a new name.
It's not clear when exactly the name change will take place and when the new name, Rise of Kingdoms, will come into effect. We do know that it's going to happen with the next update, so there's not a lot of waiting left for us to do.
Of course, this change will not make much of a difference in the long run. The same team is still managing the development of the game and it's pretty obvious that there are no plans to stop. So hopefully more exciting updates – this time gameplay-related – will follow.
They already introduced the cross-kingdom alliance battles in order to fix the inactivity problems with some of the older kingdoms that were having problems with active players, so I am sure that they have a lot of great ideas for the future of the game.
Until then, what do you think about Rise of Civilizations becoming Rise of Kingdoms? Do you like the new name?
Rise of Civilizations Rise of Kingdoms
Rise of Civilizations Update 1.0.11 Brings New Commander Skill Trees, Major Alliance Changes & More
Rise of Civilizations Becomes Rise of Kingdoms, Adds Byzantium, Ottoman and Arabia Civs
Rise of Civilizations Version 1.0.9 Update Notes & Changes
Rise of Kingdoms: Upgrade Troops or Train New Ones after Unlocking Them?
Rise of Kingdoms: Promote Your Alliance Here and Find New Active Members
Rise of Kingdoms: First Recharge Bonus – Is It Worth It?
Gg says:
I can't change my name it says nickname format is error why
Probably you are using characters that the game doesn't support, or it triggers some sort of warning that it contains profane words. Try with something similar, it will probably work.
Tamaki says:
The reason why RISE OF CIVILIZATION change its name to its current one is because its acronym ROC corresponds with Republic Of China (Taiwan) that is why Lilith and Legou finds difficulty registering it especially in mainland China were CCP dislikened that name.
Great, thanks for letting us know what could be the main reason behind this name change!


Rivers Restaurant provides an ideal mixture of style, service, and incredible food whether you are dining outdoors along the river or observing the view from our dining room and bar.
Our chef driven menu has something for everyone with broad selections of fresh fish, seafood and steaks. Lighter fare is also available in our bar.
Our private and semi-private dining spaces can accommodate from 20 to 300 guests. Contact us today to book your next event.
During patio season, reservations are taken at lunch only for parties of 5 or more. No patio reservations are taken at dinner.
Looking for another dining experience?
Visit our sister location, Rittergut Wine Bar & Restaurant, located in the same building as Rivers.


text:
Beck likens Norway camp to Hitler Youth
By Joel Connelly on July 25, 2011 at 1:13 PM
Glenn Beck is known for outrageous statements, but probably none more than his Monday comparison of the site of Norway's Utoya Island massacre to a Hitler Youth camp.
The camp, where suspect Anders Behring Breivik is accused of using dumdum bullets to kill 69 people on Friday (by latest police estimate), is run by Norway's Labor Party and is considered an adult nursery school for future leaders.
On his radio show, however, Tea Party hero Beck intoned:
"There was a shooting at a political camp, which sounds a little like, you know, the Hitler Youth. I mean, who does a camp for kids that's all about politics? Disturbing."
Torbjorn Eriksen, former press secretary to Norway's Prime Minister Jens Stoltenberg, was plenty disturbed at what Beck said.
"Young political activists have gathered at Utoya for over 60 years to learn about and be part of democracy, the very opposite of what the Hitlery Youth was about: Glenn Beck's comments are ignorant, incorrect and extremely hurtful," he told Britain's The Daily Telegraph.
Beck's remarks were described as "absolutely disgusting" by the Coalition to Stop Gun Violence in Washington, D.C.
The slayings Friday, on Utoya Island and in Oslo bomb blasts, caused the greatest loss of life seen in Norway since the 1940 Nazi invasion and World War II occupation of the country.
Shortly before his murder spree, the suspect put on-line a 1,500-page screed denouncing immigration, venting anti-Muslim views, and saying he will go down in history as a hero.
Beck has mocked targets ranging from President Obama's daughter Malia to Meghan McCain, the daughter of 2008 GOP presidential nominee John McCain. He pretended to vomit over a breast cancer awareness ad featuring an unclad Meghan McCain.
He has also likened rabbis of Reform Judaism to "radicalized Islam," and once charged that President Obama has a "deep-seated hatred for white people or the white culture."
Beck is a Mount Vernon, Wash.,, native and a graduate of Bellingham's Sehome High School. In 2009, Mount Vernon Mayor Bud Norris presented Beck with the keys to his city, while protesters outside the ceremony carried banners reading "Change the Locks."


When single mom Amy Peterson heard that her daughter's school was holding a father-daughter dance event, she didn't want her six-year-old to miss out just because her father wasn't in her life. So she decided to dress up as a man to take her daughter herself. However, the school banned her from attending.
According to ABC, the elementary school in Henry County, Georgia, forbade Peterson and her daughter, Gracie, from going to the dance.
"To me, I've identified myself as her father and her mother because that's what I've done for six years," Peterson told ABC affiliate WSB. "She was okay with it. She was excited that her friends were going to get to see this."
But despite filing paperwork with the school a month ahead of the dance to make this happen, Peterson received a phone call from the principal's office an hour before the dance telling them not to come.
"She [the principal] said, 'No. I forbid you to come and if you show up we will turn you away,'" Peterson told WSB. "How do you explain that to a 6-year-old? You can't go to a dance because you don't have a male role model in your life?"
While Peterson felt that the school handled this situation poorly, the school district defended its decision in a statement to ABC.
"The school is cognizant that different dynamics exist across households in our school system," the statement read. "There are multiple parent engagement events and opportunities to participate with their kids annually at this school in an effort to make that connection and build school spirit."
But Peterson told ABC that decisions like these make children like Gracie feel left out — as if they didn't already feel alone in their experiences.
"They're already being bullied," she told ABC. "Why be bullied by the school too? Why is she being punished because she doesn't have a dad?"
Peterson is right, and we applaud her efforts to make her child feel less excluded. After all, if your family doesn't fit into the heterosexual mold of a two-parent household, you sometimes have to get creative — and she and her daughter shouldn't have to miss out or be punished for doing so.


text:
Batman Arkham Asylum Sequel to Exit Arkham
By Matt Peckham
Here's what we know so far: Rocksteady's fresh-announced Batman Arkham Asylum sequel probably won't be called Batman Arkham Asylum 2. The first one--actually the second best superhero game yet made, tailing Irrational's still-sterling Freedom Force--already plumbed the dilapidated depths and improbably gothic heights of DC's version of Guantanamo for the super fruity-loopy. Locking Batman in twice would be like putting Jeff Goldblum and Richard Attenborough back in the vicinity of Isla Nublar after they helicoptered away from InGen in 1993.
Fear not, the teaser trailer should mitigate any milieu-related concerns.
So yeah, it'll be set in Gotham large, though I wouldn't hold my breath for Grand Theft Batmobile. Rocksteady has no experience doing open-world games, nor, I'd wager, a development budget to rival Rockstar's (over $100 million lavished on Grand Theft Auto IV alone).
Expect something more in keeping with Arkham's tightly regulated gameplay, a mishmash of architectonic scrabbling and Metroid Prime indebted scan-visor sleuthing, punctuated by occasional swathes of open-airy grappling and swooping. Batman has a trove of gadgets and gizmos, enough for a dozen sequels at least, so I'd expect we'll see a fairly conservative "don't-change-what-ain't-broke" approach, and I can't see anyone really complaining.
For the record, publisher Warner Bros. refers to it as "the sequel to Batman: Arkham Asylum," and confirms it's in development already, so I'd bank on a late 2010 release (though the lack of anything concrete out of the gate tell me they'll hedge for awhile yet, just in case).
The boilerplate publisher and developer press blurbs summed up: "We really-really-really love Batman and promise the sequel will be all kinds of awesome fanboy sauce!!!"
Have a look at www.arkhamhasmoved.com, the game's official site, for teaser shots, or to sign up for future updates.
Follow me on Twitter @game_on
Macy's Coupons for January 2020
Free gift with $75 Origins purchase at Macy's
Sam's Club coupons for January 2020
Up to 35% off spring home furniture
Walmart coupons for January 2020
Tech Sale: 70% off Samsung TVs at Walmart
Target coupons for January 2020
Target sale - 25% off home
Foot Locker coupons for January 2020
Foot Locker promo code - 20% off
Nike coupons for January 2020
Nike promo code for an additional 20% off


text:
American University, , Washington, Washington DC
Company Name: American University
State: Washington DC
County: District Of Columbia
City/town: Washington
Web site: http://www.american.edu/
Review: American University (AU or American) is a Methodist private liberal arts and research university in Washington, D.C. The university was chartered by an Act of Congress on December 5, 1892 as "The American University", which was approved by President Benjamin Harrison on February 24, 1893. Roughly 6,500 undergraduate students and 6,000 graduate students are currently enrolled. AU is a member of the Consortium of Universities of the Washington Metropolitan Area. A member of the Division I Patriot League, its sports teams compete as the American University Eagles. American's main campus is located at the intersection of Nebraska and Massachusetts Avenues at Ward Circle in the Spring Valley neighborhood of Northwest Washington. The area is served by the Tenleytown-AU station on the Washington Metro subway line in the nearby neighborhood of Tenleytown.
American University, Complete Academic Data
Total Student Population (Graduate + Undergraduate): 12,241
SAT Composite Range: 1170-1390
American University, Complete Tuition Data
American University, Complete Financial Aid Data
American University, Complete Student Life Data
Was this page helpful? Yes -0 No -0Click here to Inform about a mistake 27 Rating:
Location & access map for "American University"
Video street view near "American University"
Click here add new review about: American University (Universities, Colleges, Campusess)


Arlene C. Ackerman, one of the nation's highest-profile big-city schools chiefs and an unwavering advocate for equity in public schooling, died Feb. 2 in Albuquerque, N.M. She was 66.
Ms. Ackerman, who most recently served as the schools chief in Philadelphia, died from pancreatic cancer a few months after being diagnosed, according to media reports. She had also served stints as superintendent in San Francisco and the District of Columbia.
Known for her decisive leadership style, Ms. Ackerman faced some of the most vexing issues in public schooling. In San Francisco, she undertook a strategy to raise achievement by funneling more money and the best teachers into the city's lowest-performing schools, an agenda she also followed in Philadelphia. Ms. Ackerman, who clashed with the San Francisco school board, was criticized for not collaborating more with parents and the teachers' union.
Her most recent superintendency, in Philadelphia, ended bitterly in 2011, when the city's appointed school board asked her to resign and bought out her five-year contract for $905,000, with more than half paid by the district and the balance by private funders. In 2010, Ms. Ackerman won the Council of the Great City Schools' highest honor for urban superintendents.